Jul 09

Still remember the great company Caucho? Yes, it’s still alive. Besides its flagship product Resin, it also provides some open source libraries.

Actually, there are 2 remoting libraries you can use. One is Burlap, and another is Hessian. Hessian is the binary protocol implementation of Burlap. Burlap is xml based RPC. That’s quick easy to use in Spring framework, but 2 years ago, only be available in Java world. Now, it’s changed a lot. Take a look at Hessian, it’s pretty cool, so many implementations for different languages. Especially for Flex.

Hessian is very similar to AMF, but without any performance comparison, I don’t know which is more efficient. Anyway, we have one more solution for Flex Remoting, which from the Java world. That’s great!

Here is an example how to use Hessian in Flex.
Hessian: Flex Remoting Without AMF

Jul 08

今天把大概一年前写的 Django 程序拿出来做一些改进,主要这一年来 Django 做了重大升级,虽然兼容性非常不错,但是以前代码里面扩展 manage.py 的部分已经可以重写了,因为 Django 提供了 API 来进行扩展。

因为 Django 根据字符串形式的 namespace 来加载模块,所以我见过不少修改 manage.py,通过重新定义全局变量来修改 Django 设置的代码。我虽然也非常喜欢 hack Django 这个框架,但是我一定不喜欢去改 Django 本身的代码,尽可能通过外部修改来达到自己想要的功能。

trunk 中的 Django 版本提供了扩展 manage.py 的 Command 的 API,只需要在相应的 module 中加入 management/commands 目录,在 commands 下面创建多个 py 就可以得到扩展自定义命令的功能了。譬如加入 management/commands/mycommand.py,就可以通过 manage.py mycommand 来执行,非常的方便。我早起的程序通过修改 manage.py 本身来实现,现在完全可以升级一下了。

但是没想到出问题了,因为 namespace 的问题,Django 在搜索 commands 的方式上是通过 relative import 形式。但是我习惯性把 INSTALLED_APPS 这个变量中的 apps 都写成完整的 namespace,总是以项目目录为顶层包名,结果 Django 就找不到自定义的 commands。

namespaces 一直都是很麻烦,为了省事,我干脆还是把 INSTALLED_APPS 里面的东西改了,结果就可以用了,其实使用相对路径还是比较好的。最近人变懒了,不愿意去深入研究里面的细节了。

Jul 03

昨天开始看 Flex 相关的东西,打算把一个现有的 Python Web 应用前端逐渐转换成 Flex。向 咖啡屋的鼠标 了解了下 Flex 如何与后端应用通讯,知道了一个新的协议叫做 AMF,是 Flash/Flex 原生支持的 RPC 协议,而且用起来也要比 XML 方式更加简单。

正好又一个 Python 的实现叫做 PyAMF 可以做协议的解析,很不错!

Jun 20

看了 Robbin 写的 我为什么鼓吹facebook,为什么唱衰OpenSocial? 这篇文章之后感触良多。这半年来做的网站也就如 Robbin 提及的一样,我们从 Facebook 带来了主要的流量。

在接触 Facebook 之前,我就听说过 OpenSocial,那时候对 SNS 不是很感兴趣,于是没有深入研究过 OpenSocial。半年前我的合伙人应该看到了 Facebook 平台的成功,于是制定了新的开发计划。先立足与 Facebook,开发几个 Facebook 小程序来吸引用户,随后把这些用户引导到我们网站上来。

谈到 Facebook 的小程序,不得不说的 Viral Marketing

如果做 Facebook 小程序,那么无庸置疑,取得用户是最关键的,所以我们需要看一下 Facebook 平台提供什么样的方式让我们能接触到用户。这里不得不提到 Viral Marketing,光是用户喜欢还不行,我们需要让用户把他喜欢的东西告诉他的朋友,通过这样实现流量的提升。那么具体有大概几种方式呢?

1. 发送邀请

发送邀请成为了一个非常简单的功能,Facebook 提供的 FBML 有预定义的标签,很方便的做这个事情,通过两个标签,并且不需要任何编码,就可以实现下面的邀请页面,让你很方便的将这个程序推广给你的好友们。
facebook_invite.jpg

2. Newsfeed

Newsfeed 让你知道你周围发生的事情,譬如我的一个朋友同时也做了 “IQ 测试”,并且分数不错,那么显然她希望别人知道或者了解这样一件事情。那么简单的很,Facebook 让你发送 Newsfeed,这样作为她的朋友,我的首页上面就会出现我的朋友进行了 IQ 测试这么一个 Newsfeed,如果我感兴趣的话,我也可以去试一试。
facebook_newsfeed.jpg
Newsfeed 可以使用图片,一张设计精美的图片和有趣的文字会让人对这个小程序更感兴趣。因为 Newsfeed 同时存在与 Profile 页面,所以有时候浏览朋友的页面,顺便看到有趣的 Feed 也会让人有试一试的冲动。

