九月 28, 2006

Where does productivity come from?

人生苦短,就那么几十年,青春就更短暂了,转瞬即逝。

古语云:“莫等闲,白了少年头,空悲切。”不知是否中国文化过于强调成功要趁早,反正这一周我在参加了两个员工招待会(类似于记者招待会,台下问台上答,俗称open forum)、一个部门业绩报告会(business update meeting)和一个工作汇报之后,便感觉此生无望,大好青春就被这些大大小小的官僚给糟蹋了。一周三个open forum(包括明天的一个),分别来自从低到高三个不同的管理层,用得着吗!?这是不是在某种程度上说明我们的管理层彼此之间缺乏沟通,甚至到了十分混乱的程度!?不来的时候都不来,一来就扎堆。我还发现一个十分有趣的现象,老板们很喜欢开open forum,即使他们明明知道自己肚子里没什么让人感兴趣的东西。当然,每次也都有员工乐于捧场,一如既往得地问,得到的也只能是套话——“我们还在研究”、“还没定,再等等吧”。

悲观的时候总是想一走了之。然后,又有些惭愧,因为读了James Shore的Change-Diary

James用一系列文章讲述了自己如何凭借一己之力,改变了公司的文化氛围,并在一年之后反思当初的行为。文章有点像流水账(其实就是),关于敏捷开发过程的论述也大可忽略,其精彩之处在于非技术层面,或者说人(包括自己和他人)的一面。

凡事有利必有弊,Good Agile, Bad Agile是一篇和敏捷开发过程唱反调的blog,有一定道理,不过也正如评论中有人讲的,这篇blog还是偏激了,毕竟大家所处的环境不一样。

说来说去,还是想问一句,怎样才能获得更高的效率呢?尤其是在软件开发领域?

九月 26, 2006

Does licence matter?

天下大势,合久必分,分久必合。

最近,以Linus为首的Linux Kernel阵营和以Richard Stallman为首的FSF之间分歧越来越大,起因是GNU GPL v3。Richard Stallman全力推行第三版的GPL许可,符合其偏执、理想化的个人形象,而Linus这次的行为也符合其一贯的思维方式。唯一变化了的是环境,所谓时过境迁。

新情况出现后,原来并肩作战的兄弟之间出现了裂痕,似乎令人扼腕痛惜。然而换个角度想,这种变化也是必然,我相信即使是过去,在FSF这面大旗下,也是一颗颗同床异梦的心。同样的手段,不同的人用来获取不同的目的。所以,当Stallman与时俱进,挥舞着大旗向自己心中的方向前进时,部分人不得不做出选择——是放弃自己的利益继续跟着FSF走呢?还是放弃FSF而追寻自己的利益?

说实话,我从没有认真读过任何一种许可的文本,也对Linux Kernel没太大兴趣,尤其是,我还没有写出有价值的程序并采用GPL,所以在这件事上,也没什么太多可说的。可是,如果最终分裂不可避免,我会怎么选择呢?也许对我来说,不会有太大的变化,但是在心里头,会偏向Richard Stallman一方,因为我一向十分钦佩此人,一个极具理想化色彩的人,做起事来却一板一眼,脚踏实地。

九月 12, 2006

Syslog

使用Proc::Daemon可以非常方便的写一个daemon程序,可是这样的程序看不见、摸不着,我们怎样才能知道它干了什么呢?最简单的方法是维护一个日志文件,向里面输出一些动作记录,以便跟踪和调试;更通用的方法是使用syslog,daemon程序只需把日志信息传给syslogd(也是一个daemon),syslogd则负责把不同程序的日志信息存到相应的日志文件里。

Cygwin里面也带有syslogd,运行syslogd-config就把syslogd安装为Windows Service,首次安装后要手工打开该服务才能够使用。

Perl脚本可以使用Unix::Syslog向syslogd发送日志信息。下面的程序是一个简单的例子:

#!/usr/bin/perl
use Unix::Syslog qw(:macros);
use Unix::Syslog qw(:subs);
openlog("hello.pl", LOG_PERROR|LOG_CONS, LOG_LOCAL7);
syslog(LOG_INFO, "hello, world");
closelog;

缺省的(在/etc/syslog.conf里面设置),日志信息输出到/var/log/messages,运行上面的程序后,该文件里会增加一条信息,类似于:

Sep 12 13:09:35 machine-name hello.pl: hello, world

通过修改/etc/syslog.conf文件,我们可以将不同程序的日志信息存放到不同的日志文件里,具体操作参见man syslog.conf

九月 11, 2006

Daemon

使用Proc::Daemon可以把Perl脚本变成一个Daemon。用法很简单:

#!/usr/bin/perl
use Proc::Daemon;
Proc::Daemon::Init;
# your program goes here

我们可以做一个简单的测试,把下面的程序存为daemon.pl

#!/usr/bin/perl
use Proc::Daemon;
Proc::Daemon::Init;
open LOG, ">/home/yourname/log";
print LOG "Process Id is $$.\n";
close LOG;
sleep 100;

然后开两个shell,在一个shell里面运行perl daemon.pl,当再次出现提示符时,退出这个shell,换到另一个shell,从log文件里查看daemon的进程号,然后运行ps确认该进程仍在运行。

通常来讲daemon要一直运行,所以程序里应该有个类似死循环之类的结构,这里是一个真实的例子