适于敏捷开发的Web框架

以前常关注Java开源Web框架的应用研究,还专门写过一篇论文讲基于Hibernate的实体关系映射。最近一直在做Java富客户端应用,有些生疏Web框架的发展。偶尔了解一下Web框架的发展动向,发现又是一番新的景象。

这几年MVC设计思想的繁荣应归功于Java框架的带动,Struts的普及使得MVC设计达到鼎盛,一时间MVC似乎成了判断是非好坏的标准。不少Java实现的站点采用Freemarker框架生成静态html以加快页面响应速度。如果结合其他框架,可以有类似Freemarker+Webwork+Spring+Hibernate这样的选择。但是由于开发效率一直比较低同时后期维护具有局限性,面向J2EE的Web开发开始走向一个低谷,激进分子甚至宣称“J2EE的时代已经终结”。虽然此观点有失偏颇,但还是欣喜的看到,基于Ruby、Python等动态解释型语言在Web上的迅速发展的确令人振奋。

这里主要说一下Ruby on Rails,ROR是由来自37Signals的一批非常Cool的年轻人开发,在37Signals官方站上有ROR实现的独具特色的站点。有些人预言37Signals将成为下一个Google,也许吧,毕竟网络时代已经可以把创造神话的时间缩短到让我们来不及反应。

与Python实现的Web框架Django相似,ROR也是应用在web应用开发上的Framework。ROR由Ruby语言编写,其目的是让web开发变的快速而简单,ROR极大程度上简化了传统的Web开发难度,让开发者专注于富有创造力的工作,非常适于敏捷开发的要求。ROR的便捷之处在于,只要有了系统的完整E-R 图设计,就可以在 ROR中自动生成所有的 Models,Views 和 Controllers,可以在此基础上不断细化完善成为自己的应用。而且 Rails 还提供内置方法以及AJAX模块来加速开发。毕竟Ajax目前被炒的火热,在必要时可以加入,可以使用户有一些很Cool的体验感觉。希望Python的世界也会出现一个类似ROR这样可以一统目前纷乱局面的Web框架,但就目前的现状看,还没发现有哪个Python项目有能达到ROR这样优秀的潜力,看来还需要等上不短的时间。

抽空打算用ROR实现一个原型站点试试,不过发现似乎快成闲人了,因为只有闲人才会这也学那也学,是好奇心较重还是比较闲也说不准,反正平日的时间大多都塞满,还有许多事情要赶着做出来,慢慢来吧,不过ROR带来的诱惑还是很大的。

开源CMS的选择

抽空试用了不少开源的CMS内容管理系统,PHP+MySQL的世界令人眼花缭乱,先把值得一提的开源CMS仅就直观感受做个总结,其实严格上讲内容管理系统CMS并不属于Web框架的范畴,但是CMS的质量与繁荣程度代表着一种语言在Web开发上的适应性,下面选的几个CMS基本代表了PHP架构下基于CMS建站的主流方向。

先说PHPNuke,这可是老牌的CMS系统,功能比较完备,给后来者提供了不少借鉴之处。但是毕竟岁月不饶人,在设计理念和性能表现方面,PHPNuke逐渐开始落后于其他后起之秀。

再说快速建站的不错选择Mambo,曼波模板的美观程度和功能模块的数量都值得肯定,也拥有不少的坚定支持者,但由于不具备页面静态化机制和拓展上的复杂性,构建商业站点会带来比较大的性能问题。

然后是自己目前最喜欢的Xoops,这是一个非常简洁优雅的CMS建站系统,中文支持也很好,并且开发社区非常活跃,保证了大量的插件支持。在实现页面静态化方面,可以手动嵌入Smarty模板,来适应访问量较大的站点开发。尽管值得推荐,但稍许还有不足之处,Xoops目前的风格样式不算丰富,同时定制自己的风格模板需要做不少复杂的工作。

重量级的Typo3当然最后出场,在功能上说,这应该是CMS的终结者了。Typo3的后台管理相当复杂,具体配置方法自己折腾了半天也没有完全弄清楚,但是可以肯定,许多企业级站点所需的功能可以直接在配置管理中实现。目前国内Typo3的用户非常少,但国外为数不少的大型站点都是架构在Typo3之上的。相信随着Typo3的普及,会有一批站点以此为基础构建。

一个优秀的站点,最核心的是绝佳的创意和吸引用户的人性化服务。仅就建站应用上来说,或许功能模块的二次开发会费些功夫,但基于优秀的CMS实现并没有太大的技术难度。至于自己的选择,以后会考虑基于Python或Ruby的Web框架实现一个小巧的站点,因为还是比较喜欢简单带来的快乐。

Python初体验

