Web Development 的學習之旅

2007/05/15

利用 FireFox + del.icio.us 製作即時書籤

在利用 del.icio.us 儲存了日常用的書籤, 並加入了 tag 分類之後, 點選畫面最下方的 RSS 圖示, FireFox 會出現"新增即時書籤"的提示.

此時即表示 FireFox 會將畫面上的書籤建立一個資料夾來存放, 不須像以前匯入我的最愛的方式, 一旦 RSS 內容更新, 我們只需要在這個書籤資料夾上以滑鼠右鍵->"更新即時書籤", 即可得到最新的書籤.

這個功能對我而言最方便, 在好幾部電腦上我都想要用相同的書籤時, 不必再擔心同步對應的問題了, 完全以 del.icio.us 的為準.

2007/05/11

初探 RoR 的想法

寫在前面:
其實接觸 Ruby, Ruby on rails(RoR) 不久, 還沒辦法寫出什麼內容. 不過因為自己也對架構設計/發展相當感興趣, 因此或多或少有點想法.

最近在研究RoR, 也因此接觸到了 ActiveRecord. 在初步瞭解之後, 發現其實 RoR 提供許多一直以來都是我想要(或想要實作)的功能, 相信許多人也應該有這種感覺. 既然如此, 那為什麼在其他語言一直都沒有看到這樣的作品呢 ? (或是其實我不知道而已 ?)

各領域都是高手如雲, 但我卻沒有看到這樣完整的作品(也或許有, 是我孤陋寡聞, 但起碼我相信 Delphi 領域那麼久以來是沒有). 不說我荒廢的這幾年不知道變化, Rails 這樣的架構也該在好幾年前就出現了才對, 我不相信只有 Ruby 才做得出來, 即使 Ruby 語言特性很佳, 但各語言在發展上也相當完備, 就算沒 Ruby 那麼簡潔, 那麼動態, 也應該有辦法依該語言的特性實作出類似 RoR 的架構才對. (像 PHP 的 CakePHP, 是一個類似 RoR 的架構, 可見 RoR 影響力其實已經超越Language的界限了. 就一個 coding 人來說, 應該是種福氣吧)

我想關鍵點在於架構實作者心中的 View. 在自己所熟悉的 Delphi 領域裡, CRUD 的架構其實不難實作, 要將 Table 封裝成 Class 的架構, 也可以找得到, 我也一直認為像 RemObjects 的 DataAbstract 是個不錯的架構產品. 但是要找到像 RoR 那麼"完整"的架構(相對的比較來看), 卻找不到了. 這裡不是指單項最高分, 而是各項平均得分應該是最高的.

我發現可能的原因是架構實作者專注在軟體開發的目的(我以前幾乎都是這麼想), 有時可能因此忽略了過程. 像 test, scaffold, migration...等都不是軟體結果(客戶)所需要的, 但卻是軟體過程(開發團隊)需要. 軟體過程所需要的功能與環境, 並不是沒有 solution, 但一直以來自己也感覺到整合相當的困難, 不久就容易被束之高閣成為所謂書中的理論. RoR 把這些納入架構之內, 視之為一個整體, 對我來說簡直是太棒了.

RoR 其實填補了多數開發者在開發過程上的需要, 我想它帶來的不是只有令人側目的宣揚(ex: 十倍速開發等...), 它帶來的啟示我想給了所有架構設計者更寬廣的思維, 相信會對所有語言的架構產生影響, 進而帶來全面性的改變.

也有許多地方是週邊帶來的附加價值, 不是 RoR 本身. 像 gem, 在使用 gem 之前很難想像取得/安裝/更新一個程式庫竟然可以這麼簡單. 例如安裝 RoR, 勢必須要一起安裝其他有引用到的程式庫, 但是 gem 可以幫你自動將其需要的程式庫一同抓下來, dependency 的問題少了很多, 版本也考慮到了. 光這點就造福 programmer 節省多少時間, 能運用在正常的工作上.

另一個是 rake...待續

摘錄: 脫離 Rails 看 Ruby

原始文章請看: http://www-128.ibm.com/developerworks/tw/library/j-ruby/

底下是自己對該文的一些摘錄, 片片斷斷的. 原文作者是 Java programmer, 對於擁有開闊的心來瞭解不同其他的語言, 發掘優勢, 並加以運用在日常工作上表示敬意, 我想這正是 Programmer 不斷進步的源頭.(註:不是指學習不同的語言, 而是指擁有開闊的心)

不止是 Java 領域, 很早以前我也發現許多的 Delphi 程式設計師, 也相當瞭解 PHP (或其他語言), 他們不一定用 PHP 來開發 Web App, 也有很多是運用 PHP 來協助完成平日的 Delphi 專案. 在 Ruby 漸受重視的今天, 我也開始看到有 Delphi Programmer 運用 Ruby 來發揮在不同的用途, 而不只侷限運用在 Web App .




