Late to the Party -- Design Pattern In Ruby

如果你是 Design Pattern 的新手, 使用 Ruby 也有一段時間, 或是 Ruby 新手, Design Pattern 修習有一段時間, 那麼這個 Blog 有很多 Design Pattern 的 Implementation 可以參考:

Late to the Party

http://cwilliams.textdriven.com/

以及其中的

Ruby Category

http://cwilliams.textdriven.com/articles/category/ruby

包括 Decorator, Observer 等常見的 Pattern, 也有 Singleton 等概念在裡面, 非常推薦.

Ruby 的缺點

圖:Red Rain, by NeverB4Breakfast

Ruby 用到現在, 也有三年餘了, 從一開始被他的 Iterator 震懾,
然後被他的 Pure-OO 概念吸引, 到現在發現了不少缺點,
不管是語法上, 架構上, 實作上, 都有諸多不滿意的地方,
而就我所知這些缺陷, Ruby 也早就試著改進, 雖然優點多於缺點,
但 Rite 推出之前, 還是不吐不快.
所以今天就讓我大快朵頤狠咬 Ruby 一口吧!

JavaEye 的觀點

JavaEye 的這篇罵一罵 Ruby
已經說了不少 Ruby 的缺點, 來總結一下吧:

  1. 缺乏 Virtual Machine
  2. Unicode 支援不佳
  3. 企業應用 ( 2PC, scaling problem, etc. )
  4. Library, default action 匱乏
  5. 沒有編譯階段
  6. 缺乏文件

Ruby 發展過快,有些缺點是難免的, 這裡也不是要幫 Ruby 說話, 不過就我所知這些問題大概都有解──沒有解的, 至少也有解釋.

  1. Ruby 已經有很多套 Virtual Machine 正在開發,
    Ruby 的理念中並不想把這種 Language 跟其他 Tools
    綁在一起, 因此這樣的設計架構是可以理解的.
  2. 這是很嚴重的問題,Unicode 現在大致上已經被解決了,
    但其他 encoding 的問題並沒有太大的進展,
    不過我在這方面很弱,所以也不方便做太多 Comments (倒)
  3. Scaling 的問題一直有在改善, 這種 Full-Stack 的語言工具,
    其實都面臨同樣的問題, 不過正因為我們已經交給他們了,
    因此就請信任 Ruby 開發者們的能力吧.
    2PC 的問題倒是比較難解,
    不能以 「Ruby 的社群不在大企業」萊矇混過關,
    身為以平行處理為目標的 Ruby 而言,
    這其實有點難自圓其說, 但要更改現有架構,
    對於彈性強的 Ruby 而言, 恐怕也是有些窒礙難行.
  4. Library 早已經不缺了, 倒是品質確實參差不齊,
    管理上雖已有 RubyGems 了但還是不方便,
    而且 RubyGems 也還在 0.9.x 的開發階段,
    但是面對現有的 Gems, 要更改架構我看也相當困難吧.
  5. Ruby 這種直譯式語言本來要 Compile 就會有點困難,
    天曉得你下一步會往哪裡去? 變數有沒有定義根本無從知道,
    不過對於強型態的語言來說, 沒能 Compile 確實有點詭異.
  6. 文件啊… 這也是 Ruby 一直以來的痛, 倒也不是不齊全,
    其實文件數量很夠, 但是由於發展過為迅速,
    導致於很多今天才寫出來的 document, 可能明天就不適用了,
    關於這點我認為 Ruby 需要一套更完善的文件系統,
    metadata 當然也要儘量描述,
    這份文件到底是適用於哪個版本的軟體,
    免得牛頭不對馬嘴.

我的觀點

那問題到底出在哪裡呢? 就我而言, Ruby 在語法上有幾個我看不慣的地方:

  1. Iterator indicator delimit

    這東西不確定是好是壞, 不過我就是看那幾個 |a, b| 不順眼,
    後來想想這可能是為了要方便某些場合下可以一行秒殺的程式,
    但是為了這點就要多按兩次 shift 更令人難過.

  2. Overloading 醜斃了

    我的媽, 哪有人 method 裡面的 overloading 都用 .is_a?
    在實作的? 不僅不美觀又不實用, 打起字來又特別費力,
    氣死人了.

  3. 預設用 underscore, 也很醜

    不過這是個人習慣問題, 像我就比較喜歡 camel 型態,
    toSym 比 to_sym 要來得經濟划算多了, 看起來也不會多吃力.

