l

2009年12月30日 星期三

Windows 不死,但希望它逐漸凋零

2009/12/29 23:41~ 2009/12/30 00:55

Teddy 最近把在公司用的 Acer Notebook 和家裡新買的 9999 超值電腦 (剛剛收到 PXHome 的廣告信,這台電腦降價 500, 現在一次付清只要 9499...應該是年終強力清庫存)的作業系統換成了 Ubuntu 9.10 x64。剛開始抱著雄心壯志,要完全拋棄『暈到死』作業系統,所以裝了 Wine 和 IEs4Linux (可以透過 Wine 在 Linux 上執行 IE6)。對於 Wine 這個軟體,Teddy 依稀記得似乎在 10 幾年前就聽說在開發了,沒想到這個團隊這麼有毅力,抱持著愚公移山的精神硬是把它給做出來了,值得鼓勵。但是,Teddy 發現只要一執行 IE6,Teddy 的電腦就會處於非常忙碌的狀態,Wine 幾乎佔用一顆 CPU 90%~100%  的資源,IE6 則佔掉另一顆 CPU 80% 左右的資源。只是為了執行一個 IE6 連上公司 104 人力資源系統預約個會議室或是請個假,有那麼嚴重嗎?更誇張的是,Teddy 把 IE6 關掉之後,Wine 還不會結束,也殺不掉,繼續佔用 CPU。可能是 Teddy 涉世未深,不太會用吧,所以雖然覺的 Ubuntu  很棒,但 Windows 也不是省油的燈,絕不輕易允許人民投奔自由。

這個畫面 IE6 用掉了 104% CPU 資源,不知道是如何算出來的?用掉兩顆 CPUs?


以 Teddy 自身的經驗,到目前為止有幾件工作還是被 Windows 綁住:
  1. IE:都什麼時代了,居然還是有一堆網站只支援 IE6 以上的瀏覽器。
  2. Office:Teddy 真的有給他用了一下 OpenOffice,不過打開 word 檔案,格式真的會有一點變掉。對了,為什麼 Microsoft Office 有出 Mac 版,就是不出 Linux 版?
  3. Outlook:一直以來 Teddy 都用 Outlook 收 Exchange 裡面的信件。Teddy 都把信件留在 Exchange 上,這樣可以透過 OWA 在瀏覽器上看全部的 mail。目前還沒時間處理到取代 Outlook的問題。
  4. ActiveSync:Teddy 的手機是 WinCE 6.0,需要透過微軟的 ActiveSync 同步資料。這個需求在 Linux 不知道有沒解。
  5. 電視卡:Teddy 家裡的電腦有一塊 VideoMate H900 電視卡,官網上面當然是沒有Linux 驅動程式。
  6. 印表機:Teddy 家裡的 Kyocera FS-1030D 印表機不但 Ubuntu 有內建驅動程式,在官網上居然也提供 Linux 驅動程式,太感動了。不過,公司那一台超大台影印機+印表機的機器,就沒有了。試了一陣子還是無法列印。
還好 Teddy 沒有玩 game 的習慣,不然這個列表一定要加上 game。

結論就是,長久下來 Windows 軟體綁硬體的確把大部分的使用者綁的死死的。Teddy 好久以前就想玩 Linux 了,可是一直沒有勇氣『撩下去』。這一個禮拜的使用經驗,真的非常的累。但是唯有真的把平常工作的電腦換成 Linux,才真正能體會『自由』的感覺。有一大堆免費又好用的軟體可以使用 附帶同樣也是免費的 bugs。不用再看到微軟定時提醒是否使用盜版軟體的畫面,至少心情好多了。

Teddy 現在還是要在 Ubuntu 與 Windows 切換使用,希望有一天可以真正擺脫 Windows。並不是因為 Windows 要錢,而是覺的微軟獨占市場的現象應該要改變。Teddy 的切身之痛,公司的電腦原本安裝 Vista Business 32-bit,『使用者經驗』非常之爛,只能用慢到爆來形容。要是換成其他軟體公司推出這樣的作業系統,早就倒店了吧。

總之,Linux 加油,open source 加油,硬體廠商更要加油推出 Linux 驅動程式。

友藏內心獨白:哪一天 Linux 在 desktop 的市占率有 20%的時候,微軟應該會考慮出 Linux 版的 Office 吧!

2009年12月26日 星期六

快捷鍵不死,只是逐漸凋零

12/26 17:10~17:58

兩個禮拜前 Teddy 在測試公司開發的軟體,其中有一個畫面需要輸入 IP 位置,長得類似這樣(不方便抓取公司還在開發的軟體畫面,所以下圖是抓 Windows 網路設定畫面):


大家都知道 IP 位置由四組數字組成,在每個欄位中按下鍵盤上 tab 按鈕,可以跳到下一個欄位。由於這個元件的按鍵控制是 Teddy 的同事用 wicket 寫的,因此按下 tab 跳到下一個欄位也需要在程式中處理。問題來了,要如何跳回上一個欄位?如果各位屬於資深鄉民這個等級的,一定都知道按下 shift+tab 可以跳回上一個欄位,問題是,Teddy 的同事們居然都不知道,所以自然也沒有在程式中提供這個功能。

雖然大部分的畫面操作都需要使用滑鼠,但是有時候適當地使用快捷鍵是可以大大提高工作效率滴。但是問題又來了,像 Teddy 這種忘性比記性還好的人,要記住那麼多快捷鍵是不可能的。所以,本篇的目的就是幫助 Teddy 紀錄幾個常用軟體的快捷鍵,以備不時之需。

視窗操作:
  • 關閉視窗:alt+F4
  • 開啟 Windows 檔案總管:視窗按鈕+e
  • 顯示桌面:視窗按鈕+m
Firefox:
  • 關閉分頁:ctrl+w (超好用,在 Chromium 和 Eclipse 也通用)
  • 新增分頁:ctrl+t
  • 切換分頁:ctrl+Tab
  • 開啟最近關閉的分頁:ctrl+shift+t
  • 把游標移到搜尋框:ctrl+k
  • 顯示瀏覽歷史紀錄:ctrl+h
  • 查看網頁原始碼:ctrl+u
  • 關閉所有 Firefox:ctrl+q 
Windows 檔案總管與 Ubuntu Nautilus (檔案瀏覽器) 通用:
  • 建立資料夾:ctrl+shift+n
  • 檔案或資料夾重新命名:F2

 先紀錄到這邊,其他的想到再加。

2009年12月20日 星期日

Ubuntu 的一天

12/20 22:37~23:37

在 Teddy 硬碟分割區損毀之後,Teddy 就利用這個機會 ,裝可憐再度提出購買 9999 電腦的要求,終於獲得通過。順便未經報備私自夾帶記憶體 2G *2 以及一個 1.5 T 的硬碟,結果還是花了 17000 左右。電腦果真是繼房子和車子之外,一般家庭消費金額排名第三的物品。

Teddy 選擇 Acer「霹靂戰神」(AS-M3203),除了便宜、四核心 (AMD) 之外,另一更重點就最多支援 8G 記憶體,可以用來裝 64 位元的作業系統,跑跑 VMWare,看看效果如何。

原本以為這台電腦是沒有附任何的作業系統,拿到電腦之後才發現這台電腦附了一個 鳥鳥的 Linpus Linux 9.4 (企鵝也是一種鳥喔) 。




不是 Teddy 對 Linux 有成見,而是這台電腦內附的 Linpus Linux 在開機之後居然是文字模式,還要上網安裝 X-Window,這會不會給他有點太陽春了一點。





原本 Teddy 是打算直接安裝 Ubuntu 9.10 版 ,不過現在倒是想看看 Linpus Linux 葫蘆裡賣得是什麼藥。很可惜,安裝失敗 (忘了拍照片),應該是連需要的檔案都沒有下載成功。Teddy 可是有接上網路線,而且確定網路是 OK 的喔。算了,直接安裝 Ubuntu。

安裝 Ubuntu 過程十分順利,而且開關機速度真的很快 (不知道是不是沒裝什麼軟體的關係),內建的酷音輸入法也很好用,比微軟的新注音好用太多了。想到 Teddy 被新注音荼毒這麼久,有點想哭。因為 Teddy 原本的那台電腦都在執行硬碟修復的工作,所以今天 Teddy 花了比較多的時間在使用 Ubuntu。用了幾個小時之後,赫然發現,耶,如果不用 office , IE 和電視卡,幾乎所有的工作都可以在 Ubuntu 上完成 。算一算,Teddy 在 Ubuntu 今天做的事有:

  • 使用 Firefox:找資料、看新聞、收發 email、使用 Facebook、在 PCHome 上買 Hub
  • 安裝 wine & office (可以裝,不過後來決定放棄改用 VM)
  • 安裝 VMWare Player
  • 安裝與使用抓圖軟體
  • 測試播放電影 (rmvb, avi)

真的覺的雲端計算很有前途,其實除了使用網路 ATM 轉帳好像非用 IE 不可,幾乎大部分的工作都可以在 Linux 上完成。找時間 Teddy 再來試看看 OpenOffice,處理一般的文件應該沒問題吧。

最後,Ubuntu 有一個軟體中心程式,有很多免費的軟體可以使用,大幅簡化安裝手續,這一點也不錯。


Ubuntu,給你拍拍手。

樂極生悲的12月

12/20 21:50~22:34

本月的部落格產量超低,實在是有說不出的苦衷。話說 Teddy 本月10日到15日和 Kay 到京都自助旅行。出門之前,Teddy 忙著參與第 20 + N 年份的國科會計畫。好不容易告一段落,又要忙著整理行李。出國的這幾天忙著玩和整理照片也沒時間寫。原本打算回國之後好好地把京都之旅報告一下,沒想到一連串的痛苦才剛剛開始。

Teddy 回國之後發現電腦硬碟一個約 720GB 的分割區損毀,用 chkdsk 去檢查,沒想到 chkdsk 居然回報「剩餘空間不足,無法修復」。



Teddy google 了一下錯誤訊息,發現硬碟必須要有 15% 的剩餘空間,才可以讓 chkdsk 修復損毀的分割區。問題是 Teddy 的分割區已經損毀,根本沒辦法清出空間啊。在網路上看到的解法是,找一些管理分割區的軟體,重新調整分割區的大小,再執行 chkdsk 這樣就 OK 了。但是 Teddy 花了好幾天的時間,還是無法備份出損毀的分割區,而且當 Teddy 使用某軟體調整分割區大小時,還調整失敗,使得分割區變得更亂,大概沒辦法救回來了。

現在 Teddy 只能用 EazyRecovery 這一類的軟體來試看看能不能救出一些檔案。700 多G的分割區每處裡一次要都要10幾個小時,看來可能要弄到明年了。

友藏內心獨白:難道家裡也要買一台磁帶機備份資料?

2009年12月13日 星期日

陸客,你好強: 宇治篇

12/13  22:27~22:52

Teddy 和 Kay 這幾天在京都旅遊,遇到不少奇人異事,其中最值得一提的,就是以下這件。

12月12日中午約12點半左右,Teddy來到宇治的「源氏物語博物館」,由於走了不少的路腳痠得要死,因此買票入館之後,先坐在展示館內的椅子上休息一下。展示館內有精美的玩偶,都是源氏物語內的人物,可惜有禁止拍照的標示,無法照幾張回來給鄉民瞧一瞧。

博物館外觀

就在 Teddy 坐下不久之後,「殺」進來4~5個年輕人,不分青紅皂白的,拿起相機狂拍,一時閃光燈此起彼落,著實嚇了 Teddy 一跳。

