11/29/2006

Agile Web Development with Rails 第二版


Ruby on Rails 界的聖經 Agile Web Development with Rails 的第二版終於脫離 Beta ,開始送印了。所有購買 PDF Version 的人應該都會收到一封信
The final version of Agile Web Development with Rails went to the printer last Friday. This means that the paper book will start shipping sometime around December 15.
然後所有購買 PDF 版本的人都已經拿到最新的 PDF 了吧 XD 。我想距離 Amazon 上面買到應該不遠,大概是12月中就可以開始訂購了。這本書一定要敗的啦!!!

11/28/2006

敝公司出了大事,萬事都得延宕下來

基本上,我肯待一家公司,代表我對他有忠誠,我喜歡或是認同這間公司的作風 。這次我們公司處於生死存亡之際,我恐怕沒太多時間寫 Blog ,本 Blog 在最近更新可能非常緩慢,請原諒,我想跟我的公司一同度過這個難關。

BTW ,看到這一長串討論文章,以及Hemidemi聲援的網友,我看到了德不孤,必有鄰這句話。

Comet on Lighttpd

Comet 果然是開始慢慢發酵,Lighty 作者 Jan 也開始對 Comet 有興趣了。
Can I use it ?
Not yet. This is a idea how to implement COMET in a nice, performing fashion. On the way to 1.5.0 it will be implemented. Meanwhile I’m looking for comments on the idea and if it matches your needs for COMET and AJAX.
他還沒決定怎麼作,不過可以確定的是事情是他會在 1.5 上面 implement ,implement 方式可能是採用 mod_multiplex 或是 mod_mailbox 方式來作。

至於 Comet 可以拿來作的東西,AJAX 也都做得到。但是有些程式的架構本身就比較適合 Server Push ,而不適合 Polling。像是聊天室,IM等程式都是廣泛的 Comet 應用,期待 Lighty on Comet 的到來。

11/27/2006

What's new in Rail 1.2's ActiveRecord

Rails 1.2 RC 出了,我們也該好好看看多了什麼有趣的東西。基於我認為 Active Record 是 Rails 的核心價值,所以我先從 Active Record 開始說起。就如我剛剛說的 Active Record 是 Rails 的核心價值,在企業中,核心價值是很難允許修改的,所以這次的改版對於 Active Record 修改非常少 XD 我發現幾個比較重要的改變。

  1. Condition find 變得更加 Rails
    原本還很 SQL Like 的 Condition find
    Person.find(:all, :conditions => [ "last_name = ? and status = ?", "Catlin", 1 ])
    變成
    Person.find(:all, :conditions => { :last_name => "Catlin", :status => 1 })
  2. Has_through 更加好用
    支援 :uniq => true , << , delete ,改天嘗試看看能不能取代 has_and_belongs_to_many
  3. Has_one support dependent
    一共有
    :destroy, :delete, and :nullify 幾個 option
基本上在 Active Record 端修改的不多,不過光是 condition find 跟 has_through 的進步就值得我們更新到 Rails 1.2。

11/23/2006

Rails 1.2 RC 1 出了

雖然手邊的工作正在趕上線,但是這個新聞太大了,還是得報一報,Rails 1.2 RC 1出了。 賣點如下
  • REST REST REST !!!
  • response_to : 別人給你一個request,你可以選擇回應的 format,像是 HTML ,XML,RSS之類的。
  • Auto-Loading Lib
  • MultiByte:你沒看錯,Unicode Support
  • Route 改版
  • ProtoType :Prototype’s Ajax-based forms no longer serialize disabled form elements
  • Action Mailer 加強:MIME 1.0 Default
詳細情況看這裡吧。要嘗鮮的人請按
gem install rails --source http://gems.rubyonrails.org --include-dependencies
這次 1.2 版最主要進步就是 REST,讓 Ruby on Rails 繼續往更加前瞻性的 Web Framework 邁進。恭喜 Rails Team!!!

update : 有關於 Restful 的介紹,請看

Something really close

最近一周 Blog 都沒時間寫,實在很汗顏。因為 Ruby on Rails 的專案即將上線,這周的每天都在 tune performance ,修改Bug,寫文件,還有找出頁面忘記加入那些連結。最近的感覺就跟馬拉松要最後衝刺的心情一樣
『快成功了,不過還差一點』
到目前為止,程式研發時間大概是 2.5 個月 * 2 人。但是扣掉Partner 是學生,一周大概只有 2 人天,我一周上班時間本來就大概 3~4 人天,9~11 月之間我還配合公司行銷專案,隨手開發了 2 ~ 3個小專案。(因為這些案子我都用用 Ruby on Rails ,我才能『隨手』開發 =.=)所以總開發時間大概是 2 ~ 2.5 人月比較正確。

身為 Ruby on Rails 推廣者,我總是會被問到『國內有那些公司用 Ruby on Rails?』。雖然我花很多時間寫文件 。不過到最後發現,比起寫一百篇文章,推廣的效果還不如自己寫一個網站所帶來的效益來得高,也比較有說服力。LAMP 獲得尊敬也是等到 Wikipedia,Flickr,Digg 等網站規模起來了,才獲得商業公司廣泛的肯定以及採用。這個案子如果真的可以起來,相信會給國內 Ruby on Rails 界一個大大的振奮。

