星期三, 1月 21, 2009

關於Agile Software Development

最近鳥毅的twitter多了一位訂閱者,原來是高手ihower,看到他寫採用敏捷方法的軟體開發合約該怎麼簽?,就想到最近遇到的狀況。

由於前兩年換部門,因此coding的機會少很多,已經不太需要寫code,大部份都在做網管工作。最近前部門接到一個公家機關的案子,主要是整合現有系統,因為是專業領域,所以敝公司從打敗現有的資訊公司得標。

但其實此單位在招標書就寫著不合理的期程,把不甚明確的規格和很短的deadline寫在裏面。前部門的優秀長官也在苦思如何應對,找了一間號稱使用XP的優秀資訊公司商討合作可能性。
鳥毅與該資訊公司代表稍微聊了一下,大致上知道他們都是有不短的coding經驗,再找幾個年輕人訓練來做專案。

本來想建議優秀長官也使用Agile Software Development,但他表示由於時程太趕,光是訪談->需求分析->coding,就沒多少時間,不太可能像XP一個phase一個phase地做,必須採用Waterfall方式。其實優秀長官有點誤會XP的意思,快速開發並快速地將需求變化回饋到code裏,才是XP所追求的目標。

鳥毅對其他敏捷開發方法論並不瞭解,只知道XP的開發方式。不過XP所提倡的Test First等等觀念,幾乎都已被廣為使用,唯一被視為難做到的就是Pair Programming。連優秀資訊公司都錯誤地表示人的成本太高,所以做不到Pair Programming。事實上,根據ingramchen的親身見證,Pair Programming會產生1+1>2的效果,只是對coding的人很累,因為完全不能打混呀...

ihower有寫一系列「實戰敏捷開發 Practices of an Agile Developer 」,裏頭有不少新的Agile觀念與做法,讓在下獲益良多呀!

P.S. 在下從國中學寫Apple Basic開始,過了十幾年看到XP才赫然有種相見恨晚的感覺,應該是每天埋首coding的人才比較容易喜歡Agile Software Development吧?

星期二, 1月 20, 2009

OpenSolaris吃的RAM

原本早就要玩OpenSolaris 0811版,拖到今天才有時間裝,果然是有RAM盡量用的最好典範,比Vista/Windows 7還猛。



Update:可能我沒說清楚,這是剛開完機,什麼都還沒跑的狀況... 請玩過OpenSolaris和FreeBSD/Linux/OSX/Windows 7/Vista再來刮我的鬍子,謝謝。

最後Update:這篇只是貼個紀念,沒想到一直有人留言,我又沒評論好壞呀!
OpenSolaris用很多RAM並不是沒裝好,而是用在Cache,在Cache什麼呢?檔案呀!因為ZFS會在背景偷偷地搬檔案,確保檔案沒有損壞,這是Sun的工程師說的,不是我個人的看法。

星期三, 1月 14, 2009

Java的bzip2函式庫

前幾年以Java寫Mail Server上log檔的判斷程式,原本是gzip格式,後來FreeBSD改成bzip2,因此必須找個bzip2的library。

找到bzip2 library from Apache Ant,去修改原本的程式卻不work,一直說檔案應該是'h'開頭卻得到'B',bzip2檔案格式明明是BZ開頭呀?再深入去找到才知道Ant的這個library只寫了一半,必須自己處理前兩個byte。所以讀的時候要處理成:
try {
InputStream is = new FileInputStream(infile);
is.read();
is.read();
BufferedReader br = new BufferedReader(new InputStreamReader(new CBZip2InputStream(is)));
真是太鳥了呀...

Lazybuntu已支援AMD64版

Lazybuntu的開發者之一雨蒼昨天留言給我,才知道Lazybuntu已經支援AMD64版了,是很想試試,但我該裝的全都裝了呀....等我下次再裝Ubuntu amd64時一定會試試,感謝雨蒼提供的訊息與他的努力。

升級FreeBSD 7.1

FreeBSD 7.1在上星期推出,最重大的改變是把ULE改為預設值,理論上SMP效能會提高。今天把Server升級到FreeBSD 7.1,希望效能會改善。

星期二, 1月 06, 2009

OpenWebMail中文檔名附件問題

最近鳥事很多,加上放假都去看車,所以沒有更新Blog。(對,我懶:P)

OpenWebMail自從2.53版後UTF-8做得相當好,但是在IE卻會發生中文檔名附件無法下載;用Big5介面則無此問題,但這樣實在太鳥了,尤其是敝公司有幾位員工名字有unicode字元,這樣就不能正常顯示,決定動手去硬改完全不懂的Openwebmail Perl程式碼。

把openwebmail-viewatt.pl改掉,在269列前,加上
} elsif ( $ENV{'HTTP_USER_AGENT'}=~/MSIE/ or $ENV{'HTTP_USER_AGENT'}=~/Chrome/ ) {
my $filename_encoded = uri_escape($filename);
$attheader.=qq|Content-Disposition: attachment; filename="$filename_encoded"\n|;
最前面也要加上
use URI::Escape;


由於小弟手賤,把所有員工的openwebmailrc都改成utf-8,就不管以上hack在big5是否正常了:P (會變亂碼,但仍然可以下載...)

Update :做成patch file,如下:

--- openwebmail-viewatt.pl 2009-01-06 16:48:24.000000000 +0800
+++ /usr/local/www/cgi-bin/openwebmail/openwebmail-viewatt.pl 2009-01-06 16:14:24.000000000 +0800
@@ -4,6 +4,8 @@
#

use vars qw($SCRIPT_DIR);
+use URI::Escape;
+
if ( $0 =~ m!^(\S*)/[\w\d\-\.]+\.pl! ) { local $1; $SCRIPT_DIR=$1 }
if ($SCRIPT_DIR eq '' && open(F, '/etc/openwebmail_path.conf')) {
$_=; close(F); if ( $_=~/^(\S*)/) { local $1; $SCRIPT_DIR=$1 }
@@ -161,9 +163,13 @@
if ( $ENV{'HTTP_USER_AGENT'}=~/MSIE 5.5/ ) { # ie5.5 is broken with content-disposition: attachment
$attheader.=qq|Content-Disposition: filename="$subject.msg"\n|;
} else {
+# } elsif ( $ENV{'HTTP_USER_AGENT'}=~/MSIE 7.0/ ) { # ie7.0 is broken with content-disposition: attachment
+# $attheader.=qq|Content-Disposition: filename="aaa.msg"\n|;
+# } else {
$attheader.=qq|Content-Disposition: attachment; filename="$subject.msg"\n|;
}

+
# allow cache for msg in folder other than saved-drafts
if ($folder ne 'saved-drafts') {
$attheader.=qq|Expires: |.CGI::expires('+900s').qq|\n|.
@@ -266,6 +272,10 @@
# disposition:attachment default to save
if ( $ENV{'HTTP_USER_AGENT'}=~/MSIE 5.5/ ) { # ie5.5 is broken with content-disposition: attachment
$attheader.=qq|Content-Disposition: filename="$filename"\n|;
+# } else {
+ } elsif ( $ENV{'HTTP_USER_AGENT'}=~/MSIE/ or $ENV{'HTTP_USER_AGENT'}=~/Chrome/ ) { # ie7.0 is broken with utf-8
+ my $filename_encoded = uri_escape($filename);
+ $attheader.=qq|Content-Disposition: attachment; filename="$filename_encoded"\n|;
} else {
$attheader.=qq|Content-Disposition: attachment; filename="$filename"\n|;
}