Ruby on Rails 只是使 Ruby 非常強大的方面之一,就像 EJB 只是 Java™ 企業平臺的一部分一樣。Andrew Glover 揭示了 Java 開發人員可以使用 Ruby 做什麼。

有人可能會說 Ruby 的語法很簡潔,這正是它的意圖:這種語言使開發人員可以迅速撰寫簡潔的程式碼。...如果用 Java 語言和 Ruby 分別定義同一個類別,透過比較,就能夠看到這種簡潔性。

Ruby 並不使用 Java 程式碼中的 new ObjectInstance() 語法,Ruby 實際上支援在物件上呼叫 new 方法,即在內部呼叫 initialize 方法。

在清單 4 中,我用 Ruby 的 require 方法(這個方法可以在 Kernel 類別中找到)“匯入了” dictionary 模組。

在清單 4 中建立 happy_wrd 實例時沒有 指定 Definition 或同義詞集合。我只為 spelling 和 part_of_speech 傳遞了值。可以進行這樣的省略是因為 Ruby 支援參數的預設值。...這基本上就是告訴 Ruby 如果呼叫者沒有提供這些集合,就將它們預設設定為空集合。

Ruby 的集合處理同樣簡單得令人吃驚;看看 Word 類別中的 add_definition 和 add_synonym 方法就知道了。<< 語法被重載,表示 add。如果再看看 清單 2 中的 Definition 類別,就會發現 Java 語言中的對應程式碼複雜多了...清單 6 中的程式碼只觸及到了 Ruby 集合處理的皮毛!

attr_reader 和 attr_writer 都不是關鍵字,而是 Ruby 中的實際方法(在 Module 類別中),它們以符號作為參數。符號 是前面有冒號(:)的任何變數,更妙的是符號本身也是物件

靈活的迭代方式也是用 Ruby 撰寫程式碼時的樂趣之一。...each 方法本質上就像 Java 語言中的 Iterator,但是它更簡潔。在清單 8 中,each 方法處理迭代的細節,使呼叫者能夠將注意力集中在想要的效果上。

Ruby 也 支援大家熟悉的 Java 迴圈結構,比如 for 和 while;但是在實務中很少用到這些結構,因為 Ruby 中的幾乎所有東西都支援迭代表示法

在 Java 語言中,如果條件結構的體只有一行,那麼可以省略括弧。在 Ruby 中,如果條件結構的體只有一行,那麼可以撰寫 清單 11 中所示的運算式。還要注意,同樣的條件還可以寫成 definition.word = self unless definition.word == self,這使用了 Ruby 的 unless 特性。這很棒,不是嗎?

因為 Ruby 是動態類型語言,所以它不需要介面。但是要記住,介面的功能在 Ruby 中是存在的,只是以靈活得多的方式表現出來。Ruby 中的多態性被親切地稱為 “duck typing”

在 Ruby 中沒有介面!只要方法名匹配,就可以利用多態性。...在清單 16 中,用 Ruby 重新建立了 Java Filter 類型。注意,每個類別之間並沒有關係(只不過它們都擁有同一個方法 apply_filter)。是的,這兩個類別應該被重構以擴充 Filter 基類別;但是,在這裡我只是想展示在 Ruby 中如何利用多態性,而類別並不共用相同的類型。

在清單 17 中,我使用 Ruby 的 Test::Unit(這就像 Java 的 JUnit)來示範 duck typing。順便說一句,在 Ruby 中建立自動測試只需擴充 Test::Unit 並加入以 test 開頭的方法。這與 JUnit 很相似,對嗎?...還要注意 Ruby 多麼輕鬆地支援正則運算式。要建立正則運算式,只需使用 / regex / 語法。因此,清單 17 中 RegexFilter 的正則運算式是一個大寫的 G,後面是一個或多個 o,最後是 gle。

Ruby 沒有介面,但是它有 mix-in。可以把 mix-in 看成多重繼承,但是它沒有 多重繼承的麻煩。mix-ins 是模組(不能被實例化),其中包含類別可以選擇包含的方法。這些模組方法會變成包含它們的類別的實例方法。

學習多種自然語言的經驗告訴我們,可以混合使用不同的程式設計語言是件好事兒。能夠用多種語言進行程式設計,使您在面對各種程式設計任務時具有更大的靈活性。這還會提升您的程式設計母語的價值。

正如在本文開頭所說的,我主要是 Java 開發人員,但是我發現有許多辦法可以將 Ruby(和 Groovy、Jython 等等)用在工作中。而且這麼做的時候不需要使用 Rails!如果您放棄了 Ruby on Rails,因為您實際上不需要 在短時間內建立購物車應用程式,那麼好好瞭解一下 Ruby 本身吧。我認為您會喜歡自己看到的東西。

2007/05/09

Story start

緣起:一個不太會寫網頁也不太會架網站的 programmer, 開始要架網站了。