這個案子結束後,我該思考兵役的問題了~~~

PS. 最近壓力測試發現 Mongrel 真的很穩。

11/22/2006

HTML Filter 3: XSS

講了那麼多 HTML Filter 的例子 ,例子2,回到一個問題?如果照著之前的程式,有沒有辦法防範 XSS ?我現在給的答案是
不容易
為什麼?難道 Rails 那麼爛?錯了,看看這個表吧,當你的站遇到 Extra dot for absolute DNS 這種攻擊。
<IMG """><SCRIPT>alert("XSS")</SCRIPT>">
我們發現,有太多玩法可以放 XSS,而濾掉特定 tag 方式幾乎行不通,因為我們還是希望開放某些有用的 tag 像是 a 或是 img。但是我們可以減少這種可能發生率
  1. 使用 white list filter ,盡量少用 black list,whitelist 就是僅僅開放某些 tag ,blacklist 就是僅僅關閉某些 tag。我之前的 html filter 就是 white list 的。
  2. href 跟 src 裡面要檢查 javascript 的欄位
  3. 如果沒必要開放 tag ,盡量使用 h 通殺
延伸閱讀
  1. XSS 筆記
  2. XSS 列表

11/18/2006

Linux Journal Editor's Choice of 2006


Linux Journal 12月份選出了 Editor Choice of 2006 。 如大家預料的,2005~2006保持無敵狀態的 Ruby on Rails 1.1.6 當選了 Web Framework of 2006。另外一個喜訊是Ruby 1.8.5 當選了 Programming Language of 2006,主要原因是 JRuby 受到 SUN 的青睞,打敗了入選者 Object-C 跟 Python。

另外一些跟本Blog有關的獎項,Apache 2.2 打敗了 Lighttpd ,成為 Web Server of 2006。Postgresql 8.2 打敗了 MySQl 跟 SQLite 成為了 Database Server of 2006。

媽,我上 iThome 了~~

台灣 Ruby 社群接受 iThome 記者採訪,並且在 269期(2006/11/18~11/24)獲選為封面故事『搜索Ruby on Rails的高速魔法』。看完全部的章節之後,發現我講的話有點多 XD
Update: 訪談線上版已經上線了

11/17/2006

為什麼 Debian 跟 Ubuntu 上面沒有 ruby-gems?

Ruby Gems 是一個相當重要的 Ruby 套件管理系統,有太多 Ruby and Rails 的 Plugin 在 Gems 上面可以方便的下載。但是,FreeBSD ,MAC OS X,Gentoo 都可以直接用預設的套件系統安裝 gems ,卻只有標榜安裝快速方便的 Debian 跟 Ubuntu 沒有提供 APT 安裝。這到底是為什麼呢?

我看了一些討論串,這裡網頁解釋了許多 Debian 上面為何不加入 Ruby Gems 的原因。
  • Rubygems packages are not compatible with the FHS. Rubygems follows the “one directory per package and version” rule.
  • It is not possible to do “normal” (FHS-compatible) installations of rubygems, and some ruby software developers have started to distribute their software as gems only.
  • Rubygems is source-intrusive. The require instruction is replaced by a require_gem instruction to allow for versioned dependencies. Debian and most other systems think that dealing with versioned dependencies outside of the source is a better idea.
  • There are currently no plans to improve RubyGems to ease the work of Debian and RPM packagers.
當然啦,每個套件系統都有自己的 concern,不過我不太能接受這個理由,難道 Ruby Gems 必須為了特定系統開發一個新的方式嗎?

到底是系統應該配合開發者的習性,還是開發者得自己去適應系統的規則?

但是看到這個網頁,我覺得這個講的比較實在點
Pure ruby gems are converted fine. However, ones including C extensions are not.
大意是如果這個 GEMS 是純 Ruby 當然歡迎,但是有些 Ruby Gems 是有 C extenstions 的(一些 Ruby Lib 像是 ruby-mysql ),那就很容易出現安裝錯誤,所以相當不建議使用 Ruby Gems 摟。 為此,Debian-Ruby 的 Daigo Moriwaki 也寫了自動轉換 GEM 成為 DEB 的程式,希望能方便大家打包 Ruby Gems 的 DEB Package。但是話說回來, Ruby Gems 那麼多,你怎麼可能全部包成 DEB ?Ruby GEMS上有些東西有安全性顧慮時,要緊急下載 patch ,這時通常官方會建議使用 Gem 去更新,難道 DEB 也可以立刻做到即時更新?還是要使用者自己苦哈哈下載 source 自己裝?

到底是系統應該配合開發者的習性,還是開發者得自己去適應系統的規則?

如果答案是後者的話,Ruby GEMS 要怎麼做到跨平台?所以 Daigo Moriwaki 也深知這個道理,也提供了 Unofficial 的 deb source XD
deb http://www.sgtpepper.net/hyspro/deb unstable/
deb-src http://www.sgtpepper.net/hyspro/deb unstable/
Update 完 DEB index 之後,apt-get install rubygems 即可。