2009年1月21日 星期三

Ruby on Rails Rake 導讀

Rake 的使用概念跟 Make 很像,你可以想像成是在 Makefile 中寫
Ruby 程式。因此我們也要瞭解 Makefile 的幾個用途。

Makefile 的用途:一、加快程式編譯的速度。二、記錄程式相依性

一、加快程式編譯的速度
對於已經編譯過的原始程式碼,在之後的 make 指令中會先檢查編
譯出來的 object 檔案建立時間,是否在程式碼的最後修改時間之後
?如果編譯出來的 object 檔案比較新表示不用再重新編譯,節省重
新編譯的時間。

二、記錄程式相依性
假設我們要使用 rake db:migrate, 而在進行 db 更新前,我們需要先
connect_to_db, 我們可以把這個相依性寫在 Makefile 中,當我們下
達 rake db:migrate 更新資料庫 schema 之前,就會自動先執行
connect_to_db 連結到資料庫,再進行我們要做的更新動作。



相關連結:

Ruby on Rails Rake Tutorial

Rake Rational rdoc

2009年1月20日 星期二

程式設計的文藝復興

翻譯自:AppTrain: Renaissance Programming

這是一個關於採用 Ruby on Rails, PHP, MATLAB, 以及 Google
Docs 程式設計介面的故事。

文藝復興時期的程式設計師應該可以跨越平台、程式語言的限制寫
出產品所需要的程式。猶如文藝復興時期的建築師般,程式設計師
知道設計寫作程式的重點,就是在於產出程式的整齊、對稱與簡潔


當我們在實作 kpozsports 產品時,第一個挑戰就是原始網站是用
PHP寫的。在過去幾年來我都是在 Ruby, Rails 的程式設計開發環
境。我們團隊中的 Jim 是一位優秀的 PHP 程式設計師。我們要如
何在同一個網站中讓 PHP 跟 Ruby 共存?

1) 釐清責任區分
專案計劃中每位開發者都要達成特定的功能目標。完成這些功能性
目標的程式語言只是輔助工具。即使是一家小公司,使用多種工具
完成目標也是很常見的。比如 Rob 是 MATLAB 專家,所有運算集
中的程式碼都是使用 MATLAB 完成。架構網頁前端的程式語言則
是 PHP。這方面我們交給 Jim 完成。Ruby 在整個計劃中則是隨處
可見的,因為他的高藕合特性幾乎可以運用在任何需要系統整合的
專案中。我的主要責任是從多個來源蒐集資料,組織好資料後再傳
送到有 MATLAB 後端運算的 PHP 網站上。

2) 聚集類似的目標與工作任務(內聚)
軟體開發稱這個動作為內聚 cohesion. 本專案中的 Rake 任務是到
網頁上蒐集公開的網頁資料,所需要找的是同一款電玩遊戲的所
有相關網頁資料。剛好我最近都在研究相關的議題,這正好在工
作中派上用場。

3) 保持元件獨立
在專案中我們除了前端 PHP 及其相關的 MATLAB 模組,也架構
另一個 Rails 內部網站,兩個網站雖然互相溝通但實作上相互獨立
,我們稱為 low coupling, 如此一來我們兩邊元件開發可以同時進
行而不造成相互等待的時間浪費,也不會產生過於複雜的溝通系
統。

4) 共同設計
建構一個可用的軟體應用程式需要持續的設計。專案中所有成員
都共同參與設計的工作。我們會把重要的觀念放到線上領域知識
字典,並隨著設計過程增加到網站上。這讓我們對同樣的概念有
相同的詞彙,增加溝通效率。保有共同詞彙讓我們在開發程式的
命名上也更有共識,最後呈現給使用者的介面也會更一致。

5) 不要重造車輪
Don't Repeat Yourself, DRY 原則。The Pragmatic Programmer
裡面寫著:

在同一系統內,每個知識必須要有單一、明確、權威的表示方式。

當資料在資料庫之間傳遞時,必須由具權威代表的資料庫傳遞到備
份資料庫中。我們系統中的權威資料庫是存放在 Rails 框架構成的
網站,所有在 Rails 對資料庫做的修改都會連帶修改其他的備份資
料庫中。固定資料傳遞的方向是為了避免網站架構變得太複雜難以
維護。除了在程式碼中保持 DRY 原則外,整個系統架構上都要記
得同樣的 DRY 原則。

6) 持續的溝通
沒有位在同一辦公室的共同開發者,更是需要積極主動的溝通。在
這個專案中我們每週有兩次共同電話會議。在一星期的開始我們會
討論計劃、策略、戰術,以及任務、與遇到的問題。一星期結束時
則是每個人各自簡報的會議。如此就算有人太忙碌,或是在旅行中
,也都至少可以參與到一次的每週會議。我們私底下也是會常常溝
通,從討論複雜的程式設計議題,到補修統計學,或是共同慶祝喜
愛的橄欖球隊獲勝。

