OpenParty "柳燕隙阳"

| No Comments
"柳燕隙阳"活动再度发挥去年小"QCon"的传统,请来了豆瓣的洪强宁大侠为大家讲解 Python于Web 2.0网站的应用 这个Python布道型话题。同时依旧云集了诸如:开源软件定制开发中的软件工程持续集成最后一公里Go语言介绍多乐趣介绍另一种旅行的可能----我的公益生活索引等等诸多精彩话题。简要记述下自己参与的两个话题: Python 在Web 2.0网站的应用 以及 另一种旅行的可能----我的公益生活索引 简要的记录和理解。


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库实现通过代理翻 墙

Python的一些实现:
  • Stackless Python:微线程,类似Erlang,高效并行
  • IronPython, PyPy:据说效率都已经超过CPython 了

Q&A环节:
  • 关于框架的选择问题:历史原因,如果现在从头开发新的网站,使用现代化框架
  • 变量命名规范:遵守 PEP8 规范,尽管不是必须
  • BeansDB应用于:图片、MP3、大文本字段


"寻找失落的螺丝钉"

由自然之友的张文桦带来的,讲述了她多年以来参与公益项目及活动的一些经历,让人受益匪浅。

无意中踏入公益,听说有学姐在做黑熊保护这类的公益工作,很是羡慕。于是她自己的第一份工作,就是从NGO开始的。

讲解了"生态工作假期"这种独特的旅游类型。这种活动形式旨在让出门旅游的游客利用假期中的一部分时间,作为志愿者参与到当地社区的一些生态计划当中。当然,整个计划也为旅行者进行了比较周全的计划:选取风景优美的地点,毕竟前来的游客的首要目的还是旅游,为旅游者为游客创造优美、适宜的环境,还是必须的。

这种活动形式在台湾已经有了一定的规模,在当地社区的参与下,选取符合上述条件的,需要劳力(志愿者的投入)的项目来开展此项计划。

参与完成了:
  • 台湾阳明山外来种清除计划
  • 花莲南华街区旧烟楼修复

不过生态工作假期这种形成花费较高,适合中产阶层。尽管这种旅游公益的形式在自己身边还处于闻所未闻的状态,但是看看台湾相关组织和民众能够达到的高度,无疑能够给我们更多启示。

另一种方式是参与"静会"这种项目,通常是处于某种目的的公益项目(如宣扬和保存原住民文化),需要来访者用专业知识进行相关的项目工作。但是此项目无须收取费用,适合囊中羞涩的公益旅行爱好者。

当时文桦参与的是原住民文化馆:原住民做的文化小铺项目。有很多这样的项目是由台湾的一些有心做此项事业的中产阶层推动的。志愿参与者们问一个NGO的活动主办者:"你们做这个事情有意义吗?" 对方的回答是:"这个问题被无数人问了八年,具体的答案我们不清楚,只不过,八年以后的现在,我们还在做这件事。" 我想这才是意义所在。

文桦后来又讲述了在美国的圣路易社区参与的服务计划。

计划开始的前三天,组织者给大家时间来融入和了解社区:第一天学习使用$1来买一件东西,旨在通过买东西这个活动与当地人产生更多的交流和理解。第二天在当地人家吃午饭,了解到当地人居住的房子也都是先前志愿者计划帮助的。

第三天开始正式的工作:在工厂搬废钢铁和废家具。由于工作内容实际上是需要相当强健的体格才能完成的体力工作,文桦因为各种原因不能做到和其他人一样好而沮丧。而这时团队中一个瘦小的女孩Sarsh讲述了她在宏都拉斯进行志愿工作中类似的经历,身体并不强健的她要去铲土,从而心里对自己产生了怀疑:如果不能胜任这份工作,那么自己为什么要付出那么多的辛苦来做呢?自己继续做下去还有什么意义呢?后来自己想通了:"为当地人提供更多是心理上的支持,让当地人感觉有其它人关心和参与"。至于自己可以做多少工作,不要勉强,因为会有其它志愿者来帮忙完成。我认为这也是我们参与许多志愿类工作的时候,所应该享有的一种心态。

