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 Django-1.8.2 $ sudo python setup.py install 如果提示缺少setuptools还要下载安装setuptools(建议提前安上,因为在安装MySQL for Python的时候也会用到)。

Continue Reading
Front

重新学习HTML5的HTML

经过媒体的渲染,目前大众认为的HTML5大致等于:酷炫的效果,复杂的技术,手机能正常浏览的网页。于是经常有人问我:某个功能,某个效果,HTML5能实现吗?这种表现层的问题,如果排除平台因素回答就是:以前实现不了的,HTML5还是实现不了;以前能实现的,HTML5通常能实现得更好。比如通知,以前用轮询,现在可以用websocket;比如想直接读取客户Windows目录下的文件(…),现在(正常情况下)还是实现不了… 广义的HTML5是一系列技术组合,希望能减少浏览器对插件(Flash/Silverlight/JAVA)的依赖。于是大家关注的重点主要是各种新增的API,HTML作为一种标记语法就没太重视。结果当我用canvas做好表格,用localStorage实现缓存,用video+websocket改进了视频播放后,回头来看我写的HTML代码其实还不够规范。 所以这篇文章是关于HTML的,内容顺序按照HTML的顺序:从doctype到metadata,然后是部分常见标签,总之都是非常浅显的内容。嵌入内容的标签(例如img/object/video)不在讨论的范围,跟CSS或JS关联太紧密的标签(例如各种事件绑定和output标签)也不会涉及。全文没有截图,很多HTML代码是直接写在页面上的,Firefox/Chrome测试正常,但我没办法控制您的浏览器以及爬虫,因此如果样式出现误差请更换浏览器或找找原文链接…

Continue Reading
Front Product

Erya – 基于SemanticUI + Django的内容发布系统

Erya是基于SemanticUI开发的内容发布系统,主要用来搭建BBS。遵守GPLV3协议。 系统的后端是简单的发布主题/回复/评论的功能,目前是基于Django(Python)的。使用Python3.2 + Django1.7的架构,Python2.7测试通过。 在界面上模仿NodeBB,前端使用SemanticUI,支持自适应,编辑器使用Quilljs,同样也是支持自适应的: 因为是面向国内中文用户,所以没有Google的JS/字体API等容易被墙掉的性能,用户头像是使用Gravatar的,因为目前Gravatar可以正常访问。 安装 下载zip包解压或是直接clone,用pip3安装Django1.7。建议使用Python3运行。 git clone https://github.com/perchouli/erya.git cd erya pip3 install -r requirements.txt 执行migration相关命令,添加管理账号。如果使用默认的sqlite可以跳过这一步,默认的管理账号/密码是: root/root python3 manage.py migrate python3 manage.py createsuperuser 进入管理后台,添加分类,分类icon请参看: http://semantic-ui.com/elements/icon.html 回到首页,可以开始使用了。 演示地址: http://bbs.dmyz.org Github: https://github.com/perchouli/erya

Continue Reading
Front

Backbone.js简单入门范例

