Archive for March, 2007
servlet 2.5的web.xml
Posted on March 17, 2007 - Filed Under Uncategorized
sun从来不把servlet各个版本的web.xml的规格公布一下,即使上网查找,也很难发现。倒是跟随支援的servlet容器会发布一些范例程序,好运的话,里面将会有最新版本的web.xml写法,比如说,tomcat6正式版里面有了servlet 2.5的写法,如下:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
version="2.5">
别以为看到这里就结束了,很可惜地告诉你,这段代码是错误的。不信你尝试打开一下这个链接http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd,你会发现是no page found。
那为什么tomcat6的范例程序能够工作呢,那是因为在tomcat6的lib里面,已经存在这个文件,所以也不需要从网络上面抓取。其实你按照这个web.xml写了servlet 2.5的程序,在tomcat6里面也是可以运行的。
可是当我使用eclipse+xmlbuddy的时候,问题就出来了,因为web-app_2_5.xsd一直不能下载,xmlbuddy一直报错,并且没有语法提示功能。通过搜索,我发现了web-app_2_5.xsd的真实地址其实是http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd,而它的namespace是http://java.sun.com/xml/ns/javaee,于是代码应该改成:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
留意一下不同的部分,其实是因为sun把j2ee改名为javaee。
ps,另外附上servlet 2.4的写法
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
[...]
iBATIS for Java 2.3.0 General Availability
Posted on March 15, 2007 - Filed Under Uncategorized
iBATIS是一个经常与hibernate一起被提及的o/r工具,跟完全o/r化的hibernate不同,iBATIS算是一个半o/r工具,他仅仅提供了基本的映射功能,如果你要做一个很oo的db操作,可能hibernate比较适合你,如果你坚持使用JDBC,或许使用iBATIS会对你有不少帮助。尤其你想专注SQL语句的性能的话,hibernate并不适合。
最新版的iBATIS 2.3.0在2月11日发布了,没有太多大的更新,但是有两个很重要的功能废弃。其中一个是iBATIS的DAO部分被废弃,官方推荐使用spring。我倒不是不喜欢使用spring的事务功能,它的确做了很多事情,但是始终有些场景不是很适合使用。首先,spring的事务使用起来比较笨重,声明性的使用方法还好,但是要通过AOP,AOP相对麻烦一点,而且性能不高。编程性的使用方法用起来非常麻烦,使用模板的方法比较难看,不使用模板也难看。而且spring的事务速度会比较慢。其实iBATIS的事务做得挺简单的,其实就是JDBC的事务了,不过iBATIS有一点比较好的就是它使用而且
SendTransaction的风格
try {
beginTransaction();
xxxx
commitTransaction();
} finally {
endTransaction();
}
比起传统的
try {
beginTransaction();
[...]
生活态度
Posted on March 14, 2007 - Filed Under Uncategorized
1\. 做你喜欢的事情
2\. 做30年
0\. 找到你喜欢做的事情
新夏令时间
Posted on March 11, 2007 - Filed Under Uncategorized
今天无端端收到palm的更新通知
NEW Daylight Saving Time changes - Palm(R) device update required!
夏令时间的调整令到好多软件需要跟着调整。难怪前一段时间mac也有这个更新了。
> 中新网3月9日电 据美国《世界日报》报道,为了节约能源,美国今年提早于3月11日凌晨2时把时钟拨快一小时,开始实施日光节约时间(daylight sav-ing time,简称DST,亦即夏令时间)。
>
> 由于此举打破实施已有20余年的常规,许多分析师担心,数以百万计软件尚未更新的商用和家庭电脑,将因时间无法及时调整而“神经错乱”,发生“迷你千年虫”(mini- Y2K) 乱象,影响电子日程表、收费系统、保安系统、信用卡和其他金融交易的时间、班机起降时间,甚至使医疗器材作业不当。
>
> 为了应付这个问题,电脑经销商已研发并送出修补程式软件,应可涵盖大多数的商用和家用个人电脑(PC)。非常倚重月历功能和时间表软体的电脑使用者,应上相关网站寻求解决问题的资讯。
>
> 为了减少因调整时间造成的混乱,资讯业者提醒各界留意并预防以下事项:日程表功能反复出现错误的时间;不能正确显示班机起降时间,导致班机误点;银行交易出现错误,出现延迟付款情事;贸易系统不能以正确时间执行采购和销售指令;入学申请等与时间有密切关系的申请可能延误;拍卖提早结束,迟来的买家错失机会;保安系统不能按正确时间启动等。
>
> 电脑专家指出,最大的问题可能发生于已经设定好正确时间的伺服器(server),设法与使用旧日光节约时间的伺服器同步,结果造成伺服器当机,影响手机、信用卡和金融交易的时间纪录。
>
> 根据美国新的节约能源法,自今年3月起,日光节约时间将从3月的第二个星期日开始(取代以前的4月第一个星期日,大约提前了三周),结束的时间则改在11月的第一个星期日(取代以前的10月的最后一个星期日,大约延后一周)。
为什么要有夏令时间呢
> 许多国家的实践证明“夏时制”具有重大的政治、经济和军事作用,特别是在节约能耗方面,作用巨大。据了解,使用“夏时制”在英国每年节约15%的电力和煤气,德国当年第一次使用“夏时制”就节约了2亿马克,法国仅照明一项即节约4%的能源,可供一座百万人口的城市使用1年。前苏联于1981年重新恢复使用“夏时制”后,每年可节约用电25亿度,相当于60多万吨石油的热能。美国的统计表明,实行“夏时制”,每天的平均用电量可减少1%,每天至少节省1万桶汽油。据悉,美国上个月又通过立法,将全国夏令时的开始时间和结束时间更改延长。
不过中国还没有实现夏令时间,正确来说,曾经实行过一段时间,但是又废除了,大概因为技术问题吧(程序不好编写?)。关键问题在于全国统一北京时间,即使是不实行夏令时间,住在很西边的同胞门跟着北京时间来作息也很郁闷吧。
Ruby/Rails RSS
Posted on March 10, 2007 - Filed Under Uncategorized
用google搜索ruby制作rss的办法,搜了很久都找不到,这些年头,rss已经是很hot的字眼了,所以搜到了一堆提供rss的ruby网站,FT,我要找的是ruby怎么制作rss并且在rails中输出啊。后来终于知道怎么编写了,因此想把代码留下来造福大家,但是估计大家是不可能通过google搜索到这篇文章的了,看看有无有缘人能忽忽来到这里。
首先,我要说的是另一个解决方案,因为我想typo这个著名的blog程序里面应该会有rss输出的代码,于是下来看看。一看,typo果然聪明,因为rss本质是一个xml,所以typo就在controller里把需要的内容load出来,然后通过.rxml里面的xmlbuilder来自己一个一个写出来。呃⋯⋯这样太偏门了吧。
接着下来就是我要介绍的方法。如果你还在网上寻找ruby处理rss的lib的话,看到这篇文章你就不用再去找了,因为Ruby本身就内置了rss的解释和输出的支持,并且是同时支持0.9x/1.0/2.0。
废话少来,直接上代码吧:
def feed
articles = Article.find :all, :order => ‘post_date DESC’, :limit => 10
feed = RSS::Maker.make("2.0") do |maker|
maker.channel.title = "Gang of Technology"
maker.channel.description = "Gang of Technology site"
maker.channel.link [...]
《人体使用手册》
Posted on March 5, 2007 - Filed Under Uncategorized
最初接触《人体使用手册》是在张静君的blog里面突然看到,然后刚好那段时间有个一个南方IT晚会,张静君本人在台上吹嘘了一轮这本书,因此对这本书印象还是挺深的,但是还是没有打算买来看,因为我觉得这种书如同厉志书一样,你跟着它套理论看下去,你就会觉得正确无比,而且每本书可以创造一套新理论,看的时候也会激动无比。后来到一个同事家里作客,竟然在墙角发现一本很残旧的书,正是这本书,才是我第一次翻阅这本书,其实还是没有什么特别的感觉。我跟他说,这本书很出名的哦,连IT人张静君都在晚会台上吹嘘,你看了觉得怎样样,他说基本没有看,哈。后来变成是powerplane首先买了这本书,我是不知道他看了多少,这个得由他自己来澄清。然后他就在我们面前说敲胆经这个事情,并且将一段敲胆经的基本要则贴到本blog上。我后来才知道敲胆经是这本书的一个核心运动(好像也是唯一吧,也可以说整本书就是为了说这个),而且也没有想到,因为“敲胆经”这个关键字而进入本blog的还为数不少。
后来不知道为了什么原因,我路过购书中心的时候买了两本这个书,带了一本回家给妈妈看。后来妈妈跟我说那本书说的东西都好有道理,而且那个敲胆经很有效,她已经天天都在做了,而且还在街坊亲戚中传阅。后来我发现当当上有折扣,于是又买了一些带回家,前前后后我自己买的已经超过10本,一些送了朋友,一些卖了朋友,一些带回家去。后来经过妈妈的推销,然后到了外公手里,结果连外公也迷上了,以至于逢年过节周末朋友喝茶,外公都向别人介绍敲胆经。
写这篇blog也并不是枪手或者什么的。其实我对这个并不热忠,我现在也没有完整地看过一遍,也没有做敲胆经,甚至现在我手上一本都没有。倒是我想说一个发生在我家的事情。经过我,而到妈妈,然后外公,然后是亲戚,他们的朋友,了解敲胆经和购买这本书的已经不计其数。如果可以的话,我倒是想收点佣金。
BitRocket
Posted on March 4, 2007 - Filed Under Uncategorized
在Mac下找不到好用的BT客户端,Azureus这个Java编写的客户端可以运行,但是即使是Java出身的我也不推荐这个客户端,连接速度一般般,运行速度和内存占用很不理想,应该也受到Java在Mac运行效率不是很佳的影响,通过虚拟机去运行Bitcomet或者uTorrent有点小题大做了,纯虚拟机的情况还得考虑文件保存和转移的问题,倒是听说用CrossOver(类似wine的东西)来跑uTorrent甚至比Azureus更好用。
由于对于Linux下面使用BT客户端的时候用过的rtorrent颇有好感,于是通过DarwinPorts来安装了rtorrent。可能是受bash对中文支持和别的影响,不能创建中文文件名和目录,而且还不支持方向键操作,这个大概是因为term没有设置好吧,折腾了一会都没有解决。
突然还萌发出自己写一个UI出来的想法,因为rtorrent其实是两个project的,一个rtorrent的UI控制,一个libtorrent的BT协议处理,或许可以用Objective-C来写UI调用libtorrent呢,又或者可以用Ruby来写UI调用呢。又或者别人已经这样想过呢。
于是立刻去搜索一番,终于被我找到了BitRocket,一个结合libtorrent和mac native UI的BT客户端,I love it。
**UPDATE:**
好像不支持中文,FT,又得艰苦奋斗了。
DarwinPorts
Posted on March 2, 2007 - Filed Under Uncategorized
因为使用Fink的时候,大部分时间都是用source编译,所以似乎没有太大的必要使用Fink了。DarwinPorts跟Fink的主要区别是,DarwinPorts比较像FreeBSD port,只能通过source编译软件包,相对来说比较正统,而且软件包比较丰富,版本也比较新。而Fink主要是能通过Binary安装软件包,但是实际使用上还是用source的多,因为Binary包实在太旧了,而且有些包其实没有Binary包的。另外也听说DarwinPorts还会根据mac的实际需求打一定的补丁。所以转向使用DarwinPorts了。
首先是卸载Fink,非常简单,`rm -fr /sw`就可以了,不用怀疑,正是Fink文档里面说明的。
然后就可以安装DarwinPorts了。首先要安装好Xcode,没有gcc怎么编译软件呢,随便一个版本的Xcode都可以,mac的网站上可以下载。然后下载DarwinPorts,有两种安装方式,dmg和tar.gz,如果你不是很懂的话,用dmg好了,不过dmg最后一步会明显定住,稍微等一下就行了,如果你还没有安装Xcode的话,那就不用等了,kill掉吧,我怀疑其实就是在编译DarwinPorts。如果你比较喜欢linux的安装方式,下载tar.gz解开,然后运行make & make install一下,具体查看文档吧。不过dmg和tar.gz安装的位置不一样,dmg是安装在/opt/local下面,并且帮你设置好path,独立开来反安装比较方便,rm了就可以了。而用tar.gz来安装的话,默认是安装到/usr/local,很有可能会跟其他软件乱搭在一起,不太好管理,当然你可以通过prefix来改变安装的位置,那是还得设置一下path。所以如果你没有特殊需求的话,用dmg是最好的方法。
安装好之后就开始使用了,DarwinPorts只提供命令行方式,但是提供了一个很好用的交互方式,由于我们需要用root权限来运行DarwinPorts,因此输入`sudo port`,然后键入你的密码,就能进入交互方式了。下面是一些常用的命令:
* help 查看帮助
* quit 退出交互
* install 安装软件包
* deps 查看软件包依赖
* sync 同步软件包信息到最新的
* selfupdate 更新DarwinPorts本身
* list 列出软件包
* search 查找软件包
* outdated 列出需要更新的软件包
更多的使用请查看文档吧。