Read Sean

Read me, read Sean.
posts - 508, comments - 655, trackbacks - 9, articles - 4


最近这段时间,Roger Federer这个名字,"出镜率"相当的高,尤其是在上海:先是地铁中铺天盖地的剃须产品广告(广告中出现的三位主角,恰好都是我喜欢和欣赏的),其次当然就是大师杯。

2007上海网球大师杯最后两天的比赛多少让人有些意想不到:费天王的粉丝们当然很开心,费天王虽然首场比赛失利,但后面的每场比赛都展现着他的独有风 范,赢得干净漂亮;相对中立的球迷们可能就要抱怨比赛不够精彩和跌宕起伏了,原本被寄予厚望的巅峰对决:Federer和Nadal,以及最后的决赛,都 呈现出"一边倒"的态势,纳豆和今年大师杯的黑马Ferrer这两位西班牙选手,面对天王的出色发挥,都显得有些"找不着北"。

是什么成就了费天王今天的辉煌?技术层面的东西我不想说太多,除去网球这项运动本身的技术细节,Federer身上的一些冠军特质,也是值得我们好好品味:

首先,热爱自己从事的工作。Federer对网球的热爱,只要你看过他的比赛,就不会质疑。
其次,尊重自己的工作/事业和对手。正是这种尊重,为费天王赢来所有人,包括手下败将在内的尊敬。
再次,对胜利的渴望。看Federer的比赛,尤其是大赛,你能够明显感觉到他对胜利的渴望,每个关键球都透露出一种狠劲。
再有,内敛和对自己情绪的控制。Federer刚出道时其实脾气很暴躁,发挥也不稳定,但是随着时间的推移,他身上逐渐成长出一种特有的内敛和自信。
最后,超乎寻常的稳定和跑位。为什么看Federer打球总觉得他是那么"轻松"而"优雅",而对手总是陷入被动?除了善于观察和控制对手之外,他总能保持超高的稳定性和预判,保证自己出球落点的同时,已经在为下一步回击做准备了,比赛起来,当然游刃有余。

Herzlichen Glückwunsch an Roger Federer!


posted @ 2007-11-18 23:38 laogao 阅读(380) | 评论 (0)编辑 收藏


V8来了,经不住诱惑,造型、做工、Linux核心......
十一来了,不想出门,因为到处是人......
Bug来了,操刀杀虫,一天不行两天,两天不行三天......
罗莎来了,这个没有"正面袭击"上海的家伙,却比"正面袭击"上海的韦帕来得更加生猛......
老妈来了,一起来的,还有蹄花,和家乡的味道......


posted @ 2007-10-08 21:51 laogao 阅读(381) | 评论 (0)编辑 收藏


过去的一段时间几乎没什么时间看RSS,周末在家打开Google Reader,发现Google Reader界面上的一个小小调整:

原先最多能显示出100+,当某项RSS或分类超过100条的时候,看不到具体的数值,只能看到"100+"的字样,经常是都已经浏览完了,左边还是显示 100+,必须Refresh一下才能纠正过来,加上我的胃口比较大,超过100的情况简直是家常便饭,一直对这个100+颇为不爽。现在这个上限提高到 了1000,能够直观的看到各个类别的具体未读条目数,一下子清晰了不少,至少对我来说这个改进很实用。

希望Google Reader能越做越好。


posted @ 2007-09-09 22:34 laogao 阅读(632) | 评论 (2)编辑 收藏


据外电报道,继Dell发布预装Ubuntu的PC和笔记本电脑之后,联想也宣布将于今年第四季度开始发售预装SuSE Linux Enterprise Desktop 10的ThinkPad笔记本电脑,硬件和操作系统均由联想向客户提供支持,操作系统升级则由Novell提供。值得注意的是,与Dell面向Linux 爱好者和个人用户不同,联想这次更多的是针对企业用户。

对于广大Linux爱好者来说,这可是个不错的消息哦。

