为四川人民祈祷! www.onefoundation.cn
logo of kjam.org

GAE Java

最近GAE Java横空出世, 给了我一个读读Java代码的适当理由

对于xml天马行空的Java框架世界以及J2EE我是完全一头雾水, 不过基本的Servelet/JSP我还是有点模糊印象, 下载了GAE Java SDK以后, 找了最简单的示范代码来阅读.

JSP文件会被先转为servelet, 最终被编译成class文件, servelet代码也很好认识, 看到doGet/doPost这样的方法, 就能够猜出大概含义.
另外在我们经常使用的web framework中的url dispatch, 也可以从web.xml体现出来, 不过不知道它功能上是不是可以更加灵活一点, 比如支持个正则表达式什么的.
ORM的话, 这次从GAE的文档上就可以看出, 是通过JDO来支持google datastore.
Google之前的GWT似乎也派上了用场, 要是你只擅长写java的话.
这么看来, 该有的都有了, 基本不需要其他的框架. 或许有朋友会在上面部署spring或者struts, 实现MVC, 全凭个人喜好.

另外, 我发现初学者如果在google搜索spring或者struts, 往往会被大量的口水误导, 或许这辈子都搞不清楚那些是什么玩意. 首先要打好servelet基础, 然后要去他们的官方网站, 比如struts 读它的 hello-world, 才会最快的上手.

总的来说, GAE Java还是相当 KISS 的, 通过Java Servelet支持Java世界中的everything, 和GAE Python通过支持WSGI标准来支持几乎所有的python框架一样.

Web Serverside差不多各种语言都有演绎, 大多都在重复相同的思路, 已经没有什么悬念.
相比而言Clientside前端编程只有Javascript一家独大, 并且还有较大的空间可以挖掘.
Webkit的趋势越来越好, 相信在不久的将来会一统desktop和mobile, 让我们拭目以待.
comments: 1  
by kernel1983

Sizzle

/*!
 * Sizzle CSS Selector Engine - v0.9.3
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */

在jQurey 1.3.x 代码中找到的注释, 一个更加轻量级的js框架 Sizzle. 如果有时候你觉得 jQurey 还是太大了, 就用这个吧!

OK, 说说这次我为什么又跑去看 jQuery 代码, 主要是为了搞清楚一个问题:
首先, 如果html里面有一个div和一个span指定了相同的id怎么办? getElementById 毫不客气, 只认第一个.

在 jQurey 中, 如果你要选择后面那个元素, 那么$('span.id_name')或许是我们的另外一个选择, 这时我们享受了框架给我们提供的便利.
仔细想想, 框架一定不是简单的包装了 getElementById 这个常用函数, 它一定做了很多额外工作.

在jQuery 1.3.x 中 CSS Selector Engine 这样的工作被交给了 Sizzle 来完成, 查看 1.2.x 的代码则发现是 jQuery 自己做了这部分功能.
这也是为什么 1.3.x 宣称自己有着更好性能的原因.
comments: 3  
by kernel1983

MOD_WSGI 与 no such table

使用mod_wsgi的时候遇到了错误 OperationalError: no such table: django_session
开始还怪罪于mod_wsgi可能有未知bug

终于在google group里找到了问题所在
http://groups.google.com/group/django-users/browse_thread/thread/2d9f25383a97bc6e?pli=1

翻译一下:
出现这种问题最大的的可能是在设置DATABASE_NAME的时候没有使用绝对的路径,
如果sqlite3找不到数据库文件, 它会自己尝试创建一个空的数据库文件.

OK, 把settings.py中的数据库文件名换成绝对路径就OK了.
错怪了mod_wsgi, 现在看来mod_wsgi在hosting python项目的时候还是相当值得信赖的,
已经可以完全取代古老的fastcgi和mod_python技术, 成为apache的新一代贴身伴侣.

对于性能需求高的大型站点, 或许scgi仍然是不二选择, 服务器方面也轻装上阵, 忘掉apache选择lighttpd吧.



补充一点, 除了 sqlite 数据库以外, settings.py 中用到的路径在 mod_wsgi 下最好都不要使用相对路径, 比如 TEMPLATE_DIRS
comments: 1  
by kernel1983

Bye Bye 浪点

有朋友在Facebook跟我说, 站点不能访问. 很纳闷, 因为自己站点的代码最近可没有什么改动.

上去一看出错信息, 服务器上的django代码不全, sqlite3 backend 中的base.py文件找不到. 第一时间通过QQ向浪点的客服人员反应, --! 没理我.
大约半个小时后, 得到的回答是, 请加技术人员QQ. 我靠, 你还以为自己是政府机构呀!
加技术人员的QQ, 技术人员不在线.
当天晚上没有收到任何回复.

第二天中午想继续沟通. 令人惊奇的是, 当我再一次查看apache日志, 发现mod_python已经找不到python语言解释器了.
于是开始打电话, 经历过几次忙音以后, 电话终于接通.
工作人员跟我解释从昨晚他们就一直在加班, 服务器出现了比较严重的故障(当然是软件方面的).

于是我提出要和技术人员沟通, 他说请加技术人员QQ, 我要技术人员分机号码, 对方拒绝.
我说能不能给出一个修复的具体时间, 他们说没有时间表 ... 这下我可急了, 我说为什么不能让我联系技术人员, 我只是想帮助他们尽快解决问题, 这时, 客服人员沉默了, 我请他说话, 他把电话挂了.

不再相信浪点了

网站搬家到 ZoomType
comments: 34  
by kernel1983

Google Account Authentication API

半年前研究过 Google Account Authentication API, 现在回头再来看, 发现又有更新.
Google Account 现在已经阵容强大, 由单一的 AuthSub 发展到 OAuth Federated Hybird 一共四种

AuthSub: 提供单独的 google service access, 比如gmail contact. 如果你要一次使用多个 google service, 比如同时需要读取 picasaweb 和 youtube 的数据, 那么用 authsub 就不那么合适了, 应为你需要让用户傻傻的登录google两次.
OAuth: 和 authsub 相比, 提供了 sign-on, 一次登录可以取得的 authtoken 可以 access 好几个 google services.
Federated: 本质上是 openid, 他是唯一可以让你在使用google account登录自己网站的同事, 拿到用户电子邮件的的方法.
Hybird: 集成了oauth 和 openid, 可以让你的网站可以同时拿到 google service 访问权限, 以及用户的电子邮件.

AuthSub 即将过时, 现在的好处是, 使用 authsub 不需要在 google 注册自己的网站.

建议Google 的 OAuth 能够对开发人员更加友好,比如可以在本地调试。
comments: 0  
by kernel1983
1234567...29