当地因为就业率低,当地人在开始时不理解这样一个志愿工作的组织。但后来了解了情况,看到情景以后就有了很大的变化,也都积极热心地投入到社区的建设中来。

以上是我根据当时记录下的零散笔记所整理的,文桦自己有一篇更详细的文章记录了在圣路易的经历,欢迎大家查看:http://whitewoods.blog.sohu.com/151525631.html

最后讲到参与望安岛上面的生态旅游计划,整个计划是社会企业类型。由志愿者们推动的生态旅游计划,试图为岛上的生态建设及环境保护提供帮助。文桦最后展示给大家的照片,无疑为人们投入生态项目而努力的原因做了最好的概括:自然可以包容一切,人们将废旧的玻璃瓶作为垃圾丢在海里,而大海返还给我们的,却是冲刷得光滑完整,无比美丽的玻璃片。


自己能够记录和参与的活动必然有限,想要了解活动详情的朋友,可以在此查看"柳燕隙阳"活动的所有话题情况。同时也请关注OpenParty网站对于此次活动的总结。

本期活动筹备,进行的同时,由OpenParty Developer开发团队发起的OpenParty新网站项目也正式开始了线上运转。这个项目设计的初衷是将OpenParty活动中一些必要的部分都放在网站上来进行(如话题提交、活动报名等),目前虽然已经上线运行,但是还处于非常初期的阶段,未来我们还会进一步把一些计划和设想融入其中,欢迎大家提出宝贵意见。本项目为遵循GPLv3协议的开源软件,项目位于 http://code.google.com/p/openparty,欢迎大家关注,并且我们非常期待有时间、有兴趣的朋友能够参与到 OpenParty 开发者的团队当中来,感兴趣的朋友,可以发送邮件到 dev [at] beijing-open-party.org 与我们联系。

我于09年9月27日-10月8日在柬埔寨独自背包旅行,其间的经历和收获数不胜数。相关的经历我曾在09年10月底在Beijing Open Party 上有过一次交流分享,现在把旅行途中以及后来的一些记录陆续发布到这里,请感兴趣的朋友关注这里的更新。除正文中的照片以外,还可以在我的Footbig以及我的豆瓣相册中欣赏因篇幅原因未能在文章中出现的照片上一次交流分享的slides可以在我的slideshare页面看到。

早晨起床,先去离住处非常近的马德望中心市场吃早饭。柬埔寨人的早餐种类很多:(在金边吃过的)高棉三明治、各种米线、高棉炒面以及一种煎饼。再次吃了我非常喜欢的高棉炒面。有个摩托司机和我搭话,简单聊了聊当地的风土人情,很有收获。我喜欢淳朴得多的马德望,和你搭讪的司机也都少了那么多的商业味。还尝了尝他点的当地早餐----大煎饼,吃起来感觉挺亲切。中央市场的食品摊在早上热闹非凡,各种各样的人都在这里悠闲地吃着早餐。摩托司机、警察和形形色色的不知道做什么却也不急着上班的人们。早餐甚至还有大扎的冰咖啡。

九点和先前约定好的TukTuk司机汇合,起程去坐马德望的招牌旅游特色----竹车。一路上经过昨天开庙会的地方,现场一片狼藉。不远处的大卡车上放着一艘长长的龙舟,而坐在卡车上的二三十人则高声地喊号唱歌,司机告诉我说这是昨天龙舟赛的胜利队伍,他们会这么又喊又唱地一路赶回家乡。

