下午还在看到他们说什么 cat5 ,参考更新后的 MojoMojo 代码后竟然发现其中的 action 写法发生了重大变化。原来用一个 action 名称指向一个匿名 code ,现在则直接使用 sub method : attribute {} 的形式,原先的名称(path,正则表达式等)都放在函数的属性信息中加以解读。
原来的 Maypole 就是这种方式,不过它仅仅用以加 Private/Public 以表征是否可以被 web 请求的 uri 映射。Catalyst 5 的做法则更进一步。代码看起来也更舒服些,并且可以传递额外的参数了。
此外细加察看源代码,发生变化的地方非常之多,req/res 都增加了若干方法。等等不一而足,并且将新增加 namespace 以及 controller 的继承。
不过版本 5 尚未正式发布,可能要到本周末。
Published on March 31, 2005 1:43 am.
Filed under: 东拉西扯 Tags: catalyst, maypole, svn
Yet another wiki. Based on Catalyst.
想要着手用 Catalyst 构建 PerlChina 站点的。当然先要看 Catalyst 的文档。然后是邮件列表。于是发现其中提到的 MojoMojo 。下载 svn 的客户端,check out mojomojo 到本地,开始配置安装。过程也算是繁琐的。在 #Catalyst 里面请教作者,协助排错,最后终于搞定,能跑起来。其中自己修改了若干部门的代码:改用 ApacheSession 而非 Cache::FastMmap(因为 win32 不支持);修改配置环境等等;修改 Time::Piece 相关的 bug 。
这是一个基于 Catalyst 的范例应用,和我要做的 PerlChina 也有所类似(修订版本,不同格式)。所以它是学习和借鉴的好东西。
从聊天中了解到,Simon Cozens 又在搞些东西,也是 Wiki 吧,叫做 Mitiki。http://blog.simon-cozens.org/20050329-2.html
另外,之前看到的 Ajax 也在这个 MojoMojo 中应用。而且,Rails 也在使用这项技术:http://conio.net/ 和 http://dev.rubyonrails.com/file/trunk/actionpack/lib/action_view/helpers/javascripts/prototype.js
彻夜未睡。
Published on March 30, 2005 5:47 am.
Filed under: 东拉西扯 Tags: catalyst, mojomojo, perl, wiki
同步 CPAN 的时候,再次发现了名为 Catalyst::Plugin::Ajax 的模块,究竟 Ajax 是一个怎样的模块呢?
察看 pod 文档,略有了解,在 html 模版中引用模块中 __DATA__ 数据区的一段 javascript ,然后在模版中可以通过 javascript 请求其他 URL 并将返回的内容应用到当前的页面中。简单的说,你不再需要刷新整个页面了。
以前做客户的订单系统的时候,客户说,能不能在我输入前几个字母后,把对应的那些列表显示出来,然后直接选择就可以了?我说不行,因为数据量很大,每一次 key 变化都要请求服务器查询,不太现实。当然我知道这是可以做到的,只不过意义不是很大,而且要结合 iframe 和 javascript 一起实现。
以前在 Gmail 中也看到过,输入用户邮件地址的时候,如果以前曾经输过,则自动跳出来,省却再次输入的麻烦。当时没有细究,我猜想应该也是使用类似的 iframe 技术。
Catalyst 确实很有趣,它的例子中的 Ajax 应用,就是让你在编辑文本区域(特别像 blog 那样的系统)时,一旦发生 keyup 事件,即可提交修改内容,并把响应返回的文本重新复制到编辑区域,这样,就不会因为客户端的程序意外终止而丢失正在编辑的内容。而在我的系统上,一旦在中文状态输入下划线(就会变为破折号),就会程序错误,意外终止。我吃过很多这样的亏了。
为什么叫做 Ajax ?还是来请教 Google 吧。
Ajax 即是「Asynchronous JavaScript + XML」,说的在具体点,就是应用 JavaScript 中的 XMLHttpRequest 对象。结合 DOM 来控制页面上的元素的内容和行为。
看来在以后自己的应用中,该要着手用这个技术了。比如说:邮件地址 auto complete;信件内容自动定期保存;表单数据校验;等等。
更为具体的介绍,可以看看这里:
http://www.adaptivepath.com/publications/essays/archives/000385.php
Published on March 29, 2005 1:05 pm.
Filed under: 东拉西扯 Tags: ajax, catalyst
在整理硬盘上的文件的时候,发现一个名为 Seaside-12-1-2005.zip,不知何物,不过肯定是之前在 IRC 中听说的东西,有心就记下了去下载了。打开 zip 文件,却只有一个 .image 和 .change 文件,看了文件头,都不是压缩包。
于是用 google 搜了一下,找到官方站点:http://seaside.st/ 才知道这是个 Web 应用框架,不过却是用 Smalltalk 来写的。早就对这种语言有所敬仰,不过实在没有机会和需要去接触它,心里面总有高高在上,不可近观的感觉。从站点中的内容了解到,Seaside 的运行需要一个叫做 Squeak 的东西,好像是一个开发环境或者开发工具,再辗转到它的官方站点:http://www.squeak.org/ 下载了一个 windows 版本的 zip 包,打开径直运行其中的 Squeak.exe ,出来一个窗口,窗口里面却是另一番天地,有很多可伸缩的导航条,工具栏,左键,右键都可以呼出复杂的菜单。样式有些 Linux 下面图形界面的感觉,色彩充满了童趣。随便走马观花,也没看出什么究竟来,倒是点出了一个像是幻灯片一样的东西,不但可以浏览,还可以修改编辑。不知所以然。
回过头来继续看,大致上 Squeak 是一个 Smalltalk 写的虚拟机,也就是 Virtual Machine 。介绍说它是个容易调试,分析和改变的系统,并且充分体现了 Smalltalk 语言的哲学理念。而 Seaside 只是一个 Smalltalk 的类库,一个用于构建 MVC 结构的 web 框架类库,要让它跑起来,就需要虚拟机 Squeak 了,以便集成其他的类库一起工作。
按照 http://beta4.com/seaside2/tutorial.html 教程中阐述的步骤,在 Squeak 中安装了若干类库,以及 Seaside(好像没用到之前下载的 image 文件哦),然后在 Workspace 窗口中年铁一段代码,并 do it,然后通过 http://localhost:9090/seaside/counter 访问,果然,http 服务起来了,并且看到了简单的计数器的功能实现。
事情并不就此为止,在看到的页面下方还有一条工具栏,点击上面的东西衍生出来极为丰富的功能:你可以配置这个组件(姑且先这样称呼),或者 Halos (你会看到一些页面元素被边框包容起来,可以对包容起来的东西做一系列的操作:察看源代码,渲染;在 web 页上对该组件半自动编程,设置等等),或者查阅内存消耗情况,代码的内部执行过程(Profile)等等。之前所讲到的“容易调试,分析和改变的系统”,可能就是指这些吧。
由于时间问题,我没有在深入下去,不过觉得非常有意思。在回过头来到 Squeak 里面,这次知道了它是虚拟机的概念,并可以在其中启动 KomHttpServer 来提供对 Seaside 所需的 web 服务之后,看待它的感觉又有所不一样了。Squeak 更像一台独立的操作系统,你可以在它上面做任何事情。这回仔细看了看下方菜单栏中的 Widgets ,选了 Movie Player ,然后选择一段 windows 文件系统中的视频文件,hoho,顺畅的就播放起来了,看来 Squeak 确实非常有意思,空闲下来该要好好把玩把玩。
先记下这么多了,还算蛮有收获。就像 Seaside 能够 backtrack 一样,我也要继续整理硬盘了。
Published on March 25, 2005 1:51 am.
Filed under: 东拉西扯 Tags: smalltalk
今天 XP 方式写出来的代理平台,老板没有仔细看就不满意,诸多意见和牢骚,我心里自然有些不快。不过他提出的问题确实应该改掉,只是费了极大的一番心力写出来的东西,让人毫不珍惜,横加指点,多少有些受挫。不过也没什么,本来么,就该更好的,老板就是我的客户,客户第一,市场第一。不过幸而是 XP 开发出来的,否则,呵呵。
没关系,改么,总是要不断改进的。对自己而言,今天的时间利用率还是非常高的。只是手中的任务繁多而杂,有些疲惫和凌乱。
这两天下载了一些美国的剧集,感觉不错,先刻下来,回头累了就看一集作消遣。只怕会上瘾,那就不好了,呵呵。
Published on March 24, 2005 7:32 pm.
Filed under: 东拉西扯
是啊,每天都会有惊喜。
昨天使用 Catalyst ,突然发现它变了许多,越来越像 Rails 了。安装好,用一行命令即可构建一个应用的所有基础目录结构和文件,然后运行 test ,马上就可以访问和使用了。自己要做的就是把业务逻辑写出来放进去就行。心中喜悦不已。顺便上了 irc.perl.org 的 #catalyst,又发现了一样东西:pastebot ,这是用 Perl 写的,基于 POE 的一个 IRC bot 程序,目的是让聊天的人们可以方便地共享一些代码片断,不用在聊天室里面刷屏,这对于像我们交流程序实作的人来说,应该很有助益。
最近 PerlChina 社区也越来越多的涌现出有关 Perl6、Pugs、Haskell 等的资料,虽然质量上面有待进一步提高,不过带来的却是激动人心,我们看到了最前沿的一些东西。只是遗憾目前自己的精力有限,不能爽快地投入其中一起学习,进步。
另外,有计划使用 Catalyst 构建 PerlChina 的站点。
Published on March 23, 2005 11:46 pm.
Filed under: 东拉西扯
使用自己的 Amor 框架构建 web 应用程序,尝到了快速开发,高度复用的快感。对于复杂的应用系统,都可以在短短的几个小时内,搭建出相关的程序和页面流程。非常之好。
于是,终于有机会在同一个 web 服务器内同时开发或者使用三个应用。当然,开发环境下,使用 mod_cgi 方式,毫无问题。如果都在 mod_perl 下面跑,呵呵,问题具现了 — 第一个应用可以跑,没有问题,这个时候再访问第二套系统,看到的是第一个系统的界面。原因很简单,他们都是用了同一个框架 Amor,一些应用范畴之内的变量和设定都使用了 Amor::Context 的类变量。mod_perl 下面各次请求共享同一个 Amor 类,发生这样的问题也就不奇怪了。
哎,当初写 Amor 的时候竟然忽略了这一点,实在有些说不过去。为了支持 mod_perl 从 jit_core 改写为 Amor ,而如今,为了支持 mod_perl 下面多个应用同时运行,又必须对 Amor 动手术。
动手术的过程从前天下午开始,历史三个小时,以失败告终。手术方法比较简陋,尝试将所有应用相关的变量或者设定统统放到应用程序的主要包内。发现当时的写法终究还是有些凌乱,用丑陋的写法改造时候,restart apache ,妈的,Apache 竟然程序意外出错终止。怎么弄怎么失败。我不知道究竟问题出在什么地方。只好把这些修改打包后,回溯到开始修改前的代码。
一夜无眠,第二天一早,便又准备开始第二次手术。参考了 Cataylst 的写法,觉得他的思路非常清晰和简洁,于是先按照他想法来改造我的 Amor。其实很没有面子的,大多数的东西基本上从 Catalyst 直接搬过来。不过有两项地方不同:
1。增加了应用开始需要装载的额外的模块:Amor::View::* ,读取 cdbi 相关的 relationship 的设定,并装载相应的模块。
2。改变 Action 的构造和运行方式。虽然可能他的做法更为简洁和优秀,不过为了我已有的代码不用作大的改动,就可以在新的 Amor 上面继续运行,还是做了这方面的修改。
历史一整天,直至晚上九点,终于全面宣告完成。其间出现了与之前一样的 Apache 意外终止的情况。问题出在 Class::DBI::Loader 初始化的时候,而在 Apache 配置文件中使用了类似 PerlModule xa 这样的一行,就会出错。注释掉之后就没有问题了。
后来调整 Action 相关的代码到没有花费太大的力气,却是在后来对 Session 的改造有些麻烦。笔记本的速度实在糟糕,怎么调试怎么出错。最终发现 mod_perl 和 mod_cgi 方式下读取 cookie 的 SESSION_ID 方式不太一样。
以后可能还是要完全调整到 Catalyst 框架下开发比较好,为了迎合自己的需要,可能需要写点儿 Plugin 之类的东西。好了,继续应用程序的开发。怎么说这次改造也算是一个小小的里程碑吧。
Published on March 12, 2005 11:34 am.
Filed under: 东拉西扯 Tags: module, perl