10/26/2008

Rails 2.2 :多個願望一次達成...

購物專家:來來,我們現在請到 Rails 副總來本購物台,想請問副總對於這次 Ruby on Rails 2.2 來本台銷售,帶來了什麼好康。

副總:這次的 Rails 2.2 可以說是本 Rails 產品史上最大的升級,可以說是把所有想的到聽的到看的到的問題都一次解決,保證這次不買你就是笨蛋,還去寫 PHP 或是 Java 只能祝福你。

購物專家:啥,那麼可怕,那我想問問,有關之前被人詬病的 Rails 國際化的部份有何加強。

副總:記得上次我們來的時候怎麼講的?Rails 要國際化必須要 Gettext 或是 Plugin 來解決對不對。今天帶來的第一個優惠, Rails 2.2 直接內建 i18n 給你。如果有問題的話,請到Rails i18n來看看怎麼實作。基本上是寫一個 yaml 就可以解決了。

(罐頭歡呼聲)

購物專家:什麼,直接內建 i18n ,那其他 Framework 不是少了一個古老的暴點可以笑 Rails 了嗎?你們上面業績衝的很兇歐,優惠送那麼大。那以前最讓人詬病的效能問題呢?

副總:抱歉,其他家公司,你們災洗了。我們這次直接升級到 Ruby 1.9,讓你們享受 19 倍的效率提昇。(註:購物台都是隨便唬爛的,有提昇是沒錯,有沒有 19 倍就不知道XD)

(罐頭歡呼聲)

購物專家:什麼什麼,你們直接支援效率打敗 Python 2.5 的 Ruby 1.9 呀,那不就是筆記型電腦加 Ram 再加 ssd 這樣誇張歐。這樣你們不會獲利下降嗎?

副總:沒關係,只要可以服務購物台,我們可以流血犧牲

購物專家:導播,各位觀眾,我已經快受不了,那麼好的優惠,那麼好的內容只在今天的 XX 購物台。現在電話所有線路忙線中,請改撥語音專線可以優先訂購。副總,已經端出那麼多了,還有啥好康的?

副總:還有還有,我們改寫 ActiveRecord 了,支援 connection pool 摟,並且是 ThreadSafe 了。只要在 config/database.yml 裡面加上

development:
___adapter: mysql
___username: root
___database: sample_development
___pool: 100
___wait_timeout: 10

就等於以 100 connection 讓 model 讀讓你取,效能提昇直接上看 100倍 (註:購物台都是隨便唬爛的,有提昇是沒錯,有沒有 100 倍就不知道XD)

(罐頭歡呼聲)

購物專家:現在耳機傳來導播的聲音,現在我們備貨數量已經真的真的很少了,大家太踴躍了,記得撥打語音專線可以省一百塊歐。副總你們還有啥優惠嗎?

副總:我們加入了 HTTP 的 last modified since 的 support,讓上次沒有修改過的內容就直接回傳一個 empty response 回去。原本是要回傳幾百K的東西,現在至需要回傳 0 K ,效能提昇直接上看無限大(註:購物台都是.....算了,懶得講了XD )

(罐頭歡呼聲)
(罐頭歡呼聲)
(罐頭歡呼聲)

副總:ㄟㄟㄟ,導播,我的購物專家勒?

導播:他太激動了,回去學習 Ruby on Rails 了。

副總:ㄟㄟㄟ,那麼猴急,我還沒講完勒,http://guides.rubyonrails.org 上線了,可以直接上去看一些 online guilde。



言歸正題,此次的 Rails 2.2 真的是超乎想像的加碼再加碼,修正了很多以前的問題,也加入相當多新的功能。

1. i18n
2. Ruby 1.9
3. connection pool
4. thread safe
5. etag and last modified since

真的可以說是史上最大的升級 XD

6/25/2008

Python Hackthon 遭到保護動物組織的抗議

http://www.javaeye.com/news/2697

http://techfaux.com/2008/06/17/peta-targets-computer-programmers-with-string-of-bizarre-protests/

間單講就是好好的 Python Hackthon 聚會,闖入一堆 30位女生,突然全部脫光衣服,然後舉牌子「How many lives just for a coat?」,意思是要殺掉多少蛇才能有一件蛇皮大衣。

這些天兵似乎還不知道自己在幹麼,她們大聲疾呼「We know what they’re doing in there. They’re hacking pythons. It’s barbaric and we won’t leave until the last snake has been saved」,秀才遇到兵,有理說不清。