架構上:

  1. Install libraries 需要 administrator/root 權限

    雖然 RubyGems 成功模仿 CPAN 架構,
    但希望能更進一步區分哪些 libs 不需要 root 權.
    很多 libs 明明不需要裝在 /usr/lib/
    卻還是沒辦法輕鬆在自己的 work directory 使用這些 libs.

  2. 過度包裝

    require ‘iconv’ 之後還得 include Iconv,
    這雖然比較保險啦, 但是一想到不 include 就得用
    Iconv.iconv() 來 call method 就不禁覺得有些好笑.

實作上也有令人流淚的悲傷:

  1. 有時縮寫有時不縮寫

    to_s 這種縮寫實在很詭譎, 誰知道 s 是指什麼啊?
    既然是要讓程式碼變得更易於閱讀,
    那麼 「知其所指」 應該是非常基本的.

  2. Overloading again

    忘記從哪一版開始, 「string」 + fixnum
    竟然會產生 TypeError,
    這是要使用者自己定義 operator overloading 的意思嗎?

  3. Meta-meta-programming

    Ruby 雖是我目前看過最漂亮的語言, 但也是最暴力的語言!
    怎麼可以有個 Tool 能發展至今, 底層卻依然充滿了 eval 呢?
    就連新興的 Gems 也一樣, 動不動就使用 eval.
    幸虧這些 developer 都有一定功力,
    不至於發生太嚴重的 Injection 災情, 但天有不測風雲,
    Ruby 也有摔破的一天, 這樣惡搞, 安全性令人質疑.

這時候就會很恨自己平常沒有記下缺陷的地方, 因此這些缺陷也是講得零零散散, 有待大家把它補齊吧! 大家一起為新世代的程式語言一起努力.

新のものがたり

圖:台北 101 與煙火?!

一直很期待 2007 的到來,但既不是因為 Perl6, Py3k, Rite 的開發,也不是因為天時地利人和可以搞大事業,而是一直有預感,今年一定會很美好,於是就這樣期待著了。

大學過到現在已經一半多了,卻一直感受不到自己在上「大學」很像一個一天到晚在填鴨的補習班,然後自己就是那隻肥鴨, 2007 年,也有可能是繼續這樣度過的吧?

1/1 就要結束了,今年也請多多指教。

Amazon 將帶領 Rails 走向高峰

前陣子都在用 Rails 做學校的住宿系統,跟一大堆被 VPSLink 扼殺的專案,沒時間好好關心新聞。在滲透至校園行政單位開始使用 Rails,以及跟老師借課廣告 RoR 之後,今天難得有閒,就在這邊看到一則新聞: Amazon 開始使用 Rails

哇,不見一日如隔三秋啊!如今 Rails 1.2 也要玩 REST 了,Amazon 竟也開始關注 Rails 了,不知道明天 Ruby 是不是就可以幫你養牛了咧?

首先來看看這句話當中的兩個名詞,Amazon 與 Rails,Ruby On Rails 是兵器級的 Web Development Framework (大家都知道),Amazon 則是 Web 技術的先驅,Amazon 使用 Rails 進行子專案的開發,代表 Rails 已獲得商業界的肯定,有機會正式成為下一波 Web 開發的主角,讓我們一同準備迎接 Ruby 的盛世吧,Cheers!

題外話,Rails 專案做多了,漸漸地對 REST 這種 Design Pattern 有了感覺,雖說 1.2 才正式將 Resources 的概念引入,不過早在之前 Typo 就將 Group Controller 發揮得淋漓盡致啦!真是越來越佩服開發團隊的遠見,早就想到 REST 這一步,一切都發生得如此自然而美妙,Ruby 果真是 Programming Languages 裡的 Art 啊!

雖然之前有個大洞事件,不過這並不會挫了 Rails 的銳氣。Developer 們加油,讓他們看看用 Ruby 真的能「開發得又快又好」!