对于脚本解释语言Python的兴趣,动力源自于对喜欢的书评站点豆瓣(douban.com)的技术探究。站长阿北在一篇帖子中提到“豆瓣全部使用Python开发,网站后台的搜索引擎基于Twisted,GUI基于Quixote”,而且更令我惊讶的是,承载豆瓣每天8万独立IP和50万页面请求的竟只是一台DIY的AMD双核1U服务器。而且我每次访问,感觉服务器相应速度相当快。于是不得不对Python在Web开发中的表现大为赞叹。

当然Python的应用不仅限于此,在Python官方站点上列出的应用可谓包罗万象,而且NASA和Google也是Python的用户之一。其实早就关注Python的发展了,只是由于惰性一直没有入手学习。最近花了一个下午的时间把Pyhton语法通了一遍,用Eclipse的Pydev插件调试了例子代码,感觉使用Python确实可以享受到敏捷的开发效率。Python开发的模块和内置的元组、字典等数据结构使用起来很便捷。并且如果需要,关键算法可以使用纯C来实现。

比较来说,在Web应用方面,Java的开发效率确实不敢恭维,这一点是早有体会。在桌面开发上,国内Java框架研究先驱站JavaEye的站长Robbin,一年前就断言Java桌面开发已死,而Python的桌面应用则前途不可限量。这个观点不敢苟同,毕竟自己还是很喜欢以Eclipse为代表的SWT/JFace的桌面表现方式。但不得不赞一下类似Boa这样的Python IDE环境的优美简洁。

值得关注的Python开源Web项目是Zope和Django,但是对Zope的表现还不太信任,原因之一就是集成度太高,整个Zope结构大致相当于PHP+Apache+MySQL的集合,耦合度太高也会为拓展性及二次开发带来不便。Django准备仔细研究一下,争取做一个演示站点出来。类似chicagocrime.org这样的Python+Django+Google Map这样紧密结合实际的应用今后会大有用武之地。

可以参考的Python GIS桌面项目,感觉比较好的是陈老师推荐的mezoGIS,一个月前德国人刚启动的项目就已经开始研究了,不得不佩服一下。

需要开始用Python吗?今后应该会有涉及的,但逐渐发现越学越杂,反而都不能深入。那就这样吧,慢慢会好的。

使用Eclipse开发网格服务及其相关

一直比较喜欢IBM Developer Works上的教程,大部分做的很细致而且基本都有源代码示例。不过最近调试IBM发布的使用Eclipse开发网格服务教程,示例代码中应该是有两个类没有实现,未能调试成功。还反馈给了IBM DW中文版的编辑,不过文章的原创是老美,也不知道人家会不会改正一下。(更正:文档重新细致的看了一遍,添加了漏掉的步骤,IBM的例子已经于06年3月31日调试通过,为我的不扎实做一下检讨)

推荐两个值得关注的网格、Java相关的开源项目:
1. GT4IDE:这个项目可以将Globus4集成到Eclipse中简化网格服务的开发,来自西班牙的开发者Borja正在攻读芝加哥大学的CS博士学位,看了一下他的简介,发现是个积极活跃的分子。

2.WebRCP:这个项目可以将Eclipse发布的RCP产品转化到Java Web Start的基于Web的应用上来。很不错,这样可以免去开发者编写JNLP配置文件的工作,同时可以规范化程序的结构。

时间似乎有些紧张,但感觉学习一直没有太大的进展,而且不经意就会遭到一连串小的打击,看来的好好计划一下了 :)

基于Web Start的应用发布设想

一直看好Java Web Start的应用前景,通过这种方式可以使部署在服务器上的富客户端应用通过一个HTTP链接加载到客户机上,取消了传统C/S结构的种种限制,给使用者带来很大的便利。可以看看Sun公司的Java Web Start官方站点。Sun公司提供JWS的demo演示可以在这里找到。左图为JWS的标准访问流程。

最近讨论了一下类似ww2d这种数字地球的产品化前景,要做的改进主要是数据应该像Google Earth那样进行加密传输,而不能像NASA World Wind都下载到缓存里让所有人都得到,因为国内用户对自己的数据保护还是相当看重的,毕竟高分辨率的数据买来也需要不少花费。ww2d程序在我的Win2K下用Eclipse重新编译了一下,简单修改了几个地方,比如增大初始窗口、状态栏增加了几个坐标的显示等,然后上传到基于FreeBSD的麒麟OS服务器上运行一切正常,不得不再赞一下Java的跨平台特性。

准备考虑使用Java网络装载协议(JNLP)发布一下ww2d这样的Virtual Earth应用,远程客户可以通过Internet访问和运行部署在服务器上的ww2d应用程序。同时值得尝试一下将Eclipse的RCP富客户端应用使用JNLP打包和配置,发布为Web Start应用,这样结合Eclipse的RCP技术和Java Web Start,应该会有不错的收效。

如果网络传输不是问题,随着JWS技术的不断成熟,可以预见,日后相当一部分的Java Desktop应用可以通过这种方式发布。