Front Tech

Laravel(REST API)+React入门范例

不知道什么时候开始的以讹传讹,React变成了“很难入门”的框架,但React其实是近几年主流前端框架中最轻量、最简单的:只专注于视图(View)的处理,从发布至今多次拆分模块(拆出了ReactDOM,拆分了原来的addons),让React核心部分更简单。当然,React的生态很庞大,刚上手就面对整个生态会觉得复杂,但如果是用React完成日常工作中最常见的应用场景——前端读取后端数据实现增删该查,是非常简单的。 本文使用setSetate()和生命周期(Lifecycle)方法,完成具有完整功能的前端React组件。假设读者有一定的Javascrit经验,比如基础的ES6语法。可以使用命令行,能配置PHP运行Laravel。基本不涉及PHP代码,选Laravel是因为它已经预装了React的开发环境,节省配置时间。 环境 Ubuntu 16.04 Laravel 5.6 PHP 7.3.0 安装&配置 安装composer,创建项目dmyz:

切换到项目根目录,将前端库更换成React,安装依赖的Javascript包,进行第一次 …

Continue Reading
Tech

主流React Native组件库比较

本文比较React Native(以下简称RN)的三个组件库:NativeBase、Shoutem、React Native Elements。方法是制作一个在Expo中运行,包含读取Wordpress文章列表,显示文章内容,以及一个登录表单界面演示的App,对比三个组件库在使用层面的差异,不涉及源码质量、平台设备兼容性相关的问题。 NativeBase GitHub: https://github.com/GeekyAnts/NativeBase npm: npm install native-base –save Demo: NativeBase-demo 列表 登录 如果只考虑组件丰富程度,首推NativeBase。比其他两个库多了Drawer,FABs,Footer Tabs等组件。设计哲学是尽量使用JSX,减少props来增加灵活性。组件名也是按照HTML的习惯(Content/Header/Footer),前端可以很快上手。使用这个组件库连RN的View都可以省掉,它提供了Container。但这也导致会受限于NativeBase本身,比如我自己想给一些组件用TouchableOpacity就尝 …

Continue Reading
Tech

隐介藏形——ReactJS源码索引

React的设计经常被讨论,但因为相关文件很多,源代码读起来比较累。正好最近看到Under the hood:ReactJS这个项目分享了React核心代码的流程图(MIT协议),取其中几张写成这篇文章供阅读源码时作为目录索引。 文章分4部分: ReactDOM.render&ReactMount Transaction Mount this.setState 源码以v15.6.1为例,不会直接复制大段代码,主要是以超链接链到github源码对应的位置——通常是链到函数被调用的位置,少数情况会链到申明的位置。核心代码当然会涉及VDOM和事件代理,网上相关文章非常多,本文不再赘述,官方文档中已有的内容也会尽量省略。流程图是svg格式,图形填充颜色根据不同文件使用不同颜色。以iframe标签嵌入。这是兼容性最好的方式,但不知道这篇文章会被爬虫带到哪,以及各种RSS阅读器是否支持,所以附上原文地址:dmyz.org/archives/983

Continue Reading
Tech

用Fabric描述区块链(Blockchain)

从2006年到现在,云计算、NOSQL、大数据、机器学习、人工智能……隔一年半载就会有某种技术成为热点,诡异的是当这种技术成为热点后,就变得看不懂了。比如区块链,这两年已经变成了“有巨大潜力颠覆行业,创造让人们参与其创造价值的繁荣世界”“彻底改变人类社会文明”的技术。关于区块链的原理网上有很多浅显易懂的文章、视频,本文只讨论技术上的使用,结合Fabric(v1.0-alpha2)来说明。 Fabric没有看到图灵完备的描述,区块链用来保存记录,这些记录被称为block,每个block包含时间戳和上一个block的信息。所以技术上来说,Fabric的区块链是一种分布式数据库。transaction可以类比数据库的查询操作,但只能创建和移动。在Fabric中,区块链数据由State和Ledger构成,State为key-value结构,支持put/get操作;Ledger保存所有对State的、成功的操作,每个Peer都有一份Ledger。 上文提到的Peer,是Fabric的一种节点,有Committer和Endorser两种角色。Fabric有三种节点:Client/Peer/Orderer。Orderer提 …

Continue Reading
Python Tech

GraphQL+Django提供基本API

GraphQL是Facebook去年开源的一套数据查询语言,对于大型系统,GraphQL提供一种灵活的访问通用数据的方式。当时正好有一个项目,需要前端调用后台的数据(Express+Postgresql)实现图表展示,我就从Postgresql里把数据导出成JSON文件(后来用Promise改成直接查询数据库),前端直接用GraphQL获取自己需要的数据,后台就省掉了制作API、写SQL的工作,运行至今基本稳定。 前两个月发布了graphene-django,做的事情不多,但可以搭配其他插件例如django-filters来实现更丰富的查询。GraphQL的优势在于查询语句的通用性和易读性,相比REST架构来说时间较短还不够成熟,如果是复杂需求后台的开发量仍然不小,现阶段在生产环境用Django做一个API服务还是rest framework等成熟的方案会更好。本文实现一个针对Django自带的User Model的简单API。 环境: Django 1.10.4 graphene-django-1.2.0 Setup 安装graphene-django,如果是新建Django项目,创建后执行migrate创 …