7) 開放的心胸
Pragmatic Thinking and Learning 中,Andy Hunt 討論到
神經生成科學 Neurogenesis。與一般坊間聽到的剛好相反,我們的
腦細胞在進入成年以後仍然不斷地產出與生長。在這個專案中我們
接觸到越多陌生的開發環境與工具,就讓我們心智成長、心靈更加
開放。

當 Rob 需要網路上的橄欖球統計資料時,我們利用 Rake 進行這項
工作,並將資料送到 Google Spreadsheet API。另一個 Rake 針對
連結到這個 Spreadsheet 的 PHP 網頁進行更新連結到新
Spreadsheet。

我們系統中已經整合許多不同系統與環境,如果要再新增其他系統
也是輕而易舉。注意我前面提到的這些工具,都是專案成員共同開
發,因此我們同時也都在不同的開發環境中一起成長精進。

在開發網站時,我也會考慮都用 Rails 或是 PHP 進行開發比較好?
結果發現將每個工具用在他最適切的使用需求上才是最好的做法
這讓我想到文藝復興時代的藝術建築創作,一個熟練多種不同開發
環境與工具的程式設計師。就我個人來說也彷彿經歷一場文藝復興
時期的成長,除了使用的工具與開發環境外,最重要的是產出的軟
體是否符合需求?

相關文章:

C++ 之父 Bjarne Stroustrup 談軟體教育

相關連結:

Renaissance Programming

2009年1月14日 星期三

小兒用藥安全

SSH這次感冒引發細支氣管炎,醫生開了三種藥物讓他服用。分別是
止咳藥、化痰藥、及減緩鼻塞流鼻水的抗組織胺。醫生特別囑咐,小
兒用藥最重要的是安全,父母親須嚴謹遵守劑量,不可急於想讓寶寶
早點康復就擅自加減藥量,避免藥量過多發生副作用或藥物中毒,或
是藥量過少無法達到預期療效。所以我在為SSH準備服藥時都用有精
密刻度的量杯、注射器或餵藥器來精準取量。

小兒用藥安全
為何須如此謹慎?因為嬰幼兒的肝腎功能、神經系統、
骨骼器官發育尚未成熟,所以藥物種類及給藥劑量就得嚴格把關,
像SSH的止咳藥每次只需3ml,化痰藥只需1g,這樣的迷你劑量都是
依照寶寶的月齡及體重來決定,家長們需小心不能過量。

這一週來已為SSH餵藥數十次,每次注意的事項如下
1. 吃飽後才能餵藥
2.按時服藥,即使半夜也努力將他吵醒,不要減少餵藥次數
3.餵藥滴管及量杯要用開水清潔乾淨
4.劑量要照藥袋上指示用有刻度的量杯
5.藥品要滴在舌頭兩側,不可直接從舌中央餵食,以免嗆到

通常吃完感冒藥後都會想睡覺,但是像抗組織胺這種藥物,成人服
用後確實會昏昏欲睡,但小兒服藥後卻會有亢奮的情形。

2009年1月1日 星期四

經濟學人:2009 年世界展望

年關近了,金融經濟動盪不安的 2008 年終於要結束,展望新的一年
,2009 年即將到來,我們可以有什麼樣的期待呢?也許讀讀經濟學
人的 2009 年展望可以找到一些蛛絲馬跡。

1. 期待經過 2008 混沌的財經動盪後會在 2009 年穩定下來的人要失
望了,2009 年財經將繼續動盪不安,並且因為 2008 年經濟的惡化
, 2009 年的全球政治動盪也將持續。

2. 巴西、俄羅斯、印度、中國的國際政治經濟權力將繼續擴大。

3. 歐巴馬將是美國是否能適應世界權力改變後的後美國時代關鍵因
素。

4. 新興市場在 2009, 2010 年的經濟情勢都將持續低迷,已開發國
家的經濟有機會在 2009 年落底,2010 年開始好轉。2003~2007
年的經濟大多頭已經結束,請大家面對現實。持續的全球經濟自由
化將是經濟轉機的重要因素。

5. 保護主義的經濟管制措施將可能導致國家內部整體經濟的惡化。

6. 全球首宗人造的合成生物(非複製生物)也可能將在 2009 年有所突
破。胚胎幹細胞相關的醫學研究將更廣為接受。除此之外,最具爭
議性的科學爭議議題可能是宗教進化的過程。

