【土虱報報】 第六期
2007/6/6 發行
發刊辭
-
發刊辭 □ 編輯台
經過漫長的等待,期待已久的第六期終於出刊了。 這次的製作過程較以往拉長許多,過程也幾經波折。 摔倒了幾次,但也換得了寶貴的經驗, 而每一個時間點的錯過,都在考驗我們的意志跟信念。 雖然錯過了許多,但我們仍努力堅持創刊的初衷,繼續走下去。 再一次感謝每一位百忙中抽空寫稿的作者們,和支持土虱報報的朋友們...
經過漫長的等待,期待已久的第六期終於出刊了。 這次的製作過程較以往拉長許多,過程也幾經波折。 摔倒了幾次,但也換得了寶貴的經驗, 而每一個時間點的錯過,都在考驗我們的意志跟信念。 雖然錯過了許多,但我們仍努力堅持創刊的初衷,繼續走下去。 再一次感謝每一位百忙中抽空寫稿的作者們,和支持土虱報報的朋友們。 shrink this item
- 發刊辭 □ 編輯台
經過漫長的等待,期待已久的第六期終於出刊了。 這次的製作過程較以往拉長許多,過程也幾經波折。 摔倒了幾次,但也換得了寶貴的經驗, 而每一個時間點的錯過,都在考驗我們的意志跟信念。 雖然錯過了許多,但我們仍努力堅持創刊的初衷,繼續走下去。 再一次感謝每一位百忙中抽空寫稿的作者們,和支持土虱報報的朋友們...
經過漫長的等待,期待已久的第六期終於出刊了。 這次的製作過程較以往拉長許多,過程也幾經波折。 摔倒了幾次,但也換得了寶貴的經驗, 而每一個時間點的錯過,都在考驗我們的意志跟信念。 雖然錯過了許多,但我們仍努力堅持創刊的初衷,繼續走下去。 再一次感謝每一位百忙中抽空寫稿的作者們,和支持土虱報報的朋友們。 shrink this item
人物訪談
-
Thegiive 訪談 □ 報導/LinAnne and Mat
網頁程式設計一直是程式設計中相當繁複的一塊。現在網路上有許多用不同語言所製作的框架,可以增加網頁程式設計的效率和便捷性。在這一期的「土虱報報」,我們很高興可以訪問到知名的 Ruby on Rails 講者 Thegiive,為我們講解現在當紅的 Rub...
網頁程式設計一直是程式設計中相當繁複的一塊。現在網路上有許多用不同語言所製作的框架,可以增加網頁程式設計的效率和便捷性。在這一期的「土虱報報」,我們很高興可以訪問到知名的 Ruby on Rails 講者 Thegiive,為我們講解現在當紅的 Ruby on Rails,也一併談談他接觸 Ruby on Rails 的經歷和過程。
Q: Ruby on Rails 到底是什麼東西呢?
它是一個製作網頁的框架。利用 Ruby 這個語言將所有製作網頁所需要用到的程式語言打包起來,讓製作網頁的過程更簡單快速。
Q: Ruby on Rails 的基本概念是什麼?
我們先思考寫一個動態網頁程式需要用到多少種語言?一個網頁程式設計師至少要會 PHP 或 ASP、HTML、CSS、Javascript、SQL,這樣算起來就有六、七種了。簡而言之,網頁程式設計之所以困難是因為它不是利用一種語言就可以解決的事情。網頁當初只是一個文件交換的格式,它其實不是拿來寫程式的,所以要從事網頁程式設計需要學會的東西太多而且複雜,另外還要把這些東西全部整合在一起,實在是太麻煩了。而 Ruby on Rails 就是試圖用一種語言連結所有製作網頁需要用到的語言,將中間所有的過程簡化。通常動態網頁是由不同語言互相分工合作寫出來的,每個語言負責不同的功能,再進行整合。而語言間的互相溝通有時候太耗時費力。
要了解 Ruby on Rails 第一個需要知道的是 full stack 的概念,也就是將所有網頁程式設計需要用到的語言統統整合在一起,用 Ruby 將這麼多繁雜的程式語言組合成同一種語言:用 Ruby 寫 Javascript、用 Ruby 寫 cookie、用 Ruby 寫 SQL、等等等等。Ruby 的另外一個概念就是(資料庫網頁設計)。一般人一開始學網頁設計都是用 Procedural Programming 和 Object Oriented Programming;然而網頁基本上是 stateless,不會去儲存資料,所以必須要把很多資料都放在資料庫裡面。因為資料庫和一般程式設計基本上是完全不同的概念,所以在相互應用起來的時候就顯得格格不入。
資料庫就是一條條的表單;而程式設計完全不是按照這樣的方式去做的,要把兩個東西包在一起的時候就會顯得格格不入, 於是才要利用資料庫。要使用資料庫的時候就一定要使用到 SQL,相當麻煩可是又是必須的。而現在有兩派作法,一個是 ORM,就是用物件導向中的物件去把資料庫的操作包起來。另一個是 OODD,也就是資料庫本身就是為了物件導向而設計的。Ruby 現在使用的是 ORM,就是將資料庫的操作包裝成 Ruby 的物件來使用。
其實 Ruby on Rails 這些 Full Stack 的概念,之前就已經有許多人想過、做過了,像是相當多人使用的 Java 等等,可是為什麼一個像 Ruby 這樣的新語言會造成如此轟動呢?因為它做得很好。其他的語言或許也有同樣的想法,但如果做比喻,這就像政策一樣,一個政策,起初的立意想法很好,可是實做的不好的話,這個政策就不能算是成功(實做的好壞會決定這樣的想法是否成功)。Java 其實做的也不差,只是在 Full Stack 和 ORM 這方面做的沒有 Ruby on Rails 那麼好。
Q: 那你接觸 Ruby on Rail 花了多久的時間?Ruby on Rails 最神奇的地方在哪裡?
一年不到。而我覺得最不可思議的地方就是,當我開始用 Ruby on Rails 的時候,它很快就把我之前所有的 PHP 全部都趕走了。其實一般當你在嘗試一個新的工具之前,你不太可能全面放棄自己原先所熟悉的東西,畢竟遇到一些狀況的時候還是會利用你最習慣的工具去解決。但是最不可思議的是,Ruby on Rails 很快地取代了我之前最熟悉的 PHP(最近我要改些 PHP 東西,還要想說,咦,奇怪,這怎麼寫呀......XD)。它(Ruby on Rails)包得很好,它是一個專門為網頁開發而設計的東西,而且包裝得非常地完整,所以遇到的問題也相對較少;另外一點就是,它的效率真的很快,所以就幾乎不會想要用以前熟悉的工具了。這樣的比較其實是不公平的,畢竟我是用純 PHP 和一個已經完整包好的工具互相比較。PHP 本身也有包好的框架,我也用過,而我認為是還不夠好的。
其實很多人想問,就是 Ruby on Rails 跟其他的一些像是 PHP 呀之類的網頁設計工具在效能評比上的差異如何?基本上本人不做任何的效能評比的。我覺得這是一個宗教問題。效能評比其實很難做,你必須要兼顧所有的情況,然後在這些狀況下去做評比,而基本上這是不太可能的事情。要做的好、有公信力而且詳細完整。而且最慘的就是,因為 PHP、Java、Python 的 framework 太多了,當你打敗一個 framework 的時候,很多人就會說,「你沒比這個,不準;你沒比另外一個,不準。」。所以我只能說,我目前看到的別人做的效能評比,Ruby on Rails 的表現在效能上還算是中規中舉。就是,你所想得到的任何的語言的 Framework,都會有輸 Ruby on Rails 的時候,所以我認為他們基本上是打平的。
如果要舉例來說的話,像是 PHP 有個 framework 叫 symfony,基本上連 Yahoo 的某些網頁也是用這個框架寫的; 都是用這個框架寫的,所以它應該也是個相當完整的框架;但是去年我用的時候發現,它在一個框架裡面的設定檔一共有 XML、ini、yml 三種格式,而在我看來這是個不甚好的設計。一個框架本身做起來就是為了要整合一切東西,而這個框架本身的的設定檔就有各式各樣不同的格式,那為什麼還要將這些東西包起來呢?另外,我還花了滿長的時間在用 CakePHP,而 Cakephp 基本上和 Ruby on Rails 的概念很相近,很多東西都是參考 Ruby on Rails 來的。我在用 CakePHP 的時候遇到不少問題,首先是大大小小的 bug 很多,再來是它的 ORM 做得沒有 Ruby on Rails 那麼好。不過我用 CakePHP 也是半年前的事情,所以現在它發展到什麼程度我也不知道。另外也有個東西叫 PHP On Trax,它也是參考 Ruby on Rails ,而它的文件實在少到一種不可思議的程度,所以最後還是決定用 Ruby on Rails 。一路走來,其實我沒有用過Java,所以沒有辦法用 Java 做比較。不過我認為說,就實做方面,我比較喜歡 Ruby on Rails ,但是這也不代表說其他的東西做得不好,畢竟每個工具都有它們的自己的特色。就完整度、文件的多寡、討論的熱度、可以獲得資源的程度、社群的大小,Ruby on Rails 在這些方面都是一個相當不錯的選擇。
Q:新手適不適合一開始就學 Ruby 或 Ruby on Rails?
基本上我是不太建議啦,不過如果你真的願意花時間去學的話,還是可以學得會的,但是會有嚴重的後遺症。畢竟它將所有的東西都包得好好的,所以你無法了解東西的細節,就會變成說你寫網頁程式,可是你完全不懂網頁程式的構成分子。如果你一開始就學 Ruby on Rails,下點功夫下去學的話,或許可以做出一個相當不錯的網頁,但是如果你想要成為一個專業的網頁程式設計師的話,我是滿不建議從 Ruby on Rails 開始。就我從一般的程式設計師轉到網頁程式設計的時候,我花了一個月的時間去學習一些很基礎的東西,我發現我那一、兩個月所學到的東西讓我開始理解網頁程式設計到底是什麼樣子,然我會開始比較它們(不同語言和工具)之間的好壞。而我覺得這個摸索的過程是非常有意義的,就像,一定要了解寫SQL 語法的痛苦,才知道 Ruby on Rails 的 ORM 好處在哪裡。如果你是一個網頁程式設計基礎相當厚實的人,那麼要用 Ruby on Rails 上手就會非常地快。
Q:可以談談你學習程式設計的歷程等等,以及是在什麼樣的背景下轉到 Ruby on Rails 去的?
大一的時候學校教的是 C 和 C++,可是可以說是趨近於不會寫的狀態(笑);之後很快就變成 Java 了。後來大三的時候要寫一個作業(把什麼 C code 寫成 machine code 之類的…),發現這個作業如果用 Java 寫的話會非常可怕,所以就開始學 Perl。於是,別人寫 5000 行的作業,我用 500 行就搞定了。因為那個時候的 Perl 是專門為了字串處理而生的,字串處理可以說是它的超強項;而 Java 卻是你想得到的什麼東西它都能做,可是可能就要為了這樣的彈性而犧牲掉其他的東西,所以寫法就會囉唆一點。我那時後寫完這個作業就發現,以前學的像是 Java 之類的東西並不是絕對的;事實上有很多語言在某個特定的領域是可以遠遠地勝過其他的語言的。那時候我就體驗到一句話:「好的工具可以帶你上天堂。」當然你也可以用 C 或是 Java 做到任何事情,但是當你遇到任何一個問題的時候,你不妨去想想看有沒有其他更好的解決方式。(就像是,如果你要到巷口買早餐,是要開車還是騎腳踏車呢?一般而言,當然是騎腳踏車。可是如果是要從新莊到台中,就還是開車比較方便。)基本上你要使用什麼樣的工具取決於你處在什麼樣的境況。慎選工具是相當重要的。
上了台大之後才開始接觸 PHP,也徹底地全面導入 Open Source。這裡有一個小故事。那個時候是接一個案子,覺得好像用 ASP 比較方便,所以我就去買了 ASP 的書來讀,然後架站。Windows 有個內建的 IIS,可以用來看架起來的網站到底長成什麼樣子。這個東西我設定了一個小時還沒有弄好,一直有什麼權限不符的問題。因為當初和業主約定當天可以把網站架好,整個時間就是相當急迫。到了最後剩下十分鐘的時候,我決定去試試看 Apache,所以就上網抓 Apache 來用用看。那個時候我對它沒有任何一點期待,只是想說,就試試看好了。我還只上網 google 了一下它在 windows 上的啟動方式,也沒有找設定說明,就啟動了。然後,居然成功了耶!前後只花了一分鐘。經過了命運的抉擇之後,我把 ASP 的書賣掉,然後開始使用 Apache、PHP、Java 來做網頁程式設計。之後作業系統也換成 Linux 了。
在使用 PHP 的過程中一直有聽說過 Ruby on Rails,心裡就癢癢的很想試,我於是先接觸 Ruby。在寫 Ruby 的時候我有一點被嚇到。其實我非常喜歡 Perl,以前我也以我會 Perl 為榮。但是有一點我一直感到疑惑:為什麼三個月前我自己寫的 code , 我現在會看不懂?所以我一直想要找一個和 Perl 一樣強悍,但是可讀性又比較高的語言。看到 Ruby 的時候我就非常感嘆。而當時 Ruby 的設計者也是 Perl 的 developer,他設計 Ruby 的目標只有一個,就是 a better Perl,一個更可讀的 Perl。其實這個世界上有很多人想法都跟我相當類似:他們都很喜歡 Perl,可是又對於它的可讀性感到非常地畏懼。那時候碰到 Ruby 就真的非常地感嘆,覺得:「終於讓我遇到這個東西了。」。Ruby 他們一直在追求的概念是 less surprise,也就是越少的驚喜,所以許多命名條目都相當規則,大多時候都很容易記住或是猜出該項目的命名。而不用煩於名稱的查詢之中。
Q:所以也就是說,你在學 Ruby on Rails 的過程中,Perl 對你的幫助也是很大的。
應該說,這就是一個過程。因為 Perl 其實在我們當初在學的時候是被歸類為一個詭異的語言。你看過 Perl 的 code 就知道,真的很詭異,很像外星人的語言。一個寫 Perl 的工程師通常會以看懂另一個工程師寫的 code 為傲(自己寫的 code 自己都不一定看得懂了,更何況是別人的)。另外,Perl 它有個概念就是,"there is more than one way to do it."你要達成一個目標,可以有很多種不同的方式,可以走很多條不同的路;也就是條條大路通羅馬的意思。所以不同工程師的寫法不同,再加上語法又很詭異,然後如果兩個人又會適當地使用一些捷徑,要看懂別人的 Perl code 事實上是很困難的。Ruby 的話是儘可能地把一些曖昧尷尬的語法砍掉,但它還是繼承了 there is more than one way to do it 的概念。另外還要補充的一點就是,用 Ruby 的人通常都不會去用 Python。Ruby 的概念是 there is more than one way to do it,而 Python 的教條是完全相反的。Python 認為當你要完成一件事情的時候,應該就只能有一個方法可以達成,不要有第二個方式。他的想法是增加可讀性。但是如果你習慣並且接受 Ruby 的 there is more than one way to do it 的話,就會對Python的教條非常反感。
Q:可以請你比較一下 Ruby 和 Perl、PHP、Python 之間的優缺點嗎?
口味很重要。喜歡 Perl 的人很難去喜歡其他的語言。PHP 的話,是我到目前為止覺得最不喜歡的,因為它的處理面向太窄了,只能專注於網頁設計。它是在做網頁程式設計時必備的東西,就是如果學做網頁一定要接觸、多少懂一點東西,但是就和哲學扯不上關係了。今天你在寫程式語言的時候,其實是在講話給電腦聽。你想的東西可以變成程式,同時程式語言的模式也會影響你的思考方式;所以你寫某些語言的時候,會覺得格格不入,而另外有些語言寫起來就是如魚得水。其中原因就真的是因為口味。如果是 Python 的話,我一直把 Python 視為是 Ruby 最強大的競爭者。我很難去比較 Ruby 和 Python,畢竟他們兩個做的事情其實是差不多的;Ruby 用幾行能寫出來的東西,Python 應該也相去不遠。但是,我就是不喜歡。P3P 當中我最喜歡的是 Perl,而 Python 的話........就真的是掰掰了(笑)。但是我絕對認可 Python 的能力,而且 Ruby 社群一直把 Python 視為一個很強大的競爭者。雖然現在 Ruby 吵得很熱,但是當初 Python 有很多基礎建得很穩,是相當值得學習的。Ruby 的話,我認為它很適合初學者,因為當初設計者他是出於人的方向去思考的,比如說,它的語法很像英文,很好看,Ruby code 真的很好看,而且通常可以在很短的情況下,寫出一個很複雜的東西。就像我們公司的技術長就用了九十行的 Ruby code 就加好了一個 proxy 的功能。我覺得Ruby 很適合小學生的第一個電腦程式語言,因為你在裡面不太容易學到一些電腦記憶體操作的技巧,你學到的就是很簡單東西,然後因為 Ruby 它當初設計時物件導向的概念非常地完備,所以說如果學 Ruby 的話可以學到很基本的程式設計技巧,以及還滿不錯的物件導向相關的東西,當然最重要的是,它的寫法多樣化, 所以小孩子的腦筋不會受到限制,可以發展多元思考(笑)。
Q:你接觸到學習 RoR 的背景環境如何?
其實我覺得台大 web 的風氣不是很勝。說實在話,我在台大遇到的使用 web 和 Open Source 的人遠不及交大,當然也可能是因為我在台大的人面更窄。而且我在交大參加了 CCCA,也就是交大校園網路策進會。常聽同儕們使用 Open Source Software 的經驗,才會使我之後對於 Open Source 也比較能接受,之後遇到問題的時候也比較會使用 Open Source 的 solution。學習的過程中我覺得環境很重要,非常非常重要。就算你都不碰這個東西,你對它的接受度也會比較高一點。
Q:你用 Ruby 主要是用在哪些地方?
第一個主要是寫網頁,再來是後端程式碼,另外在一些資料庫的操作也會使用,寫一些 Web API, client 或 server 也會用。其實它就是一把很好的瑞士刀,只要想到要用,滿多時候都可以符合我的需求的。
Q:你主要用的開發工具是什麼?
vi,就這樣。(沒有用其他的像是 IDE 這樣的東西嗎?)這也是哲學問題了。用了 vi 之後,IDE 做得再好你也只會把它當垃圾。這也是哲學宗教信仰。就是 style 不一樣。其實現在 Ruby on Rails 支援 IDE 的非常地多。Java IDE 公司在去年底和今年初一窩蜂地開始支援 Ruby on Rails 的 plugin,所以支援 Ruby on Rails 的 IDE 絕對很多。但是我不用 IDE。其實要知道一件事,對於工程師而言,你使用什麼東西都是一種哲學信仰。舉例來說,Eclipse 派的話有支援 Ruby on Rails 的 IDE,叫做 Redrails。現在 Redrails 也跟另外一個 project Apatana 合併了。我現在是還滿推薦他們合體的那一套。如果是 Visual Studio 那一派的話,有一個叫 Ruby in steel 的可以用,是一家公司為 SapphireSteel 做的 plugin。也就是說,現在不論你是信仰哪一派 IDE ,都有相應的 RoR IDE 可以用。
Q:現在國內有沒有 Ruby on Rails 的社群、網站或是論壇等等?
這個回答就滿心虛的。以前有,但是收掉了。最近在聯繫 Lukhnos ,有在計畫要一起組社群。我最近是把一個 Ruby on Rails 的討論區,叫 beast 做了中文化。 以前有Ruby on Rails 的社群,但是遇到的問題很簡單,就是 contagious 去當兵。以前是 contagious、anw 和我相當活躍。但最後只剩下我一個人,真的是孤掌難鳴。剛好現在 Lukhnos 有動作,然後我們又撘上線,所以就有這方面的籌劃。我會在我的 blog 上面發表。組這樣的社群算是我們使用 Ruby on Rails 的人應該要盡的義務吧,畢竟我們從 Ruby on Rails 那裡得到了很多東西,不管是名譽還是機會等等。基本上,不能佔著茅坑不拉屎,所以說該做的事情還是會做。我覺得討論區至少要有三個人共同維護,要不然就很難做起來。現在狀況是很詭異的,明明整體的能量是夠的,但是缺少一個匯集的力量,就是因為沒有社群,所以會匯集到我的 blog 上。當然不只是這個樣子,我們之前提過 Open Source 的一些企業化的支援,可能近期內不會有 Ruby 的公司,但是最起碼要有個社群,大家的接受度會更高。就是資源更可以共享,找人會比較方便等等。你知道大陸有個叫 JavaEye 的技術討論社群,他們原來是討論 Java 起家的。但是,他們的站長叫 Robin,在大陸那邊是很有名的 Java 程序員。他把 JavaEye 用 Ruby on Rails 全部改寫,也架了 Ruby on Rails 的討論區,於是就變成討論 Ruby on Rails 的大本營。其實我之前有想過把台灣的社群直接駐紮在那裡,但是這牽涉到了一個不得不面對的政治議題,所以就作罷。
說實在話,經營社群也是另外一門學問。雖然不知道情況是什麼樣子,但是就是,盡人事聽天命吧!盡力而為。經營社群其實要灌溉的東西很多,最重要的是要培養出一批固定的班底,最少要三個人;照我之前的感覺,三個人就可以讓一個社群動起來。其實我覺得自己算是 Ruby on Rails 的幸運兒,在這一波技術風潮起來的時候幸運的站在制高點上;像我之所以可以去 OSDC.TW 演講或是去其他地方講,不是因為我的關係,完全是因為 Ruby on Rails 本身的關係。可是像我很多的朋友們,他們真的是因為「他」們本身的關係,而不是因為選擇的工具,而我是因為選擇的工具,所以才稍微可以站出來。Anyway, 希望可以順利把這個社群穩定地建立起來,讓對 RoR 有興趣的朋友們都有一個好的去處,至少可以多一個提問與回應的地方。
shrink this item
- Thegiive 訪談 □ 報導/LinAnne and Mat
網頁程式設計一直是程式設計中相當繁複的一塊。現在網路上有許多用不同語言所製作的框架,可以增加網頁程式設計的效率和便捷性。在這一期的「土虱報報」,我們很高興可以訪問到知名的 Ruby on Rails 講者 Thegiive,為我們講解現在當紅的 Rub...
網頁程式設計一直是程式設計中相當繁複的一塊。現在網路上有許多用不同語言所製作的框架,可以增加網頁程式設計的效率和便捷性。在這一期的「土虱報報」,我們很高興可以訪問到知名的 Ruby on Rails 講者 Thegiive,為我們講解現在當紅的 Ruby on Rails,也一併談談他接觸 Ruby on Rails 的經歷和過程。
Q: Ruby on Rails 到底是什麼東西呢?
它是一個製作網頁的框架。利用 Ruby 這個語言將所有製作網頁所需要用到的程式語言打包起來,讓製作網頁的過程更簡單快速。
Q: Ruby on Rails 的基本概念是什麼?
我們先思考寫一個動態網頁程式需要用到多少種語言?一個網頁程式設計師至少要會 PHP 或 ASP、HTML、CSS、Javascript、SQL,這樣算起來就有六、七種了。簡而言之,網頁程式設計之所以困難是因為它不是利用一種語言就可以解決的事情。網頁當初只是一個文件交換的格式,它其實不是拿來寫程式的,所以要從事網頁程式設計需要學會的東西太多而且複雜,另外還要把這些東西全部整合在一起,實在是太麻煩了。而 Ruby on Rails 就是試圖用一種語言連結所有製作網頁需要用到的語言,將中間所有的過程簡化。通常動態網頁是由不同語言互相分工合作寫出來的,每個語言負責不同的功能,再進行整合。而語言間的互相溝通有時候太耗時費力。
要了解 Ruby on Rails 第一個需要知道的是 full stack 的概念,也就是將所有網頁程式設計需要用到的語言統統整合在一起,用 Ruby 將這麼多繁雜的程式語言組合成同一種語言:用 Ruby 寫 Javascript、用 Ruby 寫 cookie、用 Ruby 寫 SQL、等等等等。Ruby 的另外一個概念就是(資料庫網頁設計)。一般人一開始學網頁設計都是用 Procedural Programming 和 Object Oriented Programming;然而網頁基本上是 stateless,不會去儲存資料,所以必須要把很多資料都放在資料庫裡面。因為資料庫和一般程式設計基本上是完全不同的概念,所以在相互應用起來的時候就顯得格格不入。
資料庫就是一條條的表單;而程式設計完全不是按照這樣的方式去做的,要把兩個東西包在一起的時候就會顯得格格不入, 於是才要利用資料庫。要使用資料庫的時候就一定要使用到 SQL,相當麻煩可是又是必須的。而現在有兩派作法,一個是 ORM,就是用物件導向中的物件去把資料庫的操作包起來。另一個是 OODD,也就是資料庫本身就是為了物件導向而設計的。Ruby 現在使用的是 ORM,就是將資料庫的操作包裝成 Ruby 的物件來使用。
其實 Ruby on Rails 這些 Full Stack 的概念,之前就已經有許多人想過、做過了,像是相當多人使用的 Java 等等,可是為什麼一個像 Ruby 這樣的新語言會造成如此轟動呢?因為它做得很好。其他的語言或許也有同樣的想法,但如果做比喻,這就像政策一樣,一個政策,起初的立意想法很好,可是實做的不好的話,這個政策就不能算是成功(實做的好壞會決定這樣的想法是否成功)。Java 其實做的也不差,只是在 Full Stack 和 ORM 這方面做的沒有 Ruby on Rails 那麼好。
Q: 那你接觸 Ruby on Rail 花了多久的時間?Ruby on Rails 最神奇的地方在哪裡?
一年不到。而我覺得最不可思議的地方就是,當我開始用 Ruby on Rails 的時候,它很快就把我之前所有的 PHP 全部都趕走了。其實一般當你在嘗試一個新的工具之前,你不太可能全面放棄自己原先所熟悉的東西,畢竟遇到一些狀況的時候還是會利用你最習慣的工具去解決。但是最不可思議的是,Ruby on Rails 很快地取代了我之前最熟悉的 PHP(最近我要改些 PHP 東西,還要想說,咦,奇怪,這怎麼寫呀......XD)。它(Ruby on Rails)包得很好,它是一個專門為網頁開發而設計的東西,而且包裝得非常地完整,所以遇到的問題也相對較少;另外一點就是,它的效率真的很快,所以就幾乎不會想要用以前熟悉的工具了。這樣的比較其實是不公平的,畢竟我是用純 PHP 和一個已經完整包好的工具互相比較。PHP 本身也有包好的框架,我也用過,而我認為是還不夠好的。
其實很多人想問,就是 Ruby on Rails 跟其他的一些像是 PHP 呀之類的網頁設計工具在效能評比上的差異如何?基本上本人不做任何的效能評比的。我覺得這是一個宗教問題。效能評比其實很難做,你必須要兼顧所有的情況,然後在這些狀況下去做評比,而基本上這是不太可能的事情。要做的好、有公信力而且詳細完整。而且最慘的就是,因為 PHP、Java、Python 的 framework 太多了,當你打敗一個 framework 的時候,很多人就會說,「你沒比這個,不準;你沒比另外一個,不準。」。所以我只能說,我目前看到的別人做的效能評比,Ruby on Rails 的表現在效能上還算是中規中舉。就是,你所想得到的任何的語言的 Framework,都會有輸 Ruby on Rails 的時候,所以我認為他們基本上是打平的。
如果要舉例來說的話,像是 PHP 有個 framework 叫 symfony,基本上連 Yahoo 的某些網頁也是用這個框架寫的; 都是用這個框架寫的,所以它應該也是個相當完整的框架;但是去年我用的時候發現,它在一個框架裡面的設定檔一共有 XML、ini、yml 三種格式,而在我看來這是個不甚好的設計。一個框架本身做起來就是為了要整合一切東西,而這個框架本身的的設定檔就有各式各樣不同的格式,那為什麼還要將這些東西包起來呢?另外,我還花了滿長的時間在用 CakePHP,而 Cakephp 基本上和 Ruby on Rails 的概念很相近,很多東西都是參考 Ruby on Rails 來的。我在用 CakePHP 的時候遇到不少問題,首先是大大小小的 bug 很多,再來是它的 ORM 做得沒有 Ruby on Rails 那麼好。不過我用 CakePHP 也是半年前的事情,所以現在它發展到什麼程度我也不知道。另外也有個東西叫 PHP On Trax,它也是參考 Ruby on Rails ,而它的文件實在少到一種不可思議的程度,所以最後還是決定用 Ruby on Rails 。一路走來,其實我沒有用過Java,所以沒有辦法用 Java 做比較。不過我認為說,就實做方面,我比較喜歡 Ruby on Rails ,但是這也不代表說其他的東西做得不好,畢竟每個工具都有它們的自己的特色。就完整度、文件的多寡、討論的熱度、可以獲得資源的程度、社群的大小,Ruby on Rails 在這些方面都是一個相當不錯的選擇。
Q:新手適不適合一開始就學 Ruby 或 Ruby on Rails?
基本上我是不太建議啦,不過如果你真的願意花時間去學的話,還是可以學得會的,但是會有嚴重的後遺症。畢竟它將所有的東西都包得好好的,所以你無法了解東西的細節,就會變成說你寫網頁程式,可是你完全不懂網頁程式的構成分子。如果你一開始就學 Ruby on Rails,下點功夫下去學的話,或許可以做出一個相當不錯的網頁,但是如果你想要成為一個專業的網頁程式設計師的話,我是滿不建議從 Ruby on Rails 開始。就我從一般的程式設計師轉到網頁程式設計的時候,我花了一個月的時間去學習一些很基礎的東西,我發現我那一、兩個月所學到的東西讓我開始理解網頁程式設計到底是什麼樣子,然我會開始比較它們(不同語言和工具)之間的好壞。而我覺得這個摸索的過程是非常有意義的,就像,一定要了解寫SQL 語法的痛苦,才知道 Ruby on Rails 的 ORM 好處在哪裡。如果你是一個網頁程式設計基礎相當厚實的人,那麼要用 Ruby on Rails 上手就會非常地快。
Q:可以談談你學習程式設計的歷程等等,以及是在什麼樣的背景下轉到 Ruby on Rails 去的?
大一的時候學校教的是 C 和 C++,可是可以說是趨近於不會寫的狀態(笑);之後很快就變成 Java 了。後來大三的時候要寫一個作業(把什麼 C code 寫成 machine code 之類的…),發現這個作業如果用 Java 寫的話會非常可怕,所以就開始學 Perl。於是,別人寫 5000 行的作業,我用 500 行就搞定了。因為那個時候的 Perl 是專門為了字串處理而生的,字串處理可以說是它的超強項;而 Java 卻是你想得到的什麼東西它都能做,可是可能就要為了這樣的彈性而犧牲掉其他的東西,所以寫法就會囉唆一點。我那時後寫完這個作業就發現,以前學的像是 Java 之類的東西並不是絕對的;事實上有很多語言在某個特定的領域是可以遠遠地勝過其他的語言的。那時候我就體驗到一句話:「好的工具可以帶你上天堂。」當然你也可以用 C 或是 Java 做到任何事情,但是當你遇到任何一個問題的時候,你不妨去想想看有沒有其他更好的解決方式。(就像是,如果你要到巷口買早餐,是要開車還是騎腳踏車呢?一般而言,當然是騎腳踏車。可是如果是要從新莊到台中,就還是開車比較方便。)基本上你要使用什麼樣的工具取決於你處在什麼樣的境況。慎選工具是相當重要的。
上了台大之後才開始接觸 PHP,也徹底地全面導入 Open Source。這裡有一個小故事。那個時候是接一個案子,覺得好像用 ASP 比較方便,所以我就去買了 ASP 的書來讀,然後架站。Windows 有個內建的 IIS,可以用來看架起來的網站到底長成什麼樣子。這個東西我設定了一個小時還沒有弄好,一直有什麼權限不符的問題。因為當初和業主約定當天可以把網站架好,整個時間就是相當急迫。到了最後剩下十分鐘的時候,我決定去試試看 Apache,所以就上網抓 Apache 來用用看。那個時候我對它沒有任何一點期待,只是想說,就試試看好了。我還只上網 google 了一下它在 windows 上的啟動方式,也沒有找設定說明,就啟動了。然後,居然成功了耶!前後只花了一分鐘。經過了命運的抉擇之後,我把 ASP 的書賣掉,然後開始使用 Apache、PHP、Java 來做網頁程式設計。之後作業系統也換成 Linux 了。
在使用 PHP 的過程中一直有聽說過 Ruby on Rails,心裡就癢癢的很想試,我於是先接觸 Ruby。在寫 Ruby 的時候我有一點被嚇到。其實我非常喜歡 Perl,以前我也以我會 Perl 為榮。但是有一點我一直感到疑惑:為什麼三個月前我自己寫的 code , 我現在會看不懂?所以我一直想要找一個和 Perl 一樣強悍,但是可讀性又比較高的語言。看到 Ruby 的時候我就非常感嘆。而當時 Ruby 的設計者也是 Perl 的 developer,他設計 Ruby 的目標只有一個,就是 a better Perl,一個更可讀的 Perl。其實這個世界上有很多人想法都跟我相當類似:他們都很喜歡 Perl,可是又對於它的可讀性感到非常地畏懼。那時候碰到 Ruby 就真的非常地感嘆,覺得:「終於讓我遇到這個東西了。」。Ruby 他們一直在追求的概念是 less surprise,也就是越少的驚喜,所以許多命名條目都相當規則,大多時候都很容易記住或是猜出該項目的命名。而不用煩於名稱的查詢之中。
Q:所以也就是說,你在學 Ruby on Rails 的過程中,Perl 對你的幫助也是很大的。
應該說,這就是一個過程。因為 Perl 其實在我們當初在學的時候是被歸類為一個詭異的語言。你看過 Perl 的 code 就知道,真的很詭異,很像外星人的語言。一個寫 Perl 的工程師通常會以看懂另一個工程師寫的 code 為傲(自己寫的 code 自己都不一定看得懂了,更何況是別人的)。另外,Perl 它有個概念就是,"there is more than one way to do it."你要達成一個目標,可以有很多種不同的方式,可以走很多條不同的路;也就是條條大路通羅馬的意思。所以不同工程師的寫法不同,再加上語法又很詭異,然後如果兩個人又會適當地使用一些捷徑,要看懂別人的 Perl code 事實上是很困難的。Ruby 的話是儘可能地把一些曖昧尷尬的語法砍掉,但它還是繼承了 there is more than one way to do it 的概念。另外還要補充的一點就是,用 Ruby 的人通常都不會去用 Python。Ruby 的概念是 there is more than one way to do it,而 Python 的教條是完全相反的。Python 認為當你要完成一件事情的時候,應該就只能有一個方法可以達成,不要有第二個方式。他的想法是增加可讀性。但是如果你習慣並且接受 Ruby 的 there is more than one way to do it 的話,就會對Python的教條非常反感。
Q:可以請你比較一下 Ruby 和 Perl、PHP、Python 之間的優缺點嗎?
口味很重要。喜歡 Perl 的人很難去喜歡其他的語言。PHP 的話,是我到目前為止覺得最不喜歡的,因為它的處理面向太窄了,只能專注於網頁設計。它是在做網頁程式設計時必備的東西,就是如果學做網頁一定要接觸、多少懂一點東西,但是就和哲學扯不上關係了。今天你在寫程式語言的時候,其實是在講話給電腦聽。你想的東西可以變成程式,同時程式語言的模式也會影響你的思考方式;所以你寫某些語言的時候,會覺得格格不入,而另外有些語言寫起來就是如魚得水。其中原因就真的是因為口味。如果是 Python 的話,我一直把 Python 視為是 Ruby 最強大的競爭者。我很難去比較 Ruby 和 Python,畢竟他們兩個做的事情其實是差不多的;Ruby 用幾行能寫出來的東西,Python 應該也相去不遠。但是,我就是不喜歡。P3P 當中我最喜歡的是 Perl,而 Python 的話........就真的是掰掰了(笑)。但是我絕對認可 Python 的能力,而且 Ruby 社群一直把 Python 視為一個很強大的競爭者。雖然現在 Ruby 吵得很熱,但是當初 Python 有很多基礎建得很穩,是相當值得學習的。Ruby 的話,我認為它很適合初學者,因為當初設計者他是出於人的方向去思考的,比如說,它的語法很像英文,很好看,Ruby code 真的很好看,而且通常可以在很短的情況下,寫出一個很複雜的東西。就像我們公司的技術長就用了九十行的 Ruby code 就加好了一個 proxy 的功能。我覺得Ruby 很適合小學生的第一個電腦程式語言,因為你在裡面不太容易學到一些電腦記憶體操作的技巧,你學到的就是很簡單東西,然後因為 Ruby 它當初設計時物件導向的概念非常地完備,所以說如果學 Ruby 的話可以學到很基本的程式設計技巧,以及還滿不錯的物件導向相關的東西,當然最重要的是,它的寫法多樣化, 所以小孩子的腦筋不會受到限制,可以發展多元思考(笑)。
Q:你接觸到學習 RoR 的背景環境如何?
其實我覺得台大 web 的風氣不是很勝。說實在話,我在台大遇到的使用 web 和 Open Source 的人遠不及交大,當然也可能是因為我在台大的人面更窄。而且我在交大參加了 CCCA,也就是交大校園網路策進會。常聽同儕們使用 Open Source Software 的經驗,才會使我之後對於 Open Source 也比較能接受,之後遇到問題的時候也比較會使用 Open Source 的 solution。學習的過程中我覺得環境很重要,非常非常重要。就算你都不碰這個東西,你對它的接受度也會比較高一點。
Q:你用 Ruby 主要是用在哪些地方?
第一個主要是寫網頁,再來是後端程式碼,另外在一些資料庫的操作也會使用,寫一些 Web API, client 或 server 也會用。其實它就是一把很好的瑞士刀,只要想到要用,滿多時候都可以符合我的需求的。
Q:你主要用的開發工具是什麼?
vi,就這樣。(沒有用其他的像是 IDE 這樣的東西嗎?)這也是哲學問題了。用了 vi 之後,IDE 做得再好你也只會把它當垃圾。這也是哲學宗教信仰。就是 style 不一樣。其實現在 Ruby on Rails 支援 IDE 的非常地多。Java IDE 公司在去年底和今年初一窩蜂地開始支援 Ruby on Rails 的 plugin,所以支援 Ruby on Rails 的 IDE 絕對很多。但是我不用 IDE。其實要知道一件事,對於工程師而言,你使用什麼東西都是一種哲學信仰。舉例來說,Eclipse 派的話有支援 Ruby on Rails 的 IDE,叫做 Redrails。現在 Redrails 也跟另外一個 project Apatana 合併了。我現在是還滿推薦他們合體的那一套。如果是 Visual Studio 那一派的話,有一個叫 Ruby in steel 的可以用,是一家公司為 SapphireSteel 做的 plugin。也就是說,現在不論你是信仰哪一派 IDE ,都有相應的 RoR IDE 可以用。
Q:現在國內有沒有 Ruby on Rails 的社群、網站或是論壇等等?
這個回答就滿心虛的。以前有,但是收掉了。最近在聯繫 Lukhnos ,有在計畫要一起組社群。我最近是把一個 Ruby on Rails 的討論區,叫 beast 做了中文化。 以前有Ruby on Rails 的社群,但是遇到的問題很簡單,就是 contagious 去當兵。以前是 contagious、anw 和我相當活躍。但最後只剩下我一個人,真的是孤掌難鳴。剛好現在 Lukhnos 有動作,然後我們又撘上線,所以就有這方面的籌劃。我會在我的 blog 上面發表。組這樣的社群算是我們使用 Ruby on Rails 的人應該要盡的義務吧,畢竟我們從 Ruby on Rails 那裡得到了很多東西,不管是名譽還是機會等等。基本上,不能佔著茅坑不拉屎,所以說該做的事情還是會做。我覺得討論區至少要有三個人共同維護,要不然就很難做起來。現在狀況是很詭異的,明明整體的能量是夠的,但是缺少一個匯集的力量,就是因為沒有社群,所以會匯集到我的 blog 上。當然不只是這個樣子,我們之前提過 Open Source 的一些企業化的支援,可能近期內不會有 Ruby 的公司,但是最起碼要有個社群,大家的接受度會更高。就是資源更可以共享,找人會比較方便等等。你知道大陸有個叫 JavaEye 的技術討論社群,他們原來是討論 Java 起家的。但是,他們的站長叫 Robin,在大陸那邊是很有名的 Java 程序員。他把 JavaEye 用 Ruby on Rails 全部改寫,也架了 Ruby on Rails 的討論區,於是就變成討論 Ruby on Rails 的大本營。其實我之前有想過把台灣的社群直接駐紮在那裡,但是這牽涉到了一個不得不面對的政治議題,所以就作罷。
說實在話,經營社群也是另外一門學問。雖然不知道情況是什麼樣子,但是就是,盡人事聽天命吧!盡力而為。經營社群其實要灌溉的東西很多,最重要的是要培養出一批固定的班底,最少要三個人;照我之前的感覺,三個人就可以讓一個社群動起來。其實我覺得自己算是 Ruby on Rails 的幸運兒,在這一波技術風潮起來的時候幸運的站在制高點上;像我之所以可以去 OSDC.TW 演講或是去其他地方講,不是因為我的關係,完全是因為 Ruby on Rails 本身的關係。可是像我很多的朋友們,他們真的是因為「他」們本身的關係,而不是因為選擇的工具,而我是因為選擇的工具,所以才稍微可以站出來。Anyway, 希望可以順利把這個社群穩定地建立起來,讓對 RoR 有興趣的朋友們都有一個好的去處,至少可以多一個提問與回應的地方。
shrink this item
心得分享
-
紐西蘭 plone 社群朋友來台 □ 報導/yungyuc
難得的機會,今年的五月一日,遠從紐西蘭而來的 duffyd (Tim Knapp)來到 TOSSUG 和大家分享 Plone 這套開放原始碼企業級內容管理系統,以及[http://www.natlib.govt.nz/ 紐...
難得的機會,今年的五月一日,遠從紐西蘭而來的 duffyd (Tim Knapp)來到 TOSSUG 和大家分享 Plone 這套開放原始碼企業級內容管理系統,以及 紐西蘭國家圖書館在這套技術上的投入。
Plone 是一套定位在企業級應用的網頁式內容管理系統。所謂「企業級」指 Plone 所具有的高擴展性、高自訂能力以及眾多的套件支援。Plone 是建構在 Zope 之上,而 Zope 是一套以 Python 程式語言所開發出來的應用程式伺服器。
duffyd 的分享大綱如下 (投影片與相關檔案可以在 http://svn.plone.org/svn/collective/PloneInNZ/trunk/ 下載):
Introduction - Please introduce yourself
Open source movements in New Zealand
basic open source activities
how many companies using or support OSS etc.
Why the New Zealand government chose Zope + Plone as the web plat home.
2 or 3 examples of the site.
URLs, the screen shots, the special feature - customize points
The technical issues
When you develope the plone site ...
version of zope and plone
the points that you always concern
nifty tips to customize plone
Q & A session
在分享的過程中,duffyd 展示了一套產生 Plone content type product 的 ArchGenXML 工具;可以直接從 ArgoUML 的 UML 檔產生出符合 Plone 需求的 content type product。
另外,duffyd 也展示了佈署 Plone 的新技術: instance manager。在過去 (2.0, 2.1),佈署 Plone 需要進行許多步驟。但有了 instance manager 之後,便可以用一個指令來佈署整個 Plone instance。
duffyd 帶來的分享在 TOSSUG 中引發了不少討論;duffyd 會在台灣繼續停留四個月,主要是在台中東海大學。對 Plone 有興趣的人可以直接與 duffyd 聯絡。
shrink this item
- 紐西蘭 plone 社群朋友來台 □ 報導/yungyuc
難得的機會,今年的五月一日,遠從紐西蘭而來的 duffyd (Tim Knapp)來到 TOSSUG 和大家分享 Plone 這套開放原始碼企業級內容管理系統,以及[http://www.natlib.govt.nz/ 紐...
難得的機會,今年的五月一日,遠從紐西蘭而來的 duffyd (Tim Knapp)來到 TOSSUG 和大家分享 Plone 這套開放原始碼企業級內容管理系統,以及 紐西蘭國家圖書館在這套技術上的投入。
Plone 是一套定位在企業級應用的網頁式內容管理系統。所謂「企業級」指 Plone 所具有的高擴展性、高自訂能力以及眾多的套件支援。Plone 是建構在 Zope 之上,而 Zope 是一套以 Python 程式語言所開發出來的應用程式伺服器。
duffyd 的分享大綱如下 (投影片與相關檔案可以在 http://svn.plone.org/svn/collective/PloneInNZ/trunk/ 下載):
Introduction - Please introduce yourself
Open source movements in New Zealand
basic open source activities
how many companies using or support OSS etc.
Why the New Zealand government chose Zope + Plone as the web plat home.
2 or 3 examples of the site.
URLs, the screen shots, the special feature - customize points
The technical issues
When you develope the plone site ...
version of zope and plone
the points that you always concern
nifty tips to customize plone
Q & A session
在分享的過程中,duffyd 展示了一套產生 Plone content type product 的 ArchGenXML 工具;可以直接從 ArgoUML 的 UML 檔產生出符合 Plone 需求的 content type product。
另外,duffyd 也展示了佈署 Plone 的新技術: instance manager。在過去 (2.0, 2.1),佈署 Plone 需要進行許多步驟。但有了 instance manager 之後,便可以用一個指令來佈署整個 Plone instance。
duffyd 帶來的分享在 TOSSUG 中引發了不少討論;duffyd 會在台灣繼續停留四個月,主要是在台中東海大學。對 Plone 有興趣的人可以直接與 duffyd 聯絡。
shrink this item
新聞時事
-
Arne Goetje 訪問香港 □ 報導/Mat
Tossug 成員 Arne Goetje (高盛華)於四月底拜訪香港,與 OAKA 造字的計劃成員交流,也給了一個關於 CJKUnifonts 的演講。相關的演講內容和影音紀錄可參考 [http://www.linuxhall.org/modules.php?name=News&file=article&sid=465 Linu...
Tossug 成員 Arne Goetje (高盛華)於四月底拜訪香港,與 OAKA 造字的計劃成員交流,也給了一個關於 CJKUnifonts 的演講。相關的演講內容和影音紀錄可參考 Linux Hall News 上的新聞。
目前 Arne 正積極在進行 CJKUnifonts 的改版作業,希望能在不久的將來提供一個高品質的 Unicode 漢字字型,預計在近期內可以發佈新的版本。而 Arne 本身也在製作閩南、客家語輸入法,對推動本土語文文化的保存影響深遠。這些成果以開放的方式進行,歡迎各方關心這項計劃的朋友加入開發的行列。
以下是這個計劃的相關資料:
-
計劃主頁
Arne's Email
IRC@FreeNode
irc://freenode/cjkunifonts
IRC@Debian
irc://irc.debian.org/cjkunifonts
字型郵件論壇
閩南注音郵件論壇
shrink this item
- Arne Goetje 訪問香港 □ 報導/Mat
Tossug 成員 Arne Goetje (高盛華)於四月底拜訪香港,與 OAKA 造字的計劃成員交流,也給了一個關於 CJKUnifonts 的演講。相關的演講內容和影音紀錄可參考 [http://www.linuxhall.org/modules.php?name=News&file=article&sid=465 Linu...
Tossug 成員 Arne Goetje (高盛華)於四月底拜訪香港,與 OAKA 造字的計劃成員交流,也給了一個關於 CJKUnifonts 的演講。相關的演講內容和影音紀錄可參考 Linux Hall News 上的新聞。
目前 Arne 正積極在進行 CJKUnifonts 的改版作業,希望能在不久的將來提供一個高品質的 Unicode 漢字字型,預計在近期內可以發佈新的版本。而 Arne 本身也在製作閩南、客家語輸入法,對推動本土語文文化的保存影響深遠。這些成果以開放的方式進行,歡迎各方關心這項計劃的朋友加入開發的行列。
以下是這個計劃的相關資料:
計劃主頁
Arne's Email
IRC@FreeNode
irc://freenode/cjkunifonts
IRC@Debian
irc://irc.debian.org/cjkunifonts
字型郵件論壇
閩南注音郵件論壇
文章評論
-
動態組字發展現況 □ 文/魔法設計師
大家好,我是推動態組字技術的魔法設計師,相信大家對這技術不陌生也不會全然不解。自從四月師大的動態組字座談會以後,個人沈寂了一段時間,比較...
近況介紹
大家好,我是推動態組字技術的 魔法設計師,相信大家對這技術不陌生也不會全然不解。自從四月 師大的動態組字座談會以後,個人沈寂了一段時間,比較沒有什麼活動,其實個人是在籌畫一些工作,既然把動態組字推向開源之路,自然不會像以前其他的團體所做的組字技術說停就停吧?當然不會囉,養精續力是必然的(偷懶的解套???)。
這段間,個人擬了動態組字的 ROADMAP,作為一個清楚的願景跟藍圖,很簡單的,就是解決長久以來缺字問題,也改善漢字基礎的數位處理方法。這項精進,主要分為兩部份:資料和程式,以下分別介紹。
資料
一個自由版權的字庫,這個字庫,由於著作權的一些實質困難,我們將改以日本京都大學的 CHISE(漢字是「千世」,Debian/Ubuntu 也有收喔,趕快 apt-get install 下來用 xemacs 瞧瞧吧)字庫的漢字拆解IDS資料結合剎那搜尋工坊願意公眾釋放的部件筆畫資料(其實也就是 stroke based 部件字形),做新的自由版權字形資料庫。這會是描繪(字形檔與組字引擎)、輸入、排序、甚至人工智慧處理的好基礎與元(meta)資料(其實 CHISE 做的漢字拆解資料庫,即是漢字背後的 Knowledge-Base information)。
此外,之前筆者屢次提到的漢字基本 1134 個末級部件,UNICODE 現實上只收錄了 700 多個的現實狀況,之前不管是中研院資訊所的文獻處理實驗室或剎那搜尋工坊都只得用私人造字區來暫時解決,非長久之計。社群朋友 Arne 高盛華義不容辭願意執手相助,協助把缺漏的漢字末級末級部件推進 UNICODE,遠來的朋友比本土人士還要熱血拼命,我們要更努力喔!
程式
程式部分最主要的就是 IDS parser 和組字引擎。
IDS parser與字串處理函式庫
IDS parser 看到傳統的一字一碼的字,就呼叫一般的字型引擎做普通的描繪,但發現到 IDS 構形式時,必須把那字串看成是一個「漢字」轉呼叫組字引擎來描繪,而相關字串處理函式庫也必須認為它是一個字,滑鼠游標的移動、字數的計算等等都要修定。我們要做進 Gnu/Linux 底層,勢必要在適當的函式庫做這項處理,目前葉教授(不是星海輪盤的那個喔)跟 Jserv 各自初步研究了這方面的解決之道。
組字引擎
其實組字引擎,就是一個字形引擎,與過去不同的是,它是個無限字形的產生引擎,可描繪一字一碼的字形,也可以描繪出過去一字一碼沒定義的古字、錯字、以及新字。目前有小弟自己的參考實作。以及 Orzlab 的 jserv 在 OpenMoko 上做的試作,甚至 Free Type Font 引擎的團隊,也做出一版使用該組字引擎的 patch,但目前他們需要得到一份可攜式造字引擎(此乃動態組字的正式名稱) 專利公眾授權條款書的英文版,以證實該技術是 patent free(就是保證 FTF 團隊不會因為做動態組字踩到某人私有專利被抓去關),目前自由軟體鑄造場的 marr 請人協助翻譯中。
結論
目前最重要的是自由版權的構形資料庫的催生,英文版的可攜式造字引擎專利公眾授權條款書的翻譯,長遠一點的,是高盛華在做的事。
各位想知道更多的話,請拜訪 正體中文網、訂閱 正體中文討論區 ,此外,最近動態組字的幾位先行者將會在土虱聚會做技術性的說明,歡迎大家把握機會來參加囉。
shrink this item
- 動態組字發展現況 □ 文/魔法設計師
大家好,我是推動態組字技術的魔法設計師,相信大家對這技術不陌生也不會全然不解。自從四月師大的動態組字座談會以後,個人沈寂了一段時間,比較...
近況介紹
大家好,我是推動態組字技術的 魔法設計師,相信大家對這技術不陌生也不會全然不解。自從四月 師大的動態組字座談會以後,個人沈寂了一段時間,比較沒有什麼活動,其實個人是在籌畫一些工作,既然把動態組字推向開源之路,自然不會像以前其他的團體所做的組字技術說停就停吧?當然不會囉,養精續力是必然的(偷懶的解套???)。
這段間,個人擬了動態組字的 ROADMAP,作為一個清楚的願景跟藍圖,很簡單的,就是解決長久以來缺字問題,也改善漢字基礎的數位處理方法。這項精進,主要分為兩部份:資料和程式,以下分別介紹。
資料
一個自由版權的字庫,這個字庫,由於著作權的一些實質困難,我們將改以日本京都大學的 CHISE(漢字是「千世」,Debian/Ubuntu 也有收喔,趕快 apt-get install 下來用 xemacs 瞧瞧吧)字庫的漢字拆解IDS資料結合剎那搜尋工坊願意公眾釋放的部件筆畫資料(其實也就是 stroke based 部件字形),做新的自由版權字形資料庫。這會是描繪(字形檔與組字引擎)、輸入、排序、甚至人工智慧處理的好基礎與元(meta)資料(其實 CHISE 做的漢字拆解資料庫,即是漢字背後的 Knowledge-Base information)。
此外,之前筆者屢次提到的漢字基本 1134 個末級部件,UNICODE 現實上只收錄了 700 多個的現實狀況,之前不管是中研院資訊所的文獻處理實驗室或剎那搜尋工坊都只得用私人造字區來暫時解決,非長久之計。社群朋友 Arne 高盛華義不容辭願意執手相助,協助把缺漏的漢字末級末級部件推進 UNICODE,遠來的朋友比本土人士還要熱血拼命,我們要更努力喔!
程式
程式部分最主要的就是 IDS parser 和組字引擎。
IDS parser與字串處理函式庫
IDS parser 看到傳統的一字一碼的字,就呼叫一般的字型引擎做普通的描繪,但發現到 IDS 構形式時,必須把那字串看成是一個「漢字」轉呼叫組字引擎來描繪,而相關字串處理函式庫也必須認為它是一個字,滑鼠游標的移動、字數的計算等等都要修定。我們要做進 Gnu/Linux 底層,勢必要在適當的函式庫做這項處理,目前葉教授(不是星海輪盤的那個喔)跟 Jserv 各自初步研究了這方面的解決之道。
組字引擎
其實組字引擎,就是一個字形引擎,與過去不同的是,它是個無限字形的產生引擎,可描繪一字一碼的字形,也可以描繪出過去一字一碼沒定義的古字、錯字、以及新字。目前有小弟自己的參考實作。以及 Orzlab 的 jserv 在 OpenMoko 上做的試作,甚至 Free Type Font 引擎的團隊,也做出一版使用該組字引擎的 patch,但目前他們需要得到一份可攜式造字引擎(此乃動態組字的正式名稱) 專利公眾授權條款書的英文版,以證實該技術是 patent free(就是保證 FTF 團隊不會因為做動態組字踩到某人私有專利被抓去關),目前自由軟體鑄造場的 marr 請人協助翻譯中。
結論
目前最重要的是自由版權的構形資料庫的催生,英文版的可攜式造字引擎專利公眾授權條款書的翻譯,長遠一點的,是高盛華在做的事。
各位想知道更多的話,請拜訪 正體中文網、訂閱 正體中文討論區 ,此外,最近動態組字的幾位先行者將會在土虱聚會做技術性的說明,歡迎大家把握機會來參加囉。
shrink this item
- OLSR 簡介 □ 文/菜虫
我是在 Porta2030 的計畫中學到 Optimized Link State Routing Protocol(OLSR)的,也就在那時候我開始研究這個 routing protocol。而 routing protocol 就像是傳送資...
我是在 Porta2030 的計畫中學到 Optimized Link State Routing Protocol(OLSR)的,也就在那時候我開始研究這個 routing protocol。而 routing protocol 就像是傳送資訊的小兵一樣,把所需要傳送的資料帶到目的地。一同作 Porta2030 的 Ping 為了顯示 mesh network 的網路架構圖,跑去 freenode 的 #s3d irc 頻道認識了 Marek Lindner。Marek 是專為 mesh network 設計的 BATMAN 協定 的開發者,因緣際會地便邀請了 Marek 和另一位開發者 Andrea 來台參與 OSDC.tw 研討會並發表 BATMAN 的演講 。當天晚上 Tossug 的幾位成員和這兩位德國朋友在 Tossug 平時聚會的地方喝咖啡,chihchun 打電話給我,我就十分興奮的過去了,也就這樣認識了 Marek,也從他身上學了不少 OLSR 的知識。在聚會中,Marek 除了講 OLSR 的基本概念外,還說了柏林無線社群在德國部署 OLSR 的經驗和發現的一些問題;以下我將向大家介紹一下他們所作的一些計畫和提到的問題。
在德國柏林市,當地的 wireless 社群用上百個 AP 來建構 mesh networks,主要就是仰賴 OLSR 這個 routing protocol 來傳送網路封包,在這之中也發現了很多 OLSR 不足的地方,並開始去改進。
OLSR 用四種訊息(Message)封包來維護整個網路,而訊息封包的作用就是讓網路能正常傳送資料封包,這四種訊息封包分別是:Hello、TC、MID 和 HNA,這四種都各有其功用:
Hello 主要就是通知別人你還活著,還在網路中。因為這是在 Mobile 環境(也就是可移動的情形)之中,所以需要時時提醒別人自己的存在,不然就會造成 Routing 的錯誤;
TC (Topology control) 封包則是傳送包含控制的消息。
MID (Multiple Interface Declaration) 是告訴別人自己主要的 IP address。如果某個 node 有兩個以上的天線,該 node 的 IP 地址就會和天線個數一樣多,但其他 node 不知道這幾個不同的 IP 地址其實是同一個 node。MID 封包就是宣告自己的主要 IP 地址之用。
HNA (Host and Network Association) 是把別人的 routing table 資訊紀錄下來,就像是問別人路怎麼走、然後自己記住,這樣就能知道封包的目的地距離超過 2-hop 的時候該往哪裡送。
在 OLSR 的協定中,這四種訊息的發送頻率都很高,所以很有可能會造成 routing loops,也就是說維護用的訊息封包一直無止盡的在無線基地台之中輾轉傳遞,而佔去了傳送資料封包所需的寶貴頻寬。柏林社群的解決方式是限制這四種訊息封包所能轉送的次數,類似 Time To Live (TTL) 的作法。
OLSR 用一種叫 Multipoint Relays (MPR) 的方式來管理以上所講的四種訊息,MPR 的身份就像是整個 mesh networks 上的領導人一樣,網路上的每個節點都會隸屬一個或更多的 MPR,傳送訊息封包的責任也都落在這些 MPR 身上,只有 MPR 才能發送和接收這四種訊息封包,不過如果 AP 數量太多的話,就會因為訊息封包傳遞的次數太多而造成效能上的降低。柏林社群就把 OLSR 修改成只用 HELLO 封包來維護整個網路,並把發送的時間間隔變長,使得網路上的頻寬不會被塞爆,也減少許多 CPU 計算的負擔。
OLSR 在尋找路徑的時候,設計上限制只找 one hop,也就是只選擇 Link quality 最好的鄰居節點來傳送資料封包。這基本上是 greedy method,雖然選擇了狀態最佳的下一個 hop,但沒有考慮到其他的 hop,廣域來看未必是最好的選擇,因此柏林社群就想用類似 Dijsktra 的演算法來改善這個問題。
在四種訊息封包中,有一個叫 MID ,在剛才已經有稍微介紹了,主要就是讓備有多根天線的無線基地台發佈自己的主要地址,不過在還沒發送 MID 之前,大家就已經計算出 routing table 了,而在發送 MID 之後,大家又還要再次計算出最佳的 routing table,所以對於整個網路的效能有很大的傷害,尤其是 AP 台數多的時候。
柏林的 wireless 社群已經修改了 OLSR 在大規模 mesh networks 中不足的地方,如只用 HELLO 封包來維護整個網路、降低訊息封包的發送頻率、找尋更佳的演算法等等,但是這些改進也帶來了意想不到的問題,因此 BATMAN (Better Approach To Mesh Ad-hoc Networks)計劃誕生了!Mesh networks 中還有許多技術上的挑戰,有興趣的人可以加入我們!
在此,我十分開心能認識 Marek,提供了許多對於 OLSR 更深的介紹,也帶來了他們在柏林 wireless 社群的最近計畫。也十分感謝 阿怪 和 Ping 的協力幫忙,提出此篇文章的錯誤地方,並不厭其煩的一再審稿。
shrink this item
社群動態
-
OrzLab 正式成立 □ 報導/Mat
由 jserv 發起的 OrzLab 於 2007/4/1 正式成立。OrzLab 的全名為 Open RazzmatazZ Laboratory,其中 Razzmatazz 的意思為「活潑、興奮」之意。以 Orz 的作為逗趣的開頭,同時也選在 4/1 愚人節作為發佈之日,充滿了幽默與創意。
這個組織成立的精神是「自由」與「創意」,希望能以自由開放的方式,將開發人員的熱情與創意注入死板的硬體之中,帶來新的活力。
OrzLab 成立近一個月來,陸續參加了 CodeJam、OSDC.TW 等相關的社群活動、講座,並得到 FIC、FON 等廠商的硬體贊助,參加了 OpenMoko/Ajax Embedded等相關開發計劃,同時召集了志同道合的開發者分享創作心得和討論。目前這個實驗室還持續在成長之中,並於上線後一個月已透過 Google Adsense 募得 US$100 的基金,未來的發展令人期待。
關於 OrzLab 更詳細的消息,歡迎進一步閱讀 OrzLab 開發者日誌,取得最新動態。
shrink this item
- OrzLab 正式成立 □ 報導/Mat
由 jserv 發起的 OrzLab 於 2007/4/1 正式成立。OrzLab 的全名為 Open RazzmatazZ Laboratory,其中 Razzmatazz 的意思為「活潑、興奮」之意。以 Orz 的作為逗趣的開頭,同時也選在 4/1 愚人節作為發佈之日,充滿了幽默與創意。
這個組織成立的精神是「自由」與「創意」,希望能以自由開放的方式,將開發人員的熱情與創意注入死板的硬體之中,帶來新的活力。
OrzLab 成立近一個月來,陸續參加了 CodeJam、OSDC.TW 等相關的社群活動、講座,並得到 FIC、FON 等廠商的硬體贊助,參加了 OpenMoko/Ajax Embedded等相關開發計劃,同時召集了志同道合的開發者分享創作心得和討論。目前這個實驗室還持續在成長之中,並於上線後一個月已透過 Google Adsense 募得 US$100 的基金,未來的發展令人期待。
關於 OrzLab 更詳細的消息,歡迎進一步閱讀 OrzLab 開發者日誌,取得最新動態。
shrink this item
- Tossug 心得分享【組字的核心:字的結構】 □ 報導/Ping
在這期的土虱報報中,魔法設計師為大家介紹了動態組字的基本觀念和發展現況。在下個禮拜二的土虱聚會中,他本人將聯同台灣 Forth 學會會長陳爽為大家介紹動態組字的核心技術,包括漢字的輸入、儲存、搜尋、排序、描繪等議題,這些本來用 Unicode 可以大致解決的事項,在碰到缺字要動態組出來的時候,忽然都...
在這期的土虱報報中,魔法設計師為大家介紹了動態組字的基本觀念和發展現況。在下個禮拜二的土虱聚會中,他本人將聯同台灣 Forth 學會會長陳爽為大家介紹動態組字的核心技術,包括漢字的輸入、儲存、搜尋、排序、描繪等議題,這些本來用 Unicode 可以大致解決的事項,在碰到缺字要動態組出來的時候,忽然都是問題了。
這次的心得分享,兩位講者將就輸入法、表意文字序列、依筆順排序的新做法、Freetype 等等相關技術一一向大家剖析引入動態組字後造成的衝擊。
歡迎對新一代的數位漢字有興趣的朋友參加,請上 報名網頁報名。
時間: 2007/06/12 7:00pm - 9:00pm
地點: CafeLumiere
講者: 魔法設計師、陳爽
講題: 組字的核心:字的結構
來期預告
去年年底,OLPC 的工程機推出,引起眾人的關注。土虱報報有幸借到 OLPC 的實機作測試,將於下一期向大家介紹 OLPC 的使用實錄。
本新聞所顯示的商標均屬於各專案或公司所有。