2011 6 21 09:09 PM 2702 次查看
分类:Google App Engine 标签: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例子。
2011 6 21 11:44 AM 2030 次查看
分类:Google App Engine 标签:Google App Engine
前几天GAE SDK 1.5.0 Prerelease版发布了,由于新特性没文档,我也就没介绍了。这几天部署应用时老提示有新SDK,不过就是没放出下载。而今天,1.5.1正式版终于发布了,更新如下:
- 外部请求将带上X-AppEngine-Country头,基于用户的IP,以ISO-3166-1 alpha-2国家码来标明的访问者的国家。CGI环境下可用os.environ['HTTP_X_APPENGINE_COUNTRY']获取,我自己测试时可以拿到'CN',不过使用代理和反向代理的就只能拿到代理服务器所在的国家了。
- Channel API可以检测用户状态。需要在app.yaml的inbound_services里增加xmpp_presence,详情可见User Presence文档。
- Images API支持WebP格式。(本地是用PIL,所以不支持)
- 本地开发服务器新增--high_replication参数,模拟High Replication Datastore的行为(查询实体时,最近改写的实体可能不会返回)。
- 管理页面的后台记录可以选择时区了。(以前为PST,还得考虑夏时令的问题。注意没有北京时间,而上海时间不会显示最近6分钟的请求,所以建议设为香港时间。)
- Python SDK增加ProtoRPC API。这个API还是实验性质的,我只是粗略看了下,大致是用于构建基于HTTP的RPC服务的。简单来说,按照它预定义的格式来进行请求,再返回一个预定义格式的响应。感觉没多大用处,因为自己实现JSON或XML格式的RPC服务也不难。
- 增加app_identity API,可用于获取应用id和默认版本的域名(例如my-app.appspot.com);此外还在请求其他服务时,能对请求进行认证(也就是签名啦)。
2011 6 18 03:16 AM 40048 次查看
分类:Mac OS X 标签:Mac OS X
用了几个月Mac OS X,发现很多东西不记录下来就会找不到,于是就有了这篇日志。
2011 6 7 05:06 PM 9401 次查看
分类:Google Chrome 标签:Google Chrome
今天在MacX下东西时,想去软件的官网看看介绍,结果发现没法选取软件名来复制和搜索,于是写了个Chrome插件Enable Copy来破解。
效果如下:
2011 5 11 03:49 AM 3837 次查看
分类:Google App Engine 标签:Go, Google App Engine
2011 5 8 07:12 PM 6187 次查看
分类:Python 标签:Python
刚才看到一篇《Linear equations solver in 3 lines (Python recipe)》,用3行代码实现了解一元一次方程:
>>> solve("x - 2*x + 5*x - 46*(235-24) = x + 2")
3236.0
源码:
def solve(eq,var='x'):
eq1 = eq.replace("=","-(")+")"
c = eval(eq1,{var:1j})
return -c.real/c.imag
2011 5 4 03:04 PM 3013 次查看
分类:JavaScript 标签:jQuery, JavaScript
今天jQuery 1.6版发布了。
新增的API和性能改进我就不提了,只提一个重要的改动:区分DOM的attributes和properties。
这2个词的中文翻译都是属性,有时候后者会被译为特性,不过我还是直接用英文吧。前者表示从文档中获取的状态信息,后者则表示文档的动态状态信息。更通俗地来说,HTML文档里是怎么样的状态,attributes就是怎样的;而JavaScript可以通过DOM API来更改DOM的状态,表单控件(如文本框)的状态也可以被用户使用键盘、鼠标等修改,这些被动态更改后的状态就由properties表示。
2011 5 4 12:00 PM 1917 次查看
分类:Google App Engine 标签:Google App Engine
今天凌晨,GAE SDK 1.5.0 Prerelease版发布了。改动很多,但是由于没文档,不少东西我也不清楚,所以只翻译一些我感兴趣的:
- 任务队列的参数大小增大。(超过后只能使用数据库来保存参数,所以这个改动很有意义。)
- HTTP请求和响应大小增大为32MB。(做代理更方便了。)
- 创建新应用时,High Replication Datastore将作为缺省设置,以取代Master/Slave Datastore。
- 任务队列的执行速率增大到500/s。(貌似一般应用也有500QPS的限制。)
- db.py新增异步操作:get_async()、put_async()、delete_async()和allocate_ids_async(),调用函数返回值的get_result会阻塞直到拿到数据。
其他的就等正式版发布再翻译吧~
2011 4 27 09:55 PM 2154 次查看
分类:Google Chrome 标签:Google Chrome
作为一个Chrome重度依赖者,我总想知道自己在Chrome上花了多少时间,访问过多少个网页。于是乎花了2天时间,捣鼓出了My Counter这个插件。
2011 4 26 06:34 PM 1847 次查看
分类:Google Chrome 标签:Google Chrome
最近在做一个记录Chrome使用时间的插件,遇到了一个小问题:我有事没事就开着Chrome,当它在后台运行时,也算入使用时间就显得不合理了。
翻了一下文档,没有找到这样的API,于是只能组合起来尝试了。最终发现先用chrome.windows.getLastFocused()获取最后被选中的窗口,然后判断它的focused属性,就能知道是否为当前窗口了。
« 看看还有什么好玩意