3. Notification

通过邀请和 Newsfeed 我们已经可以有一定的用户基础了,但是玩过这个小程序之后可能用户就放着了。某天如果我们更新了小程序,加了新功能,或者是我们希望在今后与用户互动,我们该怎么做呢?虽然 Facebook 处于安全考虑,不会提供用户的 Email,但是我们却依然可以通过 Notification API 给用户发送通知,即可以通过站内通知形式,还支持邮件通知。邮件通知的好处就在于,你可以每天定期发邮件给用户,一个典型的例子就是 Causes 这个程序,一旦你加入之后每天都会收到他们的邮件。同时你也可以用这个 API 为用户提供内容性的订阅服务。

4. 到底能带来多少流量呢?

iqtest_stats.jpg
中国用户可能在 Facebook 上的数量并不太多,我是说本土用户,很多使用中文的用户来自国外,这是我们程序上线之后注意到的。上面的图片是我们上线的西班牙语版本的 IQ 测试,可能因为文化不同,拉丁美洲用户对 IQ 测试还是非常热衷的,所以流量还是比较客观的。但是有了用户之后,如何引导到自己的网站上去就是需要好好考虑了。

如何与 Facebook 做整合?

很多网站我们需要用户的 email 作为唯一的标示来让用户登录,但是从 Facebook 上面很难得到用户的 email,那么我们不得不重想一个办法提供一个简单的途径让用户登录我们的网站。其实如果看 Facebook 的 Authentication Guide,我们是可以通过把 Facebook 做为 SSO 来让用户从 Facebook 登录我们自己的网站的,这无疑提供了一条更为便捷的途径。

当然了,为了实现这一点,我们自己的网站必须也作为 Facebook Application 存在,其实无非是为了用 API_KEY 和 SECRET_KEY 获得 SSO 返回的 Token 去获取用户信息。这是非常容易实现的功能,Facebook 平台提供了不算多但是足够用的 API。

感想

可能国内很多开发者们并没有特别深入的去研究过 Facebook 这一个平台,但是却听到足够多关于 OpenSocial 的宣传。但是不得不说 Facebook 平台这么低的门槛是另一个足够吸引开发者的地方,相比较 OpenSocial,Facebook 对你用什么语言开发不做任何限制,你的程序完全部署在你自己的机器上,想怎么玩就怎么玩。OpenSocial 可能对 JavaScript 比较友好,myspace.cn 宣称实现了 OpenSocial 容器,大家可以试一下,挺无聊的,不可能实现很复杂的功能。

我一开始很想集成 OpenSocial 到自己的网站,但是后来我研究了才发现事情不是这么简单,Google 号称的参考实现,实现的是 Gadget Server,就是类似 iGoogle 那样的东西,重要的容器部分,譬如 Gateway Server,是没有实现的。虽然有很多网站,例如 hi5, linkedin, 国内的 tianji 等宣称支持 OpenSocial,但是却看不到成型的东西。Bebo 这个美国最大的在线交友网站同时拥抱了 OpenSocial 和 Facebook Platform,得到了 Facebook 的帮助,Facebook 部署了一套类似的平台给 Bebo,但是 OpenSocial 容器却到现在还没有实现。

资料:
我们的网站:高智商社区
IQ 测试小程序: http://apps.facebook.com/iq_test_uber_zh/

Jun 20

《Python 核心编程》第二版总算要出了,这本是一个振奋人心的消息,毕竟有超过 10 位以上的 Python 爱好者一起合作翻译了这本书,能够翻译完这本长达 1000 页的 Python 巨著,这是非常不容易的。

最早是在 《Core Python Programming》(中文第二版)有奖书评活动 看到这个消息的,里面的链接指向 CPUG 的推广页,打开就能看到清风同学帅气的照片了 :D。不过仔细一看译者却另有其人,封皮上赫然写着“宋吉广”,但这本书可是 CPUG 组织翻译的啊,为什么译者却另有其人了呢?

看一下 China-pub 中此书的序言部分,可以很有意思的看到贡献者列表,但正是这些贡献者们完成了本书超过 90% 以上的翻译任务。

这本书的翻译开始与 2007 年 10 月份,针对这个翻译 CPUG 还专门成立了名为 OpenBookProject 的小组。就在这个小组上,依然可以看到当时开始启动《Python 核心编程》翻译项目的页面,Py核心编程第二版翻译工程倡议!。翻译项目启动之后收到了非常多 Pythoner 的支持,CPUG 的老大 Zoom.Quiet 更是带头参与。现在在啄木鸟社区依然可以看到这个主题页面

