Archive for May, 2005

用Buffalo完成了一个j2ee blueprints中ajax autocomplete样例

Wednesday, May 18th, 2005

今天抽了点时间,完成了J2EE Blueprints Ajax样例中的AutoComplete. 以下是执行结果:

结果证明,用buffalo开发ajax应用,与j2ee blueprints自带的样例相比,能够大大提高开发速度,减少编码量;-)

下载: buffaloajax.zip 使用buffalo 1.0alpha.

请直接将zip解压缩到tomcat/webapps路径中,然后在浏览器中访问:

http://localhost:8080/buffalo-ajax/ajax-autocomplete.jsp

http://localhost:8080/buffalo-ajax/ajax-autocomplete-withbind.jsp

J2EE Blurprints Ajax: https://bpcatalog.dev.java.net/nonav/ajax/autocomplete/frames.html

对buffalo进行了一些改进

Tuesday, May 17th, 2005

加入了ServiceRepository类,用来保持BuffaloService实例。ServiceRepository中包含了一系列用来注册Service的方法,包括从字符串,Class, 实例中获取Service实例。但随之而来的出现一个问题,该如何控制这些BuffaloService的生命周期?

在1.0alpha版中,buffalo只是简单的通过反射生成实例,每一个请求生成一个,这种规则简单而容易掌握;然而,一旦通过ServiceRepository来控制,那么服务实例的创建该如何创建?是单例,实例池,还是每次都新创建?这是个问题。想着想着,ServiceRepository最后可能变成简单的组件管理容器了,那么在创建的时候,可能就会有一个形如hivemind或者Spring配置文件的东东,描述这个service应该如何产生(singleton,pooled,instance…). 这种复杂性无论是我,还是使用者,都不想看到的。因此,我决定只在ServiceRepository中保留要运行实例的类名,单独使用buffalo的应用将只通过反射来产生新实例;而将这些应用生命周期的管理,交给Spring集成Buffalo来控制。

加入了ServiceRepository类后定义buffalo service更为灵活,不用受限制在buffalo-service.properties中了。

客户端也进行了增强,现在客户端能够将应用对象作为参数发送到服务器端了。参考代码如下:

var u = {};
u[Buffalo.BOCLASS] = “net.buffalo.demo.simple.User”;
u.id = 234;
u.name = “Julie”;
u.age = 17;
u.sex = true;
u.memo = “very beautiful”;

buffalo.remoteCall(“tutorialService.hash”,[u], function(reply) {
alert(reply.getResult());
});

当然,目前只能发送简单对象,主要是为了满足特定应用的要求,对于复杂对象(包括对象间相互引用)是否需要加入还在进一步考虑中。

以上特性将在1.1版中支持。另外,1.2版中还打算支持JDK5.0的注解(Annotation)。

WSAD的又一个问题:cmd.exe /C java.exe -version

Monday, May 16th, 2005

今天调试java程序中创建新进程的程序,代码大致如下:

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(new String[]{“cmd.exe”,”/C”, “java”, “-version”});

我将WSAD默认jre设置为jdk1.4.2, 替换了它默认的IBM jdk1.3.1. 任何人一看就知道,这个进程的运行输出应该是类似于java version “1.4.2_06″之类的字符串,然而在WSAD中,运行结果却是java version “1.3.1″ … J2RE 1.3.1 IBM Windows 32 build cn131-20031021. 将这段代码放到eclipse3.0中运行,显示1.4.2没问题;放到命令行下运行,也显示1.4.2. 看来是WSAD搞的鬼,于是索性修改了一下代码:

Process proc = rt.exec(new String[]{“cmd.exe”,”/C”, “echo”, “%PATH%”});

在命令行下运行cmd.exe /C echo %PATH%, 结果是
C:\WINNT\system32;C:\WINNT;C:\WINNT\system32\WBEM;c:\ruby\bin;C:\Perl\bin\;…

而在WSAD中运行,结果赫然是:

C:\Program Files\IBM\WebSphere Studio\Application Developer\v5.1.2\eclipse\jre\bin;C:\WINNT\system32;…

毫无疑问,是WSAD在启动时修改了PATH变量,使得在搜索java.exe时直接找到了IBM JDK1.3.1.

感受广州夜生活

Monday, May 16th, 2005

昨天晚上十点,我们去了洛溪食街宵夜。早就听说那里场面宏大,到了果然不同一般,宽阔的马路两边,好几十家大排档铺子正在营业,人很多,吃吃喝喝好不热闹。我本不是一个喜欢凑热闹的人,但看到这种场面,加上长期项目的压抑,心里也不由得一下子轻松起来。