P1050740.JPGTukTuk开出几个路口就进入了小乡村,看似悠闲的乡村小路却并不平静。不一会儿就看到了正在建设的跨河大桥。而旁边进行的是道路的扩建工程。司机和我说,来自中国和日本的公司们正在争先恐后地投入到这样的项目中。正说着,一棵高大的棕榈树应声而倒,紧接着工人们一阵沸腾,听司机说,树倒以后工人们发现了一只猴子,他们正抢着捉住猴子去卖钱。

然后就到了一个小村子前面。竹车当地人称为"Norry",马德望的竹车已经是当地的一个旅游品牌,竹车游览也已经是一个非常成熟的产业。乘竹车往返一趟要价 $10,因为自己是一个人,和老板划了下价格,以$8成交。然后就在两名小伙子的带领下,开启竹车之旅。那么什么是竹车呢?简单地说,就是两个火车的轮子,一个柴油机,和供人去坐的一块竹板在铁轨上面跑。原以为速度不会太快,可实际坐上去,也会开到大约几十公里的时速。坐在那块木板上,感觉着每一个铁轨接点的颠簸,很是特别。不过铁轨只有一条,有时会有反方向的车开过来,这也是为什么安排两个小伙子在车上的原因:一个人驾车,另一个人站在车上远眺,远远地看到有迎面驶来的车,就逐渐减速,直到两个车面对面停下。随后有一个不成文的规矩:乘客较少的车上的人下车,将车解体(拿下发动机、拿下传动皮带、拿下木板,拿下轮子),让乘客较多的车先通过。这一路上停了两三次,因为这条竹车线路不只是为了游客游览,也有不少村民乘坐竹车在两地之间往返。

norry.jpg颠簸了二十分钟左右,到达一处小村子。下车走了两步,就被一个中年妇女带领到一个砖窑,开始非常详细地介绍烧制的流程,从模具到过程到最终的成品,带着我这儿看看那儿看看,我心想这下是"被"一条龙服务了。果然,讲解完后要收费$1。不过现在回想起来,那里的民众还算比较纯朴,收费不高(请对比国内旅游景点)。参观完之后坐车返回。结束了竹车之旅。不过此时时候尚早,还不到中午,于是和TukTuk司机商量了一下,再去马德望附近的一座早期吴哥寺庙 Wat Ek Phnom 参观一下。

于是小TukTuk又开始了旅途,重新开进马德望市区并一路向北,开进另外的小山村。太阳挂在正中,景色出奇地好。路上还见到了近百人聚餐的盛景,我以为是当地的婚宴,司机和我说这是村子的一年一度的(中秋)节日聚餐。路上还经过了一间1975年就已经停产的百事可乐工厂,进去简单参观了以下这个独特的地方。

DSC_1057.JPG
DSC_0992.JPGTukTuk又前进了近半小时,就来到了在一座小山顶上的Wat Ek Phnom寺,由一位旅游警察收取门票($2),这是个前吴哥时期的遗迹,所以现在看来就是个保存得并不太完整的庙宇。但这地方仍是当地宗教活动的中心。古庙的前面就是近年建起的佛教大殿,而旁边座落着一尊新建的大佛。终于,这是个再没有其它游客的地方(我只见到一对当地的年轻情侣),景点没有什么特别,却有着那种迷人的幽静感觉。

watekphnom.jpg随后返回住处休息片刻,下午出来步行逛马德望市区。市区在我看来真是小得可怜,走出几个街区,再一家学校旁的小餐馆吃了非常美式的午餐(5000R=1.25$),随后步行前往附近的马德望博物馆。走进博物馆,发现大门开了但是展厅却没开,想来是自己早早就到了。当时就去问院子里坐在摩托上的一位大叔,不料该大叔完全不懂英语。大叔看起来有些为难,好像和我说了什么,然后就跳上摩托车走了。我不得其解,就坐在那个安静的院子里继续享受马德望的中午。不一会儿大叔就载着一位姑娘来开门。这下我有点儿不好意思了(似乎提前了别人的工作时间)。博物馆里面没有金边的国家博物馆漂亮,也没有亮丽的展品,大量的残破雕像都被随意地丢在地上。

