Thursday, June 10, 2010

使用jdb调试webapps

一般如果需要调试Tomcat或者Jboss的Web Application时,多用eclipse等集成环境。但也会碰到某些情况,比如开发环境内存限制等。这时候可以用jdb作简单的调试。
其实方法很简单,基本原则就是在web server或者app server启动jvm的时候,加上jdwp参数,这样jvm会打开一个端口和jdb通讯。然后再启动jdb连接上这个端口就可以了。
具体到tomcat,可以先建立以下一个脚本:

export JPDA_ADDRESS=8000
export JPDA_TRANSPORT=dt_socket
export JPDA_SUSPEND=y
./catalina.sh jpda start


存成startdebug.sh,放在tomcat的bin目录下

然后用这个脚本启动tomcat

接着就可以用
jdb -attach 8000来启动jdb

用stop 语句设好断点。比如
stop in HelloWorldExample.doGet

然后打开浏览器,进入tomcat自带的例子中的HelloWorld Servlet中,这时候jdb应该执行到断点,就可以用jdb命令跟踪或者打印变量了。

Friday, June 4, 2010

Java日期比较的一个陷阱

昨天在调试程序中,碰到一个问题,简化叙述如下
c是个Calendar对象,d是个Date,程序要判断c是否在d之后,判断条件用了
c.after(d)
当打印出来的时候,c的确是在d之后的,但以上条件却总是不成立。

仔细看了JavaDoc后,发现Calendar类的after方法虽然接受所有类型,但只有参数同是Calendar对象的时候日期比较才有意义。否则一律返回假。

解决办法也很简单,其实Date类也有after函数。只要把c转为Date类即可。
c.getTime().after(d)
这样就可以了。

Friday, May 28, 2010

圣城市的路


如果你的操作系统设定成了中文,那么你访问google地图的时候,就会发现外国的地名都有了中文的翻译。看到平日熟悉的街道变成了似乎是上世纪初翻译小说内的名字,感觉颇为怪异。上面是蒙特利尔街道地图的截屏,注意中间哪条Saint Urbain被翻译成了什么?

其实这个Urbain是名字,应该翻译成乌尔班或者厄本才对。

Tuesday, May 25, 2010

摩托党集会




周末去市中心,下午刚从Eaton Center出来就听到震天响的声音。Saint Catherine上往常拥挤的车辆也没了。Mcgill College上倒是沿街站了一排排围观群众。

走近看才知道是摩托党们抗议省政府提高摩托车注册费。




估计有上千辆摩托,还在不停的集结中。其中还颇有些很漂亮的车子。




Saturday, May 22, 2010

xubuntu多重启动

在机器上装了vista和xubuntu双操作系统。
xubuntu是ubuntu的一个变种,唯一的区别是ubuntu用gnome而xubuntu用xfce。因此使用的资源要少一些。类似的变种还有kubuntu,使用kde。
总的说来安装很简单,安装程序可以压缩现有的ntfs分区。然后创建新的ext4分区。装完后重启动即由grub管理多重启动菜单。

用光盘启动到xubuntu的时候,机器风扇狂响,本以为是系统风扇。准备下载一个风扇控制程序。但后来用了nvidia的显卡驱动程序,意外的发现风扇声音没有了。原来先前是gpu的风扇。

Wednesday, March 3, 2010

谁在改变?

一个社会主体居民该以如何的态度面对移民?移民自身是否应该对自己的文化,宗教等作出调整以适应这个社会?这个问题几年来一直在魁北克公众视野里沉沉浮浮,挥之不去。在一个理想的社会里,对少数要有足够的宽容似乎是天经地义的。但现实的问题总没那么简单。最近的例子正说明了这一点。

本地报纸今天报道了这样一个案例。一位埃及的穆斯林妇女,因为在新移民法语课上拒绝摘下面纱(Niqab,说面纱不太确切,这是那种比较封闭的头饰,完全遮住面孔,只露出眼睛的那种),最后被开除。该妇女向人权委员会申诉,认为这种行为是对她的歧视。

如果仅从这个叙述来看,道理似乎站在该妇女一边。服饰,以及服饰后面代表的文化和宗教信仰,应该是个人自由,理应受到保护。语言课老师以此为理由剥夺了她的受教育权利,是对她权利的侵犯。

然而老师的辩护理由也并非完全无道理:语言课需要很多互动,Niqab非常阻碍这种师生间的交流。老师无法看到学生的嘴形,也就无从纠正起。而且如果对该女生的要求完全迁就的话,就会影响到其他同学的学习。一个细节就是当这位女生做口语表达练习的时候,她要求位于教室后部没人能看到她脸的地方做。教师满足了她的要求,但她认为仍有男性学生看得到她的脸,所以要求把其他同学的位置挪动到别的地方。这个自然会造成她同校方的不愉快关系。

如果一个人的自由必须要别人做出牺牲(尽管可能是很小的牺牲)才能维护,这种自由还应该受到保护么?

事实上,在这个特定例子中,该妇女的要求并非完全不可满足,校方仍有某些退让余地。但不得不问的一个问题是,本土居民和新移民,双方各自的界限在那里?是否能够存在一个两边都能接受的界限?当双方都已经做出某些让步,而仍无法妥协的情况下,应该舍弃哪一方的利益?虽然三年前Hérouxville的充满争议的市政决议就开始问大众这些问题,期间也有Bouchard-Taylor报告试图做出回答,但是似乎起码在可见的将来,这些问题仍然会在魁北克的社会空间内回荡。


Git 版本控制

本想查看Spring Security的源代码,结果发现他们并没用SVN做版本控制,而是用了git
这里是git的eclipse插件。