12/30/2007

Ruby 1.9 Release

Ruby 1.9 Release了,根據Ruby慣例,版本小數點後面的數字偶數是穩定版本,奇數是測試用的版本。所以 Ruby 1.9 算是 Ruby 2.0 之前的開發版本,現行的穩定版本還是 Ruby 1.8,所以請不要把你公司的 Production 機器都改成 Ruby 1.9。

1.9 除了語法上面的演進以外,最大的不同就是在於內建 YARV 這個 VM。對於 Ruby 整體效能有相當大的增快,如果 Ruby 跟 Python 2 Fibonacci Sequence 的測試,大概比 Python 2 快了三倍。However ,跟幾年前的 Release 比速度,還真的沒啥好誇耀的 :p

Download 點在這
ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.tar.gz

Change in Ruby 1.9
http://eigenclass.org/hiki.rb?Changes+in+Ruby+1.9

12/26/2007

Beast 在 Rails 2.0.2 不能啟動的解決方式

昨天 安裝Beast Trunk ,發現在最後 rake db:schema:load 遇到
rake aborted!
undefined method `whiny_protected_attributes=' for ActiveRecord::Base:Class
這樣的 error。根據網路上的回答,應該是 Rails 2.0.2 搞得鬼,解決方式根據這個網頁講的,在 config/enviroment.rb 裡面將這行 comment 起來即可
#config.active_record.whiny_protected_attributes = false
話說,beast 已經 800 多行了,乾脆改成千行以下的 forum 好了 :p

Ps.
Beast 安裝方式
1. 下載下來 beast trunk code
svn checkout http://svn.techno-weenie.net/projects/beast/trunk beast
2. cp config/database.example.yml config/database.yml 並且修改他
3. 建立 schema
rake db:schema:load
4. 修改 config/environment.rb. 裡面的 PASSWORD_SALT
5. 安裝額外的 Gem 像是 RedCloth 或是 ruby-openid

12/10/2007

Leopard,Terminal,Vim,and .... UTF-8

最近買了新的 MacBook ,Leopard 到目前感覺都還很不錯,尤其是大幅度改進的 Terminal.app 。不過,跟我預料的一樣,Terminal 的 UTF-8 問題依舊沒有設定好。所以花了點時間 survey ,順便把一直困擾我的 vim 中文問題一起解決。

Leopard 內建的 vim 是 version 7.0.234 ,GNU bash 是 3.2.17 ,這幾個版本支援 UTF-8 都沒有任何問題,所以其實只是設定檔的問題。

1. 修改 ~/.profile
加入
export LANG=zh_TW.UTF-8
2. ~/.vimrc
加入
if has("multi_byte")
set enc=utf-8
set fenc=utf-8
set termencoding=utf-8
set fileencodings=utf-8,ucs-bom,big5,latin1
else
echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
endif
不確定是否有沒有更好的設定方式,不過,我已經滿意了。

11/05/2007

JRuby 1.1 Beta 1 Release;這個世界最快的 Ruby Interpreter?

JRuby 1.1 終於出 Beta 了,1.0 -> 1.1 主要的改進都是在於 Performance 的部份,結果是JRuby 已經在大多數的 Test 勝過現行的 Ruby 1.8.6,Ruby code 可以用 AOT 或是 JIT 來 compile 。並且兩者都比現行的 Ruby 來的快,memory 使用也比較少。

當然宣稱歸宣稱,我們也該看看 real rails application performace 的表現如何。Nick Sieger 寫了一篇 JRuby on Rails:Fast Enough 表示 JRuby on Rails 已經跟 Ru
by on Rails ㄧ樣快速了。並且JRuby 核心開發者 Ola Bini表示 JRuby 已經在大>多數的 Test 勝過 Ruby 1.8.6。

公說公有理,婆說婆有理,那麼最起碼最起碼 JRuby 效能逼近 MRI Ruby 是不爭的事實。
So,該是進場的時候嗎 :p

11/02/2007

JRuby 1.0.2 Relase

JRuby 發表了 1.0.2 版本,修正許多 Bug 跟支援了 Rails 1.2.5,Rails 1.2.5 跟 JRuby 1.0.1 有問題的人請升級到 JRuby 1.0.2。

10/30/2007

Mongrel 1.0.4 出了

    在歷經將近十個月的等待, Mongrel 終於推出了 1.0.3 版,當然依照慣例,很快的馬上就被抓到很多 Bug,隔天就出了 Mongrel 1.0.4 版。安裝方式官方建議是
    gem install mongrel --include-dependencies -P HighSecurity
    不過,最重要的是 release note 最後一句
    Mongrel 1.1 is coming real soon now with JRuby support and a few other things.
    所以,Mongrel 1.1 要出來了,並且還要加上 JRuby Support。

      It's all about JavaScript

      進入公司至今已經一個多禮拜,因為 Project 因素,整天都在碰 Javascript。其實還蠻充實的,而且也學到不少東西,或許我該為這個Blog改個名字叫 LightyJS 之類 :p 很多時候當你真的寫過 Javascript,才發現 RJS 的好處。總之,或許我該多寫點 Javascript 的東西。






      10/17/2007

      新訓結束了,國防役開始

      入伍前,PTT 上面的版眾已經告誡大家某營某連很可怕,但是還是被國防部排進去這個連隊。經過一連串的酸甜苦辣,我從某精實連出來了。因為這個連實在是很精實,所以沒時間看書。我的HTTP:The Definitive Guide也沒翻到百頁。接下來的一周,找房子,搬家,適應新公司等等大概可以讓我多忙個兩週。看來 LightyRoR 要重新出發可能也要等個幾天。對了,我國防役去友邁科技(主力產品 Urmap.com)。

      還有,最近對讀 Rails Source,玩 Xen ,玩 Linux From Scratch,玩仙劍奇俠傳4 很有興趣。真不知道有沒有時間讓我這樣玩。會不會到最後,只有電動玩到了,其他的東西全部都沒時間呢 :p

      總之,我回來了。

      9/08/2007

      AK47 與 M16 補充

      大家好,我又放假了。看到有人問我,上篇文章,意味著誰代表RoR。我只能說,沒有特別的誰代表誰。

      在技術水準差不多的狀態下,所謂的設計好壞其實只是取捨。Ak47 取了簡單,但是失去了準度。M16 強調準度,但是輕巧的設計卻換來了些許的不穩定,以及較高的訓練時間。換來的結果也沒有誰輸誰贏,只是剛好第三世界國家適合 AK47 ,美國適合 M16。

      越戰這個 case ,Ak47 遠勝於 M16,但是這是在叢林戰這個 domain。其實美軍打贏那麼多場戰役,很多其他的戰爭 case,M16 說不定在其他 case 壓的死死的。只是越戰名氣大而已。

      一切都只是需求的不同而已。

      軟體開發也是如此。在工程師水準相近的情況下,你的選擇通常都只是因為這個任務的需求,而非這個設計方式比較好。

      我所陳述的,是一段歷史,是一個工程設計哲學的頂尖對決,是一個值得去瞭解的他山之石。而非誰代表誰。

      9/01/2007

      AK47 與 M16

      大家好,我是 thegiive,我正在服國防役新訓,先跟大家打個招呼。最近一直沒時間碰 Ruby on Rails ,不過軍中倒是花了點時間研究步槍。賢者總是說到「觸類旁通」這件事情,我也剛好從步槍這種殺人兵器中,看到了一些東西,很值得軟體開發借鏡。在此先警告一下,我只是在陳述輕兵器設計哲學之間的比較,並非鼓吹輕兵器,戰爭等東西,如果認為槍枝是邪惡不能被提及之人,請勿進入本文。

      我研究的東西,就是號稱 20世紀最偉大的武器 AK47 ,跟屈居第二的 M16 的之間的瑜亮之爭。

      AK47 是由蘇聯槍械設計師米哈伊爾·季莫費耶維奇·卡拉什尼科夫設計的自動步槍。這款武器號稱槍中之王,很多第三世界國家的戰爭都看到他的身影。可以說是哪裡有戰爭,那裡就有 AK47。有這樣一句話:「美國出口的是可口可樂,日本出口的是Sony電器,而蘇聯出口的是AK47。」

      這不是沒有原因的。 AK47 當初設計的哲學,就是為了「簡單」。他被設計成為任何民眾,在沒有人教導,沒有任何工具,依舊可以在三個小時之內可以徒手拆解結合,並且裝子彈射擊,由此可以知道他的「簡單」,到底是簡單到什麼程度。

      再來因為俄羅斯環境氣候糟糕,他將內部機構組織設計為較粗糙,這代表不容易因為沙土,泥水進去而導致不能擊發,也就是他當初就是為了設計為可以穩定的擊發子彈,就算再惡劣的環境也是如此。後來因為 AK47 大流行,參加了許多場戰爭,擁有相當多的實戰測試,導致他的擊發穩定性更上一層樓。有人戲稱「AK47 掉到泥水中,沒關係甩一甩,繼續打」。

      但是當初社記者因為為了「簡單」,「穩定」,損失了些許射擊準度。導致 300M 外射擊準度很差。

      M16 系列是屬於美國系統,他當初設計的哲學就是為了擁有穩定的設計準度,以及良好的射擊距離。所以他採取相當巧妙的設計(我們輕兵器教官是這樣講的,我沒有研究很深),但是越精巧的系統代表容錯率越低, 第一版 M16 對於環境的容忍程度較差,很容易因為環境因素導致卡彈。美軍在沙漠風暴之中,就常聽說美軍為了避免沙子進入槍口,用保險套套住槍口,形成一種很詭異的情況。

      綜合比較兩者優劣,很明顯的 M16 在射擊準度上面優於 AK47 許多,但是耐用度上面,第一版的 M16 可以說是遠遠輸了 AK47,一直到 M16A2 才比較好一點,不過還是輸給 Ak47 。

      使用率上面,AK47遠遠的贏過 M16,傳說 AK47 有一億隻之多。造成 AK47 大流行的原因很多,
      1. 一來是因為構造簡單,上手簡單,士兵幾乎不用訓練就可以擊發,所以許多第三世界國家喜歡使用 AK47。
      2. 再來就是因為構造簡單,容易仿造,所以很多國家都自己仿冒 AK47,傳說十支 Ak47 只有一支是正版的 AK47。
      3. 再來就是如果你有看軍火之王這部片子,裡面講到蘇聯瓦解,許多將軍失去以前的榮光,為了錢,他們將軍火庫裡面成千上萬的 AK47 盜賣給軍火商,導致黑市 AK47 大流行,既便宜又好用。
      4. 最後雖然 AK47 不準,但是第三國家沒有資源去花時間訓練士兵射擊準度,所以使用 AK47 根本沒差

      這裡必須要提一件題外話,如果你看過血鑽石這部片子,就知道他們是怎麼訓練娃娃兵的。而娃娃兵雖然知識水準不高,但是因為 AK47 實在是使用上太簡單了,所以導致軍閥隨隨便便訓練娃娃兵,他們都可以上手,拿槍來殺人, AK47 的簡單某種程度導致娃娃兵的大流行。這是讓我每次看到都覺得很荒謬的一件事情。

      真正決定 AK47 王者地位的戰役就是越戰。越南一方使用 AK47,美軍使用 M16。越戰是叢林戰為主,叢林戰的攻擊射程可能根本不到 10 m ,在叢林 AK47 跟 M16 射擊射程都是一樣的,也就是 M16 的強項射擊距離跟經準度就跟廢了一樣。再加上叢林環境太過惡劣了,M16的低容錯率造成大量卡彈的發生,很多美軍屍體旁邊都有卡彈的 M16,代表他們是因為卡彈才死去的。到後來,甚至出現許多美軍將自己 M16 放在一旁,反而使用搶來的 Ak47 來打越南軍的怪現象。

      事後想想,AK47 早就已經實戰好幾年了,那時的穩定度以經是 3.0 版。M16 在越戰時穩定度還是 1.0 Pre release 版。再來剛好遇到 M16 強項被極小化,所以才會遇到被 AK47 八的那麼慘的情況。

      雖然剛剛講了那麼多 M16 的壞現象,但是他依舊美軍最佳的利器。因為美軍戰爭時需要「減少傷亡」,減少傷亡最好的方式就是拉遠戰鬥,所以 Ak47 只能較近距離的特性依舊不適合美軍。也就是說,沒有最好的槍枝,只有最適合這次任務的槍枝。

      所謂的簡單就是美,在 AK47 留下的最好的證明。簡單的設計容易修改,複製。產品正確率也較高。並且容易上手就容易造成流行。軟體又何嘗不是如此。

      穩定性的重要,在輕兵器的領域優先權是相當高的,畢竟子彈往身上跑過來的時候,誰都不希望自己手上的槍枝卡彈。越戰時,AK47就在這個領域上面遠遠勝過 M16,也為這次比試留下了勝利。當某個領域的要求穩定性,已經高到一個很重要的程度時,我們應該選擇比較穩定的設計,而非功能比較強大的設計。

      最後,沒有最好的槍枝,只有最合適這次任務的槍枝。同樣的,沒有最好的軟體,只有最符合這次任務需求的軟體。

      我們在這些輕兵器的歷史中,是不是看到許多軟體開發的影子呢。