详见:
http://www.reghardware.co.uk/2007/08/06/lenovo_linux/


posted @ 2007-08-07 21:09 laogao 阅读(659) | 评论 (1)编辑 收藏


详见:
http://www.worldofwarcraft.com/wrath/

回过头来看看魔兽世界中国大陆的代理商九城,到现在连第一部资料片The Burning Crusade还没有推出,唉。


posted @ 2007-08-04 10:37 laogao 阅读(532) | 评论 (0)编辑 收藏


巴萨与邓迪联的热身赛精彩回放:

http://www.youtube.com/watch?v=8Ljp2kwJv0g

亨利点球绝杀:

http://www.youtube.com/watch?v=P5gPeNdYYwc


posted @ 2007-07-28 13:19 laogao 阅读(497) | 评论 (0)编辑 收藏


来自PC World的报道:
http://www.pcworld.com/article/id,134381-c,databases/article.html


posted @ 2007-07-14 12:31 laogao 阅读(637) | 评论 (0)编辑 收藏


http://www.thesun.co.uk/article/0,,2002390000-2007281078,00.html

No more *free* EPL in mainland China + Henry leaves Arsenal for Barcelona, coincidence?

This seems to be another reason for me to embrace La Liga and FC Barcelona. All my best wishes for Henry to start a new legend at Camp Nou.


posted @ 2007-06-24 22:18 laogao 阅读(447) | 评论 (0)编辑 收藏


随着项目越来越大,你的ANT脚本变得越来越臃肿,越来越依赖antcontrib来实现构建逻辑?不想放弃对构建过程和产出做精细的控制?恨不得自己写ANT Task?

等一等,在你考虑转向Maven或者真正卷起袖子开始研究ANT Task的API之前,先听我向你推荐Ruby/JRuby。相信我,也许这才是你真正需要的。

在我看来构建脚本最主要的要求是表达能力和控制能力,表达能力是我们应该能够很方便的告诉它我们要它做什么,而控制能力是我们告诉它如何去做,除了必要的 构建命令的参数、依赖关系之外,它应该能够理解我们其他一些特殊要求。在项目相对简单时,ANT的XML格式的"脚本语言"能够比较好的表达构建者的要 求,至少比纯Java的方式更加简单清晰,于是几乎从它诞生之日就成为Java领域当仁不让的头号构建工具。但是ANT也有它不够用的时候,尤其在控制能 力上,为了实现实际使用中越来越复杂越来越精细的对构建过程和产出的要求,ANT的使用者们开始对ANT进行扩展,最具影响力的"非官方"扩展可能就是 antcontrib了,很多实际Java项目的构建文件中我们都能够找到它的影子。但是一堆taskdef和之类的夹杂在ANT脚本里,怎么看怎么觉得别扭,也严重影响构建脚本的可读性。

我发现我需要的是一个具有完整功能脚本语言来写我的构建逻辑:一方面它要足够简单,我需要清晰的表达我的意图,另一方面当我需要的时候它要足够强大来帮我实现精细的控制。我自然而然想到Ruby。

由于Ruby是一个功能完整的工具,完全自己写Ruby脚本来调用Java自己的构建工具如javac、jar等等并非不可能,但是既然已经有人做了轮 子,我们拿来用就是了,大不了自己再改装一下,也少走些弯路。时下比较流行的解决方案有Buildr、Raven、Rant和Antwrap,它们各有特 点,大家可以根据需要进行选择。

我最终选了其中最"轻量"的Antwrap,原因嘛,我不想学新的API,我已经熟悉ANT常用的Task,而且我希望尽可能多的自己控制构建的过程和产 出。Antwrap最能够满足我的需要。而前不久JRuby刚刚发布了1.0版,这样一来Ruby和Java的跨界引用变得更加容易,Ruby的实现自然 就选择了JRuby。

