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 就是有很多缺點,但是卻愛的死心塌地,愛的轟轟烈烈的愛人吧。

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

Rack - 小架子立大功

最近 Ruby Web Framework 界出現了很多新面孔:
Ramze, Sinatra,Waves, Halcyon ,還有 4/1 才發佈的下一代 framework ==> Ruby on Crack!!

這些 framework 各有各的特點,除了為原本被 Rails 一統天下的 web 開發增添了新的風貌,也說明了 Ruby 社群的活躍。而他們(除了太神奇的 Crack 之外)的背後的大功臣,就是今天的主題: Rack

Rack 到底是何方神聖呢?


每個 web framework 最後一定要接回去 web server 。方法有很多,有人喜歡老牌的 Fastcgi ,有人愛用雜種狗,有人要像 mac book air 一樣,有人說退潮最快。

新的 framework 一直冒,新的 web server 一直來,每個人都要重新寫把兩者接起來的 code 實在太累了, Rack 就是為了解決這個問題而出現的。(1)

Rack

Web 程式講白了很簡單,就是拿 request 然後回 response。Rack 就是把各種 web server 的 request 和各種 framewrok 的 response 用統一的介面來處理。那麼這個統一的介面是什麼呢?

一句話

lambda { |env| [200, {}, 'Hello World!' }

首先, Rack 會將 request 傳給要處理這個 request 的物件的 call 函式。這個例子中,處理 request 的物件就是 lambda。(當然你可以用一般的物件,只要它有 call 這個 method 就行了。)
例子中的 env 就是 request,它是一個 hash ,裡面包含了類似 CGI Environment 變數,像是 PATH_INFO,QUERY_STRING 等等的東西。

而 call 的回傳值,會被當成 response 傳回去給 web server。這個回傳值必需是包含三個元素的 Array: status, headers 和 body。

原本 N 個 framework 和 M 個 web server ,要寫出 NxM 個 Adapter。而有了 Rack 後,大家只要對 Rack 的介面做 Adapter ,複雜度馬上減少為 N+M 了!

如此一來,不用一直重新實做橋接的邏輯,可以把心思放在 framework 本身的設計上。有了 rack ,相信 ruby 的 web 開發會更為有趣。

下一篇再來實際寫些 code 吧。


這張圖的 idea 是從這裡來的...

4/01/2008

[連結文] 為何有些 Java EE/J2EE 的專案是沒效率的,至少是效率低下的

原文連結在此,要看簡體翻譯在此。光是第一句我就笑死了。

我想到一句話,「教授是將簡單的事情變得很複雜,天才是把複雜的事情變得很簡單」。