改天 Ruby 聚會也有一堆人進來抗議,「停止虐待採紅寶石的勞工」怎麼辦....



6/06/2008

Rails 2.1 新特色:打包 Gem

顧客:老闆, Web 2.0 網站一份,Rails 要 2.1 的,還有幫我加香菜,還有所有的 Gem Package 都要包在一起,要快點,等等 10分鐘要上 Production Server。

老闆:好好好,馬上來,要不要順便叫個啤酒呀?

Rails 2.1 加入了一個新功能 Gem Dependencies ,相當的優。像是上述需求,只需要下達

$ rake rails:freeze:edge
$ vi config/environment.rb
$ rake gems:unpack
$ rake gems:build
即可完成將 Rails 原始碼,Gems 原始碼包入到 Rails app folder 裡面,這樣 deploy 超方便呀。

以下是詳細解說

$ rake rails:freeze:edge
把現在的Rails Version 打包入 vender/rails/

$ vi config/environment.rb
把所有有關的 Gem package 加入設定檔

Rails::Initializer.run do |config|

# Require the latest version of haml
config.gem "haml"

# Require a specific version of chronic
config.gem "chronic", :version => '0.2.3'

# Require a gem from a non-standard repo
config.gem "hpricot", :source => "http://code.whytheluckystiff.net"

# Require a gem that needs to require a file different than the gem's name
# I.e. if you normally load the gem with require 'aws/s3' instead of
# require 'aws-s3' then you would need to specify the :lib option
config.gem "aws-s3", :lib => "aws/s3"
end



$ rake gems:unpack
把所有的 config 裡面設定相關的 Gem Package 都打包入 vender/gems/

$ rake gems:build
非一定要用,只是如果你相關的 gem package 不一定是純 Ruby Code,有些會相關一些 C Lib,這時候就可以用這個指令來 build native gems。



6/05/2008

Gettext 在 Rails 2.1 下面的問題

Gettext 1.19 遇到 Rails 2.1 會發生以下的問題
NoMethodError (undefined method `file_exists?' for #):


解決方式就是寫一個 config/initializers/gettext.rb

require 'gettext/rails'
module ActionView
class Base
delegate :file_exists?, :to => :finder unless respond_to?(:file_exists?)
end
end



重起即可。

5/01/2008

Rails 2.1 RC Release

Rails 學習之路最困難的一件事就是,社群活力太強,改版太快了。Rails 2.1 RC Release了。請到Rails最新時尚的 github 去取用。

4/22/2008

把某資料夾的 UTF8 檔案轉成 Big5

不要問我為何如此,反正 TextMate + 只能用Big5的Project 造成的。


pwd = `pwd`.chop
all_files = `find app -type f -not -regex ".*.svn.*"`
all_files.each do |file|
old_file = pwd+"/"+file.chop
new_file = pwd+"/big5/"+file.chop
`iconv -f utf-8 -t big5 #{old_file} > #{new_file}`
end




4/12/2008

Passenger :Mod_rails for Apache 終於出世

這是 Rails 登基的最後一塊基石嗎?

不知道說了多少次,Apache 上面沒有 mod_rails,不能像是 php 一樣放上去就跑了,不過時代終於改變了,Mod_rails 出現了,他的名字叫做 Passenger

他做的事情就是讓設定Ruby on Rails 簡單到極點,省去所有設定繁複的設定手續,一個 Apache 就可以跑 Ruby on Rails。讓所有覺得 Ruby on Rails 設定困難的人全部閉嘴。 此東西一出,各方高手可都是讚譽有加

DHH : This could definitely become very popular, very fast ;)

Matz:It is often said that Rails is weak on deployment; PHP runs fairly fast just by uploading scripts. Rails is slow on development mode, and requires restarting on production mode (and bit complex to configure). modrails might be the answer for it.

效能
第一個問題是他的效能跟穩定性,跟現在市面上的 solution 有沒有得比。

根據他們自己的測試,看來是有大於 Mongrel,略贏過於 Thin 的效能。 Robustness 測試他們宣稱跟 Mongrel 一樣穩定,勝過 thin 還有 ebb。

安裝方式
既然是走簡單取向的 Apache ,那安裝方式當然要簡單點摟。只要你的 Server 上面有 Ruby / Rails / Gems / Apache2 ,那麼安裝方式就是兩下
1. gem i passenger
2. passenger-install-apache2-module

設定方式
既然是走簡單取向,設定方式要更簡單,你必須在 Apache 的 httpd.conf 裡面設定