這幾個刁民,在不到兩分鐘的時間之內,用 他們的相機快速掠奪完整個展示館,最後在帶頭大哥一聲「閃人」的指示下,快速消失在展示館門口。

此時 Teddy 心中大喊一聲:陸客,你好強!任何的禁止標誌都阻止不了您紀錄史料的雄心壯志啊,真可謂當代的司馬遷。

友藏內心獨白:不要讓我在台灣堵到。

2009年11月30日 星期一

Forest People VS Mountain People

11/29 22:40~23:55

西元3000年,地球人滅亡後800年,一群外星人移民到地球。為了避免步上地球人因為過度使用資源而導致滅亡的下場,這些外星人決定要過著節能省碳、自給自足的自然生活。他們分成兩個團體,一群住在森林中,另一群住在高山上。

森林中自然資源豐富,水源不虞匱乏,隨處都有自然生長的果樹、野菜可採食,野生動物也很多。這些住在森林中的外星人,大家互相合作,每天只要花 8 小時便可備妥生活所需的一切 準時下班。剩下的時間,他們可以有自己的生活,可以玩跳格子遊戲、和野馬賽跑、研究地球人的歷史、打地球人留下的PSP。他們遇到 bugs 困難時會嘗試釐清問題,彼此互相幫忙共同解決問題。有時候隔壁村的原始人會跑過來搗蛋,森林中的外星人會團結一起抵抗外侮,決不會發生捅自己人一刀的行為。社會上一團和氣,沒有犯罪事件發生,因此不需要柯南或是金田一。森林中的外星人每天過著快樂的生活,已達到夜不閉戶,路不拾遺之大同世界境界。

選擇住在高山上的外星人就沒有那麼好狗運了。由於山上空氣稀薄、雨量不足、紫外線已達到危險級,因此動植物都長的不好。在資源匱乏的情況下,高山上的外星人每天至少要花 12~16小時才可 下班 勉強填飽肚子。剩下的時間,其實也沒剩下多少時間,他們除了睡覺以外,幾乎沒有什麼生活品質可言。他們遇到困難時第一個反應就是找代罪羔羊,使出乾坤大挪移把所有的壓力轉嫁給這個 菜鳥 倒楣鬼。為了不要成為代罪羔羊,久而久之每個存活下來的人練就了一身打嘴砲的功夫,彼此高來高去。當受到隔壁村原始人騷擾時,意志不堅的人馬上見風轉舵,出賣自己人以求榮華富貴的 漢奸 行為屢見不鮮。由於社會上人心險惡、爾虞我詐,因此 方丈 村長派出了不少長江一號與錦衣衛,隨時監控民眾的行為並且以「看到黑影就開槍」的警覺心,隨時準備參一本。森林中的外星人過的水深火熱的生活 (村長與皇親國戚除外),許多人隨時都想落跑。可惜 經濟不景氣 路途遙遠,恐怕還沒走到森林中就已經葛屁了,只好委屈過一天算一天。可想而知,住在山上的外星人由於壓力太大,脾氣都很不好,隨時都可能爆發。

***********************************************************************

以上想法是從 Kent Beck 在 Extreme Programming Explained: Embrace Change 這本書的參考讀物中偷過來的,以下節錄自書本內容:

Colin M. Turnbull , The Forest People: A Study of the Pygmies of the Congo, Simon & Schuster, 1961; ISBN 0671640992.
A society with plentiful resources. My dream is that it is possible to create this feeling within a team.

____, The Mountain People, Simon & Schuster, 1972; ISBN 0671640984.
A society with scarce resources. Aptly describes several projects I've been on. I don't ever want to live that way again.

很多搞 agile methods 的人,都抱持的類似的價值觀,強調人性、自我管理、團隊精神、相互扶持。但是這種價值觀不可能在一個資源極度匱乏、壓力大到想扁人的環境中發生。所以對於團隊負責人而言,營造一個森林就是你最大的責任。相對的,團隊成員如果有快要被綁架到高山之中的情況,也要主動呼叫。畢竟,魯賓遜漂流到荒島上如果不求救,別人又怎麼知道要去救他。

友藏內心獨白:得罪了方丈,還想走!

2009年11月28日 星期六

PAUL: 法國頂級麵包店之還我雨傘篇

11/28 21:18~22:50

上禮拜六起了個大早,被 Kay 抓著到位於仁愛路圓環旁,傳說中的法國頂級麵包店 PAUL,吃早餐 (Teddy 沒帶像機出門,要看照片的鄉民們可參考這裡這裡)。最倡導節能 減炭的 Teddy,當然是選擇搭捷運前往。從捷運忠孝敦化站往仁愛圓環走沒多久,先經過敦南誠品,不久後便可到達目的地。當天下著小雨,經過誠品時,有一個勤勞的攤販已經在擺攤賣雨傘。Teddy 出門有帶傘,只好跟馬總統說聲對不起,少了一個幫台灣拼經濟的機會。

大概 9:30 左右到了 PAUL 的門口,耶,雨傘怎麼辦?來這種高級法國麵包店,帶一把100元又有點爛掉的雨傘進去,合適嗎?因為 Teddy 有將雨傘放在圖書館門口被幹走的經驗,對此頗為掙扎。此時 Kay 說話了:「這裡可是仁愛路耶,不可能有人偷雨傘的」。說的也是,這邊地價最便宜起碼也是幾十萬上下,會來光顧 PAUL 除了效法劉姥姥逛大觀園的 Teddy 之外,應該都是達官貴人或是田之驕子,放心把雨傘放在門口的傘架上。

進入店內,Teddy 鬆了一口氣,好佳在沒把雨傘帶進來。這麼高級的法國麵包店,怎容的下一支 Made in China 小雨傘。就在 Teddy 暗自竊喜的片刻,一位帶著白色圓帽,穿著白色制服的 小護士 服務生將我們引領到假壁爐前的昏暗兩人座位。Kay 點了一份 巴黎人早餐,Teddy 點了Omelette (事後據鄉民甲告知,Omelette 中文叫做 歐姆蛋,難道  Teddy 吃的是電阻,救人喔!)。飲料都是熱咖啡。

東西好不好吃?說真的,還不錯吃。不過,如果以 Teddy 曾經到法國旅遊,在 2 星級小旅館吃過的免費早餐相比,C/P 值頗不.不.不.不.不高 (Teddy 不小心口吃)。應該是 Teddy 窮不受補,吃不出箇中巧門。不過對於 PAUL 的咖啡,Teddy 倒是很有意見。咖啡本身普普,勉強接受 (人家要喝生態綠咖啡啦)。不過,裝咖啡的杯子太大,失敗。「蝦米,咖啡杯大,可以多裝一點你也給人家嫌?難道 Teddy 是遠從澳洲來的客人」。當然不是!PAUL 的咖啡是可以免費續杯的,這一點還不錯。但是由於杯子太大,Teddy 才喝不到 1/3 咖啡就冷掉了,還要硬著頭皮把剩下 2/3 的冷咖啡喝掉,才能續杯再喝到熱熱的咖啡 。(鄉民甲:你自己咖啡喝太慢還要怪人家杯子太大,還說你不是澳洲來的,真是太超過了。)

在用餐過程中,服務生頗為親切。不過阿共的陰謀到了結帳的時候被 Teddy 發現,原來用餐要加服務費,Teddy 吃了頓 627 NTD 的早餐。看來以 Teddy 的身分,還是比較適合到 IKEA 新莊店吃 39 NTD 超值早餐 (PAUL = IKEA * 8,吃ㄧ次 PAUL 高級法式早餐可以去 IKEA 吃八次超值早餐)。好歹人家 IKEA 也是瑞典外商耶,新莊店地方大、視線好、燈光美、氣份佳、咖啡無限續杯喝到胃潰瘍病發,氣勢上完全不輸給 PAUL (可以這樣比嗎?)。IKEA 真的很挺吳院長,不虧是庶民經濟的典範 (這就是愛台灣啦!)。

以上內容都不是重點。本篇的重點是,當 Teddy 付完錢來到門口時,哇勒,靠北...邊走,Teddy 的那一支小雨傘呢?不知道是哪一位 Teddy 的仰慕者,專程或是順手帶走了。往捷運的途中,再次經過誠品。難道是天意要 Teddy 幫台灣拼經濟,只好跟早上看到的那一位賣雨傘攤販買了一把雨傘。馬總統,Teddy 無意中又挺了你一次。

等一下,Teddy 在此強烈呼籲,鄉民們沒事還是不要去 IKEA 新莊店吃早餐,尤其是假日,以免 Teddy 去的時候找不到位子。

友藏內心獨白: 用餐費用有包含雨傘意外險嗎?

2009年11月27日 星期五

我真是猜不透你啊:Scrum 篇

11/27 01:22~02:12

對於一般公司內部未採用 Scrum 的鄉民而言,Scrum 這種旁門左道、邪門歪教,還是敬而遠之,沒必要也沒興趣接觸,以免中邪 (鄉民:只有加班才是王道的啦)。只不過,當鄉民們不小心路過,又不小心看到若干 Scrum 邪教的奇怪儀式時,便產生了以下疑問:

  • 你們為什麼每天早上上班都要先罰站? (Daily Scrum = 罰站)
  • 你們開會的時候為什麼都在玩牌? (Poker Game = 賭博)
  • 白板上的小紙條寫了你們的名字,好像在標會喔。 (Task Board = 標會)

其中以玩牌這件事,最容易引起鄉民們的白眼 (上班玩牌,這麼爽,人家也要參一咖)。Teddy 曾經聽鄉民說過,看到 Scrum 團隊在會議室聚賭(sprint planning meeting),差點打電話跟 警方 老闆舉報。剛開始的時候,Scrum 團隊成員也曾經試圖跟鄉民們解釋,這撲克牌是用來估算需求大小 (story size) 以及工作時間 (task)。鄉民們聽完之後總是半信半疑的離開 (鄉民內心獨白:你當我傻子啊,這麼好騙)。後來如果再有鄉民問起,有某位 Scrum 團隊成員乾脆說:我要去叼13支了

這種「只有 Scrum 團隊可以公開在公司玩牌」的爽度,非 Scrum 成員無法理解。至於鄉民們,只能學學唐牛,大聲的喊出:

Scrum,我真是猜不透你啊!


友藏內心獨白:ScrumMaster 有時是莊家,有時是會頭。

2009年11月25日 星期三

Retrospective Meeting = 許願池

11/25 22:24~23:55

許願池,常見於各大廟宇以及名勝古蹟之中。不管願望能否實現,丟個銅板,就可以擁有「有夢最美,希望相隨」的片刻。對於出門在外手頭不方便的鄉民而言,順手撈幾個銅板就可以換一個國民便當或是買一張回家的車票,省去攔路要錢的尷尬。Producers 和 Consumers 各取所需,王不見王。從軟體架構的角度來看,此種 decoupling 的特色,相當具有擴充性。

許願池的種種優點,做軟體的朋友們當然也發現了。別說 Teddy 騙廣大的鄉民們,就在 Scrum 中,每個 sprint (iteration,一個固定長度的開發週期,通常介於 2 - 4 週之間) 結束時都要進行的活動 -- retrospective meeting -- 就是開發團隊的許願池啦。

Retrospective meeting 照字面解釋,就是「回顧會議」,這是 Scrum 設計用來改善開發流程的一道關卡,每一個 sprint 結束之前都要過這一關。在這個會議當中,開發團隊討論在這個 sprint 當中,哪些事情作的很好,要繼續維持。哪些作的不好,應該改善,並挑出幾個比較重要的改善項目列出改善的行動方針。以下是幾個例子:

好的部分:
  • 導入 Scrum
  • 有一個公開的 product backlog
  • 有訂定產品的 release plan
  • 有持續整合的環境
  • 有自動化功能測試案例與測試環境
