用Tornado打造WebSocket与Ajax Long-Polling自适应聊天室

标签:Python, AJAX

这几天忙着研究Tornado,想着总得学以致用吧,于是就决定做个聊天室玩玩。
实际上在Tornado的源码里就有chat和websocket这2个聊天室的demo,分别采用Ajax Long-Polling和WebSocket技术构建。
而我要实现的则很简单:将这2种技术融合在一起。

Google Reader API简介

标签:Python, RSS, Google Reader

Google Reader是我最喜欢的web服务,可惜在iPhone上没有一个我理想中的客户端,所以只好自己动手丰衣足食了。
而开发的第一步自然就是搞定Google Reader API,可惜Google一直没有放出官方文档。所幸的是前人已经通过反向工程探寻出了相关信息(GoogleReaderAPIUnofficial Google Reader APIgoogle reader api 介绍Using the Google Reader APIGReader-Cocoa等),所以不用自己去一一摸索了。
不过文档有点老了,这期间Google也稍微改了一些东西,所以还需要稍作修正。

在GAE上搭建XML-RPC服务

标签:Google App Engine, Python

前些日子有人问Doodle是否支持Windows Live Writer,我只是回答了不支持而已。原因很简单,我的Windows XP很奇怪,几次装Live Writer都失败,对微软已经绝望了。
不过现在已经转移到Mac OS X上了,装软件没这么奇葩的兼容性问题,于是就研究起weblog publishing API来。

博客发布API大致有2类:一类是基于XML-RPC服务的,包括Blogger API、MetaWeblog API、MovableType API和WordPress API等;另一类则是Atom Publishing Protocol。
后者虽然技术上比前者强大,但较为复杂(例如认证是基于HTTP的认证机制),而且由于出现得较晚,支持它的也比较少。当然,对我来说更重要的是文档很难找,因为这个协议并不只用于blog,一些细节上的东西就不知道怎么搜索了。
于是比较了1天后,还是选择了XML-RPC。简单来说,它就是用XML封装方法名和各个参数,POST给XML-RPC服务器,再由服务器返回XML封装的方法运行结果。至于各种API,实际上只是方法和参数的差异,原理都是一致的。

下面举个提供加法的XML-RPC例子。

用Python捕捉和模拟鼠标事件

标签:Python

这个假期玩了不少galgame,不过有些很老的游戏没有自动运行模式,点击鼠标又太伤按键了,于是想把滚动鼠标滚轮映射为点击鼠标。
网上搜了一下,没发现什么现成的软件,而按键精灵又太重量级了,于是考虑干脆自己用Python写个算了。

get_value_for_datastore与make_value_from_datastore的用法

标签:Google App Engine, Python

以前曾写过一篇《避免ReferenceProperty自动解引用》,那篇文章里提到了使用get_value_for_datastore来获取原始值,避免自动解引用的方法。
不过Property还有个奇怪的make_value_from_datastore方法,它的用法其实正好和get_value_for_datastore相反:后者是直接返回实体中与数据库里存储的一致的属性值,即真实存储的值是它;而前者则是在保存属性值时,对其做相应的转换,使它可以转换成datastore中适合存储的类型。(注:这里是指原始实现,你可以覆盖它以实现想要的效果。)

« 看看还有什么好玩意