在路上奇怪的看到有人在现场演奏萨克斯,刚开始觉得很是惊奇,还以为是音乐发烧者在这里自娱自乐;后来才发现原来是食客花钱他们表演的。走到中心处才发现,许多背着吉他的女孩在食客群中穿来穿去,询问他们要不要点歌。同事告诉我:不要听她们唱歌,非常难听。路过的时候我仔细听了一下,真的唱得很差劲,基本上只是在念词;手中的吉他几乎只保持一种和弦样式,只不过用右手击打节奏而已。因为吉他声音偏小,在嘈杂的环境里这种配乐与唱歌的差异还不太容易听出来;但是我听来简直要替吉他难过:居然被用来这样子用。

有的同事去年来过,于是轻车熟路的找了一处地方坐下,开始点吃的。“炭烧生蚝”,他们点的第一个东东。我向来不吃看起来比较奇怪或者我没有听说过的东西,也不怎么吃海鲜。看到这个名字,我说你们先吃,我看看再说;然后非常保守的要了鱼片粥和烤玉米。点菜的过程中无一例外的受到了那些卖唱女孩的骚扰,不断的有人来问“先生要不要点歌”,听取了他们的劝告,加上自己的所见,于是一次次的谢绝了她们。

几杯酒过后,天气变得出奇的好,有风顺着马路习习吹来,我们坐在风口上,风干干净净,吹得人格外的舒服,比起房间的空调感觉自然舒适,更不比北京的风了。在这样的环境中,突然间什么也不想,什么都不重要,什么拘束也没有,什么压力在瞬间消失得无影无踪。

鱼片粥入口觉得有点腥,习惯之后才觉得味道鲜美,非常好吃。先前以为烤玉米是老玉米,没想到吃到口的玉米居然相当鲜嫩,跟麦当劳的烤玉米有一拼,烤来的滋味更觉得有趣;据说还有烤茄子……我真是怀疑,这里还有什么不能烤的。炭烧生蚝的滋味……对我来说,跟一个撒上孜然粉的豆腐并无不同,但他们都吃得津津有味,我也就相信了自己吃的是天大的美味了。对我而言,吃的东西味道过得去就行了,主要是环境。

有一些相当专业的唱歌的来了,一个留长发、穿黑衣服看起来年纪不大的小伙子很抢眼,刚唱完一首,马上赢得了观众的掌声。他吉他弹得不错,唱歌很专著,很投入,我们听着都觉得很顺耳。于是我们一直听到他唱不下去了才离开。

回到房子里已经将近凌晨一点,我却一点倦意也没有,大脑还很兴奋。打开电视机,看到了超级女声蒙牛酸酸乳的广告,前面依然还是那首国语版的歌,最后那句广告词“酸酸甜甜就是我”居然变成了粤语,感觉怪极了。

使用DocBook来编写日常/项目文档

Wednesday, May 11th, 2005

我一直很痛恨写文档——注意,是文档,不是代码注释。倒不是因为我懒惰,而是因为有很大一个问题是,我不得不跟各种工具打交道。你知道的,我一向痛恨IDE侵入太强的工具,比如Word, 比如任何一款HTML编辑器。他们实际上都不是用来写文档的,某种意义上说,是用来排版的。在我写大段文档的时候,一边想,一边写,一边还要考虑排版,考虑在某处应该加粗,某处倾斜,某处应该加一个Notion, 某处又包含了一个样例。除非在心血来潮的情况下,否则我是绝不愿意排版的。Word排版头痛而又麻烦,候老先生花了10年才玩转,而我毕竟不是写文稿为生。

Word处理这一类的事情相当蹩脚——以我一个普通的文档作者,做完的文档我自己都不愿意看,并非是文字,而是自己排版出来的实在太糟糕。当涉及到计算机写作必要的example的时候,比如说,一段代码,代码中某处加入类似于1),2),3)的标记,然后下面写上此处标记的含义,用Word来做这个简直掉进深渊。

更为难受的是,我不知道怎么使用Word来多人共同写作,比如你写第一章,我写第二章。用Word只能你写你的,我写我的,然后Copy&Paste, 合并到一起……

版本管理系统对Word格式文件完全无法发挥作用,什么diff, compare, changeLog都不管用。

打开Word文件费时费力。

如上种种,是我这些年来文档编写对Word积累的一些恶气,直到发现DocBook(http://www.docbook.org), 这些恶气才得以发泄。简单地说,DocBook定义了一组方便文档写作(主要是计算机文档)的xml标签,比如book, chapter, section, example, programmelisting等等,然后定义了很多XSL来对这些文档进行转换,输出为不同格式的文件。目前,我使用的DocBook-XSL,能够输出为html, htmlhelp, xml-fo等格式,完全不需要了解任何排版知识,只需要编写纯粹的xml文档,就可以输出为格式优美专业的文档。就我所见,Spring, Hibernate, Tapestry等耳熟能详的开源项目都用它来组织文档。

我没有时间完整的了解所有的标签,实际上也用不着。站点http://pyrecord.freezope.org/docbook/docbook/index.html 我常去,多谢作者的工作。

现在我正专心的在EditPlus中写项目需要的文档,没有大堆的格式按钮,不用操心文件的格式,不用操心排版,我终于找到了写文档的感觉。