7. 危害分享的重要問題,隱私權受到的侵害仍將繼續加劇。網路社
交的興起將會加劇人們隱私外洩的機會。任何瞭解搜尋的人都可能
挖出一段不可告人的隱私祕密。除了文字以外、照片、影片的網路
分享也都可能造成隱私外洩的問題。

8. 英文字彙將達到一百萬個單字。英文字彙的特點之一就是時常加
入外文的單字。(日文也有外來語)

9. 歐巴馬面對的美國問題有伊拉克、阿富汗戰爭,財政赤字,經濟
下滑,三大問題。

10. 歐巴馬面對即將關閉的關達那摩美軍基地,將要處理仍在營中
的 250 名尚未被定罪起訴的軍事戰犯。歐巴馬會釋放曾經公開威脅
美國的戰犯嗎?

11. 眾望所歸的 2009 年經濟復甦,可能會讓大多數人失望,特別是
期望在股市波動獲利,以及靠租金利息過活的人。如果世界各國繼續
貿易保護主義,我們也可能要迎接一個失敗的經濟復甦年,延續 2008
的經濟衰退。最樂觀的狀況是衰退的金融信用市場迅速重建,我們將
見到比以前更快速的經濟復甦。

12. 美國不再像以前一般威風,但仍是世界上的主要強國之一。美國
必須學習跟他國溝通協調的國際政治。

13. 2009 年古巴將慶祝卡斯楚革命 50 週年,但卡斯楚在 2006 年動
過腹部手術後就不再公開露面,墨西哥灣的石油探勘如果成功,將讓
卡斯楚政權更為穩固。

14. 加拿大法語區的魁北克省由獨立意識最強的政黨贏得最多席次,但
因為魁北克省與安大略省同屬需要其他省經援,可望不會造成多大的
動盪。

15. 巴西在跟南非、印度組成 IBSA 南半球民主國家合作、發展聯盟後
,可望繼續走向更自由的國際貿易。

16. 亞洲國家在過去十年來 GDP 平均成長率 7.5%,是世界上其他國家
的 2.5 倍,但在經濟不景氣下,極仰賴出口貿易、進口能源的亞洲國
家可能會更糟。歐美的消費力道削減 30%,但是新興市場的消費力道
仍然很強,中國對美國出口僅佔 8% GDP,受到的影響比香港、新加
坡一些小經濟體對美國出口占 20~30% GDP的來說幾乎沒什麼影響。
好消息是通膨將在 2009 年獲得抑制。中國勞工薪資上升後,中國製
造的低成本低價產品優勢將逐漸消失,這也促使中國製造業會提升到
與南韓、台灣一樣進行產業升級,表示中國經濟成長已經達到一定程
度。

17. 印度在 2009 年將面對經濟衰退後的大選,預料將會有一波政治
動盪的不穩定期。政治制度上新政府將需要更多的行政效率的改革,
才有辦法趕上世界競爭的腳步。

18. 中國在 2008 年的經濟不景氣中,股市的崩跌將造成中國中產階
級對政府的壓力,但政府除了刺激經濟以外也要面對通膨的壓力,
政治上需要面對天安門鎮壓 20 週年的政治改革壓力。國際上,中國
對於台灣馬政府的親善則是舒解了十年來的緊張情勢。就數字上來看
中國製造業的產值將在 2009 超越美國成為世界上最大的製造國。但
在經過通膨與匯率調整過後,中國大約在 2017 年才有機會實質超過
美國製造業。中國在俄羅斯協助下,也將在 2009 年底發射探測火星
的太空船。

19. 日本親美政府 LDP 政黨(Liberal Democracy Party) 將可能在
2009 年九月立法院大選輸給親俄共政黨 DPJ (Democracy Party of
Japan),預料政治上會掀起一翻波瀾。

20. 印尼將在 2009 由一億七千四百萬人民選出民選總統。以及 156 位
立法委員。全世界最大的穆斯林國家將會證明民主與伊斯蘭宗教的結
合的可行性。

21. 北極海域可能蘊藏 900 億桶的石油。中國、法國、德國、印度、
日本、俄羅斯、南韓都已經申請海底探勘油田,俄羅斯甚至已經派遣
潛水艇到北極海域的海床上插旗宣示海底石油的所有權。

22. 英國將遭逢 18 年來首次經濟衰退,英國將考慮花整個世代的時間
,重新建立一個更多附加價值與產品知識的英國製造業。

23. 台灣,GDP 成長率 1.5%, 通貨膨脹率 2.0%, 人口數兩千兩百八十
萬人, GDP 4,350億美金,PPP 8,810億美金,人均 GDP 19,080 美金
,人均 PPP 38,630 美金。在馬政府領導下,跟中國的親善除了短期
商業交流外,將只有象徵意義而無實質的合作。

相關文章:

2008 年將有五百萬人失業