安装JRuby和Antwrap相当容易,只要把下载的jruby-bin-1.0.tar.gz/.zip解压到本地,确保JAVA_HOME和 CLASSPATH的配置,然后gem install Antwrap (选择Java版) 即可。为了顺利加载Antwrap,需要在CLASSPATH中包含ANT的ant.jar和ant-launcher.jar。(当然,如果想更加方便 的share你的成果,可以把ant的文件拷贝到jruby目录下,在jruby的启动脚本加入必要的export/set命令,然后打包,这样别人只要 从你提供的zip包解压出来即可使用。)

为了给大家一个直观的感觉,举个简单的例子(貌似BlogJava没有提供对Ruby代码的默认支持,大家将就看吧):
 1 require 'rubygems'
 2 gem 'Antwrap'
 3 require 'antwrap'
 4 
 5 @ant=AntProject.new(:name=>"SampleAntwrapBuild", :basedir=>".")
 6 @cvsroot=":pserver:cvsuser:password@10.10.10.1/cvsrepo/SampleProduct"
 7 
 8 def cvscheckout
 9     @ant.cvs(
10         :cvsroot=>"#{@cvsroot}"
11         :command=>"checkout -A"
12         :package=>"."
13         :dest=>"cvsoriginal"
14         :compressionlevel=>"9")
15 end
16 
17 def cvsupdate
18     @ant.cvs(
19         :cvsroot=>"#{@cvsroot}"
20         :command=>"update -A -d"
21         :package=>"."
22         :dest=>"cvsoriginal"
23         :compressionlevel=>"9")
24 end
25 
26 def compile(project_name)
27     @ant.javac(
28         :srcdir=>"cvsoriginal/#{project_name}/src"
29         :destdir=>"cvsoriginal/#{project_name}"
30         :target=>"1.5"
31         :encoding=>"GBK")
32     @ant.copy(    :todir=>"cvsoriginal/#{project_name}"do
33         fileset(:dir=>"cvsoriginal/#{project_name}/src"do
34             exclude(:name=>"**/*.java")
35         end
36     end
37     @ant.jar(
38         :destfile=>"build/#{project_name}.jar"
39         :basedir=>"cvsoriginal/#{project_name}"
40         :manifest=>"MANIFEST.MF"do
41         exclude(:name=>"src/**")
42     end
43 end
44 
45 # to actually call your target
46 if ARGV.empty?
47     puts "Usage: jruby #{$0} [target]"
48 else
49     eval ARGV[0]
50 end
51 

可以看到几乎都是我们熟悉的ANT Task,只是更加紧凑更加灵活,一旦掌握了最最基本的Ruby语法,用它写出功能强大的构建脚本可以说是分分钟搞定。


posted @ 2007-06-18 00:39 laogao 阅读(678) | 评论 (0)编辑 收藏


如果你在Windows和Linux两个平台下都使用过Eclipse,那么你一定注意到Windows下Eclipse项目列表的显示要比Linux下 紧凑许多。对于做开发的朋友来讲,在屏幕上同时看到的信息总是希望尽可能多,尽可能全,在这一点上目前的GNOME并不能让我们十分满意,它的GTK+控 件本身和控件之间的间隙占掉了不少本来就很有限的屏幕空间,尤其当屏幕分辨率不是特别高的时候。

Linux版的Eclipse默认使用GTK+2.0的控件,所以在默认的情况下,会和其他GTK应用程序(如OpenOffice.org)一样给人一 种不够密实的感觉。当然,这和GNOME的设计哲学不无关系,不过这不是本文主旨,就不深入讨论了,进入正题讲讲如何调整Eclipse树状列表的显示密 度。

基于GTK+2.0的程序在启动时会到用户的home目录找GTK+2.0的配置文件,即~/.gtkrc-2.0,Ubuntu下默认没有这个文件,需要我们自己创建。打开你习惯的编辑器,加入如下代码:

style "eclipse" {
  font_name="Sans 8"
  GtkTreeView::vertical-separator=0
  GtkTreeView::horizontal-separator=0
}
class "GtkTreeView" style "eclipse"

重启Eclipse应该就能看到效果了。如果你想做得更彻底,对所有常用的GTK+2.0控件都开刀的话,可以这样写:

style "gtkcompact" {
  font_name="Sans 8"
  GtkButton::default_border={0,0,0,0}
  GtkButton::default_outside_border={0,0,0,0}
  GtkButtonBox::child_min_width=0
  GtkButtonBox::child_min_heigth=0
  GtkButtonBox::child_internal_pad_x=0
  GtkButtonBox::child_internal_pad_y=0
  GtkMenu::vertical-padding=1
  GtkMenuBar::internal_padding=0
  GtkMenuItem::horizontal_padding=4
  GtkOptionMenu::indicator_size=0
  GtkOptionMenu::indicator_spacing=0
  GtkPaned::handle_size=4
  GtkRange::trough_border=0
  GtkRange::stepper_spacing=0
  GtkScale::value_spacing=0
  GtkScrolledWindow::scrollbar_spacing=0
  GtkExpander::expander_size=10
  GtkExpander::expander_spacing=0
  GtkTreeView::vertical-separator=0
  GtkTreeView::horizontal-separator=0
  GtkTreeView::expander-size=8
  GtkTreeView::fixed-height-mode=TRUE
  GtkWidget::focus_padding=0
}
class "GtkWidget" style "gtkcompact"


posted @ 2007-06-09 22:46 laogao 阅读(1393) | 评论 (1)编辑 收藏


Linux下面使用Oracle的SQL*Plus工具有个挺恼人的问题:通过sqlplus命令进入到SQL*Plus控制台后,我们在Bash中已经 习以为常的上下左右键突然变成了^[[A^[[B^[[D^[[C这样的"乱码"。熟悉ksh的朋友肯定要说我们这是大惊小怪了,不过对于从 Windows平台转过来的一般用户而言,不小心按错一下就是4个错误的字符,而且历史命令也无法方便的回查了,确实挺郁闷的。

别着急,如果你的Linux是Debian或者Ubuntu/Kubuntu,直接sudo apt-get install rlwrap安装这个小巧的readline扩展,然后就可以以rlwrap sqlplus的方式进入方向键"正常"的SQL*Plus了。当然,如果嫌每次敲rlwrap不爽,可以在/etc/profile或者自己的 ~/.bashrc里面添加alias sqlplus='rlwrap sqlplus'。其他发行版的朋友可以选择rpm包或者干脆从源码自己编译。

posted @ 2007-06-07 22:13 laogao 阅读(943) | 评论 (0)编辑 收藏


不知道大家注意到没有,Ubuntu Feisty自带的nm-applet有一个小毛病:一旦你通过它连上某个无线网络之后,不管你是不是点错了,或者说是不是真的需要保留这个连接的信息,它都会记录下这个网络ID,今后如果检测到这个网络,根据它自己排的优先级(最后一次成功连接,但有时候不准,或者说有可能在来回切换时不小心被弄乱),如果它排在前面,就会自动连上去,就算你手动选择另一个,它还是不依不饶的切回它认定的那一个。

遇到这个情况,我想许多朋友大概和我一样,在它提供的上下文菜单找,不过GNOME的界面哲学使得界面菜单直接提供的信息和高级功能很有限,或者到类似 /etc/*、~/.*/之类的地方找相关配置文件,但是实际上它也不是那么"传统",因为nm-applet使用GConf来记录配置信息:

在命令行输入gconf-editor,打开GConf编辑器,定位到system -> networking -> wireless -> networks,这个目录下记录了所有nm-applet使用的无线网络ID和相关配置信息,如果有不希望保留的配置,直接进到相关目录,右键逐个点击右面的key-value条目,Unset Key,完成以后就可以让nm-applet"忘掉"这个无线网络连接。当然,通过这个小工具,你也可以手工对某组具体的key-value做修改。

这件事也让我联想起Linus Torvalds不止一次(也包括不少KDE的死忠)对GNOME的微词:尽可能让用户自己掌控,还是尽可能帮用户拿主意?这是个问题。


posted @ 2007-05-13 23:34 laogao 阅读(3162) | 评论 (2)编辑 收藏


时下类似小i这样的IM机器人越来越多,今天又发现一个有趣的Dictman,也挺实用:



使用方法是在MSN中添加dictman@hotmail.com,用Gtalk的朋友可以加dictman@gmail.com,成功后直接输入要查的单词即可,支持英汉或汉英。


posted @ 2007-05-07 17:31 laogao 阅读(693) | 评论 (2)编辑 收藏


http://www.eweek.com/article2/0,1759,2124025,00.asp

相信大家都听说了Dell将在部分产品型号的PC和Laptop中预装Linux操作系统而非Windows,据eWeek的报道,该Linux操作系统将会是Ubuntu。


posted @ 2007-05-01 17:19 laogao 阅读(497) | 评论 (0)编辑 收藏


上个周末的时候安装了最新的Ubuntu Feisty Fawn,给用了很久的Dapper来了一次彻底升级。第一印象是眼前一亮,打开默认自带的Compiz,对用惯了传统桌面系统的用户而言,毫不夸张的说,是全新的桌面体验。

花了个把小时样子简单调整了更新源、中文输入法、字体、区域选项等等,还上了比Compiz更强的Beryl,开始全面试用。经过一周的使用,包括工作和其他应用,感觉确实比6.06进步不少,尤其在桌面方面,比较明显的改善有:

1- 默认就支持Compiz,同时安装Beryl也非常容易。
2- Shell中敲命令,如果出现尚未安装的常见软件包,会提示安装信息。
3- Gaim默认增加了QQ支持。
4- 新的NetworkManager Applet 0.6.4使得无线连接管理变得简单、直观、而且相当方便。
5- OpenOffice.org更加完善,对中文支持更加友好,尤其是在中文字体宽度计算上的问题得到了解决。

总的来说,已经足够胜任日常工作的需要,而且十分简单易用。当然了,有些遗憾的是默认的邮件客户端Evolution并不能让人满意:

我原本一直使用Thunderbird,这次想给Evolution一次机会表现一下,它却不那么争气。本以为Novell和MS的东西集成应该不错,但是除了对日历、会议邀请的支持还算是亮点之外,并没有发现什么过人之处,而对TNEF的支持就有点贻笑大方了,Thunderbird都能正确处理的Winmail.dat附件,在Evolution下基本就是一个字:挂,连另存然后外部tnef处理都无法搞定,因为出来的东西已经不是tnef格式,搞不懂Evolution为什么要做这一层额外的处理。

于是准备切回Thunderbird,更令人感到困惑的事情出现了:在Evolution下辛辛苦苦录入的联系人信息,居然无法导出一个简简单单的CSV,而只能是vCard。界面上没有其他选项,命令行倒是有一个导出工具可以指定--format=csv,不过很不幸,上来就是core dump,晕倒。本来简简单单的东西,何必复杂化。还好vCard本身还是文本,处理一下也不难,但感觉怪怪的,心中难免不爽,对Evolution和Novell的印象大打折扣。

顺便表扬一下SWT/Eclipse,在Ubuntu Feisty下跑起来真的是无缝,界面风格完全就是一个native的应用程序,开启Beryl效果之后,连Tooltip都跟着"炫"了起来,让人越看越喜欢,Evolution带来的不愉快也就自然而然抛在脑后了。

今天,你Feisty了吗?


posted @ 2007-04-27 22:25 laogao 阅读(2888) | 评论 (15)编辑 收藏

仅列出标题
共34页: First 上一页 3 4 5 6 7 8 9 10 11 下一页 Last