LoadModule passenger_module passenger_module的預設目錄
RailsSpawnServer SpawnServer路徑
RailsRuby ruby路徑

別擔心找不到相關路徑,
screen-capture.png
上面的圖,我們可以看到在 passenger-install-apache2-module 過程中他會自動產生相關設定檔,給你貼上去。

剛剛是把 Rails 環境設定好,現在就是就是設定 DocumentRoot,

<VirtualHost *:80>
ServerName www.yourhost.com
DocumentRoot /rails目錄/public
</VirtualHost>

簡單講就是要設定清楚 Document Root,設定到Rails 目錄底下的 public 資料夾。,當然他也有範例 config 檔自動生成 XD
screen-capture-1.png


讓 Rails 跑在子目錄下
還沒測試,不過在 Doc 裡面有,看來可以很簡單的跑 PHP 跟 Rails 在同一個 Apache 下面(Bravo!!!)。

原理
採用類似 Apache mod_fastcgi 的方式,以一個 Passenger Process 來管理所需的 Rails process 量,隨著量的大小而動態增減 Process 數目。

結論
目前沒有明顯的結論,說 Passenger 一定勝過 Mongrel 或是 Lighttpd+fcgi 的 Solution。不過,看到他簡單的設定檔,還有看似不錯的效能跟穩定度,真的很值得期待。

4/08/2008

解決 Textmate 中文問題

沒想到我也會寫這種教學,不過既然有人問就順便講一下啦。嚴格說起來,我完全是參照這篇網頁所教學的方式。

Textmate 對中文的實在爛到不知道怎麼說,主要有兩個問題
1. 沒有中文字型
2. 不能顯示出輸入法提示列

要解決沒有中文字型的方式就是安裝中文字即可,請下載 TextMateJ2 這個字型。複製到 /System/Library/Fonts/ 底下,並且雙擊安裝。安裝字型之後,就是要選擇這個字型,請到 TextMate 的 Preference -> Fonts and Colors 最下面的字型裡面選擇 TextMateJ2。

screen-capture.png


要解決不能顯示輸入法提示列就是安裝 CJK-Input.tmplugin 。解開後就直接點 CJK-Input.tmplugin,他好像就會直接安裝了。

成品就是如底下圖。字型會擠擠的,這是沒辦法的事情。唯一解決方案就是等 TextMate 2 出。
screen-capture-1.png


JRuby 1.1 Release

JRuby 1.1 已經 Release 了,1.0到1.1最主要的不同是在「效能」的成長。JRuby 1.1 在很多 Benchmark 已經超越了 Ruby 1.8,甚至有些也贏過了Ruby 1.9。主要的修改有

1. Ruby code 可以 compile 成 Java Bytecode
2. Regular expression engine 改成 Oniguruma
3. 效能的進步以及相容性的進步

Ruby compile 成 Java Bytecode 一共有兩種模式(AOT或是JIT mode)。

JIT Mode 是預設,代表他會經過一段時間才會運轉到 compile Mode , JRuby Wiki 建議是 跑20次就自動到 JIT Mode 去。

AOT Mode 可以將 Ruby code compile 成 Java 的 .class 檔案。如果想要直接用 Java 去執行,要裝 JRuby.jar ,還有 asm-3.0.jar ,jna.jar。

下載連結:http://dist.codehaus.org/jruby/jruby-bin-1.1.zip

4/04/2008

更換主力 Editor ,改成 TextMate

這是一個困難的決定,不過是一個對的決定。

當我被某人勸說,不小心 Download 下來 TextMate 試用,彷彿打開所謂的禁忌之門,不久我就淪陷啦。我已經正式切換到 TextMate 上面了,vim 已經被冷落一週以上了。

你問我 textmate 好在哪裡,我只能說調性很合我的感覺。

是的,他有一卡車的缺點。這是我第一個花錢買的 Editor,第一個遇到居然連 Big5 都不能編輯的 Editor(他只接受 Unicode),也就是我要用 Vim 繼續處理 Big5 的 Project @@!。第一個連打中文字都要 Plugin 的軟體。

不過,該怎麼說呢。

Vim 是初戀情人,我用他用了5年,他對我有滿滿的回憶。Textmate 就是有很多缺點,但是卻愛的死心塌地,愛的轟轟烈烈的愛人吧。

如果這就是愛
在轉身就該勇敢留下來
就算受傷 就算流淚
都是生命裡溫柔灌溉~~~ 出自『如果愛」這首歌