有待改善: 
  • 電腦效能不佳 (都是 Vista 的陰謀啦)
  • 沒有寫 unit test
  • 沒有 pair programming
  • Tasks 完成條件定義不清
  • ezScrum 太慢 (這是真的有人提出... 嗚嗚...)
改善行動方針:
  • 長期目標:增進工作環境效率
    • Action Plan: 增加記憶體到 4G
    • Action Plan: 安裝 Vista SP2 (或是 窮得只能超頻?)
  • 長期目標: 所有 methods 至少都有三個對應的 unit tests
    • Action Plan: 安排1個小時的 workshop 教導 JUnit 使用方法
    • Action Plan: 下個 sprint 每個人至少寫 3 個 test cases
  • 長期目標:50% 的開發工作都以 pair programming 方式進行
    •  Action Plan: 因為目前工作環境並不適合 pair programming,因此先改善工作環境。首先向公司申請 22" 螢幕、無線鍵盤、滑鼠。

由於開發流程改善是一條很漫長的路,有多長,這 麼 長... 長到你看不到底。所以,很多改善項目需要長時間的關注。例如,光是做測試這件事,就足夠玩個一年半載以上,才能小有成果。所以,為每一個改善項目訂定長期摽,然後列出本次的 action plan (行動計畫,就是下個 sprint 準備採取的改善措施)。這樣,週而復始,無限迴圈卯起來改善流程,便可達到:「人人有事做,月月有錢領」的最高境界 (一直到 stack overflow 為止)。

*****************************************************************************************

眼尖的鄉民看到這裡應該會問:這和許願池有什麼關係。是滴,以往沒有 retrospective meeting,開發團隊可能老早就發現很多問題,但是苦無 call in 管道可以暢所欲言,以至於長期悶在心中,很容易得內傷,影響工作效率。久而久之甚至導致團隊成員移民到其他公司。有了 retrospective meeting 之後,給了各位頭家一個「嗆聲」的機會和管道。就像許願池一樣,錢丟下去,願望會不會實現是另一回事,至少聽到噗通一聲當場爽一下也好,可以減少得內傷的機率。

Teddy 在 retrospective meeting 中看過一些比較有趣的願望包含:
  • 冷氣太冷,快得 H1N1 感冒,影響工作效率。
  • 要去參觀資訊展,看 show girls 了解一下競爭對手的產品。
  • 政躬康泰 ,皇上吉祥
  • 股市上萬點
  • 長命百歲
  • 世界和平
  • !#%!@#~
總之,每個 sprint 花一、兩個小時來了解民間疾苦、收攏人心、開開競選芭樂票、罵罵老佛爺,比起傳統無聊到爆、火氣很大、忙著找代罪羔羊的大鍋炒會議,這種 C/P 值超高的活動,還不趕快去弄一個來玩。

搞笑談軟工之前世今生

11/25 01:49~03:00

當年為了學人家趕流行,不是帥哥更不可能是正妹的 Teddy,在 2007 年六月時開了這個部落格。當時心想,身為一個資工博士ㄕㄣ,至少也看了幾百篇的軟體相關 papers,應該有很多「料」可以寫。如今回頭憶當年,2007~2008 年 Teddy 只寫了 10 篇,平均 55 天才寫一篇。為什麼產量這麼少?以下是「史蒂芬周」的分析:

看看 Teddy 的第一篇部落格文章 Pattern Languages and Patterns,居然還有參考資料,把部落格搞的好像在寫論文一樣 (好吧,Teddy 承認,裡面的內容的確是從之前發表過的論文中抄下來滴)。沒創意又太無聊了,失敗。

在第三篇文章 例外處裡 (1) 中,Teddy 奮發圖強了一下下,終於寫了一篇新的文章。不過寫論文養成的壞習慣還是沒改,文章裡面還是有「參考資料」。搞笑只搞了半套,失敗。

 *************************************************************************************

 2008 年的文章,已經少有參考資料,這是一種慢慢從書呆子變成正常人類的好現象。可是,這個部落格的內容到底要寫些什麼,用什麼風格寫,Teddy 還是沒有掌握的很好。

時至 2009 年,在 Kay 的推薦之下,Teddy 有幸看了三本奇書 (學校圖書館有喔),終於開竅了。這三本大作分別是:
前兩本書的作者是廣告人,第三本書的作者是電視人。姑且不管這些奇奇怪怪的書名與內容在談什麼,這三本書有一個共同點,那就是淺顯易懂且很好笑


曲高和寡這成語大家都知道,但是做事的時候卻還是無法避免唱高調的習慣。尤其是書讀的越多,越不容易放下身段。軟體工程這種東西,說實在的,大部分都很無聊。要怎麼把枯燥的內容講給一般的地球人了解,這就需要下點功夫了。
 
*************************************************************************************

幾天前在某個學弟的「非死不可」上面看到一則留言,提到學弟和他的老闆在輕鬆談軟工部落格發表了一系列作品。不過這不是重點,重點是鄉民甲的回應:

「看完輕鬆談軟工之後,怎麼覺得很不輕鬆」

Teddy 笑了

*************************************************************************************

前幾天 Teddy 才發現,Teddy 的部落格沒有主題。嗯,就叫做:「搞笑談軟工吧」。


友藏內心獨白:「看完搞笑談軟工之後,怎麼覺得很不好笑」

2009年11月22日 星期日

Scrum + 國科會計畫書 = 研發抵免

11/22 00:34~01:42

各位鄉民們,如果剛好在台灣念過研究所,而老闆剛好需要提國科會計畫,則多多少少都有機會參與國科會計畫的撰寫,才不枉被稱之為「研究 ㄕㄣ」(要學功夫足球裡面周星馳的發音)。

有此經驗者,一定和 Teddy 一樣,心中暗自咒罵著老闆。在 Teddy 念研究所這 N 年中,參與了約 20 年份的國科會計畫書撰寫 (鄉民甲:Teddy,敢問您研究所念幾年啊)。所謂好人有好報,辛苦的付出就在工作之後獲得回饋。

看過 Teddy 大作「美簽:快速簽證之學術面談」的鄉民們都知道,Teddy 只是在一家民間公司當個小工程師,開發軟體,寫寫程式。這看起來跟國科會計畫八竿子打不著。錯!就在一個多月前,Teddy 任職公司的行政人員突然通知大家,因為公司要申報研發費用抵免租稅,因此需要工程師填寫研發資料。這個突如其來的要求,很多人都不知道該怎麼回應。好里佳在,對於擁有「參與20 年份國科會計畫書撰寫經驗」 的 Teddy 而言 (唸起來還真給它繞口),只能算是小 case 的啦。

不過,話說回來,光有計畫書撰寫經驗還是不夠滴,總是要生出實質內容吧。還好 Teddy 上班這一年以來,都乖乖奉行 Scrum。所有的開發時程、需求、施工內容一應俱全,而且有把它存到電腦中。此外,當然也包含可以動的軟體和精美的使用手冊 (不像有些學生 OOP 作業寫不出來最後只交一份程式屍體,害助教還要開棺驗屍才能打分數)。經過這次事件之後,Teddy 應用 OOAD 的技巧,推導出一個軟體從業人員不可不知的公式:

Scrum + 國科會計畫書 = 研發抵免

前後約三個工作天就把10幾頁的資料交出去啦。負責收資料的行政人員非常滿意,還跟 Teddy 開玩笑說:「要提名 Teddy 為優良員工」 (可是公司根本沒有這項選拔活動啊)。


不過,此時 Teddy 內心又冒出小小的吶喊:「寫歸寫,Teddy 可不保證最後能否通過國稅局的抵免審核」。畢竟 Teddy 參與過的這 20 年份的經驗,也不是每次都有要到錢的啦 (這都是阿共的陰謀啦)。

總之,各位「研究ㄕㄣ」,下次老闆要你幫忙寫計畫書,絕對是替你未來就業著想,乖乖寫,可不要偷懶亂寫一通,最後又跑回學長身上啊

2009年11月21日 星期六

窮得只能超頻

11/21 12:00~13:20

超頻這種舉動,就好像把一台時速只能跑120公里的房車硬ㄍㄧㄥ到200公里,是一件很危險的行為。而且會消耗更多的能源,不符合節能減碳的潮流。Teddy 已經過了追求速度與刺激的年齡,一切只求「穩」,因此買電腦的時候,不曾把能不能大超特超這個因素考慮進去。

Teddy 手邊這一部 ASUS P5B Intel Core2 E6400 (2.13 GHz) 桌上型電腦,已經賣命的服務了兩、三個年頭。最近這幾個月是越來越不爭氣,只不過跑個 VMWare、FireFox 開個三、四十個 tabs、寫寫文件、偶爾開個 Eclipse,在使用上常常會有lag 的感覺 (難道是 Teddy 要求的太多了嗎?)。

也許是這台 P5B 受到馬總統的感召,要 Teddy 一起拼經濟 (像 Teddy 一樣的薪水階級小老百姓,拼來拼去怎麼都是拼到別人的經濟 ?)。難道 Teddy 也該換台新桌機了嗎,不知道現在的地球人大概都多久換一台電腦?

這幾天花了點時間在 PCHome 上研究一下電腦規格和價錢,既然 Teddy 手邊這台是雙核心的,下一台應該至少是四核心起跳吧。嗯,看了一下報價,新的「愛妻 (i7)」 、「愛我 (i5)」等級的電腦,最爛的也都要兩、三萬起跳,買這個肯定會被罵的啦。好吧,那不要買最新的,此時 9999 這個數字刺傷了 Teddy 的眼睛:

Acer「霹靂戰神」四核燒錄電腦

  • 處理器:四核 AMD Athlon X4 630 (2.8GHz)
  • 記憶體:1GB,4 組記憶體插槽,最高可到 8GB
  • 硬碟:320GB
  • 光碟機:全功能DVD燒錄機
  • 其它:讀卡機、原廠鍵鼠組、HDMI 輸出
這樣的配備,甘愛 (需要) 兩萬嗎?不用;甘愛一萬嗎?也不用。只要 9999。如果再買個兩條2G的記憶體 (再加 3000 左右),加上 Teddy P5B 上面現有的兩條2G,就有 8G RAM。安裝 64 位元作業系統,這樣應該可以多跑幾的 VM 來玩一下不同的 OS。
這組 C/P 值看起來頗高的桌機,應該就是 Teddy 理想的選擇啦。

依照往例,Teddy 的異想世界又破功了,只是提出購買意願書就被駁回。Teddy 還不想引發家庭革命,只好鋌而走險,把腦筋又動回 P5B 身上了。

嗯,電腦太慢也許是驅動程式太舊了,看看有沒有什麼驅動程式可以更新的先。連到 ASUS 網站,好樣的,果然是「X碩品質,以卵擊石 堅如磐石」,上面居然有最近才更新,可以支援 Win7 的最新驅動程式。這真是佛心來的,太感恩了,趕快盲目的卯起來把能更新的軟體一次更新完畢。只是有點擔心,同時吃太多藥,不知道會不會藥物中毒,互相衝到。

歷經 N  次重開機之後,耶,嗯,啊,喔... 新的 GeForce 7300 GT 驅動程式以及Intel 晶片驅動程式好像有讓電腦感覺稍微順了一點。此時 Teddy 心中傳來小小的吶喊「超頻、超頻、超頻」。還好 P5B 的 BIOS 超頻選項設計的很好,連 Teddy 這種超頻小白也可以輕鬆完成。先操個 10 趴看看。

 