Site5 US$5/mo

Ruby On Rails 的著名 Hosting Site5 推出了一個月五塊美元的優惠,包括了 55GB 的儲存空間以及每個月 5TB 的流量,另外還有 55 個 Domain Pointer,這數字真是……

不過這個 Plan 要預繳兩年,折合新台幣約 $4,000 上下,這數字說大不大,說小不小,比較擔心的還是像大多 Hosting 會發生 CPU 時間嚴重切割的現象,不過就算發生了的話,一個月 US$5 的價格大概也能使人寬慰一些吧。

詳情請參閱
Site5 Hosting Plan

Microsoft Firefox 2007

Microsoft Firefox 2007 官方網站

偶然看到的連結,這個惡搞網站做得很有微軟味 (掩鼻),看看首頁的安全性簡介,哇,微軟終於把安全性放在第一位了,連 Symantec 這種木馬都偵測得到;點進去 Features 看,還有精美盒裝咧:

其中最令人興奮的功能莫過於 Googling Filter 了,MSFX 2007 可以為您擋掉惱人的 Google 資訊,必要時還會自動關機以保護您的電腦不受 Google 的傷害。

另外此產品也「終於」開始支援 PNG Alpha Channels 了,以後我們就可以在開發網頁的時候使用透明圖啦~

HIJAX 也是近來備受矚目的 Web 技術之一,HIJAX 是取自 Hijacks 這個同音字,為了增加穩定性與安全性,微軟真是不惜成本地開發新技術啊!

喔,還有,RSS = Real Simple Sex,千萬不要搞錯了。

Zooomr 免費 PRO Account

Zooomr 抄 Flickr 抄完了,還來個免費升級 PRO Account 嗆它,只要在自己 Blog 引用 Zooomr 上面的圖片,然後再到這個地方來貼上那篇文章,就可以升級為 PRO 啦~一方面跟 Flickr 競爭,一方面又鼓勵大家使用 Blog,真是高招啊。

偶然看到飛天雞的一篇文,也跟著想把 Zooomr 升級,雖然它不怎麼好用;可惜我 Blog 一直沒修好,又很堅持不想用 WordPress.com,只好一直到今天才引用,嘖嘖,這張很恐怖吧。

tyr.munou.tw 您回來了

經過一連串的挫折之後,我終於將 Tyr 從苦海中拯救出來了,這次 tyr.munou.tw 總算是可以定下來了。

不過 fcgi 的事情還是讓我驚嚇了一陣子,sudo gem install fcgi 竟然一直失敗,結果幫 urpmi 換了個 source,升級之後,一切問題都迎刃而解。還是 Gentoo 好啊,不過 Mandriva 我用到現在,只是常常得找可更新的 source 可用之外,好像也就沒有什麼缺點就是了。

這段時間遭逢 VPSLink 劇變,我的頭像是被砸下一塊重石一樣,本來一切步入軌道的生活都失序了,這個故事說來話長,就讓我長話短說吧:

VPSLink 的服務很迅速,但是沒把我的要求看清楚很令人火大,我租了兩台,其中一台功成身退我希望能取消租用,我請他們在月底結帳時再取消 Server,沒想到在我繳費後沒多久,竟然就把我停掉了,而且還沒有備份,我當天就是要回家備份這台主機的,沒想到竟然晴天霹靂,無語問蒼天。

好幾個專案就這樣付諸流水,除了怪自己沒有好好備份之外,實在沒能去遷怒週遭人。一直到現在,終於有個好事了,希望這台主機能夠陪伴我長長久久,我也能慢慢的把事情處理完,讓一切歸回穩定狀態,然後好好唸書,考個好研究所……

拜託啦,不要再來磨練我的心臟跟肝臟了。

2006/10/27: 上冰館

今天中午跟著黑人哈比少林黑人妻殺皮去吃牛肉麵,所以本來這篇主題是牛肉麵,但是冰照出來的效果太好啦~因此特別貼在這裡給大家欣賞。

綜合水果冰三分之一視角

綜合水果冰俯瞰視角

超級紅豆冰

奇異果冰

地瓜冰