"柳燕隙阳"活动再度发挥去年小"QCon"的传统,请来了豆瓣的洪强宁大侠为大家讲解 Python于Web 2.0网站的应用 这个Python布道型话题。同时依旧云集了诸如:开源软件定制开发中的软件工程、持续集成最后一公里、Go语言介绍、多乐趣介绍、另一种旅行的可能----我的公益生活索引等等诸多精彩话题。简要记述下自己参与的两个话题: Python 在Web 2.0网站的应用 以及 另一种旅行的可能----我的公益生活索引 简要的记录和理解。
Python 在Web 2.0网站的应用
洪大侠有些遗憾在QCon上面由于时间的限制没能将后面Python实际应用部分的例子讲解透彻。所以这次略微简化了些前面的介绍部分,直接引入那些讲述了Python语言最优秀部分的特性是如何在实战中得到应用的。不过需要注意的是,如果是对于这些特性没有简单了解的Python初学者,欣赏这部分的乐趣依然存在但是可能会降低。而鉴于洪教授的Slides上,这部分没有什么详尽的文字说明,所以自己的记录旨在能够帮助大家作为学习Slides部分的一些简单提示。欢迎大家与Slides 一起来配合学习。
为什么使用Python?
概述一下讲解的Python的一些优点以及相应的库或工具
案例零:本机和线上配置的不同,如何方便解决
案例一:网站页面权限控制的 Pythonic解决方案
案例二:从队列中提取信息调用相应的函数
案例三:Memcache
案例四:使用迭代器减少不必要的性能开销
案例五:序列化操作时间优化,元类操作
案例六:Descriptor的简单讲解
案例七:让urllib库实现通过代理翻 墙
Python的一些实现:
Q&A环节:
"寻找失落的螺丝钉"
由自然之友的张文桦带来的,讲述了她多年以来参与公益项目及活动的一些经历,让人受益匪浅。
无意中踏入公益,听说有学姐在做黑熊保护这类的公益工作,很是羡慕。于是她自己的第一份工作,就是从NGO开始的。
讲解了"生态工作假期"这种独特的旅游类型。这种活动形式旨在让出门旅游的游客利用假期中的一部分时间,作为志愿者参与到当地社区的一些生态计划当中。当然,整个计划也为旅行者进行了比较周全的计划:选取风景优美的地点,毕竟前来的游客的首要目的还是旅游,为旅游者为游客创造优美、适宜的环境,还是必须的。
这种活动形式在台湾已经有了一定的规模,在当地社区的参与下,选取符合上述条件的,需要劳力(志愿者的投入)的项目来开展此项计划。
参与完成了:
不过生态工作假期这种形成花费较高,适合中产阶层。尽管这种旅游公益的形式在自己身边还处于闻所未闻的状态,但是看看台湾相关组织和民众能够达到的高度,无疑能够给我们更多启示。
另一种方式是参与"静会"这种项目,通常是处于某种目的的公益项目(如宣扬和保存原住民文化),需要来访者用专业知识进行相关的项目工作。但是此项目无须收取费用,适合囊中羞涩的公益旅行爱好者。
当时文桦参与的是原住民文化馆:原住民做的文化小铺项目。有很多这样的项目是由台湾的一些有心做此项事业的中产阶层推动的。志愿参与者们问一个NGO的活动主办者:"你们做这个事情有意义吗?" 对方的回答是:"这个问题被无数人问了八年,具体的答案我们不清楚,只不过,八年以后的现在,我们还在做这件事。" 我想这才是意义所在。
文桦后来又讲述了在美国的圣路易社区参与的服务计划。
计划开始的前三天,组织者给大家时间来融入和了解社区:第一天学习使用$1来买一件东西,旨在通过买东西这个活动与当地人产生更多的交流和理解。第二天在当地人家吃午饭,了解到当地人居住的房子也都是先前志愿者计划帮助的。
第三天开始正式的工作:在工厂搬废钢铁和废家具。由于工作内容实际上是需要相当强健的体格才能完成的体力工作,文桦因为各种原因不能做到和其他人一样好而沮丧。而这时团队中一个瘦小的女孩Sarsh讲述了她在宏都拉斯进行志愿工作中类似的经历,身体并不强健的她要去铲土,从而心里对自己产生了怀疑:如果不能胜任这份工作,那么自己为什么要付出那么多的辛苦来做呢?自己继续做下去还有什么意义呢?后来自己想通了:"为当地人提供更多是心理上的支持,让当地人感觉有其它人关心和参与"。至于自己可以做多少工作,不要勉强,因为会有其它志愿者来帮忙完成。我认为这也是我们参与许多志愿类工作的时候,所应该享有的一种心态。
当地因为就业率低,当地人在开始时不理解这样一个志愿工作的组织。但后来了解了情况,看到情景以后就有了很大的变化,也都积极热心地投入到社区的建设中来。
以上是我根据当时记录下的零散笔记所整理的,文桦自己有一篇更详细的文章记录了在圣路易的经历,欢迎大家查看:http://whitewoods.blog.sohu.com/151525631.html
最后讲到参与望安岛上面的生态旅游计划,整个计划是社会企业类型。由志愿者们推动的生态旅游计划,试图为岛上的生态建设及环境保护提供帮助。文桦最后展示给大家的照片,无疑为人们投入生态项目而努力的原因做了最好的概括:自然可以包容一切,人们将废旧的玻璃瓶作为垃圾丢在海里,而大海返还给我们的,却是冲刷得光滑完整,无比美丽的玻璃片。
Python 在Web 2.0网站的应用
洪大侠有些遗憾在QCon上面由于时间的限制没能将后面Python实际应用部分的例子讲解透彻。所以这次略微简化了些前面的介绍部分,直接引入那些讲述了Python语言最优秀部分的特性是如何在实战中得到应用的。不过需要注意的是,如果是对于这些特性没有简单了解的Python初学者,欣赏这部分的乐趣依然存在但是可能会降低。而鉴于洪教授的Slides上,这部分没有什么详尽的文字说明,所以自己的记录旨在能够帮助大家作为学习Slides部分的一些简单提示。欢迎大家与Slides 一起来配合学习。
Python的介绍
- 目标:提高开发效率,降低开发成本
- 代码比例:Slides中给出的比例描述的是豆瓣所有项目中的比例,如果只计算网站前端部分的话,那么Python的比例大概有70%多。
为什么使用Python?
- 简单易学、开发迅速、易于协作。着重说了第三点"易于协作"。因为如果单独就开发效率来讲Perl的效率也很高,但是Python语言的特性可以避免强烈的个人风格,从而更适合团队开发。
- 部署方便:三条语句完成上线功能
- 适用面广:前台后台各种应用
- 资源丰富:内置电池,应有尽有的库可以选择
概述一下讲解的Python的一些优点以及相应的库或工具
- 简单的Web开发代码展示 - Douban后台的WebService都是用Web.py开发的
- 使用更新颖的Flask框架,代码写起来甚至比Web.py更简单
- Python开发Web简单得益于WSGI,该标准将一个请求分解为不同的中间件来进行处理。当然造成Python Web Framework 众多的原因也是因为这个。
- nose - 使单元测试变得简单
- numpy - 用于数据分析
- iPython - 好用的命令界面扩展,幻灯中演示了直接在iPython中通过数据来绘图
- virtualenv - 方便部署和建立一个干净的Python环境
- Python的速度不快,基本和Perl一个量级 -用C扩展:Douban用的多的是PyRex/Cython,用类似于Python的语法去写C的扩展
- 哲学上和其他语言的差异:做一件事情只有一种方法(Py) vs 做一件事情可以有多种方法(Perl)
- Pythonic -http://bit.ly/pyzencn
利用Python的语言特性简化开发
案例零:本机和线上配置的不同,如何方便解决
- 使用.py文件作为配置文件,在使用时将该文件 import 进入程序。
案例一:网站页面权限控制的 Pythonic解决方案
- 使用Decorator把权限处理的代码部分抽象出来
- Decorator和四人帮中的描述的装饰器模式并不完全对等
- Py中的函数可以当作对象使用
- 使用__call__来简化代码
案例二:从队列中提取信息调用相应的函数
- 原始的代码设计需要在代码中放入大段的If.Else来进行处理
- 被装饰的函数,先换个名字
- 将函数序列化后存入队列中,Work通过名称找到相应的模块和函数执行
- 现场观众提出的问题是,在get_attr这部分的性能损耗如何?答:可以忽略,Python内部有对这方面的考虑
- 在生产环境中,豆瓣使用RabbitMQ作为队列系统
案例三:Memcache
- 用的是Python-libmemcached (由豆瓣开源的),在这个页面 http://code.google.com/p/memcached/wiki/Clients#Python 可以查到不同库的比较。
- 变化的key使用decorator如何处理?
- 传进去一个可以解释的表达式
- 使用inspect.getargspec
- get_key 这个返回值,是一个函数,产生memcache的key时使用的
- hint 中说的是生成KEY的方式:如果你有更好的方式,欢迎发给Douban,这个会为应聘豆瓣加很多分值
案例四:使用迭代器减少不必要的性能开销
- iterator和generator
- itertools 供迭代器所使用的库
- 通过迭代器来减少遍历时数据库访问产生的性能开销
- imerge把一组迭代器按照顺序进行排序(不在标准库中)
- generator是简化代码的利器
案例五:序列化操作时间优化,元类操作
- 简单对象,需要处理的量太大(豆瓣的收藏对象)反序列化的速度太慢,造成瓶颈
- CPickle vs Marshal 性能对比,Marshal的性能大约提升7倍,同时空间还有43%的节省
- Marshal只能处理内部类型,怎么才能使用其来处理Python中的自定义对象呢?
- 从Python 2.6中增加的namedtuple得到启发,使用类似的方法来完成这个工作
- 首先要明确Python中类的观念,类也是从元类派生出来的
- 使用元类,在实例化这个类的过程中进行一个序列化该对象信息的操作,而这部分可以很方便地被Marshal所使用
- 需要注意的是:Meta操作如果处理不当,容易被滥用,从而导致很多可维护性上的问题。推荐只将其用于框架类的实现上,而避免在应用层运用此类实现。
案例六:Descriptor的简单讲解
- 使用Descriptor
- 将对应变量名称作为类中的属性
案例七:让urllib库实现通过代理翻 墙
- 使用 Monkey Patch 方法来解决这个问题
Python的一些实现:
- Stackless Python:微线程,类似Erlang,高效并行
- IronPython, PyPy:据说效率都已经超过CPython 了
Q&A环节:
- 关于框架的选择问题:历史原因,如果现在从头开发新的网站,使用现代化框架
- 变量命名规范:遵守 PEP8 规范,尽管不是必须
- BeansDB应用于:图片、MP3、大文本字段
"寻找失落的螺丝钉"
由自然之友的张文桦带来的,讲述了她多年以来参与公益项目及活动的一些经历,让人受益匪浅。
无意中踏入公益,听说有学姐在做黑熊保护这类的公益工作,很是羡慕。于是她自己的第一份工作,就是从NGO开始的。
讲解了"生态工作假期"这种独特的旅游类型。这种活动形式旨在让出门旅游的游客利用假期中的一部分时间,作为志愿者参与到当地社区的一些生态计划当中。当然,整个计划也为旅行者进行了比较周全的计划:选取风景优美的地点,毕竟前来的游客的首要目的还是旅游,为旅游者为游客创造优美、适宜的环境,还是必须的。
这种活动形式在台湾已经有了一定的规模,在当地社区的参与下,选取符合上述条件的,需要劳力(志愿者的投入)的项目来开展此项计划。
参与完成了:
- 台湾阳明山外来种清除计划
- 花莲南华街区旧烟楼修复
不过生态工作假期这种形成花费较高,适合中产阶层。尽管这种旅游公益的形式在自己身边还处于闻所未闻的状态,但是看看台湾相关组织和民众能够达到的高度,无疑能够给我们更多启示。
另一种方式是参与"静会"这种项目,通常是处于某种目的的公益项目(如宣扬和保存原住民文化),需要来访者用专业知识进行相关的项目工作。但是此项目无须收取费用,适合囊中羞涩的公益旅行爱好者。
当时文桦参与的是原住民文化馆:原住民做的文化小铺项目。有很多这样的项目是由台湾的一些有心做此项事业的中产阶层推动的。志愿参与者们问一个NGO的活动主办者:"你们做这个事情有意义吗?" 对方的回答是:"这个问题被无数人问了八年,具体的答案我们不清楚,只不过,八年以后的现在,我们还在做这件事。" 我想这才是意义所在。
文桦后来又讲述了在美国的圣路易社区参与的服务计划。
计划开始的前三天,组织者给大家时间来融入和了解社区:第一天学习使用$1来买一件东西,旨在通过买东西这个活动与当地人产生更多的交流和理解。第二天在当地人家吃午饭,了解到当地人居住的房子也都是先前志愿者计划帮助的。
第三天开始正式的工作:在工厂搬废钢铁和废家具。由于工作内容实际上是需要相当强健的体格才能完成的体力工作,文桦因为各种原因不能做到和其他人一样好而沮丧。而这时团队中一个瘦小的女孩Sarsh讲述了她在宏都拉斯进行志愿工作中类似的经历,身体并不强健的她要去铲土,从而心里对自己产生了怀疑:如果不能胜任这份工作,那么自己为什么要付出那么多的辛苦来做呢?自己继续做下去还有什么意义呢?后来自己想通了:"为当地人提供更多是心理上的支持,让当地人感觉有其它人关心和参与"。至于自己可以做多少工作,不要勉强,因为会有其它志愿者来帮忙完成。我认为这也是我们参与许多志愿类工作的时候,所应该享有的一种心态。
当地因为就业率低,当地人在开始时不理解这样一个志愿工作的组织。但后来了解了情况,看到情景以后就有了很大的变化,也都积极热心地投入到社区的建设中来。
以上是我根据当时记录下的零散笔记所整理的,文桦自己有一篇更详细的文章记录了在圣路易的经历,欢迎大家查看:http://whitewoods.blog.sohu.com/151525631.html
最后讲到参与望安岛上面的生态旅游计划,整个计划是社会企业类型。由志愿者们推动的生态旅游计划,试图为岛上的生态建设及环境保护提供帮助。文桦最后展示给大家的照片,无疑为人们投入生态项目而努力的原因做了最好的概括:自然可以包容一切,人们将废旧的玻璃瓶作为垃圾丢在海里,而大海返还给我们的,却是冲刷得光滑完整,无比美丽的玻璃片。
本期活动筹备,进行的同时,由OpenParty Developer开发团队发起的OpenParty新网站项目也正式开始了线上运转。这个项目设计的初衷是将OpenParty活动中一些必要的部分都放在网站上来进行(如话题提交、活动报名等),目前虽然已经上线运行,但是还处于非常初期的阶段,未来我们还会进一步把一些计划和设想融入其中,欢迎大家提出宝贵意见。本项目为遵循GPLv3协议的开源软件,项目位于 http://code.google.com/p/openparty,欢迎大家关注,并且我们非常期待有时间、有兴趣的朋友能够参与到 OpenParty 开发者的团队当中来,感兴趣的朋友,可以发送邮件到 dev [at] beijing-open-party.org 与我们联系。
Leave a comment