各位喜愛 Ruby 的朋友們,Ruby Tuesday 復出首場開始報名囉,詳細資料請前往報名網頁,時間地點是 2008/12/23(二) PM7~9 台北市蛙咖啡。
這次的題目非常難得,godfat 介紹的 Rubinius 和 contagious 介紹的 Merb 都是 Ruby 社群中非常看好其發展的兩套 Open Source Projects,相信可以帶給大家不一樣的視野跟想法。
😆 👨🏻💻 📚 🚀 💰 ✨
Update(2008/12/12): 上課的網頁在這裡 ihower.tw/course/rails.html,投影片在這裡。
感謝 OSSF 自由軟體技術教學工作坊 的邀請,下週四我會在台北開一堂 Ruby on Rails 稍微進階一點的上機實做課程(主辦人不忘提醒我這是推廣教學課程,盡量簡單一點),詳細內容請參考課程介紹。
各位喜愛 Ruby 的朋友們,Ruby Tuesday 復出首場開始報名囉,詳細資料請前往報名網頁,時間地點是 2008/11/25(二) PM7~9 台北市果子咖啡。
嚷嚷說要重辦 Ruby Tuesday 好久了,因為覺得辦活動挺麻煩的,所以一直都只是嘴上說說…. XD
直到兩個禮拜前布丁大人去買了 ruby.tw 這個響當當的網址,在 hlb 跟 gugod 聯手凹(鼓勵?)的情況下,就決定衝了。
首先是要找講者,沒想到還蠻順利的 :p 賣一下人情就把三位講者拖下水了(?) 其實大家都非常樂見能有一個社群活動可以分享技術、聯絡感情,所以都二話不說就答應了,甚至還說可以贊助活動費用(怎麼好意思呢,都已經沒有講者車馬費了XD),真是超級感謝。
lukhnos 將會分享他們公司如何使用 Ruby script 來取代一些 shell script 的工作。tsechingho 會介紹及比較 substruct 和 spree 這兩套 Rails E-Commerce 平台。contagious 則是講解 DataMapper 這套比 ActiveRecord 厲害的 ORM 工具,同時他也預約了下一場 Ruby Tuesday 會繼續介紹 DataMapper 的好夥伴 Merb web framework。
Ruby Taiwan 第一次辦社群活動,請各位舊雨新知多多捧場囉,我們會出沒在 IRC freenode #ruby.tw 頻道,歡迎多多指教。
Update(2008/10/23): 今日已售出。
代售好友的 MBP 筆記型電腦一台,有試用了一個禮拜多(上週我的 MBP 拿去送修,所以就借了這台當工作機 :p),功能一切正常。
閱讀全文〈售 MacBook Pro 筆電一台〉
身歷其境的看了兩天的 MerbCamp,主辦單位提供的 Webcast 非常流暢,幾乎沒有 delay。(怎麼會這麼厲害呢?! 我連 youtube 或 Y! Live 沒有不 delay 的啊…orz),讓我在家就可以參加地球另一端的研討會,真是棒極了。(雖然英文聽的哩哩落落,不過還是很爽。It’s free!)
主辦單位也在 IRC 上開了 #merbcamp 頻道,講者們似乎也都在上面,隨時都有一些 link 丟出來可以看看,有什麼問題也可在上面提出(例如: webcast 沒聲音或沒影像等轉撥問題反應)、講者QA時間也可以從 IRC 上面問,主辦單位會幫你問講者,非常有參與性。
以下整理自我在twitter的簡短 Merb 心得:
也有人做了詳細的筆記:MerbCamp Day1, MerbCamp Day2,最後一場 Keynote 的 Merb Performance Benchmarks 特別有意思:Merb without template 與 pure PHP 平分秋色,Merb with template 就大勝 CodeIgniter 和 CakePHP 這兩套 PHP web framework 了….. XD 找了一下這幾套的 benchmarks 比較,發現連 Rails 還不算太慢麻,比 Zend Framework 跟 CakePHP 都還快上不少,所以比較起來應該是 Static >> PHP > Merb >> CodeIgniter > Rails >> Zend Framework >> CakePHP。
投影片大部分在 slideshare 上可以下載的到。同時間 Merb 也將發佈 1.0 RC (即 0.9.9) 版本,所有 API 都將定下來(Merb team 非常強調保證他們的 public API will be stable and backwards compatibility for 1.x,我想大家都被 Rails 一升級就有 plugin 會爛掉非常感冒),相信在過不久就會有越來越多的文件可以看(目前還很缺啊!),是個不錯的進場時機。
最近在翻 The ThoughtWorks Anthology(知名軟體顧問公司 Thoughtworks 出的文集),裡面有篇 Object Calisthenics 蠻有意思的。
好的物件導向設計很難,我們都很同意何謂好的設計原則:高內聚力(cohesion)、低耦合(loose coupling)、不重複程式(Don’t Repeat Yourselp)、封裝(encapsulation)、可測試性、易閱讀性等等,但是實際寫的時候卻不容易化身為一行行的程式碼。這篇作者列了九條規則,並建議你練習寫個千行程式嚴格遵守看看,用以改善你的OO實作能力。
初次看到這九條時覺得有點誇張,但其實濃縮了不少OO想法在裡面,如果有閱讀過重構或物件導向設計原則等概念,應該能夠聯想到很多東西,挺有趣的。
1. 每個函式裡面只能有一層縮排,如果需要多一層,請多寫一個 method 去呼叫。
這個規則其實就是要求嚴格遵守 Compose Method:將邏輯操作轉換為細目等級相同的步驟,避免過深的邏輯而無法迅速了解,相信大家應該都有看(寫)過M型程式吧 :p
2. 不要使用到 else 這個關鍵字。
避免寫出複雜的 nested conditional 程式。不論是”重構“或是”重構-向範式前進“這兩本書,都有很多篇幅花在討論如何簡化條件邏輯,作法包括
a. 重構一書提到的 Replace Nested Conditional with Guard Clauses 方式,直接使用 return 返回,不要再 else 了。
b. 請愛用 Ternary Operator:也就是 boolean-expression ? expr1 : expr2。很多簡單的 if else 都可以用 Ternary Operator 簡化到一行一目了然。舉個 Ruby code 例子:
if ( is_something )
"foo"
else
"bar"
end
如果改成三重操作子就俐落多了:
( is_something )? "foo" : "bar"
另外初心者也常寫出根本不需要 if else 的情況:
def is_foobar
if ( a > 0 )
return true
else
return false
end
end
其實只需要這樣就可以了:
def is_foobar
( a > 0 )
end
c. 第三招要先念點書,請善用物件導向的多型(polymorphism)能力,請參考設計模式的 Strategy pattern 或重構的 Replace Conditional with Polymorphism