为四川人民祈祷! www.onefoundation.cn
logo of kjam.org
Archive: 2008-10

App Engine as Web DB Service

如果问我如何写一个网站, 那么还是最本质的三样: HTML CSS JavaScript
没有PHP或者django rails吗? 事实上大量的网站用不着.

现在我们有了Google App Engine, Google官方的推荐是使用Django来建设你的站点. Google App Engine是很棒的产品, 不料秀才遇见兵, GAE遇到了GFW, 使得很多有着美好商业愿望的潜在用户望而却步.

用户不能完全依赖GAE, 但是我们可以适当的使用它. 在我们用户的眼中, GAE最大的卖点是什么? 免费? 错了. 最大的卖点是它的数据库, 基于云计算的数据库. 即便我们使用EC2, 我们也无法获得这样的数据库, 无需维护并且运行良好不丢失数据. App Engne的缺点, 你能数出一大堆, 比如不能上传文件, 不支持你想要的语言...很多, 但那都没什么.

让我来做一下这样的假设, 我们不把 GAE 当成托管服务, 只认为它是一个免费的 web service, 也就是带 httpd server 的数据库, 我们来尝试用全新的角度使用它.

租一个仅仅支持 SSI 的 Apache 虚拟主机. 放上一个静态 html, 还有网站需要的图片, 为了节省流量 jquery 就用Google AJAX Libraries API上hosting的那个吧! 用户上传的文件可以扔到S3上去, 在集成几个map api, ajax 从 flickr 上 load一些用户的相片, 要达到更好的效果话还可以做几个flash.

最最重要的用户交互, 在GAE上面写python吧, jsonp上去post/load. 如果需要自己机器上也可以跑一个PHP/django, 闲置的时候从GAE上面把数据同步下来.

万一, 当 ajax 到 xxx.appspot.com 却被GFW干掉的时候, 请考虑备用的路线, 如果是读操作, 请考虑读取本机上的PHP/django. 如果要写的话, 本机上的数据库是不是也可以帮你队列一下.

最后, 如果用户有安装Google Gears, 那么不要吝啬给用户最好的体验, just use it.
comments: 0  
by kernel1983

Template engine 的意义

如今 Template engine 的数量令人瞠目

除了最最著名的PHP以外, 在python ruby和perl世界中有无数的项目关注这一领域, 编程天才们各显神通, 有的注重速度(mako), 有的宣称完全 xml based(genshi), 还有的将其他语言中的成功产品克隆到自己的语言当中(Perl的mason就被用其他语言重写), 甚至还有模仿 python 缩进方式的 Template engine, 和针对 CSS 的专用 Template engine 出现, 可谓创意无限.

每一个 web framework 也把 Template engine 作为一项重要的指标, 比如 django 和 rails, 在易用性上做足文章.

让我们回到原点, 我们为什么要使用 Template engine , 其实最根本的原因有二:
1. 我们要重用某些html, 比如有三个html的头部是公用的, 通过模板引擎的整合可以让我们在修改的时候省去打开每一个文件的麻烦.
2. 我们需要将视图view和控制器controller分开, 所以需要 Template engine 将model的数据(controller的变量)渲染到HTML模板中.

相比之下, 第 1 点出于劳动人民的朴素愿望, 也可能是当年PHP被设计出来的初衷.
第 2 点就稍微阳春白雪一点, 提倡 MVC 也就是这几年流行的事情.

最后写总结的时候, 稍稍预测一下未来:
未来我们要写的是web application, 不单单是普通的web page了, 由于ajax的使用, 极有可能把render放到browser上, 后台部分变成纯粹的 web service, 也就是说服务器不再需要 template engine. 或许SSI(Server Side Includes)将会重新登上历史舞台.

这下有人又要问了, 搜索引擎如何搜索包含大量JavaScript且没有内容的网页?
没错, 我也思考了很久. 答案是, 由于后台变成了web service, 搜索引擎就可以直接爬web service得到类似于 rss 这样的标准数据, 而不用去担心无数不规范的 html 了, 的确是更好的选择.
comments: 1  
by kernel1983

Django based Webproxy

一个类似反向代理的程序, 不过没有cache, 也没有high performance.
最近都是在prototype, 而且基于 django 很明显就是绕了一圈.
在实际应用中使用 squid 和 apache 甚至 nginx 都是更加好的选择, 即使一定要python level的, 基于 wsgi 的 app 也会更多的挖掘一些性能.

http://webproxy.djangocn.com/ 使用这一程序反向代理了 Google, 作为演示.

似乎PHP已经有类似的项目了. 不过没有具体参考, 直接实现了一个基于 Django 的.
comments: 0  
by kernel1983

Snake using canvas

上次在 Nodebox 上写的一个 Snake (虽然用箭头表示, 且称为Snake吧), 这次被我移植到 JavaScript 了.
依然还是不能支持 IE
snake demo
comments: 1  
by kernel1983

box2d.js with jQuery

box2d.js is the JavaScript version of a famous physics engine box2d. It was ported from box2d as3, base on JavaScript framework prototype.

I spend some time to make it work with jQuery.

You can download here: box2d-js-jquery_0.1.0.zip
comments: 0  
by kernel1983
12