今天在 IRC 裡跟 Qing 聊到怎麼爬 HemiDemi,提到五年前我自己也有寫過(個人用)的書籤模組。剛剛興起,就跑去 Internet Archive我以前的個人(用)網站挖出來回味。

我以前用的網址是 www.jeffhung.idv.tw,因為最便宜。以前的網站,基本上只是一個大雜燴式的首頁。從 archive 可以看出,這個大雜燴式的首頁,我從 2002 年六月,一直用到了 2005 年四月,差不多用了 3 年,然後才換成現在用的 wordpress 系統。

基本的構想是,幾乎所有事情都可以在首頁裡解決。每樣功能,被作成一個一個的區塊,我稱之為 weblet。約略在同一時期,Java 也有套類似的 framework,稱之為 portlet。我不清楚 portlet 的定義其實為何,因為我沒有研究過。但我對 weblet 的定義,約略等同於一個 desktop application 的視窗。

那時候沒有 AJAX 這種東西[1],所以沒有所謂「直接在 client 端執行的程式實體」這種概念。因此,weblet 後端有個 WebOS 引擎,貫穿 HTTP 的 stateless 天性,負責 weblet 的 persistency across HTTP requests。也就是說,WebOS 會負責在每次頁面切換時,將各個 weblet 喚醒,給予對應的 event,最後呼叫如 OnPaint() 之類的函式,讓每個 weblet 產生屬於自己那個區塊的 html。是故,靠著 WebOS 的協助,weblet 就像個簡單的 event-driven framework,成熟的 MVC 技術得以施行於其上。

WebOS 處理 event 的基本運作原理,和現在的 ZK 差不多,不過 ZK 最後是靠 Ajax 在前端運作,但 WebOS 則是在後端命令 weblet 產生頁面。我不認為 web 應該做的跟 ZK 那樣 heavy-weight,那樣太慢了[2],web 沒有必要完全模擬 desktop。也因此,我將之取名作 weblet,取其「小程式」之意。

不過,那時的 WebOS 只有做了一些 concept prove 的工作,五年前的我,忙於準備研究所考試,然後又是繁重的碩士生活,因此我的網站,其實內部並不是真的靠 WebOS 驅動,而只是一堆簡單的 PHP 程式,把 weblet 的「外型」勾勒出來。

整個網站由一塊一塊的 weblet 區塊組成,每個區塊右上角,有個控制樞紐,點按時會利用 DHTML 跑出選單,進行對這個 weblet 的各項操作,如設定、關閉、移動等,就好像 Netvibes 那樣。

那時在市場上,我沒有看到 online rss reader 的存在,因此我最多的 weblet,就是顯示 RDF channel 的內容。由 crontab 定期呼叫程式抓取 channel 存成 rdf 檔,然後動態於首頁自動轉成 weblet 裡的列表。由於做 web bbs 的經驗,我認為已讀未讀標記十分的重要,因此在每個項目前面,都會有個 [_],表示該項目未讀。

也許是因為我是從 rdf 開始玩起的,所以我認為 RDF/RSS 應該是內容的摘要與指引,而非內容的載體。因此,weblet 並不以列出全文為目標。事實上,以 weblet 這種形式的 UI,也確實不適合全文的顯示。

不將 RSS視為內容的載體的另外一個原因是,我認為內容不應只包含堆砌出來的文字,連內容的呈現方式,也屬於內容的一種。舉例來說,程式碼如何在 blog 內文裡展現,文句裡的重點如何被施加各種強調的特效,都算是內容的一部分。從這個角度觀之,RSS 實在不是個足夠好的內容載體。既然全文 RSS 其實並不全文,那還不如只列出摘要,然後指引讀者回到真正內容的載體,來觀看全文。

那時候 blog 尚未蔚成風潮,因此我的內容來源少的可憐,但也少的剛剛好,用 weblet 統統塞在一頁,想逛的時候隨意瀏覽一下即可。但以現在來說,所訂閱的 feeds 太多,這樣的介面根本不敷使用了。這也是現在我很少用 netvibes 的原因。

那時用的最兇的,除了 rdf 以外,就屬右方的 Quick Links 了,這就是一開始說的,所謂我(個人用)的書籤模組。因為會統計我個人的使用偏好,所以用起來非常方便。不過,那時候書籤的對象,大都仍是以「站」為單位,而不像現在這樣,多以「內文」為單位。這個差異,我認為也是 web 2.0 的特徵之一。內容的歸納、整理、傳銷、散佈,多是在「站內」進行,因此我們需要拜訪各個「大站」,以取得內容。同時,在 web 1.0 時代,歸納、整理、傳銷、散佈做的好,就有了成為「大站」的資格。而在 web 2.0 時代,這些「內容的處理」,多是在「站際」進行。串連、social bookmarks、digg、sidebar widgets、rss reader 等等,有的以純然的中介者形式進行內容的處理,有的則化身千萬,埋藏於散佈各處的內容之中,成為 web 2.0 運行的血脈。


  1. 那時相關的技術頗雜亂,並不成熟。
  2. 各位可以嘗試看看 ZK 的速度