Skip to the page content area.

:::

Tavern Diary Volume 22


4.13.’06. 3:01am.

剛剛閒逛 Wikipedia ,才發現原來 SourceForgeFreeBSD 的網站,在中國是被封鎖的!真是太扯了,中國政府是神經病啊?

喔,剛剛發現PHP 的網站也被中國政府封鎖掉了。那中國的網路系統發展完蛋了,嗯嗯。

鎖國是不好的事哪~日本明治維新前的德川幕府,可為殷鑑。


4.10.’06. 11:57pm.

Finally we've got a full text search in Tavern now. Though there are still 28 pages not in the database yet, most of the content can be searched now. Yeah! ^_*'


4.9.’06. 9:42pm.

I feel so moved that there are really some people using vsntp! But why didn't they come to me for their problem?


4.2.’06. 3:04am.

花了兩個星期,結束了一個 Monica/Selima 核心的改造計劃。

這是一個去年的構想,源自於寫 Julie 網站計劃時碰到的瓶頸: Monica 系統的資料異動更新處理,沿用七年前亞太糧肥舊網站使用 process.php 的架構,使用一個 process_form() 函式來處理。然而,處理複式的資料時(一筆資料引用其她資料,例如公司檔案會有不同的聯絡人),當資料間的交互關聯越來越複雜,使用 process_form() 函式,便顯得捉襟見肘。於是我想,是不是可以改用物件類別的方式,一個資料表的處理器可以引用另一個資料表的處理器,這樣就不需要去管另一個資料表的處理器的處理細節,程式碼亦可重複利用。這就是現在的 Monica ProcessorSelima::Processor::* 類別。

去年想到這個構想時,覺得有點害怕。一個原因是 Monica 已經長得太大了:十一個網站,四百七十七個程式檔,十三萬多行。要全部改掉,還要一個一個測試,真的是要命。另外一個原因則是,每個網站的瀏覽架構都不大一樣,部份重製網頁時,相依性追蹤是不是做得來,我實在是沒有把握。於是,初步寫了不牽涉到網頁相依性的帳號管理子系統,確定原先的構想大致可行了後,就擱著了。一擱擱了快一年,一直到去年底的兩個新網站的案子,才又重起爐灶。兩個新網站處理資料的部份,就全部改用新的 Processor 物件界面了。

今年年初,創世紀玩告一段落以後,我又回過頭來改寫 Selima ,把原先檔案空白的 Selima::Processor::* ,參考 Monica Processor 類別的帳號管理子系統,改寫出來。接著,又著手撰寫 Selima::Processor::* 的內容管理子系統,試著把網頁相依性追蹤、部份網頁重製的執行模式標準化。經過一年來的沉澱,寫得頗為順利。寫出來了以後,回過頭來改寫 Monica 的內容管理子系統的部份,花了兩個星期的時間,改寫一百多個程式檔、一一追蹤、測試。除了一個無可救藥的舊 FTP 帳號管理程式外,終於全部改寫完畢了。

Monica/Selima 系統的資料處理架構上,有五大部門:資料列表、資料取得、顯示表格、表格檢查、異動更新。資料列表由 List 物件處理,資料取得由 fetch_curitem() 函式負責,顯示表格由 Form 物件負責,表格檢查由 Checker 物件負責,異動更新由 Processor 物件負責。目前,只剩下資料取得的部份,尚未物件化。因為每個表格都依賴某種資料格式才能正常顯示,一旦資料取得物件化,對後面的三個動作 FormCheckerProcessor 影響非常大。很多複式資料,應該取得給後面用的格式非常複雜,我沒有把握這些 Fetcher 物件能夠互相引用。然而,只要資料取得的動作還未物件化的一天, Monica/Selima 要處理複雜的複式資料,就會非常困難,而且無法處理兩層以上的複式資料。

不過, Fetcher 暫時不是急迫的問題。而且去年 Julie 計劃碰到的瓶頸,我已經找到解答了,不需要用到三層以上的複式資料來處理,而可以利用資料表自己引用自己的方式解決。其實在之前連結分類的處理時,我就已經做過了。去年 PostgreSQL 的權限控管改採 role-based 系統,不再區分使用者和群組,每一個角色都可以包含別的角色。我從來沒想過可以這樣做,茅塞頓開。我想, Julie 的問題,應該可以用同樣的方法來解決。

Monica/Selima 還有一個龐大的改造工程: Page 物件,用以追蹤網頁的相依性、製作瀏覽選單及網站地圖。這其實也是去年的構想,因為無障礙網頁規範要求網站要有網站地圖,目前 Monica 使用 page_tree() 函式回傳一個龐大的樹狀網頁資料,可是沒有方法,難以作更複雜的應用。我目前只有初步的想法而已。可能會先在 Selima 上實作吧,畢竟 Selima 還沒有正式的內容管理系統,包袱比較小。希望不需要用到一年。


Index | First | Previous | 20 | 21 | 22 | 23 | 24 | Next | Last