由 2.13 GHz 變成了 2.34 GHz,雖然只小小的增加 200 MHz 的速度,用起來好像順了不少。免錢的提升性能,撐一陣子先,如果夠穩下次試看看 15趴。

友藏內心獨白:好希望跟阿扁一樣「窮得只剩下錢」,而不是「窮得只能超頻」

2009年11月20日 星期五

麥甲我蓋布袋, Part 2

11/20 00:45 01:10

Teddy 繼上次冒著生命危險在學校糾正一位在大樓內抽菸的學弟之後,膽子變小了許多,但心中那把微弱的正義之火還是伺機死灰復燃。今天 Teddy 又做了一件極可能會被蓋布袋的事,詳情如下。

Teddy 因為脖子痛到住家附近的小醫院復建已經有三、四個月的時間,今天晚上依例又到醫院報到。由於今天沒有復建科門診,天氣又冷、Teddy 去的又晚,復建室裡只剩下四、五個病人。當Teddy 在做「熱敷 + 電療」的時候,坐在 Teddy 旁邊的某位中年女性病患 (簡稱 X 女士),居然拿著疑似 PSP 在看韓國演唱會的影片。人家看她的影片關 Teddy 什麼事?沒錯,X 女士在 Teddy 到之前就已經在復建了,原本她要做什麼是不關 Teddy 的事,但是她並沒有戴耳機,直接把聲音用很大的音量放出來。當 Teddy 坐在她旁邊復建時,X 女士旁若無人,繼續看她的影片。Teddy 總是相信人性本善,給了X 女士一分鐘改過自新的機會,誰知道她不善加利用,依然故我,於是 Teddy 側身對X 女士說:「 歐巴桑 小姐,可不可以麻煩妳戴耳機聽」。此時,一位身材略胖的男士(簡稱 Y 復建師),突然出現,把X 女士的PSP 拿走。原來這位Y 復建師是醫院的復建師,這台PSP應該是他借給X 女士的,當場小小間接的得罪了復建師。

現場短暫恢復了平靜,當 Teddy 做完「熱敷 + 電療」之後,要換場地做第二項「拉脖子」,此時X 女士已經做完「拉脖子」,又跑回「熱敷 + 電療」場地做其他復建項目,這個項目是需要Y 復建師徒手治療。鄉民們猜猜發生什麼事?沒錯,就在 Teddy 被綁在「拉脖子」的機台無法動彈的時後,Y 復建師又跟X 女士熱絡的大聲聊天,還開著類似搖滾音樂助興。

20分鐘過去,Teddy 做完「拉脖子」項目,離開前跟現場另一位資深的復建師反應,請她轉告Y 復建師:「要聽音樂請戴耳機,不要把復建室搞的跟舞廳一樣」。就這樣,會給 Teddy 蓋布袋的嫌疑犯又加了 2 個人。

難道是 Teddy 太「龜」了嗎,連別人聽個搖滾重音樂都無法忍受?還是嫌疑犯X+Y的公民與道德亦或是國文不及格,把「己所不欲,勿施於人」直接改成「己所欲,強施於人」(獨樂樂不如眾樂樂?)。乾脆下次 Teddy 也把手機帶去,現場播個大悲咒什麼的好了(收妖)。

友藏內心獨白:不是說過地球很危險了,你還在這幹麻?

2009年11月17日 星期二

Teddy 的 Pair Programming 之旅

01:00~02:10

簡單的說,pair programming 就是兩個人共用一部電腦,坐在一起開發軟體,一個動手,另一個閒著 看著,並不時提供意見 (如果沒在啃雞腿、吃泡麵、看連續劇、或睡著的話)。也許叫做 pair developing 會比較貼切一點。問題是 Kent Beck 大哥用了pair programming 這個名稱,晚輩們不敢造次,繼續沿用。

此時 Teddy 又聽到鄉民們的怒吼:「什麼,人都不夠用了還兩個人一起寫,這麼爽。兩個人分開寫不是比較快」

的確,連小學生都會的算數:一個人一小時寫 20 行程式,請問兩個人分開同時寫,一小時可以寫幾行?
答案是:「40 行」

那麼,如果兩個人一起寫,一小時可以寫幾行?
答案是:「20 行」

所以,你的老闆一定反對 pair programming ,因為生產力變成一半。

*************************************************************************

鄉民們有看過「實習醫生」這部影集嗎?片中的實習醫生或是住院醫生,想盡各種辦法,都要陪著「主治醫生」一起進開刀房動手術。手術室中除了若干位醫生,還有護士、麻醉師、操作醫療儀器的技術員等。耶,那開醫院的人一定都是笨蛋,因為這樣生產力變成 1/N。

為什麼動手術需要這麼多人?因為「品質(人命)」比「速度 (生產力)」來的重要。

此外,很多位醫生一起動刀還肩負著 相互監視「經驗傳承 (教學)」的目的。在動手術的過程中,資深醫生會和實習醫生對話,測試他們對病況了解的程度與應對方針是否洽當。時機成熟也會讓實習醫生們動動刀 (可憐的病人...)。

當遇到很棘手的案例時 (例如,切除不良腫瘤),有時需要動用到多位資深的醫生一起動刀。所以不一定都是資深醫生搭配實習或住院醫生。

*************************************************************************

如果我們看重的是「程式的品質」而不僅是「寫程式的速度」,那麼 pair programming 就很有意義了。因為 pair programming 同時具備 coding、review、testing、 refactoring、learning 等目的,是一種殺傷力很強的武器。但大家也都知道實施 pair programming 不容易。為什麼?扣除大家熟知的環境因素 (沒有開刀房 沒有大桌子、大螢幕)、配對因素 (熟手配熟手、熟手配生手、生手配生手、男生配男生、男生配女生、女生配女生、團團配圓圓、地球人配火星人...)、不信任 (覺得生產力剩下一半、浪費時間、無聊...) 以外,在 Certified Scrum Master 課程講義中有提到一點:

因為 pair programming 打破人的界線 (boundary)

Teddy 很同意,咱們台灣人連「藍綠蜘蛛網」都打不破了,更別說要打破人的界線。

*************************************************************************

Teddy 提一下自己擔任 Scrum Master,在專案中鼓吹 pair programming 的經驗:

  • phase 1,政令宣導:鼓勵團隊有機會的話儘量採用 pair programming 。結果是,沒人理Teddy。
  • phase 2,自己下海:找一、二個團隊成員來和 Teddy pair。成效還不錯,不過自己累的半死。當 Teddy 停止抓人來配對之後,也沒有人繼續嘗試。
  • phase 3,強迫中獎 I:告訴團隊這個sprint所有開發工作都要以pair programming的方式進行。結果,成效很好但只維持兩個sprints。畢竟強制的方式無法持久。
  • phase 4,無為而治:。從此不再特別強調,由團隊自己決定。經 Teddy 非正式估算大概只有10~20%左右的開發工作會採用pai programming。

說真的,到了這個階段 Teddy 已經沒輒也沒力了。Teddy 自己非常相信 pair programming 的 「藥效」, 但良藥苦口,團隊不肯安心按時服用,Teddy 也不能強迫 (難道真的是叔叔有練過,小朋友不肯學嗎?)。雖然在 retrospective meeting 經常會有人提出需要增加 pair programming 的時間,但神奇的是,等到真正領取工作的時候,又是各做各的比較多 (也許 retrospective meeting 缺少 action plan?)。

  • phase 5,強迫中獎 II:以往在估算 tasks 的時候,團隊只估算一個人做這件 task 所需的時間。也許是這個因素,導致於一個 task 通常只由一個人完成。從上週開始,團隊在 sprint planning meeting 時,就大致決定哪些 tasks (約略 80%) 需要採用 pair programming ,將其所需時間乘2,並且在 tasks 上面寫一個 P 字 (不是維大力P),提醒團隊這是一個經過大家同意,需要 pair programming 的工作 (而且已經分配兩倍的時間)。由於才實施一週,因此長期成效尚難斷定。不過目前感覺起來這是 Teddy 試過的幾種方法中比較好的。當然,決定採用這種方法之前,Teddy 還是循循善誘一番,且經過團隊同意才實施。

友藏內心獨白:什麼是「藍綠蜘蛛網」?

2009年11月14日 星期六

掛羊頭買狗肉:Scrum篇

幾個禮拜前接到指導教授打來的電話,告訴Teddy系上的C老師想邀我回去給一場演講。我心想,應該是研一的「專題討論」這門課,Teddy以前也上過。大致上就是每兩週找一位校外人士來演講,雖然偶有佳作,但大部分的演講內容都是鴨子聽雷。這種感覺好比買樂透一樣,買的時候充滿希望,開獎的時候卻屢屢槓龜。好吧,終於換我荼毒學弟了,欣然答應。

就像老祖宗常說的:「代誌不是憨人想A駕泥簡單」,這回Teddy又錯了。幾天後Teddy收到C老師寫的email,原來是這學期學校在大一新開了一門必修課叫「大學入門」(友藏內心獨白:這是什麼東東,我還佛學入門勒),專門給大一新生一些大學生涯的概念。這落差太大了,從研一變成大一,一下子年輕了四歲。這還不打緊,最重要的是,Teddy沒有唸過大學啊,要講什麼?可是都答應了,又不好拒絕,只好硬著頭皮上了。

就在Teddy即將完全忘了這件事的時候,這禮拜一再度收到C老師的email,通知Teddy不要忘了這禮拜五的演講(就是今天啦,13號星期五,還真會選日子)。哇,這麼快就到了,還沒想到當天要唬爛的主題…還好,前一陣子去上了 Certified Scrum Master 課程,就來講這個好了。

「休蛋一A」,此時Teddy聽到鄉民們的怒吼:「跟大一生講這個會不會太超過了,況且和主題也不符」。正所謂「狗掀門簾,全仗著一張嘴」,沒錯,這時候只能發揮想像力,生命會找到出路的。

Teddy去之前就在想,這門課排在禮拜五七、八節,這不是引人犯罪嗎?這種不翹課對不起父母的時段,果然很適合這種營養學分(這…有算學分嗎?)希望到時候沒有人啃雞腿、吃泡麵、看連續劇….

15:10準時上課,C老師帶著Teddy,一踏進教室,C老師就說:「人怎麼這麼少」(依Teddy目視判斷,應該只來了一半吧)。意料之中,Teddy終於當了一回事前諸葛亮。

演講歷時約70~80分鐘,精采程度不在話下。原本有一個Scrum練習要給學生們做,為了不耽誤大家回家的時間,就取消了。整個過程下來發生幾件令Teddy十分感動的事:

  • 沒有人吃雞腿或泡麵(好樣的,比台大醫科水準還高)
  • 睡著的人只有6個左右(也不錯,水準跟台大醫科差不多)
  • 完全不理會Teddy而自顧自聊天的人控制在5-8人左右
  • 睡著的都很安靜,沒有打呼吵到隔壁聊天的人
  • 聊天的人也很自制,放低聲量沒有吵醒隔壁睡覺的人
  • 學生中有一位是友邦的黑人同胞,應該聽不大懂中文吧。可是她撐到最後10分鐘才睡著(因為之前都在忙著和隔壁的人聊天,辛苦您了)

另外,有兩件不應該發生的事:

  • 有一個坐在Teddy演講位置前方的學生,居然整場都給予Teddy很認真的表情和眼神。敢問這位仁兄,您是咖啡喝太多了嗎,這麼有精神!
  • 另外,現場控管不好,居然被滲透了兩、三位研究所的學生。你們大學應該都有畢業吧,還來湊什麼熱鬧。

想看看Teddy賣了什麼狗肉,這裡有演講投影片可下載:http://pl.csie.ntut.edu.tw/~ctchen/pdf/csie-2009-11-13-v0.2-blog.ppt