11年刚开始用前端MVC框架时写过一篇文章,当时Knockout和Backbone都在用,但之后的项目全是在用Backbone,主要因为它简单、灵活,无论是富JS应用还是企业网站都用得上。相比React针对View和单向数据流的设计,Backbone更能体现MVC的思路,所以针对它写一篇入门范例,说明如下: 1. 结构上分4节,介绍Model/View/Collection,实现从远程获取数据显示到表格且修改删除; 2. 名为“范例”,所以代码为主,每节的第1段代码都是完整代码,复制粘贴就能用,每段代码都是基于前一段代码来写的,因此每段代码的新内容不会超过20行(大括号计算在内); 3. 每行代码没有注释,但重要内容之后有写具体的说明; 4. 开发环境是Chrome,使用github的API,这样用Chrome即使在本地路径(形如file://的路径)也能获取数据。 0. Introduction 几乎所有的框架都是在做两件事:一是帮你把代码写在正确的地方;二是帮你做一些脏活累活。Backbone实现一种清晰的MVC代码结构,解决了数据模型和视图映射的问题。虽然所有JS相关的项目都可以用,但Backbone最适合的还是这样一种场景:需要用JS生成大量的页面内容(HTML为主),用户跟页面元素有很多的交互行为。 Backbone对象有5个重要的函数,Model/Collection/View/Router/History。Router和History是针对Web应用程序的优化,建议先熟悉pushState的相关知识。入门阶段可以只了解Model/Collection/View。将Model视为核心,Collection是Model的集合,View是为了实现Model的改动在前端的反映。

Continue Reading
Python Tech

Django 1.7 自带migrations用法及源码

Django下一个版本是1.7,增加了类似South的migration功能,修改Model后可以在不影响现有数据的前提下重建表结构。这真是个千呼万唤始出来的feature了,所以做个简单的整理分享。文章包含部分源代码,对具体怎么实现不感兴趣可以忽略。 Prepare 从Django官网或直接pip下载1.7b版本,创建project和app: $ pip install https://www.djangoproject.com/download/1.7b2/tarball/ $ python manage.py startproject dmyz $ cd dmyz/ $ python manage.py startapp articles

Continue Reading
Python Tech

Python.org的相关技术

Python.org使用了Django框架,基于Python3.3开发,是在生产环境应用Python3+Django的好例子,所以clone了它的源代码来学习,使用的是868d254版,整理如下。 Deploy 搭建Python环境自然先想到virtualenv,但Python.org源代码根目录里有Vagrantfile文件,支持用vagrant来搭建环境。虽然之前做ROR的环境时都配好了,但Python.org的配置用vagrant 1.0.1版本运行会出错,升级成最新的vagrant 1.5.1就正常了,执行vagrant up命令会自动下载Ubuntu 12.04 64bit来部署:

Continue Reading
Tech

Hadoop(Pig)统计IP地理位置

很常见的分析需求:日志中记录有访客IP(国内),现在要根据IP地址得出访客的地理位置,精确到市县一级,数据量平均是每天15G,需要统计日、周、月的结果。 最后的实现方式是,先找到IP地理位置数据库,包含每个ip段对应的地址:1.1.0.0,1.1.0.255,福建省然后把它转成具体每个IP对应的地址,即:1.1.0.1,福建省。这样在Pig中用JOIN的方式,就可以获得这个IP实际对应的地址了。 IP Database 12年成立的中国广告协会互动网络分会IP地理信息标准委员会(简称IPB)已经发布了IP地理信息标准库,委员会成员和大广告公司都有一份。也可以下载全球城市ip库,取其中CN部分: 文件信息:cn.csv 大小:1.26MB 有效时间:永久 读取这个文件,把ip转成数字,起止ip的差,就是这个ip段所包含的主机数,用range函数生成,主要的python代码如下:

处理结果会保存在out.csv文件中,中国地区总共有3亿个IP,生成的文件是7.9G,gz默认压缩后是900MB左右,按Map需求进行分割。 Pig Latin LOAD保存在hdfs中的日志文件(*.log.gz)和IP数据库(ip*.tar.gz),將日志文件中的访客IP转成数字,用JOIN方法组合,再做GROUP和COUNT的操作,就可以得出该地区的访客数了:

耗时44分33秒,统计出一周的结果: (北京市,32174022) (保定市,4244694) (邯郸市,1062551) Job Name: PigLatin:ip.pig Job-ACLs: All users are allowed Job Setup: Successful Status: Succeeded Finished in: 44mins, 33sec Job Cleanup: Successful Afterword 之前尝试做一个Pig的UDF,用{IP : CITY}形式的字典来做IP到城市的匹配,但JAVA函数大小有限制,而且用UDF会影响性能,所以没有采用。如果是自己写REDUCE来支持类似传统SQL中JOIN BETWEEN的方法,就不需要生成这个3亿多条记录的文件了。以上是在一个很小的测试Hadoop架构中进行的处理,理论上在实际生产环境可以处理得更快。

Continue Reading
Front

Semantic-UI和其他几个前端框架

本来是想介绍Semantic-UI的,但如果只介绍这个框架,没什么内容,框架相关feature站点上有不需要说,所以干脆列出自己常用的几个前端框架,算是做个阶段性总结。 本文的核心是侧重于HTML/CSS的框架,JS框架或以JS为核心的框架不讨论(比如YUI);多屏已是既定事实,虽然不是所有开发都要考虑自适应,但有自适应功能至少说明了这框架短期内不会被淘汰,所以不带自适应功能的框架不讨论(比如flaminwork);非开源、不可商用,或是需要付费的框架不讨论(比如easyframework)。 先说Bootstrap,这两年都在用它,如今Bootstrap有点烂大街了,难免有些审美疲劳。但想想在Bootstrap这种框架出现之前,程序员做的界面实在是惨不忍睹,如今至少升级成“还能看”的级别了,所以“泛滥”这个问题是瑕不掩瑜的。平时开发个小工具用它来做界面,写个底层脚本用它来做文档界面,工作环境中也可以用来做原型或是布局,谁都看得懂没什么学习成本。总体来说,这个框架对于互联网的美化实在是功不可没。

Continue Reading
Product

新版Worktile试用

Worktile,目前的定位是“团队协同工具”。最初的印象,是去年在G+上看到有人批评其山寨Trello的痕迹过于明显,本来想试用的,毕竟山寨的是我每天都在用的产品,但当时手里事情太多,也就先放一边了。这周36kr对它做了报道,看截图是已经度过单纯山寨Trello阶段了,于是申请了测试资格。 产品是偏Geek的路线:后台是NodeJS+Express的架构,前端是Bootstrap框架——有加载自适应css文件,但改变宽度后显示很混乱——Markdown编辑器、事件Timeline、Emojo表情,各种小细节走的都是技术范。主要的卖点是六大基础元素:任务、讨论、文件、文档、事件、邮件。吸引我注册的主要是邮件,因为类似的功能Trello刚推出不久。Worktile做得不错,用登录邮箱往特定地址发送邮件,就能直接生成任务列表,邮件格式如下图:

Continue Reading