Continue Reading
Front Python Tech

用django-webpack-loader实现Django和Webpack的绑定

django-webpack-loader是Django去年的热门App之一,实现Django和Webpack的绑定。做法很简洁,就是用一个nodejs模块处理Webpack的输出,Django再去读取这个模块生成的JSON文件,加载对应的bundle文件就行了。最近在cygwin里重新部署了一次,分享其中的关键点。环境是: Django 1.9.5 NodeJS v6.0.0 Win7(64)+Cygwin2.4.1 场景是将现有的一个Django项目,转成用Webpack来处理静态文件。因为没有执行npm init,安装时会提示找不到package.json,一些常见的基础配置、错误提示等本文不会涉及。

Continue Reading
Tech

Python读取Outlook的日历

公司的会议预订系统使用Outlook,要读取这些预订记录传到部署在阿里云的数据库。Exchange服务器没办法从外网访问,就在内网某台机器上写了一个脚本,定时执行,来从Outlook中读取日历上的预订记录。 模块:pywin32 (http://sourceforge.net/projects/pywin32/) 环境:Windows 2008 + Outlook 2013 + Python 2.7.8 Filder & Items 因为从来没做过Windows开发,所以先看了一遍文档,主要的概念是Folder(https://msdn.microsoft.com/EN-US/library/ff866772.aspx)。 所以其实就是要读取Outlook中名为Calendar的Folder,要获得会议预订记录,取出Folder的Items进行迭代就可以了:

Continue Reading
Tech

Linux设置iBeacon支持微信摇一摇

今年微信的摇一摇开始支持iBeacon了,淘宝上冒出一堆卖iBeacon基站的店铺,价格也比之前便宜许多。只是在开发测试阶段,直接用现有的设备会更简单,手头有一个USB蓝牙适配器,于是用Linux机器改造成iBeacon基站了,本文记录设置的步骤。前两年iBeacon刚发布的时候,有篇很火的文章指导如何用Raspberry搭建iBeacon基站(DIY Beacon with a Raspberry Pi),本文有参考那篇文章,只想实现iBeacon基站,不关注微信设置,也建议直接看原文。 蓝牙设备需要支持BLE(Bluetooth Low Energy,低功耗蓝牙)且是4.0版,我买的这个是CSR8510芯片,淘宝价格30元以内。以下设置在Ubuntu 14.04,Openwrt(ZTE Q7+r47026)和Raspbian(cb799af)中测试通过。一些APP(例如beacon-toolkit)和脚本(例如linux-ibeacon)可以简化配置。 微信设置 首页进入微信摇一摇后台(https://zb.weixin.qq.com/nearby/index.xhtml),点击左侧『页面管理』进入页面点 …

Continue Reading
Python Tech

Python,Javascript(NodeJS),PHP之间的AES加密解密

场景是现有的几个项目,微信企业号是PHP,广告数据处理平台是Python,其中的Web API部分是NodeJS。现在这几个应用之间要传递数据,基于安全考虑先用AES加密,接收后做解密处理。本来预想是一个很简单的工作,库都是现成的,但发现网上的代码要么是不全,要么是padding处理不一致,所以最后还是自己看文档来写的,分享其中的核心代码,有类似需求可以直接拿去用。 AES AES的介绍可以参看Wikipedia: 高级加密标准。这种加密方式需要指定Key(密钥)和IV(初始化向量),解密时使用同样的Key和IV进行解密。其次需要padding(填充字符),网上一些代码是用空格或者大括号做padding,解密后再用rstrip/rtrim/replace清掉,但用标准的PKCS会更好。

Continue Reading
Python Tech

Django+MySQL安装配置详解(Linux)[更新为1.8.2版]

Perface Django是一个开源的Web应用框架,由Python写成,并于2005年7月在BSD许可证下发布。Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django采用MVC设计模式注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don’t Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。本文介绍Django在Linux(Ubuntu 14.04.2)+MySQL(5.5.43)环境下安装、配置的过程,包括安装、运行、添加应用的所有流程,最终建立一个可以从MySQL读取文章并显示的Django应用。文章面向刚接触Python/Django的初学者,所以安装过程都以默认环境为主,用pip可以简化安装过程。 Install 首先下载Django,得到Django-1.8.2.tar.gz,后解压并安装 $ wget https://www.djangoproject.com/m/releases/1.8/Django-1.8.2.tar.gz $ tar xzvf Django-1.8.2.tar.gz $ cd …

Continue Reading