一些 Ruby Dynamic Features 記事 (1) OOP

趁過年把 The Ruby Way 拿起來讀一讀,大部頭一本沒辦法從頭念到尾,就挑了最重要的第11章( OOP and Dynamic Features in Ruby) 來念。這個主題值得閱讀的還有 Ruby for Rails 第13章(Ruby dynamics) 跟最近出的 Advanced Rails 一書第1章(Foundational Techniques),因此這幾篇文我還會修修改改就是了。

閱讀全文〈一些 Ruby Dynamic Features 記事 (1) OOP〉

Spakit: A SPA Rails plugin

Spakit 源自 registrano.comMassage,是一個可以讓你將現成的網站輕鬆轉換成 SPA (single page application) 的 Rails Plugin。只需在 view 中換用 Spakit helper,不需要更動 controller code,就可將超連結和表單送出變成 Ajax 送出並更新頁面。

spakit 目前放在 github,另外也包成 gem,安裝方式如下:

 gem install spakit
 cd /your_rails_app/vendor/plugin
 gem unpack spakit
 mv spakit-0.9.0 spakit

並且 rename 成 spakit。裝好之後,首先建立一個 Spakit 專用的 Layout,一個簡單的範例如下:

# /view/layouts/spakit.rhtml
<p><%= flash[:notice] %></p>
<%= yield %>

接著就可以使用 Spakit 專用的 helpers,目前有 spakit_link_to, spakit_form_for 和 spakit_form_tag 三種可以使用,用法如下:

spakit_link_to 'new person', :url => new_person_path
spakit_form_for @person, :url => people_path

如此按下連結或送出表單後,Spakit 就會送出 Ajax request(i.e. prototype’s Ajax.Updater ),然後將回傳的 HTML 結果更新到#content 區塊。

如果你想要支援 Ajax 的 Histroy Bookmarks,建議可以採用 Really Simple History(RSH) library 來處理瀏覽器的上一頁下一頁問題,這部份的範例程式附在 plugin 的 README (使用到 jquery library,好心人有空可以幫忙寫 prototype version)。

P.S. 這篇文的英文版在 Handlino’s blog

如何寫出有效率的 Ruby Code

又來推薦 PDF 武功秘笈, Writing Efficient Ruby Code

Ruby 是個很慢的語言,但有些作法應用得當,還是會有不錯的改善。不過要知道程式碼的可讀性跟執行效率有時候是衝突的,這點還需拿捏,尤其 software life cycle 一開始可讀性比較重要。有句最佳化的經典名言一定要引一下:

未成年就這麼優,是一切邪惡的根源
Premature optimization is the root of all evil

這裡紀錄一些看到有趣的事情,PDF 裡有更詳盡的 example code。

閱讀全文〈如何寫出有效率的 Ruby Code〉

新年快樂: Blog is back

硬碟 crash 之後,因為工作忙也就暫時沒管。這幾天試著把硬碟接起來救救看,還蠻慘的幾乎讀不到什麼,只好用手邊一個多月前的資料庫備份來重建,除了留言五月份之後的都不見了 :<。WP Theme 也重挑新的。

前幾天過了25歲生日,這個年紀還蠻令人害怕的,已經不能說是小孩了。回顧今年,畢業後就沒打算念研究所,如願地把補充兵當完,然後繼續投入這個從大一就開始接觸的網路軟體業,百家爭鳴熱熱鬧鬧的一行。

這幾個月很少寫部落格,都在忙著開發 Registrano,真槍實彈的用 RESTful Rails 2.0 寫 code,幾個月下來也已經能自在地應用 REST 概念(還有踩到不少 Rails edge 鐵路地雷… XD),也寫了幾個 plugins 近期準備釋出。2008 將至,目前的計畫將以四月的 OSDC.tw 為一個大 milestone,把 Registrano 做到理想中的 Software as a Service 程度,希望能藉此經驗投出一個 Modern Rails2 Development – The Registrano Way 議程。