2009年10月30日 星期五

我變成有牌的 ScrumMaster 了

00:55~01:20

話說上禮拜四、五上完了 Certified Scrum Master 課程之後,我才想到,阿...怎麼沒有發證書呢? 這可是關係到四萬塊大洋...後來才知道,上完課程之後,會得到一個http://www.scrumalliance.org/ 網站的帳號,登入之後填一些基本資料,然後便成「Certified Scrum Master 候選人」(這是什麼東東?)。之後還要參加一個線上測驗 (今年10月1日才有的規定,之前好像不用),要在一個小時內回答61題,通過之後才會成為 Certified ScrumMaster。

證書長這樣子

這個認證只有兩年期限 (這兩年的會員費用已經包含在上課費用裡面),兩年過後還要重新考一次(好像要付 150 美元的會員費),認證才會繼續有效。不愧是老外,真會賺。

考試過程倒是沒什麼特別的,除了一些題目不會寫以外,其他都還順利 (不會寫不就是最嚴重的問題嗎!) 不過有一點我倒是要寫信去抗議 (和考試無關),就是在填寫個人資料的時候,國家一欄居然出現 「Taiwan, Province of China 」,哇...靠...左邊走...,這網站是外包給阿共開發的嗎?準備明天寫一封信去要求更正。

Teddy 非統非獨,只不過,有出國玩的人都知道,阿共的旅客水準實在有待加強。Teddy 可不想變成阿共不可分割的一部份。話說回來,連體嬰都可以分割了,世界上哪有什麼不可分割的?

2009年10月25日 星期日

功課寫完沒: The definition of done

根據事後諸葛亮表示,小朋友最怕父母問的一個問題,就是「功課寫完沒?」短短五個字,對幼小的心靈而言,卻具有如同原子彈般的殺傷力。因為這個問題的答案,決定了接下來的時間,小朋友們能不能:

出去玩
看海綿寶寶
Play Game
吃點心
看漫畫

眼看人生中這麼多美好的事情,就要被一個簡短的是非題給毀了,幼小的心靈學會了什麼叫做善意的謊言:「寫….完…了…啊(答的很心虛,事實是,完全沒動,或是亂寫一通)」

當父母的自然也不是省油的燈:「寫完了啊,拿出來我看一下」,當場就被抓包了。

***

隨著時間飛逝,小朋友長大了,從此過著幸福快樂的日子…. 錯!這個「功課作完沒?」的問題變成:

程式寫完了嗎、Bugs 解了嗎、軟體可以release了嗎

為了不傷老闆的心,你大聲的說出:寫完了、解好了、隨時可以release

此時的你,心中浮現小小的吶喊:

寫完了,還沒測試
這個 bug 解好了,但是以另外一個 bug的身分繼續存在著
隨時可以release,附贈bugs吃到飽以及口齒不清的說明文件

「你等會」曾說過:「阿共再大,也沒有我老爸大」,這句話一點也沒錯。爸爸媽媽可以抓出你功課沒寫完,而阿共卻看不出你案子沒做完。隨著年紀漸長,功課有沒有寫完這個問題越來越難回答,因為常常連做功課的人也不知道,功課的範圍有多少,何時才寫的完。

定義功課寫完沒 (The definition of “done”)

在Scrum裡面,Scrum團隊如何知道需求是否已經做完,可以被Product Owner驗收?所以Scrum提到團隊需要有一個對於「完成的定義」。這個定義可能包含:

程式可以動、通過單元測試、通過其他各種測試(integration, function, system, security, performance, availability, robustness…)、重整程式(refactored)、更新重要設計文件、完成使用手冊、可以被安裝等等。

唯有事先定義好done,才能知道每一個 sprints真正完成了多少功能,而不是灌水的數據,也才有可能在每個sprint結束時,產生一份「可以交給老師的作業」(potentially shippable products)。


什麼是軟體工程

關於軟體工程到底算是個什麼東西,各種定義都有,在此Teddy要提供一個孤狗找不到、課本沒有寫、危機百科尚未編目的定義。此定義來自於Teddy的指導教授:

Software Engineering is Talking Engineering

這真是太偉大的定義了。說穿了,軟工這一行,靠著不就是一張嘴。會講話的,大家買單,一起當白老鼠。這跟直銷有點像,當下線夠多的時候,上線自然水漲船高,大師名號手到擒來。不會講話的,做到死也沒人知道。這就是為什麼程式寫不好你老闆不會知道,而講錯話卻馬上被白眼的原因。

這一點從物理的角度也可得到證明:

音速 >> 人類動作的速度

除非某天鄉民們能帶個火把或是小手電筒「自行發光」(拿個什麼貴死人不償命的 CMMI 證照):

光速 >> 音速 >> 人類動作的速度
(大牌顧問) >> (Manager or 小牌顧問) >> (小工程師)

不過,千萬別忘了,還有一個最重要的力量左右專案的一切,你的老闆:

黑洞 >> 光速 >> 音速 >> 人類動作的速度
(老闆) >> (大牌顧問) >> (Manager or 小牌顧問) >> (小工程師)

至於小工程師,回家唱唱蔡秋鳳的「金包銀」吧。

2009年10月24日 星期六

免費的 Papers, 快來看喔

Teddy身為博速級的軟體從業人員,身邊隨時帶著三、五篇papers(論文),也是很自然的事(鄉民甲:被我抓到了,抄襲功夫足球的對白喔)。最近在Teddy門可羅雀的部落格上「話虎爛」的文章比例太高,也不行,所以這次介紹幾篇Teddy曾經發表但卻沒什麼人看的論文,來充充篇數。

Exception Handling Refactorings: Directed by Goals and Driven by Bug Fixing

一個支援Scrum 的工具: 利用問題追蹤及持續整合系統

JCIS2:一個分散式持續整合系統

JCIS3:一個支援跨平台專案的持續整合系統


這幾篇文章都有一個共同點,就是都屬於 agile methods 領域。第一篇有點長,不過,如果鄉民們有失眠的困擾或是吃飽沒事想了解如何重構與 exception handling相關程式碼,這一篇是目前地球上寫的最好的一篇。

2009年10月23日 星期五

Certified Scrum Master, Day 2

話說昨天的課程,Teddy可是拼著老命去參加的,因為就在禮拜五的清晨,Teddy突然牙痛,一整夜幾乎沒睡。還好課程內容有料,在服用兩杯咖啡之後,成功的阻擋Teddy與周公的meeting。昨天下課回到家之後,立刻直衝牙醫診所,還好平常幫Teddy看牙的醫生當晚有看診。醫生檢查了老半天,也不能確定是哪一顆牙齒有問題,醫生告訴Teddy:「我們有兩個嫌疑犯,牙齒X和牙齒Y,我認為牙齒X的嫌疑比較大,這次先把牙齒X的神經給抽掉,如果回家之後過幾天還會痛,我們再來處裡牙齒Y。」我ㄌㄟ…靠過來一點…Teddy口中的居民已經沒剩下幾個了,拜託醫生你要猜的準一點啊。

離開診所。從此之後,Teddy又「少了一根經」。

以上關於Teddy個人健康情況的報告,請直接跳過…(鄉民甲:切,我都看完了你才叫我不要看)

言歸正傳,第二天的課,講了幾個Teddy自以為早已知道其實不然的東西:

* Product backlog
* Product backlog refinement (這個Teddy沒有印象在Scrum的書裡面有看到過)
* Sprint backlog
* Daily scrum
* Sprint retrospective
* Working agreements (這個好像也是第一次聽到)

另外,Teddy以前看到scaling scrum 相關的議題都直接跳過,Why…如果你的team只有6 , 5 , 4 個人,有需要擔心這個問題嗎?依據agile methods的精神… deciding as late as possible, 下一頁。好里佳在,今天的課程也有涵蓋這個範圍,因為善心人士可能會問Teddy這個問題。

課程結束之後,Teddy拿了一本書給Bas簽名,並且跟兩位講師合照一張相片。





夜深了,本集播放到此結束。以後有機會再整理一下這兩天上課的心得。

友藏內心獨白:「耶,怎麼沒有發Certified Scrum Master證書?」

2009年10月22日 星期四

Certified Scrum Master, Day 1

Certified Scrum Master Course 終於巡迴到台灣,今明兩天在台北神旺飯店三樓盛大舉辦。上課時間早上9:00到下午6:00,講師為Bas Vodde(荷蘭人,現居住在新加坡,好像有六年以上採用Scrum的經驗…不確定有沒有聽錯…) 與Clinton Keith(老美,參與過許多戰鬥機與遊戲專案),都是經驗十分豐富的專家。上課的學員,包含Teddy共有14人,其中有一位是Bas公司的員工,來自香港(長的很像Teddy以前的同事,相似度85%)。所以正港的臺灣人只有13位,其中某遊戲公司與某病毒製藥公司各派出四名員工參加(有富爸爸的感覺真好,一套四萬的鯊魚衣,喜歡嗎…爸爸買給你… YES)。另外有兩位曾經與Teddy一起上過CMMI課程的前輩,資金來源不明;還有一位來自三個I,加上Teddy,耶,還有一位漏網之魚的背景沒有調查清楚。

一疊厚厚的四萬塊新台幣要拿去換一張薄的幾乎讓人忘了它的存在的證書,對Teddy而言C/P值不夠高,原本是沒有打算報名參加的。後來在某位善心人士熱心贊助之下,Teddy欣然接受,就報名了。先講結論,第一天上課的經驗是:「這兩位遠來的和尚還挺會念經的」,尤其是Bas,很幽默的,而且講英文的時候特意放慢速度,咬字非常清楚,大家都聽的懂。

為了把這筆善款的價值提到最高,Teddy事先把之前看過的Scrum書籍拿來出來複習一遍,抱持著自助火鍋「吃到飽」的精神,先寫下10個問題準備發問。上午的課程苦無發問機會,眼看就要吃午飯,可能會各作鳥獸散。不過不知是幸運還是不幸,午餐居然是16個人在一個包廂內圍著一個超大圓桌一起吃飯,Teddy當場傻眼…好像幫派或是政客在「喬」事情的場景。好死不死,Teddy左手邊沒人坐,晚到的Bas沒得選只能坐在Teddy旁邊。利用上菜空檔與吃飯時間,Teddy用「菜英文」向Bas請教了幾個問題。聊了幾句之後,服務生上了第一道菜,Bas忽然用「流利」的中文問服務生這道菜是什麼。哇哩勒,難道阿斗仔也學會咱們台灣人「莊孝唯」這一套…一問之下,原來Bas的老婆是北京人(不是住在周口店的那種),他在家裡都跟他老婆講中文。

關於Bas中文一級棒這件事,還不是今天最令Teddy感到意外的。讓Teddy最感意外的事,居然是Bas說Scrum裡面不使用focus factor。這個Teddy在一年半前從Scrum and XP from the Trenches 這本書學來的方法,居然被Bas說成:「Scrum沒有focus factor這種東東」。天啊,這好比「你等會兒」曾說過:「釣魚台是日本不可分割的一部分」更令Teddy難以接受。不過Bas補充說明,如果Teddy服用focus factor之後「自我感覺良好」,表示此藥物沒有副作用,可以放心繼續服用,不必因噎廢食。各位看官,如果是你,你還啃的下去嗎?

最後,Teddy拿出Ken Schwaber(身分等同XP的Ken Beck)在N年前所寫的論文「Scrum Development Process」(請參考下圖,取自該論文)來請問Bas,「為什麼這篇paper裡面提到的Scrum,還包含了Pregame(planning & system architecture/high level design)與postgame(closure)兩個phases?」Bas輕描淡寫的說:「這篇paper太舊了,現在Ken已經不談這兩個phases了」。真帥,一槍斃命。