而后又走过几个街区去看荒废已久的马德望火车站,与博物馆只相隔了几个路口。火车站这片地区也是一片乡村景色,废弃的车站,蓝天、绿草,是马德望的著名景色。

DSC_1093.JPG随意逛,走到一个车站附近,惊喜地发现有便于观赏风景的双层城际巴士,就订了后天开往金边的车票。于是,大多数的事情都已完备。连续几天的忙碌后,马德望这个有着独特风格的幽静城市,让我决定在这里好好休息,消磨些时光。

DSC_1114.JPG傍晚买了足够的食品和饮品回到住处,津津有味地看各种电影频道。晚上找了个当地人吃饭的盖饭摊吃了一顿。刹那间,有了一种自己已在当地生活了许久的感觉。

未完待续

要查看本系列更多文章,欢迎点击页面右侧的Cambodia标签。本系列文章可能会省略一些旅行中的细节内容,如果您也打算出游,并还想了解更多详细信息的话,欢迎在网站页面留言,我会很高兴帮助您。
我于09年9月27日-10月8日在柬埔寨独自背包旅行,其间的经历和收获数不胜数。相关的经历我曾在09年10月底在 Beijing Open Party 上有过一次交流分享,现在把旅行途中以及后来的一些记录陆续发布到这里,请感兴趣的朋友关注这里的更新。除正文中的照片以外,还可以在我的Footbig以及我的豆瓣相册中欣赏因篇幅原因未能在文章中出现的照片上一次交流分享的slides可以在我的slideshare页面看到。

皮卡在满是大水的暹粒城区的几个GH间穿梭,接起各个一同前往马德望的旅客。渐渐地车上就热闹起来。一对来自悉尼的老年游客,谈起他们四处旅行的经历,他们在八十年代初就到过中国,家里还珍藏着一套那个年代买的蓝色工装。同车还有两个在中国工作的意大利人以及几个美国女孩,很快皮卡上就满员了。

太阳慢慢升起,虽然吹着的风似乎比电影里看到的风要猛烈地多,但这感觉却让人有无数憧憬,在异乡的美丽景色间流连,感觉非常舒服。因为很多路被水淹没而不得不绕路而行,车开了一个多小时才到码头。刚一到码头就有一群卖面包和水的小贩湊了上来(价格比正常市价略贵)。码头停着两条船,大一点儿的船开往金边,而开往马德望的小船,看起来略为可怜,十来排木制座椅、一个可以爬上去的船顶,没有什么特别的了。游客上船以后,船上倒显得空荡荡的。就这样,伴随着巨大的发动机轰鸣声,小船启航了。

P1050466.JPG洞里萨湖是东南亚地区最大的内陆湖,坐在船上向湖中心方向看过去,与远望海面的感觉差不多,只是浪要小一些。初升的太阳使得这水上的风景慢慢地显出了它美丽的一面。

DSC_0760.JPG随后路过了一个水上村庄,小孩子都在尖叫着冲着游船招手。小村庄有着像陆地上一样的寺庙、餐馆和小商店,只是代步工具变成了船。我们乘坐的船放缓了一些速度,伴随着村庄里的几声喇叭声,有小船载着乘客向我们这艘船驶来。原来是沿途村庄前往马德望的民众。上来的人有老有少,渐渐的船上就热闹起来了。

village_on_tonle_sap_lake.jpgDSC_0810.JPG船继续前行,河道一会儿变宽一会儿变窄。自己还用指南针反复查看以找出在地图上确切的路线,后来发现这航道实在是太绕了,地图上也只是标出了较宽的航道而已。渐渐地,船舱里的外国游客都走出船舱,爬到船顶上去了。

