在Relational Database與物件技術的衝突下生活了幾年,最近想寫一些感想。無意中在網路上找到這篇精彩的文章:The Vietnam of Computer Science。
原先我是從這個Blog讀到的。這個Blog做了入門的介紹,也連結到原文。原文網址在此。原文很長,我還沒仔細看完,但是因為是很精彩的比喻,忍不住就先在這裡推薦了。
2008年12月12日 星期五
好文推薦︰資訊科學的越戰
2008年11月21日 星期五
極品程式碼--refactoring踢到鐵板(Part 2)
從事軟體這個行業,其中一個有趣的地方在於,程式碼要給機器(或compiler)看,也同時要給人看。我發現自己寫程式也是依照這樣的順序。迷糊健忘的我,永遠記不住任何一種語言的語法,常常用的library也記不住用法。幾乎都是靠IDE提醒、靠查閱文件,以及一些試誤的過程,直到讓電腦總算照我的意思走。接下來就要開始refactor,整理架構。把程式整理到看起來好讀又自然,再開發下一個功能。如果不在意程式碼好讀,功能一走通就繼續做下一個工作,過一兩天那支程式可能連自己都看不懂。
至於這次遇到的極品程式碼,為甚麼能發展到這麼複雜?歷代貢獻過的原作者們為甚麼能駕馭這樣的怪物,而我發呆幾天了就是看不懂?應該有什麼關鍵是我沒抓到的。(不肯承認自己特別笨。)
2008年11月20日 星期四
極品程式碼--refactoring踢到鐵板(Part 1)
最近遇到一個老舊的.Net系統,一直不斷出問題,而且程式碼複雜到大家都不敢碰。恰巧這陣子在練習refactoring的功力,所以手癢之下,決定拿其中最常惹麻煩的一個功能來翻修。
哇!這隻程式真是可怕。簡直像是經過Obfuscated的程式。正常的coding有可能做出這麼難下手的程式嗎?不知道當時原作者怎麼能想出這麼難懂的程式。只能用極品來形容。真要去追蹤只會頭暈目眩,像是天龍八部的珍瓏棋局一樣,內力不夠的話去盯著它看會不會吐血走火入魔呀!
究竟有多可怕呢?下面舉例講述其中一個字串變數strSysInfo生命週期,一個坎苛多變的命運。
2008年11月16日 星期日
拍這裡,拍現在---談寫實主義的海角七號
2008年9月28日 星期日
節約能源的關鍵 勇者才敢面對的真相
最近跟親友聊到環保的議題,發現很多人根本不知道,現代畜牧業對資源的損耗是很劇烈的。
例如水資源,先不提畜牧所污染的水源,畜牧本身就需耗用大量潔淨的水。只要少買一個速食店的漢堡,省下來的水資源足夠一個人一個半月的洗澡用水。當政府或環保團體呼籲我們節約用水,使用省水龍頭,放裝滿水的寶特瓶在馬桶水箱中,用洗米水洗碗筷與澆花等等措施,真正的最大效果是求得心安。以及能省一點水費。但是即使全民都徹底實踐家庭節水措施,對於整體水資源的節省量還是微乎其微的。比不上每天少吃一口牛肉所能省下來的水。
2008年8月20日 星期三
Library與Framework哪裡不同?
今天在Martin Fowler的Bliki上的Inversion Of Control那篇看到這段。這點之前我似乎隱隱中了解,不過說不出明確的定義。
Library是讓你呼叫的程式,而Framework會呼叫你寫的程式。或者說使用Framework時,你寫的程式是為了給Framework呼叫。像Servlet寫出來,是要放在Web Container給AP Server呼叫的。我們寫的Servlet有點像是Event程式一樣。
所以JavaMail是Library,而MVC Framework就是名副其實的Framework。Log4J是Library,JUnit是Framework。
2008年7月25日 星期五
2008年7月19日 星期六
2008年7月7日 星期一
豐田生產方式:愛惜老舊的設備
大野耐一在他的書中說,會計用語的折舊費、帳面價值,是為了會計與稅法方便而定出來的概念,但大多人忘記它跟設備實際的使用價值沒有一點關聯。混淆了這點,就會有以下的錯誤想法:
- "這個設備早就折舊完畢,任何時候都可把它丟掉"
- "設備的帳面價值已經等於零,若在這個設備上花錢改造,無疑是賠錢,不如換部性能好的新機器"
他書中沒有強調,但我覺得也要考量的是,新設備牽涉到新的操作流程的制定、操作方法的訓練、保養方法的訓練等成本,而且新設備穩定性也是未知的風險,這些因素都不該過於輕忽。
2008年7月5日 星期六
2008年6月27日 星期五
大家都是中低收入戶---真的是這樣嗎?
(本文發表後的後續有進行進一步的研究,請參照這篇。)
傳媒的好處,是讓我們秀才不出門,能知天下事。但是要小心傳媒一個很大的副作用。它會讓你以為,自己每天過的生活,週遭的一切人事物,都是假的、扭曲的或是少數的,媒體上描述的一切才是真的、才是大多人的看法。從媒體看來,似乎全民都支持A,討厭B。如果恰巧你和身邊的人都很喜歡B,你會以為大概是自己這一群跟不上潮流了。其實不見得是如此。
這次要談的是這篇工商時報的新聞:北市月薪五萬以下 淪中低收入。(如果超連結不能用了,請用標題搜尋一下。)這篇文章得到許多迴響,也令許多薪水階級沮喪與不安,聽說這兩天很多人在MSN上都寫"我是中低收入戶"。好多Blog都在討論這個新聞,感嘆台北生活不容易。
但是,等一下,真的是這樣嗎?我們的身邊的人收入真的那麼高嗎?真的一般的家庭都有這麼高的年收入嗎?當然,個人的經驗,只是偏頗的採樣,也許我只有機會認識窮人。而主計處可是用許多經費,做全面而專業的統計,應該不會錯吧。
話又說回來,這篇是很奇怪的報導,沒有出處,沒有官員或專家的名字,沒有主計處調查報告名稱與日期。沒有說明統計的是哪一年的資料。更怪的是,各報的報導都是這樣。(是互相抄的嗎?)
我追根究底的老毛病又犯了。找了一陣子,覺得應該是來自營建署的公告受理97年度住宅補貼理的附件三。
辦法中所謂的低收入戶,指的是列冊低收入戶。並沒有說收入低於某個標準的就是中低收入戶。附件中說參考主計處編印的95年家庭收支調查報告,其中台北市的平均每戶家庭收支可以參考這個網址。
我也不能完全肯定資料出處是不是這些地方。如果是的話,這篇報導有幾個地方要小心解讀:
1. 主計處的統計用的是平均值,但是通常我們說前段後段的分界,指的應該是中位數。如果資料分佈相當對稱,平均值跟中位數會很接近。但是分佈如有偏斜的情形,這中位數跟平均值可能有相當落差。舉例來說,如果二十人中,其中一位是百萬月薪的企業主,其他十九人是月薪三四萬的薪水階級,用常識判斷,後段班的標準,應該是收入最後十名,還是後十九名都算?用平均薪資為標準的話,這十九個人都是後段班。這不是我們一般常識上對於前後段的定義。台北市住比較多富豪、企業主、地主、科技新貴,財富分佈可能有不少偏斜的狀況,所以大多人都會低於平均值。用平均值來劃分前段後段很奇怪。
2. 原始資料看來,本業薪資所得只佔一部分。其他如產業主所得、財產所得、租金收入都加在一起,才有那麼高的總所得。這些當然不是每個人都有的。所以,一般人的薪資水準沒那麼高啦。
3. 辦法中並沒有將低於平均的列入中低收入戶。實際上台北市計畫補助的戶數大約只有一萬多戶,要計算評分,將補助發給最需要的弱勢家庭。從辦法看來,似乎身心障礙、單親家庭、原住民、受家暴侵害者等弱勢家庭的機會最高。中低收入的解釋,不知是有其它根據,還是記者個人觀點,巧妙地說成是主計處研究的結果。
2008年6月24日 星期二
豐田生產方式:改善
大野耐一說作業員的動作分為浪費跟作業兩種。浪費,指的是作業上根本不需要的動作,應該立刻去除的。例如等待、堆積半成品等。作業的話又分為『沒有附加價值』與『增加附加價值』兩種作業。沒有附加價值的作業,是本來該視為浪費,但現行作業下不能避免的。例如步行去取零件、拆開外購零件的包裝等。此外,剩下的是有價值的加工,稱為『增加附加價值的作業』。
排除浪費、提高『增加附加價值的作業』的比例至100%,是TPS永遠持續追求的目標。
2008年6月8日 星期日
抗議綜藝大哥大! 魔術比賽中虐待動物的表演
昨天看張菲的『綜藝大哥大』的『大魔競』單元,有一位參賽者的用鴿子做表演。當第一隻鴿子出現時,我心頭就糾結了一下。這隻鴿子全身經過粗糙地染色,而且不像一般表演中的鴿子那麼溫馴,一出場就狂亂地揮翅膀,極力扭動身體掙扎。看起來感覺是極度的痛苦與恐慌才會做出的反應。這鴿子顯然被鍊子之類的道具限制住行動,雖然無助地拍打雙翅,羽毛紛飛,顯然仍無法掙脫。接下來參賽者變出了第二隻、第三隻等等,每一隻竟然反應都一樣,現場特別來賓也有人一直說好可憐。表演者也似乎一直粗暴地使勁壓制鴿子的動作。
這不像是因為表演場合氣氛造成鴿子緊張。因為同樣節目同樣場合中,那麼多魔術表演都用鴿子,大多鴿子都很溫馴,偶而發生小意外,像是動物掉落在地上散步等等,不過從沒有見過動物在表演中這麼無助而拼死命的掙扎。讓人懷疑在練習期間,這些可憐的動物受到參賽者什麼樣的對待。
更可怕的是,這個表演中多次使用爆筒。從電視的音效聽不出來威力多大,但是從裁判講評時的抗議聽來,是用很大的爆筒。因為坐那麼遠,而且有那麼多經驗的裁判,都被爆筒嚇到。這爆筒,可是在這些飽受驚嚇的鴿子耳邊直接爆開來的。這麼弱小身軀不時承受爆炸的震波與火光,這種煎熬恐懼真是難以想像。怎麼會有人這麼對待這麼弱小的生靈?
劉謙老師在節目中說很多次,即使是魔術表演中也要尊重生命,愛護動物,即使中斷表演也要以動物的安危為優先考慮,這是魔術師專業的表現。劉謙老師說如果在歐洲,虐待動物會立刻被噓下台,如果是國際比賽,主辦單位會立刻拉下幕帘,淘汰參賽者。已經說了很多次,為甚麼還是有人變本加厲地虐待鴿子呢?雖然這位參賽者有被評審指責,但是照理說這樣表演應該立即被製作單位中斷才對。實際上製作單位不只讓他完成表演,而且這種殘忍畫面也直接播出。(我沒看完,不知道他是被淘汰還是晉級。)這位參賽者與節目製作單位都該受到譴責。
2008年6月7日 星期六
2008年6月6日 星期五
豐田生產方式:少量多樣生產
豐田生產方式TPS的設計不是朝向大量生產,而是少量多樣化的生產。他們認為,產品會有生命週期,汽車產業的景氣也是有高有低,所以生產方式的設計,不該只是為了增產而考量,也要能在減產的階段持續維持競爭力。
2008年5月21日 星期三
[抱怨文]煩人的充電變壓器
許多電器為了本體的輕薄小巧,將供電的變壓器分離出來。感覺上只有傳統的電器如電風扇、電視機會是一個插頭直接插在牆上,新的電器設備大多是要經過一個變壓器的。例如,我家的LCD電視,是普通插頭,但是電腦的LCD螢幕,就接了一個又大又重的變壓器。雖然這兩者的主要構造應該差不了多少。
更小巧的,裝電池的電器,也常常要附變壓器,為了充電用。像手機、數位相機、無線電話這類產品都是。以前的電子辭典是直接用三號或四號電池,現在很多也改為充電電池加上變壓器。
以一台組裝的PC而言,螢幕、印表機、硬碟外接盒、hub、ADSL數據機,無線網路等等,這些變壓器可以組個籃球隊了。
也許,傳統家電跟3C產品的差別,就在變壓器上。這實在是一個很糟糕的趨勢,不知道為甚麼沒有政府單位或是消費者團體注意。
首先,使用上非常不方便。一般家庭牆上插座的距離是標準規格,如果變壓器是連著插頭,就不能容許兩個變壓器並排,變得需要用延長線。即使延長線插座間距也不夠,常常六孔的延長線只能插三四個變壓器。
每個家庭中免不了應該都有個小盒子或是抽屜蒐集所有的變壓器吧。有些電器很久才需要插電一次,像是電子辭典。或是手機三四天才充電一次。一到要用時,就要從那一大箱黑色,長得又很像的變壓器中找出你要用的來插。
萬一你拿錯了,規格又不符,把你心愛的PDA燒掉了,那可是你的錯,只能怪你自己。電壓太高、正負反了,當然會燒掉,你國中沒上過物理嗎?
我發現大廠牌的高級產品,都會在變壓器上印一點字,給你一些提示,也會在電器的電源插孔上註明電壓與正負極。雖然一團黑看不清楚,可是你就不會變通嗎?只要撒點痱子粉用手抹一抹,字就會顯示出來了。再用手電筒加放大鏡,你如果沒老花眼就不用老花眼鏡。反正大廠的高級貨,會降低弄錯的機會。不過其他小牌子的就難講了。所以硬碟外接盒應該要買Sony或是Nokia這種大廠的,如果有找到請告訴我去哪買。
時間久了,總是有一些沒用的產品故障淘汰。你都是把機器跟變壓器放在一起,一起丟嗎?恭喜,你真聰明。像我因為久沒用,常常認不出變壓器是哪一個,根本不知道該淘汰哪一顆。
以前電池都有國際規格,即使是水銀電池也是一樣,都統一大小與電壓。現在的電池比較複雜,有控制迴路吧!但是我不了解為甚麼不能統一規格。每一個產品都要自己的電池,這是非常不環保的。為甚麼同廠牌的兩隻手機,電池都不一樣?
變壓器更是容易統一規格。我看不出來規定只有大小兩種接頭,外圈永遠是負極,會造成設計上什麼困難。電壓就固定兩三個就夠了。以前電池規定一律1.5伏特,也沒有什麼問題不是嗎。至於交流直流、當然是規定直流了。9V的交流變壓器真的存在,我不是開玩笑。年輕時用Supra數據機做撥接上網,就是用9V交流的變壓器。我沒注意到,誤接了一個直流9V的,不但沒燒掉,還正常運作好幾年都沒發現。
至少小電流的產品,技術上很容易統一供電接頭的規格。一個變壓器應該可以同時供給好幾個電器使用。如果變壓器集中,它就不須要那麼陽春與兩光,可以含穩壓、過載保護功能、負載控制、不斷電系統等功能,也會省下很多電力。不然像現在這樣一個兩三百元的產品就附上一顆重重的變壓器,實在是很不環保,即使中國工資便宜,也不該如此濫用地球資源。廠商附的變壓器,大多是以便宜做首要考量,而不是省電、可回收、低污染,甚至連美觀與方便性也不管。變壓器跟電池,應該制定標準,只要不是標準規格就要額外徵稅。
另外最好也立法規定,所有產品型錄都要連變壓器的長相一起拍。不再讓使用者以為買了一個超薄型的優雅產品,但回家才發現背後要接一個笨重而醜陋的變壓器。
2008年5月15日 星期四
豐田生產方式:剛好及時 Just in Time
Just in Time簡單地說,就是"必要的零件,在必要的時刻,只有必要的數目"。零件只是及時(in time)生產還不夠,如果零件太早到達,堆積在生產現場會影響效率,如果零件太多,會佔據工作空間及增加整理、清點等負擔。所以及時前面還要加上剛好(just)這個字:不只要有,還要剛剛好:不早不晚,不多不少。
TPS著重於排除一切浪費。過度生產是最大的浪費,光是庫存的成本就很高。更可怕的是,過度生產會掩蓋住其他組織內的浪費不被發現。Just in Time的觀念,就是要將零件的庫存降低到幾乎為零。但這要怎麼達到呢?
2008年5月9日 星期五
豐田生產方式(Toyota Production System)
Toyota Production System, 簡稱TPS,是豐田發展出來的一套生產方法。雖說是生產方法,這個方法及背後的哲學也可以應用在許多不同行業,也可以視為一套管理的技巧。對軟體同業而言,可以將TPS比喻為「製造業的Extreme Programming」,或是「製造業的Agile Methodology」。不過這麼說在先後順序上不太對。TPS是豐田從二十世紀初起,累積了五十年以上的改善方法,在1950年代就已經大致成型。我個人猜想,Extreme Programming的概念相當程度是受到TPS的啟發;就像傳統的軟體工程,大多是源自西方工業工程的方法改良而來的。
順帶一提,資訊界愛用的Just-in-Time這個詞,就是TPS的術語,豐田喜一郎提出來的。
2008年5月2日 星期五
2008年5月1日 星期四
漫談樣式
大家都知道設計樣式(Design Patterns)。為甚麼要叫做樣式呢?為甚麼23個樣式要寫成那麼大一本書呢?為甚麼不是一篇寫成"物件導向設計的23個快速技巧"的文章,用幾頁的篇幅介紹就好?
其實一個樣式告訴我們的不只是一個技巧。書中很大的篇幅在說明
- 這個技巧適用於哪些場合,不適用於哪些場合
- 哪些情況也許寧願考慮使用另一個樣式,或是跟其他樣式合併使用
- 這個樣式除了帶來好處,卻也帶來哪些副作用
2008年4月29日 星期二
XP: eXtreme housekeePing
老婆常問我,我對家裏PC整理得那麼好,掃毒、更新、硬碟整理、檔案分類都做得很完整,可是為甚麼對於家務的處理卻一團亂。
其實照顧好自己的PC只是我們這一行的基本功,軟體開發的整個過程牽涉到的管理與維護才是大學問。最近沒工作在家休息,又搬了新家,剛好是改過自新重新做人的好機會。開始努力整理家務以後,愈來愈同意老婆的評語。工作上採用的Extreme Programming(XP),的確有許多practices可以應用在家務上。沒理由上班說一套,回家做一套。以下就是幾點心得:
2008年4月25日 星期五
SOS 遏止全球暖化!--濃縮版
之前寫了一篇全球暖化如何抑止的文章,但是一些讀者反應全文太長。這裡將全文濃縮為九點重點,與各位分享。如要查證資料來源,或是進一步了解詳細內容,請看前面完整版的Po文。
- 如果不立即降低甲烷,全人類可能活不過十年。如果不立即降低二氧化碳,人類可能活不過一百年。
- 甲烷的溫室效果比二氧化碳強好幾十倍,主要來源是畜牧業造成,隨著新興國家的崛起快速惡化。
- 甲烷的溫室效果短而快,也就是說降低甲烷可以幾年內抑止全球暖化。降低二氧化碳要幾十年才會有效果。
- 跟全球大氣的二氧化碳含量一樣多的巨量甲烷長年冰封在海底與南北極,現今正因為全球暖化而快速釋出。北極冰帽即將溶解殆盡,如果讓這些甲烷完全釋放到大氣中,會導致嚴重的氣候巨變,造成地球大滅絕。
- 科學家說為時未晚,只是改變要快。扭轉的方法就是減少肉食或吃全素,以及影響周圍的人減少肉食,也請被影響的人再去影響其他人。吃素同時有高效地減碳與減甲烷的作用。素食者即使開悍馬休旅車也比吃肉的人騎單車要環保。
- 因為我們不只希望人類多存活十年,也希望能永續發展,所以油電車、太陽能、種樹等等減碳活動應同時進行,但是只依靠減碳緩不濟急。吃素是最有效也最快速地為地球降溫的方法。
- 除了環保以外,素食的好處不勝枚舉。多吃蔬果可以改善皮膚、改善身材、增進健康。同時也過著慈悲有愛心的生活。
- 親友聚會或是婚喪喜慶,是最容易有大量肉食的場合。您如果能影響一次大家在這樣的場合以素食為主,效果是非常大的。由於情況緊急,即使您自己還不能吃素,不能以身作則,也請全力鼓勵與支持身旁的人吃素。
- 上年紀的長輩如果吃素可以免去多種慢性病,過快樂健康的晚年。
2008年4月22日 星期二
2008年4月18日 星期五
OOA與Analysis Patterns
在軟體業界所謂系統分析(SA),傳統上指的是需求確認,而系統設計(SD)指的是類似開程式規格。SA通常要設計好頁面與資料庫,SD要開出達成這些頁面功能的程式規格,交由程式設計師來實做。
物件導向的技術引進以後,這個分野卻令人混淆了。首先,什麼是物件導向分析(OOA)?感覺上物件技術是很實作面的技術,如繼承、多型。我們畫Class Diagram、Sequence Diagram,這算是設計的行為吧!那麼,開發過程中的什麼practice是在做OOA呢?很多人以為用use cases表達需求就算是做OOA,很不幸的,use cases是表達需求的一個方法,但是跟物件技術沒有太大關係。(即使use cases是物件技術的族群流行的技巧。)
Martin Fowler寫了一篇專文討論這個問題:Is there such a thing as Object Oriented Analysis?文中說:
... analysis is primarily about understanding the domain, while design is about understanding the software that supports that domain.
2008年4月17日 星期四
軟體亂度(Software Entropy)
前面討論過技術債務,這裡介紹另一個有趣的隱喻(Metaphor):Software Entropy。這是一個很巧妙的比喻,可惜要學過一些物理才能了解。我們平常喜歡用複雜度(Complexity)來說明程式碼有多亂,用義大利麵來比喻混在一起、亂得不得了的程式。改用entropy這個熱力學字眼,是因為軟體系統的發展過程跟熱力學的定律有些共同之處。entropy這個字中文翻譯為亂度,或是熵。我個人認為在軟體領域翻譯成亂度比較好懂。
熱力學第二定律告訴我們︰一個隔絕的系統,在達到平衡前亂度一直增加,也就是說,如果要降低一個系統的亂度,需要外部消耗能量。這個定律告訴了我們電熱器加熱要用電以外,為甚麼冷氣與電冰箱降溫也一樣需要電。
軟體開發也是一樣。無論怎麼努力預防,程式碼會需要不斷修改的。這個自然演進的過程都是在增加程式碼的亂度。除非我們真的排人力與資源去翻修它,這個亂度不可能自己降。
雖然我們遇到可怕的程式碼,總是會想責怪前人留下這個攤子,責怪客戶亂改變需求,責怪主管沒有好好要求等等。這些因素都可能成立,但是不要忘了這個軟體的定律:開發的過程,亂度只會增加,除非注入額外的能量來降低它。擁抱舊有程式碼的同時,也要了解去改善它本來就是要付出相對的代價。
2008年4月8日 星期二
2008年3月31日 星期一
西洋古典音樂跟一般音樂有什麼不同
西方音樂有兩個要素是其他各民族的各種音樂所沒有的,這兩個要素就是對位與和聲。西方音樂發展的漫長過程,基本上是從單音音樂,發展到複音音樂,再發展到主音音樂。複音音樂的根基是對位法,讓多條獨立的旋律線同時交織進行。主音音樂是一個主要旋律配上和聲伴奏。現代的各種流行音樂形式如爵士,吸收了和聲的技巧,都是屬於主音音樂。對位法著重在音的橫向連結,和聲學著重在音的縱向連結。
從巴洛克時期開始,和聲學與對位法就是作曲的兩大根基,這兩個方法互相又有互補的關係。一個曲子常常兩個方法交錯運用,有的作品較強調和聲,有的作品較強調對位。這跟時期與國家別也有關。例如不列顛的作曲家似乎是在和聲的部份比較突出,而對位成份的比較少。而義大利作曲家則特別愛對位。
(個人從收藏的cd聆聽經驗來看,甚至覺得不列顛的演奏家普遍比較重視和聲面的表現,義大利的演奏家普遍比較善於呈現對位效果。不知道是不是錯覺。)
受過古典音樂訓練,或是時常欣賞古典音樂的人,比較會有"複音音樂的耳朵",習慣同時欣賞好幾個聲部交織進行。跟我們聽流行歌習慣只注意被伴奏襯托著的主旋律不同。我個人常建議想開始接觸古典樂的朋友,試著聽音樂時同時聽所有的聲部,初期甚至可以刻意先不管主要的旋律,專注在那些容易忽略的聲部。會有跟以前不一樣的感受。
2008年3月27日 星期四
好文推薦︰Offensive Coding
你程式常常要寫得非常具有防禦性(defensive)嗎?這可能是因為,你在跟攻擊性(offensive)的程式碼打交道的關係。
需要做防禦性的動作,是因為我們跟具攻擊性的程式碼打交道。這些防禦動作都是為了避免呼叫端傳錯誤的參數,所以事先做預防的動作。但是,這些邏輯嚴重地污染程式的簡潔性,讓程式碼的關鍵邏輯掩蓋在大量防禦性檢查中。更重要的是,掩蓋問題會讓除錯工作變困難。(如果根本不該傳null進來,一旦真的傳null程式碼又把這個錯誤吃掉,造成的後果可能更難預料。)我們寫程式有一個重要的原則與技巧,就是讓錯誤發生時要掛在第一現場,而不是經過重重容錯的包裝掩飾,最後在不相關的點上爆發,造成除錯的困難。
所以,傳null以及字串前後有空格這類問題,應該在源頭防止,而不是在接收端判斷。例如DB就應該將欄位設為禁止null,在頁面剛送出資料時就先清除不必要的空格。而不是在接收端做各種判斷。
請參考這篇文章。
2008年3月20日 星期四
多喝水 多喝水 多喝水
早上起床如果覺得自己臉有些水腫怎麼辦? a. 水腫表示體內水太多了,應該暫時停止喝水,等水排掉。 b. 吃利尿劑,幫助身體排水 c. 以毒攻毒,喝更多水。
我個人沒有過這樣的問題,但記得正確答案是c. 喝水。不過不是以毒攻毒。水腫是體內電解質不平衡所致,例如吃太鹹。通常多喝水,排尿後就會改善。如果不喝水或是吃利尿劑,也許症狀慢慢還是會不見,但這會增加腎臟的負擔,反而不好。
以下是另一個關於喝水的保健常識,是我自己的經驗,沒什麼科學根據,不過蠻實用的。
有時覺得自己口味變重,吃東西都覺得不夠鹹,但同桌其他人都不覺得。這個時候可能是你開水喝太少。(這時血壓應該比平常稍高,可以量量看)只要接下來幾個小時多喝白開水(當然也會猛上廁所),這個口味重的問題會立即改善。你如果繼續多喝水的話,會發現自己變得對鹹味很敏感,別人覺得剛好你卻覺得鹹得發苦。
為甚麼會這樣呢?我猜是人體要靠電解質平衡來保留水分。當身體缺水時,身體會想多攝取一點鹽分來保住體內的水。反之亦然。
反過來,如果吃了重口味的一餐(或是吃下整包高鹽的蜜餞),會發現有一陣子自己不太會想尿尿。
在電視節目上看到健美先生的餐盒︰只有不加鹽的水煮蔬菜,以及白飯!他們還說吃慣了以後,可以吃出食材的原味,覺得很可口。身為素食者還是要佩服他們道行更高。健美先生需要抑制鹽分的攝取,聽說會讓水分不要留在脂肪細胞中,脂肪細胞縮小就會讓肌肉線條更凸顯。結論︰要有怪獸般的體魄,就要吃羊咩咩的食物。也許這可以解釋為什麼在節目中健美先生的個性都很溫和友善,跟怪獸的體魄成有趣的對比。
聲明︰本文是作者個人生活經驗,不負任何責任。尤其是如有腎臟或心臟等器官疾病,對於電解質與水分的代謝有任何問題應該就醫請教醫生。
2008年3月19日 星期三
SOS 遏止全球暖化!
全球暖化的效應越來越明顯。這可不只是"今年夏天會更熱"這麼簡單的問題而已,毀滅性災難發生的時間點,已經在倒數計時。這已經不是後代子孫的問題,而是即將直接降臨在我們身上的災禍。雖然這些資訊很容易公開取得,但是顯然全世界政府與傳媒不夠積極地告訴我們到底發生了什麼事,應該怎麼辦。我們都了解自己在地球只是個短暫的過客,但您是否想過全人類可能在五到十年內受盡折磨地死去呢?而改變它的方法卻很簡單。
(2008/8/25新增:這幾個月來不時有讀者反應,本文內容太難以置信,而跟筆者詢問是否有確切的資料來源。其實文中所有的超連結,都連到資料來源出處。歡迎點進去查閱原文。)
從甲烷談起,這是一種很強的溫室氣體。它對地球的溫室效應強而猛烈,但是效果較短。以二十年的影響而言,它溫室的效果比二氧化碳強72倍,以一百年的影響而言,它比二氧化碳強25倍。甲烷在在大氣中的濃度於過去100年間增加成兩倍多,主要是畜牧所造成。牲畜的屁含甲烷,牲畜的排泄物會產生大量的甲烷。隨著新興國家的崛起,惡化的速度越來越快。
甲烷也以一種可燃冰(甲烷水合物)的固體型態蘊藏在地球中高壓低溫的環境。顧名思義,可燃冰看起來像一塊冰塊,但是因為富含甲烷可以燃燒。全球可燃冰的蘊藏量尚未有精確的估算,預估遠高於地球天然氣總量,大約接近地球所有礦物燃料總和。很多國家在研究經濟開採可燃冰的方法。可燃冰廣泛分佈在海洋的大陸棚地帶、南北極永凍地帶以及其他地區如西伯利亞的永凍土中。溫室效應會造成可燃冰溶解,使得大量的甲烷急速排入大氣。這些甲烷強化溫室效應,升高地球溫度後又會促進更多的海底、永凍土以及極地的可燃冰溶解。實際上,世界各地都已發現甲烷因為氣溫變化而快速釋出的現象,我們只要在網路做些搜尋,很容易找到相關新聞或是研究論文。
北極冰帽在2006~2007年間,消失的面積大約相當於整個阿拉斯加。科學家對於北極冰帽完全消失的時間不斷往前修正,新的研究顯示2012年後會完全消失,今年甚至有挪威科學家提出今夏北極冰帽可能全面融化的說法。北極蘊藏的巨量甲烷,將近大氣中的總碳量。這些比二氧化碳強72倍的溫室氣體,忽然全部釋放進大氣中,會造成多大的災難呢?
另一方面,北極冰帽反射了大量太陽光的熱能,冰帽溶解會增加地球每天吸收的太陽輻射熱。提高地球的溫度。
溫室效應還有其他可怕的後果,例如造成海洋無氧,海中厭氧細菌製造大量的硫化氫釋放到大氣中。硫化氫是劇毒,也會襲擊臭氧層破洞。最新的研究顯示地球過去的大滅絕有的不是隕石撞擊造成,而是溫室效應造成毒氣瀰漫所致。
由這些資料看起來,我們等不到各國淘汰舊電廠、全民換油電車、家家戶戶屋頂裝太陽能板,大災難早已來臨。減碳政策為的是我們老年生活以及未來子孫著想。可是我們眼前要讓自己存活,必須快速地降低甲烷。最直接的方法是吃素。而且畜牧業除了排放甲烷,當然也造成大量的二氧化碳排放。即使現在我們不自發採取行動,等到更加危急時也可能會有公權力為了扭轉可怕的氣候變遷,不得不強迫全民吃素。只是到那個時候可能已經來不及了。
素食是我們每個人都能做的,不用等環保團體請願,不用等美國大選政黨輪替,也不用等各國緩慢的協商,也不用等心有餘而力不足的各國政府跟利益團體周旋。素食可以對環境產生立即的助益。當然蛋奶製品也最好能避免。即使不能吃全素,今天就可以試著少吃肉食、或隔天才吃一次肉。如果您真的沒有肉就食不下嚥,可以考慮每天少吃一餐。或是每週斷食1~2天。有很多書籍及網路資訊教斷食保健的方法。只要方法得宜,斷食對健康與美容的都有很大的助益。即使您自己不能素食,也請多鼓勵與支持親戚朋友及長者吃素。朋友聚會或婚喪喜慶的聚餐場合請建議大家改素桌。一場婚禮辦素食的話,可以為大氣減少許多甲烷跟二氧化碳。
其實肉食不像菸酒毒品,只是種習慣。菸酒毒品會侵入頭腦造成上癮。上癮後要戒菸戒毒可能要熬過很痛苦掙扎的過程,素食卻只要改變態度與習慣。台灣可能是全世界吃素最方便的國家,非常多純素的肉類替代品可供選擇,都非常美味。我們不需要像外國素食者犧牲那麼多口腹之慾。
只要少吃一塊肉,就是拯救地球的英雄行為。大地可以稍喘一口氣,延長全世界人類的生命。如果您願意改變飲食,由衷向您這位拯救地球的英雄致敬。動物們也會給您祝福,上天會回報您為了愛所作的這個犧牲。
後記︰我不是地球科學的專家,本文儘量引用公正權威的資料來源如維基百科,甚至儘量避免引用環保與素食主義色彩明顯的來源的文獻。只是為了更凸顯他們的論點是基於客觀的資料與研究。其實本文沒有任何自己的創見,而全部學習自可敬的環保與素食團體的主張,尤其是無上師電視台。
2008年3月17日 星期一
活在現實,擁抱舊有程式碼
軟體開發人員都希望在專案中應用更先進的技術與觀念,使用新的方法、流程與工具。想要開始引進CVS管控原始碼,想用OOAD方法、用jUnit做Test Driven Development等等,想嘗試導入的不勝枚舉。但手上的專案往往不容許我們導入這些︰舊包袱太多,程式架構很亂。既有的程式碼用的是舊技術,新技術放不進去。期待公司下一個專案能夠讓我們重頭好好做。到時候能做個乾淨的架構,不用背舊包袱,而使用新的流程或技術,讓我們真正發揮工作效率。
這個等待其實是不切實際的。一個進步的技術,要試著將它實現在背著舊包袱的現有專案中,並讓它的在這個專案中展現出價值(當然,前提是專案主管允許你這麼做)。為甚麼呢?
[轉貼]環保人士忽略「素食是人類遏止氣候變遷的最佳利器」
摘要
全球暖化讓全球環境面臨人類有史以來最嚴重的威脅。但因為焦點全部集中在二氧化碳的排放,主要的環保組織所發表的數據,無法顯示我們今天所得知的其他氣體,才是造成全球暖化的主要元兇。結果,他們自然就忽略可以在一生當中,有效降低全球暖化效應的最佳對策:倡導素食。
全球暖化與二氧化碳
環保團體認為全球暖化對地球形成的威脅最大,這個面向是正確的,全球氣溫已經至少高於過去千年以來的記錄,而且增加的速度遠超過科學家的預測值,該預期後果包括沿海氾濫、極端異常氣候的增加、疾病的蔓延和大量的物種滅絕。
很遺憾地,環保團體投注的焦點,只放在減少二氧化碳的排放方面,國家立法全神貫注在提高燃油經濟標準、降低發電廠的二氧化碳排放量、及投資替代能源等方面。對一般消費者的建議也集中在二氧化碳面向:買燃油效率佳的車和家電,並且減少使用頻率。
這是很嚴重的誤判,根據傑姆斯漢森(James Hansen)博士等人所發表的數據顯示,由大氣中觀測導致暖化的主要因素,不是二氧化碳的排放,雖然聽起來像是在質疑全球暖化的研究工作,但實際並非如此:漢森是美國太空總署戈達德太空研究院(Goddard Institute for Space Studies)主任,擁有「全球暖化論始祖」的封號。他長期支援抗暖化行動,其理論曾被艾爾高爾及經常為環保組織所引用,他常和以推翻科學驗證過程為目的的質疑者辯論。他的結論受到全球暖化專家們的普遍採納,包括傑姆斯麥克卡西(James McCarthy)博士—聯合國政府間氣候變遷小組第二工作團聯合主席等大人物在內。
把焦點單獨集中在二氧化碳,會加深誤解的程度。人類行為會產生大量的二氧化碳,比其他所有溫室氣體加起來還要多,這是正確的,然而,這並不代表二氧化碳就是地球暖化的最大禍首。很多其他的溫室氣體,吸熱能力比二氧化碳還強很多,有一些甚至具有成千上萬倍的威力。當我們談及不同溫室氣體導致暖化的潛力時--所定義的氣體為在未來一百年,其數量會導致暖化現象者--結果發現,其他氣體所造成的全球暖化問題,比二氧化碳還要嚴重。
除了過度渲染二氧化碳的影響之外--因為廢氣排放的主要來源是汽車和發電廠—其同時也會產生氣膠(Aerosol)微粒。氣膠事實上具有可以冷卻全球氣溫的成分,而其大量的冷卻作用,差不多可以抵銷二氧化碳的暖化效應。出人異料之外的結果是,二氧化碳排放源對全球氣溫的影響,在近期內將會被調整為趨近於零。
因為擔心製造污染的企業,會以該理由做為排放廢氣的擋箭牌,所以該結果尚未完整地透露給環保團體,例如,憂思科學家聯盟(Union of Concerned Scientists),已將數據交由其他氣象專家審查,漢森的結論也獲得正面的認定。但是,該組織也同樣採用持反向意見氣候專家所誤用的數據,以反對二氧化碳的抑制,這種對立意見的糾葛是無法釐清的。
雖然二氧化碳在近期所造成的影響很有限,但在長期而言,減量對氣候變遷仍有關鍵性的影響。氣膠的存續期間很短,只能在空氣中存續幾個月的時間,而二氧化碳對大氣的加溫作用,卻可以持續數十年到數世紀之久。此外,我們無法假設氣膠的排放速度,會與二氧化碳並駕齊驅。假如我們今天一開始就失去對抗二氧化碳的良機,在我們被廢氣排放淹沒時,即為時晚矣。
儘管如此,我們仍然可以看到非二氧化碳溫室氣體源,確是實際導致全球暖化的主因,加上未來五十年我們即將面臨的全球暖化現象,這些事實將會如影隨形。如果我們希望抑制未來半世紀的全球暖化趨勢,必須正視非二氧化碳的廢氣排放,並採行因應對策,而最佳的策略就是素食。
甲烷與素食主義
最重要的非二氧化碳溫室氣體,顯然就是甲烷,而全球最大的甲烷來源,就是畜牧業。
甲烷所造成的全球暖化效應,幾乎是所有其他非二氧化碳溫室氣體的總和。甲烷是一種溫室效應威力,比二氧化碳強21倍的溫室氣體,當大氣中的二氧化碳濃度,高達工業革命前的31%,甲烷濃度卻已超過兩倍。人為因素的二氧化碳排量,只佔自然界來源的3%,而甲烷卻是自然界的1.5倍。事實上,人類所致甲烷的釋放作用,可能加重暖化情形,反過來刺激濕地有機微生物的腐敗--這是自然界甲烷的最主要來源。
由於全球人為所致的暖化現象,幾乎有一半是甲烷排放所造成,因此,減少甲烷排量應是當務之急。甲烷的來源包括煤礦業和垃圾掩埋--但遍布全球的最大來源是畜牧業,一年可以製造一億噸的甲烷,而且該數字仍在持續上升中:全球肉品消耗量在過去五十年已翻升五倍,而且看不到什麼減少的跡象,約85%的甲烷源自牲畜的消化過程,雖然一頭牛所釋放的甲烷量相當少,但全世界數以億萬計的牲畜,對環境產生的集體效應卻相當鉅大。畜牧業另外15%的甲烷排放來自大量的「鹹水湖」,用來儲存未處理過的牲畜排泄物,而且在美國早已被環保人士以污染水源的禍首名義,成為眾矢之的。
結論很簡單:減緩全球暖化最有效的方法,可以說是減少或避免肉品消費。只要加入素食(或嚴格一點:純素)行列,我們就可以遏止甲烷排放的最主要來源--這個要為當今造成全球暖化效應,負起幾乎一半責任的溫室氣體。
素食的優點多於二氧化碳減量
除能立刻降低全球暖化效應的優點之外,改食用無甲烷排放的食品,要比找出降低二氧化碳排量的切入點更為容易。
首先,不需限制溫室氣體減量,因為在採行素食的過程中,即可以達到該效果。原則上,甚至可以做到100%減量,只會略微產生一點負作用而已,相反地,要透過減少二氧化碳達到相同的減量效果,無法避免對經濟產生破壞作用,即便是信心十足的二氧化碳削減策略,也還達不到削減一半的程度。
第二,改為較低溫室氣體排放的飲食,比改變石化燃料技術,以消除二氧化碳的排放要快,大部分的反芻動物農場,牲畜進出率為一至兩年,所以減少肉品消費,幾乎可以立即明顯降低甲烷的排放,汽車和發電廠的更新率,換言之要花數十年,即便很便宜,而且也有無廢氣排放的燃料可供使用,但當今我們經濟所仰賴的大量基礎建設,也要花多年的時間建造,並且緩慢地逐步替換。
同樣地,甲烷不像二氧化碳可以在空氣中存續一個世紀以上,它只能在大氣中循環八年,所以降低甲烷的排放量,可以快速地讓地球清涼一點。
第三,削減二氧化碳排放,要和汽車與石油企業等強權和富豪事業相抗衡,耗時費力。環保團體已就高效能燃油的休旅車,及淘汰無法符合現代環保標準的發電廠等議題,進行多年的遊說行動,仍然無疾而終。而在此同時,素食品卻隨手可得,而且每餐都能發揮減少農牧業甲烷排放的作用。
另外,民意調查顯示,民眾關心全球暖化現象已經很普遍,而熱心環保人士卻時常感到心有餘而力不足,除非是剛好要買車或大型電器,多數人都想盡點心力、做些改變,但除了寫信給國會議員和關掉電燈之外,卻不知道要由何處切入。減少或避免肉品消費,是關心全球暖化的民眾,每天都能採取的幫助地球行動。
最後,值得一提的是,降低源自飼養牲畜的溫室氣體,對環境有很多附帶利益,因為較少的甲烷含量,可以減少對流層所含的臭氧量,它會污染及危害到人類健康和農作物。此外,排放甲烷的工廠化農場,同樣也耗盡國家的供水系統,大部份的野生環境被剷平,供做牧場用地和種植飼料作物。增建牧場以滿足西式與日俱增的肉品食慾,已經是造成第三世界國家伐林及沙漠化的主要原因。在美國,工廠化農場囤積排泄物的鹹水湖,是造成水源污染的頭號元兇,確實,由於畜牧業對石化燃料的高度需求,一般美國人的飲食所產生的二氧化碳污染,遠超過一個蔬食者。
良心建議
‧各類型的組織團體,應考慮將推廣素食,列入抗全球暖化活動的主要項目之一,至少積極倡導環保的人士,應該在任何對抗全球暖化的活動中,建議個人可以採取的實質行動,提到素食。
‧政府應擬定政策鼓勵素食,可採取的機制包括對肉品課徵和汽油一樣的環保稅,提供農牧場轉型補助金,鼓勵種植農作物而非畜牧,或由政府經辦加強素食方案,例如學校營養午餐或發行素食糧食券等。
轉貼自http://www.suprememastertv.com/bbs/tb.php/sos_tw/23
原文全文pdf下載點http://www.earthsave.org/news/earthsave_global_warming_report.pdf
2008年3月14日 星期五
將技術債務視覺化
技術債務(Technical Debt)這個詞是Ward Cunningham提出的。當程式設計師為了時效,用一個又快又髒,後續維護成本卻很高的作法解決問題,後續需要多做整理,我們就說他是負債,後續該整理的工作就是"債務"。例如不當地使用copy-paste、做出超複雜沒人懂得的if-else分支,或是該寫註解而沒有寫,都是典型的例子。用"債務"一詞是非常好的比喻,教我們處理技術債務就像處理財務上的債務的方法一樣。
2008年3月13日 星期四
經典好文推薦︰What is Software Design? By Jack W. Reeves
作者Jack W. Reeves發表What is Software Design?這篇文章於1992年,13年後作者又寫了另一篇文章回顧當時的觀點。全文可以在這個網址下載。這篇文章引起的迴響很大,有堅決反對的意見,也有很多人受它啟蒙而用全新的角度看整個軟體開發的行為。我個人是屬於後者。這些觀點在1992年就提出,非常具有前瞻性,和後來的Extreme Programming的主張互相呼應,間接預言了將程式碼視為文件、自動測試、重構、Simple Design等觀念。
這篇文章探討的,是什麼叫做軟體設計。
2008年3月12日 星期三
素食比較貴嗎
很多排斥素食的朋友,常會抱怨素食餐廳比葷食餐廳貴。其實我自己是在法國讀書時開始吃素的。從吃素以後,生活開支節省很多,省下的錢每個月可以多買一些CD跟書。在台灣素食反而貴嗎?吃素也後就不會光顧葷食餐廳,並沒有很認真地比較。會有這種差別,我猜可能有幾個原因︰
其實吃素也可以吃得很經濟實惠。一般而言,蔬果五穀應該比肉類成本低,這是自然的法則(我們主要是用穀物去餵豬的,要餵很多穀物小豬身上才會多長出一斤肉。)。如果違反這個原則,肉類比蔬果便宜的話,我們更要擔心這是怎麼辦到的。這是不是病死豬?畜牧養殖過程究竟用了多少抗生素及其它藥劑?運送與儲存能做到那麼便宜,真的符合衛生標準嗎?
更重要的是,這隻可憐的動物除了在屠宰場受苦以外,它一生在多糟糕的環境,餵食多可怕的飼料,受到多可怕的對待,人們才能把畜牧成本壓到這麼低呢?
2008年3月11日 星期二
四歲台灣鄉下小孩能寫英文信
看標題可不要以為這是兒童美語班的廣告,這可是真實發生在三四歲的時候的我身上。當時家住在新莊,父親去美國出差。
我的母親看到我趴在地板上,拿一支筆,很認真地在一大張信紙上塗呀畫的,一大堆線條與圈圈,問我在做甚麼。
我答道:"寫英文信給爸爸。"
母親忍住笑,看著滿紙線條與圓圈,問我:"你寫了一些甚麼?"
我一本正經地答:"爸爸才懂英文,他才看得懂,我不懂英文怎麼會知道。"
一個三四歲的小孩,當時還不了解"寫信"的意思,是把自己想說的話用文字寫下來給收信者閱讀,也不了解"英文"是甚麼。平常看到父親飛快地橫向書寫那些線條,聽母親說爸爸在寫英文。小孩不了解含意而只模仿動作。
2008年3月10日 星期一
小豬豬的話
非常感人的一首越南詩。在這個超連結可以欣賞到越南原文的吟唱。
《小豬豬的話》--------清海無上師
初見你那天
我呱呱落地
粉紅渾圓胖嘟嘟
跟媽咪快樂嬉戲
你疼愛地看著我
稱讚著:圓滾滾,多可愛!
每天你來探視我
帶來冷飲與美味素餐
媽咪和我好感動
您的善心勝黃金
在您關懷保護下
我過著和平生活
日漸長大胖嘟嘟
天天吃睡和玩樂…
這天清晨多可愛
空中浮雲輕飄過
媽咪與我相偎依
未料悲劇將降臨!
兩名粗壯的男子
壯如猛虎與大象
推壓我小小身軀
塞進恐怖牢籠中
無路可逃!
上帝啊,這是何等恐怖!
我害怕驚恐哀嚎
媽咪啊,請來救我!
照顧者啊,請快來保護我!
救我一命,我還小啊!
媽咪悲哀地哭泣
絕望眼淚盈滿眶
浩瀚蒼天容不了
此情悲痛多可怕
照顧者轉身而去
手上忙著數鈔票
不幸的我在車廂內翻滾
心碎之痛更勝肉身苦!
兩名年輕人揶揄著:
「這隻小豬看來真美味!
明天我們宰了他
慶祝太太的新生兒!」
喔,生命多諷刺
我靈魂破碎
內心淌淚水
似血流成河
我以為你愛我
要養我長大
但都是假的
對你,這只是利益!
明天我將碎屍數段
骨肉飽受痛苦折磨
人們才能開懷大笑
歡樂聚會大啖宴飲
祝福你和其他人
孩子個個都長壽
家庭才能長相聚
免受此命運如我…
願全家生活高貴
生生世世能做人
永不輪迴生為豬
償還無盡業障債!
唉,再見了,生命…
想念受苦的慈母
不堪淚水中…
喔,媽咪!媽…媽…