眼尖的鄉民們可能注意到了,上圖中Ken稱呼Scrum為「Methodology」,現在似乎比較常用Scrum Framework。Teddy一向對於「大家來找碴」這類活動不甚擅長,沒有留意到Ken好心留下的線索。再提醒一次,「Planning & System Architecture」和「Closure」已經過了保存期限,擅自服用者請自負風險。

說真的,第一次看到這張圖,覺得好眼熟…怎麼有點RUP的感覺:

Planning & System Architecture = (Inception + Elaboration * 0.5)
Sprints = (Elaboration * 0.5) + Construction
Closure = Transition

這個問題Teddy一直苦思不解,雖然也曾經懷疑這篇paper的時效性,但畢竟只是猜測。在Bas解惑之後,Teddy又想到古人的名言:「盡信 Papers 不如無 Papers」。YES,老祖宗的智慧真的不可忽視啊。

今天的課程如果真要說有什麼美中不足之處,除了某位疑似感冒的學員沒有戴口罩之外,就是「吃的東西太少了啦」。這些搞agile methods的人,不都是最會吃吃喝喝的嗎?怎麼現場只有咖啡、茶,以及三樣小點心(餅乾和超小蛋糕之類的),好像稍微少了一點。如果有,ㄟ,燒賣之類的熱食,就「萬德佛」了。畢竟,古人有云:「吃完甜的,都嘛會想要來點鹹的,此乃人之常情是也」(請提供此典故的出處…)。

友藏內心獨白:「過期的paper東西,請自動下架」

2009年10月13日 星期二

事後諸葛亮之法力無邊

八八水災之後,某藏傳佛教活佛造訪嚴重受創的寶島台灣,並為災民祈福的行動,引起了很多爭議。鄉民們的看法,大致可分為下列幾點:

1. 這都是在野黨的陰謀,用來破壞兩岸(國共?)關係。
2. 這是某在野黨市長為了提升自己個人聲望所作的縝密規劃。
3. 阿共說:活佛是政治人物,不是宗教人物。
4. 啊這次的災民很多都是信奉基督教的原住民,找來藏傳佛教的活佛與我們的信仰不符啦(阻抗不匹配?)。
5. 語言不通(有這一條嗎?)
6. 其他(分類的最後一項,一定要加上「其他」,以達到一網打盡之效果。內容請自由發揮之)

話說Teddy與活佛的關係頗深,因為活佛是西藏人,而Teddy是「西藏…路」人。平平都有「西藏」二字,Teddy當然要替活佛為台灣帶來的偉大貢獻說幾句話。

活佛所帶來撫慰心靈的能量是無形的,不太容易說明。正所謂「眼見為憑」,因此Teddy嘗試將此無形的力量具體化,以方便各位參透箇中奧妙。

八八水災之後,緊接而來的「芭瑪」颱風,相信大家對其詭異的路徑,都還記憶猶深。眼看著芭瑪就要直撲台灣南部,此時南台灣卻好像被一個無形的防護罩所保護著,芭瑪無論再怎麼樣努力的嘗試,都無法突破這個防護罩。這防護罩就是活佛當初在南台灣祈福所形成的,在防護罩保護之下,芭瑪只能無奈地滯留在巴士海峽好幾天,無法越雷池一不,最後無奈轉向南下,鬱鬱而終。

當中秋夜台北烏雲罩頂的時候,據鄉民表示台南居然可以看到大大的月亮。真是太感恩了。可憐的宜蘭和菲律賓,少了活佛的庇祐,大雨成災。

講到這邊,各位應該知道下次活佛訪台行程要如何安排了吧,至少也要來個八天七夜環島之旅才夠看的啦。還有,簽證費貴死人不償命的歐巴馬先生,據說活佛年底要到華府訪問,你居然打破慣例不與他會面。小心,卡翠納就在你身邊…

友藏內心獨白:「ㄟ,防護罩有效期限多久?」

2009年8月19日 星期三

麥甲我蓋布袋

Teddy雖然已經畢業10個月了,但因為工作上需要使用到Teddy之前在校時與實驗室學弟共同開發的軟體系統,所以每兩週至少需要回學校一次,將Teddy工作上的需求告訴學弟們,順便監督他們有沒有好好開發軟體。這一切都是義務性質,實驗室沒跟Teddy公司拿錢(應該說,公司沒付錢給實驗室),實驗室得到的是一些業界實務上的需求,以及一個畢業學長的嘮叨。

系上去年搬進學校剛蓋好的新大樓,我們實驗室在13樓,老師的研究室在15樓。在大樓的13、14樓,各有一個小陽台。13樓的陽台比較大,就在我們實驗室隔著走廊的正對面。雖說是新大樓,不過設計的很爛,爛的程度已經到達罄竹難書的地步。隨便舉一個例子,男廁和女廁居然位於不同的樓層。以我們實驗室所在的13樓為例,只有女廁,男生要上廁所,只能向上跑到14樓或向下到12樓。

接下來Teddy要講的故事就發生在這樣的時空背景之下。昨天Teddy回學校和學弟討論結束之後,依據既定行程,先到廁所報到後再回家。一到14樓,就看到有學生(在此稱為A君)在小陽台抽菸。依據菸害防治法,大樓裡面應該是不能吸菸的。Teddy已經不只一次看到有人在14樓陽台抽菸。算了,反正都畢業了,Teddy忍住心中那把熊熊正義之火,上廁所先。

上完廁所再次經過陽台,好死不死,A君剛好抽完煙,在走廊與Teddy面對面相遇。這算是上天的安排,讓Teddy代替月光來懲罰他。

Teddy:你不知道大樓裡面不能抽菸嗎?
A君:(剛開始似乎嚇了一跳,心想怎會有這麼白目的人問這樣的問題。)
回過神之後,態度還算客氣的說:「對不起,下次不會了」
Teddy:我幾乎每次經過,都看到你在陽台抽菸。都唸到碩士了,行為還這樣。
A君:邊說對不起,邊往自己的實驗室前進。換句話說,就是不想理Teddy。
Teddy:(繼續追殺)你是L老師的學生嗎?
A君:不是,我是C老師的學生。
Teddy:(補上最後一刀)C老師的學生還這樣!(PS:Teddy和C老師很熟)
A君:遁逃入實驗室。

隔天,Teddy問了我們實驗室的碩士班學弟,也問了C老師實驗室的博士班學弟,他們都知道有人在陽台抽菸,也知道是誰。Teddy就很納悶,既然知道,為何不加以勸阻?

古人有云:「聞過則喜」。Teddy要說,這都是騙人的啦。君不聞幾個月前的一則新聞,幾名惡少把一名高職砍了好幾刀,原因就是因為該名高職生勸阻惡少們不可在校內吸煙(大概是這樣,細節忘了)。諸如此類的新聞,屢見不鮮。

預防萬一,Teddy告訴碩士班學弟,如果以後Teddy走在路上被蓋布袋,請轉告檢調單位,A君就是頭號嫌疑犯。

友藏內心獨白:「地球太危險了,趕快回火星吧!」

2009年7月30日 星期四

攏是錢

今天看到一則新聞報導,國際泳會規定從明年開始,游泳選手將不可以穿俗稱「鯊魚裝」的高科技泳衣參加比賽。為什麼要有這種規定呢,為了公平。

首先,鯊魚裝價值不斐,Teddy如果沒記錯的話,一件好像要兩萬台幣起跳。這還不打緊,如果一件鯊魚裝可以穿個十年、八年的,這也就罷了,平均起來一天只要 5.4794520… NTD。問題就出在於一件鯊魚裝只能用10次左右,下水一次要2000 NTD,真是太超過了。所以,好野人就可以穿鯊魚裝訓練、比賽、獲獎,沒錢的就只能泡泡水一邊涼快。

這種用錢堆出來的成績,Teddy也曾經嘗試過。2005年某月某日,Teddy收到一份天上掉下來的禮物-免費參加Introduction to CMMI和Intermediate Concepts of CMMI課程(其實不是免費,而是Teddy的老闆出錢)。這兩個課程,加起來沒多少天,收費卻要六、七萬(詳細金額忘了),課後拿到兩張證書,很真貴珍貴。

想一想,老美真是厲害。聯邦政府沒錢就狂印美鈔。搞軟體的,可以開一大堆認證的課程,一樣都是用紙換摳摳,真是太棒了。

今天收到一封廣告信,希望Teddy報名十月22-23在台北舉辦的Certified Scrum Master培訓課程。Teddy已經應用Scrum有一年多的時間了,收到這封信,知道Certified Scrum Master課程居然在台北舉辦(之前曾經查過資料,好像都辦在歐、美比較多),覺得有點心動。看了一下費用…. 兩天,四萬…這件鯊魚裝有點貴,可惜Teddy已經畢業了,不然可以ㄠ老闆出錢…無緣的Certified Scrum Master。

2009年7月26日 星期日

我真是猜不透你啊:甘蔗汁篇

看過食神的人都應該還記得唐牛對著史提芬周大喊「我真是猜不透你呀」這個橋段。別以為這只是電影裡的情節,在日常生活中,心中經常會浮現小小的吶喊:「我真是猜不透你呀」。

今天晚上到南機場夜市買沙威瑪當晚餐,順便買了兩杯不加糖、不加冰的甘蔗汁。果汁店貼著大大的價目表,上面寫著:

甘蔗汁一杯30,兩杯50。

Teddy點了兩杯,幾分鐘後,店員卻只送來一杯。喔,原來是他沒聽清楚,沒關係,再加一杯就是了。此時,店員卻用刀子切開已經做好的那一杯甘蔗汁的封口。這是什麼情況,有必要倒掉重做兩杯新的給我嗎?想太多,繼續看下去。

此時,店員拿出兩個稍為小一點的杯子,把原先做好的那一杯甘蔗汁倒進這兩個小杯子裏面,裝滿了一杯,另一杯只有三分之ㄧ滿。接著,再現榨了一點甘蔗汁,把第二杯補滿。拿到兩小杯甘蔗汁的Teddy,乖乖的奉上50大洋。離開之前,忍不住問了店員:「買兩杯比較少嗎?」

是滴,店員往價目表一指,「上面有寫」,此時Teddy靠近一看,才發現,在原本大大的,兩杯50旁邊,後來用很細的筆加上了 360 cc 這幾個小字。(原本一杯應該是500 cc)

友藏內心獨白:「甘蔗汁,我真是猜不透你啊!」

2009年7月24日 星期五

持續整合樣式: Project (專案)

在開發軟體的過程中會產生各種不同的檔案,包含原始碼、編譯後的二進制程式碼、建構檔(build files)、測試程式、測試資料、資源檔、設定檔、函式庫、工具程式、API說明文件、軟體安裝程式、使用手冊等等。這些眾多的檔案,如果不妥善加以管理,將會使得整個開發流程變得一團亂,拖延軟體開發的進度,並造成軟體錯誤。

因此,為每一個軟體開發計畫建立一個軟體專案,妥善規劃專案結構以存放不同種類的檔案。專案結構主要受到下列幾項因素所影響:軟體開發團隊所使用的程式語言、整合開發環境(IDE, integrated development environment)、專案種類(桌面程式、網頁程式、外掛程式、J2EE程式、Web Services程式、嵌入式系統程式、驅動程式)、專案數量與大小、建構工具。

圖1為Eclipse新增專案精靈畫面,依據使用者所選擇的專案類型來建立基本的專案結構。圖2為一個典型的Java桌面程式專案。其中主要的目錄有:

(1) src:存放程式原始碼(production code)。
(2) test:存放測試程式原始碼(test code)。
(3) bin:存放編譯後的Java bytecode(.class檔案)。
(4) lib:存放專案所參考的函式庫(.jar 檔案)。
(5) dist:存放可散佈給使用者的所有檔案。
(6) testdata:存放開發時所使用的測試資料


圖1:Eclipse新增專案精靈可為不同類型的專案建立不同的結構



圖2:一個典型的Java應用程式專案結構

2009年7月23日 星期四

健康檢查與持續整合

內湖捷運剛營運沒多久,上演了素人乘客高空走鋼軌的精采表演。據事後諸葛亮表示,內湖捷運的問題出在沒有拜乖乖「測試時間不足」。

前幾天看到一則新聞,一名二十多歲的青年,罹患了大腸癌末期。要篩檢大腸癌,最有效的方法莫過於照大腸鏡,就是用一根前端有攝影鏡頭的管子通到你的屁屁裡面拍照。在民風如此純樸的台灣,願意自動受此特殊待遇的人只存在於特定族群,因此很多大腸癌被發現的時候都已經是末期。

阿邊最近因為生病戒護就醫,才發現膽固醇指數破表(A太多 吃太好),血管隨時有爆管的危險。阿邊心裡非常疑惑,耶,我上次健康檢查都很正常啊,怎麼會搞到破病住院?一定是台灣的人權不彰。阿邊今年已經五十好幾了,上次健康檢查已是N年前。

上面這三個故事說明了「測試」或是「檢驗」這件事情的三個困難點:

(1) 沒時間,我沒時間(用唱的)…
(2) 不方便
(3) 太昂貴

如果有人發明一種全身健康檢查的技術,做一次只要十分鐘,費用不到一百元,這樣健保就可以補助全台灣兩千x百萬國民每個月每半年做一次全身健康檢查,相信可真正達到早期發現,早期治療的效果。

很遺憾,這種應用在人體的技術尚未發明。但是,Teddy卻可以在軟體開發領域觀察到類似的效果,為自己開發軟體的健康把關。這種傳說中神奇的技術,就叫做「持續整合」(continuous integration)。

用白話文來說,持續整合就是不斷的「操」你所開發的軟體。操的方法千奇百怪,從最簡單的編譯、單元測試,到稍為複雜一點的靜態程式碼分析、系統測試等,只要你想的出來,都可以加進去。在37度C大太陽底下按表操課之後,品質不良的軟體,很快的就像成功嶺上的草莓兵一樣,不支倒地,被偶一偶一送到醫院,住院觀察。品質優良的軟體,則順利通過所有嚴酷的考驗,等待下一次出操訓練。

為了證明Teddy有受過正統軟體工程教育,以下以UML class diagrams 來說明持續整合裡面的重要概念。先以健康檢查例子說明。請看圖1,一個「人」,有很多個「器官」,某些器官與其他器官有很高的「相依性」,例如,胃潰瘍通常會造成食道灼傷或是十二指腸潰瘍。有錢的大爺們可以幫每一個器官做很多次的「健康檢查」,每次健康檢查會使用一種以上的「檢查儀器」。例如,檢查胃潰瘍可以照X光(事先要吞下噁心的白色顯影液)或是照胃鏡。檢查儀器會產生一種以上的「檢查報告」。每一個檢查儀器所產生的檢查報告,都必須要在特定的「檢查環境」之下,才有意義。例如,飯前、飯後測量血糖含量其結果就大不相同。換句話說,相同儀器,不同環境,會產生不同的檢查報告。





軟體和人很像,現在看到圖2。一個軟體產品(Product),由一個以上的軟體專案(Project)組成。例如,一個會計系統產品,可能包含處裡資料庫的(子)專案、處裡會計邏輯的專案、處裡畫面的專案、以及產生報表的專案。這些專案,彼此之間可能會有關係,例如,報表專案需要參考到資料庫專案。每一個專案,可以被建構(Build)很多次(被操很多次),每一次的建構,都可以指定要怎麼操這個專案。一個建構活動(Builder)就是一種操的方法,例如,編譯程式、單元測試、產生JavaDoc文件、產生JAR檔、產生安裝程式,都是一種建構活動。每一個建構活動,會依據不同的執行環境(Environment),產生不同的產物(Artifact)。例如,Java編譯活動(JavaCompileBuilder),在32位元作業系統與62位元作業系統下(不同的Environment),會產生不同的.class檔案以及每一隻Java程式編譯成功或失敗的結果報表。




持續整合的觀念很簡單,效益很大,但是就像大多數的best practices,都具有「知易行難」的共通點。小蔣名言:「有些事情,現在不做,明天就會後悔」準確地預言程式設計師必須過著debug 的人生

什麼,講到嘴角都是沫,你還是不懂持續整合是什麼碗糕?挖哩勒…別氣、別氣,洪蘭有云:每個人開竅的時間都不同。好把,這裡還有一個大易輸入法的例子:持續整合之於軟體,就好比試紙之於金色拱門的那一鍋油。要不是有這小傢伙,可以在短短的時間內驗出這一鍋油是否會讓客人們提早上天堂,各位勇敢的台灣人還不知道要繼續勇敢多久呢。

2009年7月16日 星期四

JNA (1): 在Java程式中直接呼叫Native Code

由於Java是一個跨平台的語言,因此許多與平台(作業系統)相依的功能,在Java語言中支援的並不多,此時如果你所負責的專案又一定要用到這些平台相依的功能(例如,讀寫實體記體體、IO Port),這時就只好請現場來賓幫忙,或是call out 求助於朋友。

Java設計者當然也很貼心地幫我們考量到這一點,提供了JNI(Java Native Interface)這個機制,讓Java程式可以三不五時的和外面的朋友串串門子。這些「外國朋友」為了不讓狗仔隊認出來,因此將自己偽裝成動態函式庫(Windows裡面的.dll檔或是Linux裡面的.lib檔)。由於這些外國朋友和Java講的語言不同,無法直接溝通,為了避免雞同鴨講,白忙一場,因此如果要透過JNI呼叫這些「外國朋友」(native code),還需要找一個翻譯(wrapper),讓Java透過這個wrapper來呼叫外國朋友。

看到這裡,你應該已經「ㄇㄨˇ煞煞」了。是滴,Teddy雖然寫了10多年的Java程式,但對於JNI的認識卻也只停留在紙上談兵的階段。像JNI這種麻煩的事,就交給年輕人去嘗試。Teddy今天要介紹一個「大易輸入法版本」的JNI,叫做JNA(Java Native Access)。透過JNA,就可以直接在Java裡面宣告你想要和哪些外國朋友溝通,然後直接呼叫他們。這種作法,很像在VB裡面呼叫Win32 API,或是在C#裡面呼叫dll。蝦米,這兩種都沒用過…沒關係,繼續看下去。

未滿十八歲的觀眾請注意,以下節目將在Eclipse環境中演出,若遇到看不懂而Teddy又懶的解釋的內容,請自動轉台。

(1) 建立一個新的Java專案,就叫它JNATest。