我起先只是好奇,不知船顶有什么好玩的可以吸引那么多人上去。直到自己也小心翼翼地爬上船顶,端坐在一角时才发现,原来整个旅途观看风景的核心就在这里。通常看到的湛蓝色的天空、壮丽的云朵,突然在眼前变成了数百公里绵延不断的景色,没有高楼和任何建筑物的打扰,只有这样美丽的天空,映着同样美丽的广阔湖面,以及点缀期间的碧绿色植物。坐在湖中行驶的船上,高温酷热突然也变得不再是任何问题,太阳逐渐升高,变得很晒。但自己宁可把大把的防晒霜抹上,也不愿回到船舱里面----任何事物也不能阻挡自己与大自然如此接触。不过坐在船舱上面在过狭窄河道的时候,要注意沿途植物带刺的枝杈,一不小心,就会被划伤,注意闪避。

Touring_TonleSapLake.jpg接近中午的时候,在一家小饭馆停船休息,简单地吃了个盖饭($1),小屋里面的装饰倒是无比吸引我。

P1050544.JPG继续出发,沿途又路过了四五个村子。沿途只要见到小孩子就一定是在猛烈地挥着手,大声地打招呼。偶尔能见到从马德望方向开过来的船,以及满载着柬埔寨人(真的是满载)的客船。大家看到的都是一张张此起彼伏的笑脸,卖力地挥手,以及'hello~'的的喊声,美丽、亲切、又温暖。河道越来越曲折,有越来越多的乘客开始在各个村庄下船,又行驶了约二十分钟,远处的河岸突然出现了一大片的人,随后船停在了长约5米的一个小码头上。马德望到了。

dragon_boat_racing.jpg看看表,13点整,距离上午8点开船正好5小时。挑了一个TukTuk司机,联系找个住宿的地方,先去了一家有名的店,结果连空调房都没有。不过司机推荐的第二个店却非常不错,除了没有名气,但其它设施齐全。与司机约好明天上午去乘竹车。

打开电视,看到的景象赫然发现在河边看到的一样。原来,这天是端午节,马德望在举行全国一年一度的龙舟大赛。赶紧拿起相机出门,前往河边。原来这里根本不只有龙舟,河边的街道摆满了摊位,还有交通管制,一派过年庙会的胜景。两旁的摊位卖着各种各样的东西。从类似'动感地带'的手机号、洗衣粉、各种服饰、大头贴、各种食品、抽奖游戏,乃至搭建起的简易旋转木马、摩天轮,应有尽有。

P1050589.JPGBattambang_City.jpg相信我自己也成了这来来往往景色中的一部分。和暹粒的热闹喧嚣不同的是,在这个热闹的庙会氛围中,我几乎没发现其他游客。所以在来来往往的当地居民眼中,我这个满头大汗、背着相机的中国小伙,也算是个景色了。东瞧瞧西看看,眼睛根本不够用,尝试了一杯颇受欢迎的甘蔗汁,继续沿着河边探索。

河边的建筑果然保留着法国殖民期间的特色,城市里的寺庙也很多,LP里说是由于红色高棉时期一位不服从命令的指挥官才得以保存下来的。几乎每个寺庙的外面都有僧人在为寺庙修缮筹款。走到城南边一个LP上面推荐的便宜小饭馆吃了顿Pizza,期间一个学生模样的男孩和我用中文搭话。原来他的上一辈和上上辈都是潮州人,从他那里还得到很多情况。这里华人很多,而且在当地经济中占据了十分重要的地位。没想到能在这里和他人用母语交谈,感觉不错。晚上漫步河边走回旅店。河上的一艘小船还放出了小小的焰火作为庆祝。

忙了这些天,回去就早早休息了,准备明早体验马德望的特色风情:竹车。

未完待续

要查看本系列更多文章,欢迎点击页面右侧的Cambodia标签。本系列文章可能会省略一些旅行中的细节内容,如果您也打算出游,并还想了解更多详细信息的话,欢迎在网站页面留言,我会很高兴帮助您。

Find recent content on the main index or look in the archives to find all content.

OpenID accepted here Learn more about OpenID