这本书的翻译可以说历时 3 个月左右吧,判随严格的审校制度,质量得到了保证。在啄木鸟的页面 审校计划 里面可以看到所有的参与者以及参与审校的朋友们,大家付出了很多的心血保证这次翻译的完成,在这份邮件里面,可以看到项目在 12 月出总算胜利结束了。

但是随着翻译结束,关于此书的消息就一直没有下文了,没人知道这本书什么时候会出版,这本书也没有作为 PDF 在网上流传。但目前这本书却已经在市面上开始销售了,并且译者也不再是 CPUG 所熟悉的名字,我大概看了一下 CSDN 在网上提供的示例章节,并且对比 OpenBookProject 中此书的翻译,我的直觉告诉我,这些翻译就是来自 CPUG 的朋友们,没有他们的努力,这本书不可能完成。

但是还是这个译者的问题,列表中的 CorePy 就是宋吉广,为什么他当初匿名参与,不愿意透露自己的身份,再者,为什么出版的时候他就以自己的名字作为译者,将广大参与翻译的 Pythoner 作为了贡献者。虽然我没有参与这次翻译,但是就算作为一个旁观者,我觉得也有必要出来说一下。

我们都是技术工作者,因为喜爱 Python 这门语言互相认识,并且希望能够推广 Python,大家一腔热情翻译的书最后却以别人的名字出版了,难道不觉得很难受吗。更多的还有出版涉及的利益问题,大家花了大力气翻译,但最后出版社和宋吉广倒是占了不少便宜,反而大家什么都没有得到。如果大家不是很在乎这一块,我觉得至少也应该交给 CPUG,作为建设费用,日后可以添置服务器,设备之用。

资料:

Jun 17

今天实在太衰了,或者说可能还比较幸运。白天醒来收笔记本的时候发现桌上一只小强大摇大摆的从我面前走过。小强这种动物只有在晚上才会出没,居然白天能大摇大摆的出现在桌子上,那真是说明某个地方小强的数量已经达到一个数量级,以至于这一只没地方住,落单了,只能来我心爱的 MacBook Pro 里面寻找容身之地了啊。MacBook Pro 夏天巨热,这可好,成了小强的最爱,温暖的地方它是最喜欢不过了。所以决定晚上一定把机器收包里,万一小强转进去了我机器也就要完了。

凌晨 1 点左右,还没睡,厨房开着灯,卧室门开着,我的位置正好能从卧室看到外面。眼下的一幕让我惊呆了,一只黑色小虫突然间从厨房跳了出来,透过灯光一看,我呆了。我的天,这东西也实在太大了吧。光是身体就长 2cm,有 6 条腿,头上两根胡须特别长、这东西,长的很像蟋蟀,要从远处看,可能真以为就是蟋蟀了。

这是一种非常恶心的虫子,我能清楚的记得小时候经常看到它。因为跟蟋蟀长的特别像,当第一次看到它的时候还真以为就是蟋蟀了。这东西的后肢特别发达,翅膀已经退化了,弹跳能力相当的强。后肢的构造跟跳蚤一样。这恶心的小虫一般出现在阴暗潮湿的地方,尤其是下水道口附近经常有他们的身影。但今天它居然跳进了我卧室的门,跟我对视了一段时间。虽然清楚的记得在南方的时候见到的这样的虫子是黄色的,但眼前的黑色小虫一定就是它,不会错了。距离上次见到这种虫子该有 10 年了啊,10 年后的今天,在离家 1200 多公里的北京看到了该死的小东西的远房亲戚出现在了我的卧室,说什么也不能留下活口了!

雷达杀虫剂早就准备好了,中午要杀小强没成,就拿这个当替死鬼吧。喷了一阵,貌似对这个小虫效果不明显,它逐渐向我跳来,太挑衅了。用拖鞋踩实在太恶心了,我顺手拿起 MM 的拖鞋以 29.4N 的力量拍了下去(考虑到这东西肚子这么鼓,里面不定有什么了,万一用力太猛,那就乱七八糟了)。果然恰到好处啊,没拍扁,不过肚子破了,后肢掉了一个,应该挂了,虽然还能动活下。用扫帚打扫了战场,用拖把 + 消毒液把地面收拾了,但还是心有余悸啊,不知道还会不会从厨房再跑出什么来。

上网搜了一下,原来这恶心的小虫学名叫 “灶马”,是群居类,寒了 -_-|||,不知道还有多少隐藏在阴暗潮湿的角落里面……

更新:
六月 18 日晚九点,回来发现小强在我 MacBook Pro 上休息,2 分钟后被消灭,大快人心啊!