(2) 到JNA網站(https://jna.dev.java.net/)把 jna.jar抓下來,



(3) 在JNATest專案中,建立一個lib目錄,然後把剛剛抓下來的jna.jar輕輕放到這個目錄中。




(4) 在專案上按下滑鼠右鍵,選Properties,出現如下的畫面。點選左方的Java Build Path,再點選中間的Libraries,再按下右邊的Add JARs…按鈕,此時出現JAR Selection畫面(下下圖),把剛剛放到lib的jna.jar檔案加入。完成後畫面如下所示。






(5) 新增一個JnaMain class。



(6) 把下面程式打到 JnaMain中。



(7) 執行JnaMain,看到下面輸出結果。這樣你就可以在Java裡面呼叫C的printf函數了,黑皮!




報告完畢….




Teddy,給我「休蛋一A」,都沒解釋就演完啦?死豬!大家一定常常看到很多電影,也不都是沒什麼交代就結束了。說實話,程式的內容一半是從JNA網站上的範例山寨過來的,另一半則是從http://www.cplusplus.com/reference/clibrary/cstdio/printf/ 海盜過來的,所以這個例子就像是許多OO大師寫的文章一樣,懂得人不用看就知道,不懂的人看了還是不懂。Orz… 該睡了,吃水果先,好心的Teddy改天再解釋。

2009年7月11日 星期六

美簽:快速簽證之學術面談

五年前申請的美簽即將於今年八月過期,再加上有可能需要到美國出差,所以上個禮拜上網填寫了申請美簽的資料。資料填寫完畢之後,網頁秀出一個畫面,告知「您符合快速簽證服務」(我猜所有曾經獲得美簽又無不良紀錄的人可能都符合此資格),只要將面談時間安排在AM 10:30或PM 12:45便可享有快速簽證服務。沒想到台美關係已經這麼好了(幹的好,馬總統),記得Teddy五年前申請美簽時好像沒有快速簽證服務(這次是我第三次申請美簽,第一次申請後根本沒去美國,白白讓老美賺了簽證費)。既然有快速簽證,當然要享用一下身為台灣人的驕傲。上網查了一下預約的時段,所有下個禮拜AM 10:30 的時段都沒有名額了,因此就預約了7月10日 12:45這個時段。

話說當日11:40從公司搭計程車前往信義路的AIT,12:10就到了。預約的資料上面寫明:「早到者恕難進入」,先天奉公守法的Teddy,不敢提早闖關,所以就不怕死的先去漢堡王吃個快速午餐(大概15分鐘就用吃飽了),乖乖的等到12:45分再去。說也奇怪,Teddy提早了2分鐘到AIT門口,怎麼警衛已經讓人進入,趕快尾隨其他人一起進去。Teddy進去之後才發現,裡面已經有超過三、四十個人在排隊。哇哩勒,那Teddy剛剛在漢堡王是在等假的喔,AIT的資料有點廣告不實的嫌疑。

進去AIT之後,先把手機交給門口的警衛保管(警衛說,你這手機不錯喔…是滴,很識貨,這是有GPS功能智慧型PDA手機),然後經過金屬探測門。我前面有一位先生,還自動解下皮帶才經過金屬探測門(應該是常到美國的熟客,被訓練到自動寬衣解帶,還好沒脫鞋),我心裡就在想,阿又不是要搭飛機去美國,有必要這樣嗎。還好我的皮帶是夜市買的便宜貨,金屬含量不足,順利通過金屬探測門。接下來會有台灣源訊資料處理中心的人先幫申請者把資料檢查一遍,最重要的就是要看看我們有沒有乖乖的先去劃撥簽證費和給台灣源訊資料處理中心的資料處理費。資料檢查完畢之後,先坐在椅子上等待,順便強迫觀賞AIT製作的精美節目,告訴我們接下來要如何的過五關斬六將(最主要是說明掃描指紋的流程,先放左手的四根指頭,再換右手,最後是兩根大拇指),才可以得到一張「上國」恩賜的通行證。大約等不到10分鐘,那個節目也重複看了N遍之後,有一位長的很像海角七號裡面那個「茂伯」的服務人員,把我們帶到另一個房間內,開始正式的申請流程。

正式的申請流程其實只有四關,首先,把資料交給第一個窗口的人掃描。接著,到另一個窗口掃描指紋。第三關有一位留著長髮的小姐(簡稱P小姐)負責看每個人的資料,決定要不要把你叫過去詢問一番。運氣好的人,直接跳到第四關,就是拿回快遞回條(等於美簽通過),可以到快遞櫃檯辦理護照快遞。Teddy辦好前兩關之後,心理正在想這個快速簽證服務真好,等一下就可以離開,說不定還有時間去喝個咖啡什麼的。沒想到,「事情不是笨蛋想的那麼簡單」,不幸的事即將發生。

P小姐:「A先生,請問你是做什麼的」。此時Teddy依稀偷聽到生物…中研院…什麼什麼之類的。P小姐:「你需要到4號窗口面談」。P小姐:「B先生,請問你的學歷是?」。B先生:「博士」。P小姐:「你需要到4號窗口面談」。哇哩勒,就這樣,P小姐叫了三、四個人去4號窗口面談。此時P小姐叫到Kay(PS:Kay是Teddy的同事,當日一起去辦美簽),P小姐:「Kay,請問你是做什麼的」。Kay:「開發軟體的」。P小姐:你是學歷是?」Kay:「碩士」。沒事,過關。此時P小姐叫到Teddy。某驚、某驚,Teddy心想,同一個公司的,Kay都過關了,Teddy應該也沒事。P小姐:「Teddy先生,你和剛剛那位Kay小姐一樣,也是開發軟體的?」Teddy:「死豬」。P小姐:「什麼時候畢業的?」Teddy:「去年10月」。P小姐:你是學歷是?」Teddy:「博速」。P小姐:「你也要到4號窗口面談」。天啊,難道博速也是一種錯誤…就這樣,讓我經歷了前後加起來總時間長達約2.5小時的「快速簽證」。

P小姐一共叫了七、八個人到傳說中的「4號窗口」,奇怪的是,等了好一會,4號窗口一個人也沒有。過了可能有十幾分鐘後,見鬼了,P小姐居然一人分飾二角,又出現在4號窗口,接下來一連串匪夷所思的面談即將展開。我發現被叫去4號窗口的,好像不是學校的教授,就是有博士學歷的人。看了看4號窗口,上面寫著「學術面談」,我…靠…過來一點,Teddy一不進京趕考,二不應徵教職,這個「學術面談」是做什麼東東?難道美國政府要順便看看有沒有好的研究人才,挖角要美國上班? 想太多,接著看下去。

P小姐依據剛剛被她叫到4號窗口的順序,逐一地仔細盤問一番。由於問的內容很細(如果醫院門診醫生的問診時間有P小姐的十分之一病人就要偷笑了),又有七、八個人在等待,現場又沒有提供蘋果日報,整個過程真是無聊到爆。我覺得P小姐好像博士論文的口試委員,又像是系主任正在面試菜鳥助理教授,她問的問題包含了:你的專長、博士論文研究內容、研究方法、應用領域、工作內容、到美國參加什麼研討會、有發表論文嗎、發表幾篇、有無邀請函。至於P小姐問Teddy的問題則是:

P小姐:「你是什麼領域的?」
Teddy:「軟體工程」
P小姐:「你在公司做什麼研究?」
Teddy:「沒做研究,開發軟體,寫程式而已」

(P小姐露出疑惑的表情)

P小姐:「有想要繼續做研究嗎? 」
Teddy:「沒有」
P小姐:「這樣不是很可惜嗎?」
Teddy:「不會啊,我的博士研究是屬於實務的題目,就是要寫程式」
P小姐:「你到美國做什麼?」
Teddy:「總公司在美國,所以要員工準備好美簽,可能隨時要去出差」
P小姐:「所以你們台灣是分公司,要到headquarters 出差?」
Teddy:「對,我們是美商」

(P小姐拿出一張約半張A4大小的紙給我)

P小姐:「請用兩、三個句子寫上你的博士研究內容、應用領域、在公司負責的工作。寫好後再來找我」

後來Teddy發現每個人都被P小姐要求做相同的事。寫完之後再去排隊,我前面那位X先生好像是某科大的教授,P小姐又問了一堆問題,X先生很努力的解釋,順便要展示他真的是正港的教授,不是裝的。後來,很不幸的,X先生和另一位Y先生,都被P小姐要求填寫一張黃色的表格,並且要他們提供一份自己曾經發表過的論文列表、列舉一篇論文代表作(怎麼這些資料和教授升等審查那麼像? 還好沒要求SCI點數超過幾點才可以去美國)、到美國發表論文的摘要、邀請函、行程資料等等,傳真一份給P小姐。此外,P小姐還要他們自己三不五時到某個網址去查詢自己案件處理的狀態,整的流程大概要2~4週。最後還要帶上新、舊護照再跑一趟AIT辦理簽證。X先生和Y先生聽到臉都綠了(現代版的綠面人俑)。輪到Teddy了,我把寫好的考卷交給她。

P小姐:「這是什麼字?」
Teddy:「robustness」

P小姐:「這個字是?」
Teddy:「agile」

P小姐:「你的博士研究是做什麼的?」
Teddy:「就是研究怎麼讓軟體比較不會當機,如果有一個軟體跑三天會當,我們就看看能不能讓它跑五天再當」(友藏內心獨白:結果還不是當,這是哪門子爛研究…)

P小姐:「那你的研究方法是什麼」
Teddy:「就是研究agile methods的例外處理… 就是說,在軟體開發流程裡面,什麼時間點要做什麼事(隨便虎爛一下)」(友藏內心獨白:P小姐以前是審過期刊論文嗎,還是研討會的主持人?)

P小姐:「你去美國要受什麼訓練」
Teddy:「也沒有要受什麼特別的訓練,我們公司是在做主機板的,我在公司開發server management software,公司要求不時都要有人到美國去交流一下」

P小姐:「主機板怎麼拼」
Teddy:「motherboard」

P小姐:「喔,就這樣喔。」

之後P小姐消失約20秒,跟另外一個人討論了一下,回來之後就把快遞回條交給Teddy。(Teddy後面兩個人用羨慕的眼光看著Teddy,這情景就好像金馬獎頒獎典禮中,三個入圍者排排坐,最後宣佈得獎的是…Teddy…)在Teddy前面好像有四個人都被要求要填寫黃色單子,至於Teddy後面還有兩、三個人的遭遇就不得而知了。

此行心得:

(1) 快速簽證猶如馬總統的long stay(攏似假)。
(2) 如果你是博士,又要辦美簽,去美國的目的最好說是「購物」、「要去迪斯奈樂園玩」、或是「祭拜Michael Jackson」也行,就是不要去參與學術活動。
(3) 對付學術面談最好的方法就是不學無術。古人云:「柔弱生之徒,老氏誡剛強」,這話說的一點都沒錯。各位教授、博士們如果研究作的太好,又想跑去老美家裡耀武揚威,老美就算在審論文這一關沒把咱們幹掉,也非得在美簽這一關挖個洞。像Teddy這種無三小路用的博速,既不會危害美國國土安全,也不會像紅火蟻一樣到了美國之後就賴著不走,所以耍個2.5小時也就夠了。
(4) 馬總統,就算你爭取不到訪美免美簽,至少也爭取一下免學術面談吧。

後來回公司之後,在網路上看到一則真人真事。

面試官:「你為什麼要去美國」
面試者:(用台灣國語回答)「因為美國 is very good!」

2009年7月2日 星期四

在不同的Quartz Jobs之中共享資料

Quartz 是一個開放原始碼的排程(scheduling)軟體。要讓Quartz在我們設定好的時間執行特定的工作,首先實作Job 這個介面(interface)。Job介面只有一個方法:

void execute(JobExecutionContext context)

把要作的事情寫在 execute 裡面便可,當設定的時間一到Quartz自然會呼叫你的程式。Quartz的Job是沒有狀態的(stateless),如果你設定你的工作每一分鐘要被執行一次,那麼Quartz每次都會為你的工作產生一份新的instance,執行完畢之後就砍掉。如果希望這個工作每次執行能夠記住上次的狀態,便要實作StatefulJob介面。StatefulJob和Job內容完全相同,都只有一個void execute(JobExecutionContext context) 方法,差別在於Quartz會記住StatefulJob的狀態,也就是說Quartz只會幫實作StatefulJob的物件產生一份instance。例如,你有一個每一分鐘要被執行一次的StatefulJob,Quartz只有在第一次執行這個工作的時候會幫它產生一份instance,執行完畢之後會把該instance留下來等著下次繼續用。

關於stateless與stateful 的優缺點比較到處都有,大家孤狗一下便可。Teddy要說的是,如果兩個不同的Job要互相分享資料,要怎麼辦?看了一下Quartz Job Scheduling Framework: Building Open Source Enterprise Applications這本書,作者很好心的把這個問題留給我們自己思考。經過一翻有計畫的亂試之後,答案著實也很簡單:Quartz 的Scheduler介面,有一個getContext方法,會傳回一個SchedulerContext物件(類似Java的Map),把東西往裡面塞就可以了,所有屬於同一個Scheduler的工作可以看到SchedulerContext裡面的資料。

scheduler. getContext().put(“key”, “value”)

2009年7月1日 星期三

Architect-Builder

▲超級全能住宅改造王,畫面節錄自YouTube

七、八年前當 Teddy 還在念碩士班的時候,在一次專題演講的課程中系上邀請了國內某著名的物件導向大師前來開演,在此稱為 K大師。事隔多年演講的細節早已遺忘,難忘的是,Teddy 從此不需再費心閱讀K大師所出版的雜誌,因為 Teddy 無法認同 K大師的想法。

在演講中,K大師一再強調軟體開發要學習建築業,如此方可做大。在建築業中,大致可分為兩種人,一種是建築師(architect),另一種是承包商(contractor,也可以直接叫做工人)。建築師只負責規劃,不管施工的細節。如此,建築師在畫完設計圖之後就沒他的事了,可以閃人繼續接下一個案子;至於如何將藍圖變成實際的建築物,是所謂的「施工細節」,可以找一堆廉價的工人來施工即可(到哪裡找?中國大陸是當時很熱門的地點)。如果房子蓋不好是工人的問題,絕對不是建築師的問題,而高高在上的建築師也不應該插手這種屬於黑手工作的施工細節,否則將陷於施工細節而無法脫身接其他案子。

這種「按圖施工,保證成功」的想法與做法,還真的有一堆人相信(甚至到現在都還是主流想法)。Teddy 則是奉行敏捷方法(agile methods),多年之後,敏捷方法在 Teddy 心目中已成為一種信仰。不談理論,舉幾個情境說明為何「按圖施工,保證成功」在大多數的情況是行不通的。

(1) 身為一個程式設計師,曾經依據 architect 交給你的設計文件(use cases 或其他輔助的 UML diagrams)不加修改就可以直接做出系統的請舉手?
(2) 身為一個 architect,有能力寫出不需修改便可直接做出系統的設計文件(use cases或其他輔助的 UML diagrams)的請舉手?

Christopher Alexander 認為,要建造一個美麗、有生氣的建築,必須要揚棄傳統的建築流程。Alexander 建議 architects 與 contractors 應該要「金剛合體」,成為一種新的角色稱之為 architect-builder(註一)。這種精神,嗯…看過「全能住宅王」這個日本節目嗎?很像節目中 architects 扮演的角色。在「全能住宅王」中,建築師會事先到委託人的家裡去了解他們的生活背景以及對於住宅的需求,量身打造屬於這個家庭專屬的住宅。在這個過程中,建築師不是畫完設計圖就閃人,而是不時到工地視察,並且經常需要依據現場狀況動態的修改或增加設計。此外,幾乎所有「全能住宅王」的建築師都會自己下海動手設計一、兩件作品,而委託人也會因為建築師貼心的專屬設計而滿懷感謝之意。

Teddy常常聽到有人說 architects 不需要寫程式,甚至有的公司怕 architects 把手弄髒了,還貼心的明文禁止 architects 寫程式。看看 Kent Beck 怎麼說:「If you stop coding, you stop learning. 」

註一:The Production of Houses, chapter 1.