@ChingHanHo

I Build Stuff.

Rails Rumble 贏家們都用哪些 Gems

Rails Rumble 是國外相當有名的 Hackathon 大賽,是一場考驗 hacker 們的爆肝力體力和智力的「遊戲」,必須 48 小時之內用 Ruby on Rails 或是其他 Rack-based 的 Ruby 框架寫出一個「最小可行性產品1」。

48 小時內能完成什麼網站?Rails Rumble 網站上列出了今年 2012 贏得大賽的前十名作品,例如第一名的 findthin.gs 可以找出電視影集和電影的線上資源,讓你選擇網路上直接收看或是線下購買回家。

Rails 開發網站果然很快很強大,也仰賴 Ruby 語言的「膠水」特性,利用「工具箱哲學」可以用很多簡單的小工具,快速拼裝起來一個成品。剛剛看到 Dwellable 部落格寫了一篇文章,訪問 top 10 的參賽者,挖出他們的 Gemfile 窺探他們到底用了哪些 Gems 來「組裝」網站。感覺挺有趣的,所以我就順手翻譯了一下我看得懂的部分。

前端技術

  • jQuery:每個團隊都用到了 jQuery 這套輕量的 JavaScript 函式庫;
  • CoffeeScript:9 個,顯然大家都不喜歡單純的 JavaScript;
  • Bootstrap:6 個團隊採用這套由 Twitter 所維護的開源框架,對於不擅長前端的後端開發者而言,這真的非常好用;
  • Sass:9 個,Sass / SCSS 讓 CSS 寫起來更友善,而且更容易維護,尤其是當上了 Compass 後威力更強大;
  • HAML / Slim:有 5 個團隊採用 HAML,有 3 個團隊採用 Slim,比起 HAML 來說 Slim 感覺是更輕量的引擎2

後端技術

資料庫

近年來 MongoDB3 很火紅,還是只有在 Rails 圈內(?)。不過常被詬病的大數據處理的性能,我沒用過所以我也不曉得,但是在小數據的處理上我想大概沒什麼太大爭議,在這種 Hackathon 場合上用起來應該也是很適合的。

在 Top 10 團隊當中,有 5 組採用 MySQL 資料庫,其他有 3 組採用 MongoDB,另外兩組用的是 Postgres。而其中有 5 組團隊採用了 Redis 這套開源的緩存資料庫系統。

測試

其中有 6 個團隊使用 RSpec 來寫測試,雖然他們也有用到其他測試相關的 gems,不過這裡提到的是最主要的。讓我感到訝異的是在 Hackathon 這麼短的時間內,他們竟然還有時間來寫測試?不曉得覆蓋率多少就是了。當然,也有團隊是完全不寫測試的。:p

佈署策略

Capistrano 看來還是最多人用的,有 7 個團隊用它來佈署應用程式,其中有個團隊使用的是 Mina。在記憶體快取方面,有 2 個團隊用了 Dalli 這套軟體,其他的團隊或許沒有用或者是用 Redis 來替代。

第三方服務

大量應用第三方網站的服務來「組裝」是一種趨勢,尤其對於網站的初期來說4。比方說寄信這檔事好了,寄給一個人或是寄給十個人很簡單,但是如果今天要一次寄出幾千封 eDM 就是一門專業學問了,專業的還是讓給專業的去搞吧。而 Rails Rumble 比賽中就有 2 個團隊採用 MailChimp 來處理這方面的問題。

此外,有 3 個團隊使用了 Pusher 這個服務來 host 即時訊息系統。

認證系統

大多數的團隊使用的是富具盛名的 Devise,也有少數幾個團隊用的是「純」OmniAuth。大多數的開發者都會把 OmniAuth 直接整合進 Devise。

該來用看看的 Gems

  • Pry:irb 的替代品,當然不是單單「替代」這麼簡單,能替代當然是因為它非常強大的 debug 功能,Rails Rumble top 10 團隊中就有 6 個團隊使用它;
  • RedcarpetMarkdown 語法的解析器,也是我常用的 gem 之一;
  • UserAgent:用來解析 HTTP user agent,可以判斷你是用什麼裝置來上網的;
  • Whenever:用 Ruby 產生例行性的工作,我之前寫推文演算法用的是 rufus-scheduler 這套;
  • Stamp:用友善的時間表示法來表示日期,替代原本 %m 這種不曉得是 month 還是 minute 的格式。

後記

Hackthon 好像很好玩,不過以我現在的實力去參加,恐怕是被碾假的吧。前幾天才剛結束 Yahoo! Hack Day,最後獲勝者是 Polydice 報名的兩個隊伍,結果兩個隊伍全得獎了。XD

而前幾個禮拜 Facebook 也來台灣舉辦 Facebook World Hack,台灣相當強的 Rails 高手 XDite 贏得最後的大獎,也在她的部落格分享獲勝心得,其中我覺得相當有參考價值的是:

評審希望得獎的題目是 valuable 的。搞笑、諷刺、主題模糊的題目,一定不會得獎。(我在 2009 的比賽跟一群大神等級的朋友合作做了一個精美的搞笑網站「我是專家」,但是……我們沒有得獎)

看到這裡再去瞄一下 Rails Rumble 前十名,都是非常有實用性的網站。所以下次如果要去參加 Hackathon 比賽,我想選好題目是非常重要的。

  1. 精實創業所提倡的一種概念,產品或服務不需要等到「完美」才推出,只要「堪用」能夠滿足使用者需求就夠了。
  2. Github 上有人用 Apache Benchmark 做了一個實驗,測試 ERb、HAML、Slim 這三套樣板處理引擎的性能,有興趣可以參考看看。
  3. 值得提一下的是最近 10Gen 在線上開課,可以上免費的 MongoDB 專業課程。
  4. 例如國內的 iCook 就用了非常多的網路服務來「組裝」。

Comments