Rails 的 lost MySQL connection 問題

不知道從什麼時候開始(Rails 1.2?),我的 Rails 在跑 MySQL query 的時候,不定會出現 500 Internal Server Error,可是重新整理一次又可以用。看 log 檔也沒有紀錄。用 ruby script/server 直接觀察後發現 “Lost connection to MySQL server during query” 的錯誤訊息。

問了Google,發現要裝 gem install mysql。不過很奇怪都是說 Ubuntu 上要裝,在 FreeBSD 上都沒提到要裝?… anyway… 重開機之後就沒問題了。

Google Adsense for Content 支援繁體中文

終於正式開放了哩,可以在繁體中文的 Adsense for Content 設定了。之前小道消息不斷,都是用別的語系先偷跑,不過聽說這樣不合Google規定就是了。

anyway… 覺的蠻有趣的,我也試放看看能有多少收益,希望不會太影響視線… :p

有關 Google Adsense 的資訊可以參考 Adsense繁體中文觀測站

DHH談Ruby效能

上次的這篇 Joel談Ruby效能 其實DHH(RoR發明人)也有文章回應(反擊?),我覺得更為公允實在…:p。摘要重點翻譯如下:

Outsourcing the performance-intensive functions (把效能密集的程式外包出去)

每種程式語言本來就有不同擅長的地方,例如 Yahoo 跟 Amazon 就會使用 C++或 Java 來處理 back-ends,而在前台使用PHP或Perl。而在 Basecamp 中,縮圖程式長這樣

def thumbnail(temp, target)
  system(
    "/usr/local/bin/convert #{escape(temp)} -resize 48x48! #{escape(target)}"
  )
end

看起來有點作弊,Ruby竟然直接呼叫 imageMagicK 指令。但是這不就是為什麼叫做 scripting language 的原因嗎?我們不用發明縮圖程式,因為有人已經用C寫好更快的了,同理  Bayesian filter 也是,已經有人用其他更快的程式語言寫好,你只需要呼叫即可,而且這些常常都有人寫好 wrappers了,例如 RMagickMySQL/Ruby

你不必只限制在只能一種程式語言來開發,在大部分情況下使用有高度 productivity 的程式語言,然後把有瓶頸(bottlenecks)的部份外包(outsource)給已經用更快的程式語言寫好的套件(packages),或是自己寫需要的擴充(extension)。

我們在 Campfire 也碰到明顯的瓶頸 bottleneck,上百個使用者每隔三秒就要同時要更新資料,本來用100行的Ruby code,後來改寫成300行的C。整個專案保持 90% 的 Ruby code,把瓶頸 bottleneck都外包給 C。假設為了獲得最大效能(performance)而全部用C寫,那大概會發瘋吧。

所以不要讓瓶頸 bottlenecks (不管是真的或想像中的瓶頸,通常還是後者) 來支配你的軟體開發環境選擇考量。有個詞這樣描述那樣的情況,稱作 “premature optimization”。(貿然實施最佳化,是各種傷害的根源)

網站企劃推薦書籍

我是個網站開發者,我一直幻想著開發一個新網站的時候,有個漂亮的OL(這不是重點)可以寫超讚的網站企劃給我,讓我一看就知道要做什麼網站,而不是每次都給我籠統的客戶需求,定規格跟如何設計都得自己來。早些時候我看了些UML,甚至買過一本Building Web Application with UML,不過都不適合企畫人員作為給網站企劃用途,太難了,尤其是這麼小的團隊… :p

我的夢幻企畫我想可以 based on 以下幾本書: 閱讀全文〈網站企劃推薦書籍〉

Rails RESTful 實作

Update(2006/12/4): 一些小修改跟 link_to 的 web accessibility 補充。

Update(2006/12/11): 請接著看系列文章下一集: Rails RESTful 相關工具

Rails RESTful 彈第三篇,我想 David Heinemeier Hansson 的這篇投影片是很好的開場白:  Discovering a world of Resources on Rails

本來這篇想寫的仔細點,不過後來我發現AWDwR第二版講 Resource-Based Routing 的頁數還不少(十幾頁吧,還蠻詳細的),要用 Rails 的人應該都去買一本,我想我這裡就不巨細靡遺了… :p

在 Rails 中是如何實作 RESTful 支援的? 首先是在 Resource Routes 上,在 routes.rb 加入

map.resources :users

這樣的宣告將在自動對應 URL路徑跟 Controller 的 action ,而有以下的結果 :

GET: /users => [:action => ‘index’]
GET: /users.xml => [:action => ‘index’, :format => ‘xml’]
GET: /users/1 => [:action => ‘show’, :id => 1]
GET: /users/1;edit => [:action => ‘edit’, :id => 1]
GET: /users/1.xml => [:action => ‘show’, :id => 1, :format => ‘xml’]
POST: /users => [:action => ‘create’]
PUT: /users/1 => [:action => ‘update’, :id => 1]
DELETE: /users/1 => [:action => ‘destroy’, :id => 1]

也就是使用 named routes 來實作出 verb-oriented controllers,單一個 resource 根據 HTTP verb 而有不同的行為。 閱讀全文〈Rails RESTful 實作〉

品書.書品

還蠻不錯的一本愛書人小書,語調輕鬆(比起如何閱讀一本書簡單多了,當然份量也不同啦~),提供一些閱讀的觀念跟技巧等等。有些跟我本來的觀念一樣,像是有系統整理書單買書。有些我則做的不好,像我還蠻有剩菜症候群的,一但開始唸一本書就算很痛苦也盡量要念完… :p

書分五章:

如何找書

整理自己想唸的書單(List of Candidates),寫下推薦念這本書的各種來源管道。整理自己的閱讀史。當你建立書單的同時,除了是寫下了興趣所在,也是設定了你的人生目標,你的每個目標都將透過閱讀的力量去達成。

別強迫自己去讀你不喜歡的書,這世上有成千上萬的好書,何必傻得把時間浪費在無法讓你愉快又受益的書上。很多人會覺得一旦開始讀一本書之後,就必須得要讀完,這種觀念就像不想浪費食物而吃光剩菜的心態,要學會放棄。要使自己精於閱讀,你必須挑選大量的入圍好書並抽樣試閱。

讀經典文學不怕晚: 隨著年紀與歷練成長,讀文學名著所吸收的養分會比年輕時加倍豐沛。

計畫性的閱讀才能提升知識品質: 只有當你藉由主動積極地尋找好書,考量更廣泛的閱讀領域,加上用心地精挑細選,使你涉獵的書籍大半都是有計畫性的閱讀,這樣你所獲得的知識品質才會提升,而且是大幅提升。 閱讀全文〈品書.書品〉