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.藥品要滴在舌頭兩側,不可直接從舌中央餵食,以免嗆到

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