如果您已經閱讀了我撰寫的“gentoo.org 重新設計”系列的 第一部分,那麼您就知道我是 Gentoo Linux 的首席設計師,我要對 Gentoo Linux 網站負責。目前,這個站點還有許多不足。是的,它確實看似漂亮,但除了漂亮的圖形之外,您會發現它實際上並沒有滿足主要目標觀眾 ― Gentoo Linux 開發人員、用戶和潛在用戶 ― 的需要。
上一次,我使用了以用戶為中心的設計方法來為站點創建了一組優先級,然後使用這些優先級為重建 gentoo.org 創建行動計劃。有兩件事位於優先級列表的頂部:新的開發人員文檔和用於向開發人員傳達對 CVS 資源庫所作更改的新郵件列表。雖然添加新的 CVS 郵件列表相對容易(可是,您會看到,它比我想象更困難),但新的開發人員文檔卻需要很多規劃和工作。
我不僅需要創建一些實際文檔(我長期以來一直忽略的任務),還必須選擇新的主要文檔要使用的正式 XML 語法。您知道,在幾周之前,我還在創建 原始 HTML格式的文檔。這的確是件麻煩事,因為如果這樣做,那麼內容(實際信息)將和顯示(與顯示相關的 HTML 標記)混合在一起。結果如何呢?一團糟,就是那樣。編輯實際文檔很困難,而改進整個站點的 Html 尤其困難。
在本文中,我將自豪地演示這個站點新的靈活的 XML 文檔解決方案。但首先,我將簡要重述將 CVS 日志郵件列表添加到站點的經驗。
添加 CVS 日志郵件列表
CVS 日志郵件列表的目的是通知開發人員:已經對 CVS 資源庫做了新的提交。由於我已經安裝了郵差郵件列表管理器,我認為創建這個新列表很容易。首先,我將只創建郵件列表,然後將正確的“hook”添加到 CVS 資源庫,這樣就會自動生成並發送出電子郵件,這些電子郵件描述了對源碼的更改。
我首先開始研究資源庫的 CVSROOT 中一個名為“loginfo”的特殊文件。理論上,通過修改這個文件,我可以指示 CVS 在對資源庫執行任何提交(因此也做了修改)時執行一個腳本。因此,我創建了一個特殊 loginfo 腳本,並將它插入現有資源庫。每當對源碼進行修改時,它確實會向新的“gentoo-cvs”郵件列表發送電子郵件。
遺憾的是,這個解決方案並不完全如我所願。首先,它生成了許多電子郵件消息 ― 每個被修改的文件都有一條消息 ― 其次,這些消息含義不清,有時甚至是空的!我迅速除去了 loginfo 腳本,並中斷了 gentoo-cvs 郵件列表項目。很明顯,CVS 的 loginfo hook 不適合我的需要,我費了很大勁來搜尋可以幫助我解決問題的任何與 loginfo 相關的文檔。
cvs2cl.pl
幾周之後,我開始尋找 loginfo 的替代物。這次,我做了一件聰明事,找到了 freshmeat.Net。在那裡,我很快找到了自己要尋找的東西:來自 red-bean.com 的絕佳的 cvs2cl.pl perl 腳本。 cvs2cl.pl 使用“cvs log”命令來直接連接到資源庫並抽取適當的相關日志信息,而不是使用 loginfo hook。此外,它並不生成相對含糊的 CVS 日志消息,而是將所有東西都重新格式化成可讀的“更改日志(ChangeLog)”格式(請參閱 清單 1):
清單 1:cvs2cl.pl 生成的輸出
2001-04-09 20:58 drobbins
* app-doc/gentoo-web/files/xml/dev.XML: new fixes
2001-04-09 20:47 drobbins
* app-doc/gentoo-web/: gentoo-web-1.0.ebuild,
files/pyhtml/index.pyHtml, files/xml/gentoo-howto.XML: new
gentoo-howto fixes
2001-04-09 20:03 drobbins
* app-doc/gentoo-web/files/xml/dev.XML: typo fix
2001-04-09 20:02 drobbins
* app-doc/gentoo-web/files/pyhtml/index.pyHtml: little update
還可以指示 cvs2cl.pl 生成 XML 格式的輸出,在下一篇文章中,我會利用這種技術將最新的“更改日志”結合到站點中新的開發人員部分。
cvslog.sh 腳本
以下是我現在用於生成日常“更改日志”電子郵件的腳本。首先,它將當前工作目錄更改成已檢出 CVS 資源庫的位置。然後,它創建 $yesterday 和 $today 環境變量,它們包含了相應的 RFC 822 格式的日期。請注意:這兩個日期變量都將時間設置成“00:00”或午夜。然後,使用這些變量創建 $cvsdate 變量,並將其傳送給 cvs2cl.pl 以指定我感興趣的日期范圍 ― 從昨天午夜到今天午夜的時間跨度。這樣, $cvsdate 變量就包含了一個日期規范,它通知 cvs2cl.pl 只對昨天的更改做日志,而不對其它更改做日志。
此外,我還創建了 $nicedate 變量(在郵件主題行中使用),並使用 mutt 郵件程序(以 mailx 兼容模式)將電子郵件發送到 gentoo-cvs 郵件列表(請參閱 清單 2):
清單 2: cvslog.sh
#!/bin/bash
cd /usr/portage
cvs -q update -dP
yesterday=`date -d "1 day ago 00:00" -R`
today=`date -d "00:00" -R`
cvsdate=-d\'${yesterday}\<${today}\'
nicedate=`date -d yesterday +"%d %b %Y %Z (%z)"`
/home/drobbins/gentoo/cvs2cl.pl -f /home/drobbins/gentoo/cvslog.txt -l "${cvsdate}"
mutt -x gentoo-cvs -s "cvs log for $nicedate" <\
/home/drobbins/gentoo/cvslog.txt
通過使用 cron,我在每晚午夜時運行這個腳本。多虧有 cvs2cl.pl ,我的開發人員現在可以得到准確且可讀的每日的 CVS 更新。
文檔項目
現在,討論 Gentoo Linux 文檔項目。新的文檔系統涉及兩組人或目標觀眾:文檔 創建人和文檔 讀者。創建人需要不給創建帶來妨礙的精心設計的 XML 語法;而根本不關心 XML 的讀者想要生成的 Html 文檔既具功能性又具觀賞性。實現的難點是如何創建一個滿足這兩種觀眾需要的完整系統。哦,我假設還有第三種“觀眾” ― 我,Web 管理員和設計新系統的人。由於我打算在站點升級時與新的文檔系統交互,因此我需要它可靠且靈活。
Web 就緒的 Html
首先,讓我們討論一下將根據我的主 XML 文件生成的 Web 就緒的 HTML。要生成好的、可讀的文檔,我需要正確的 XML 標記的支持。例如,必須要有將注釋、重要消息和警告插入文檔主體(而且使它們在結果 Html 中突出顯示)的能力。此外,我必須可以插入幾塊代碼,如果實際用戶輸入可以以某種方式由程序輸出得到補償,那就太棒了。我甚至可以添加以備用顏色突出顯示源代碼注釋的標記,這樣代碼塊就更易讀了。
文檔頂部應該有目錄表(帶有到相應章的超鏈接)、摘要、修訂日期、版本和作者清單。當然,每個文檔在其頁面的最上部應該有一個頁眉,該頁眉包含了一個小的 Gentoo Linux 徽標。單擊此徽標應該將您帶到 Gentoo Linux 主頁面。最後但很重要的一點是,每個文檔都應該有一個頁腳,它包含了版權信息和聯系電子郵件地址。
漂亮的新徽標
有大量要求需要滿足,而我決定首先將精力集中在最有趣的部分,即出現在每個 Gentoo Linux 文檔左上角的新 Gentoo Linux 徽標。我使用主頁面上“gentoo”圖形(使用優秀且免費的 Blender 3D 程序創建的)中的“g”作為新的小徽標的基礎圖形。我略微調整了一下擠壓設置,並添加了鍍鉻環境映射。最後,我安置了燈光和照相機,新的徽標就完成了。在將它導入 Xara X並添加了一些文本之後,就得到了以下結果:
我 沒有選擇 DocBook,因為輕量級 XML 語法最適合 Gentoo 的需要。目前,我們的 XML guide 語法有大約 20 個標記和大約 10 個屬性。有限的標記集合使 guide XML 易於轉換成其它格式,如 Html,而且還確保了在整個文檔集中保持一定程度的一致性,因為格式是如此簡單。由於已經有了自己的 XML 格式,我可以根據需要用新的標記擴展格式。我喜歡那個程度的控制。我將 XML 看作是一種人們應該用於以 他們認為最實用的方法來構造數據的技術。換句話說,定義自己的元素和屬性的能力是很寶貴的,我應該充分利用它。畢竟,它是 XML 的定義功能。
當然,創建自己的 XML 語法並不總是最佳解決方案,尤其是當 數據互換對於您非常重要時。在所有的 XML 宣傳中,有一件事通常會被忽略,那就是 不同 XML 格式之間的轉換極其困難。在許多情況下,兩種格式不會 100% 兼容,而您將不得不違心地選擇棄用數據和/或元數據,從而避免使用某些元素或屬性,或者創建一種“超級格式”,它將容納這兩種 XML 格式的數據和元數據。在文檔世界中,DocBook 是作為“超級格式”的理想選擇,因為它非常靈活;它可以輕易地容納從各種源碼導入的文檔。
但是,DocBook 的豐富性和靈活性也可能造成問題。例如,也許會有幾百個您可能永遠不需要的標記,而在 XSLT 中支持所有這些標記可能會使轉換成其它格式變得更困難。因此,雖然 DocBook 對於轉換 自其它格式的文檔來說是一個非常好的容器,但您自己的最簡單 XML 語法卻幾乎始終更易於轉換 成其它格式。
最重要的事就是在牢記目標觀眾的需要的同時,認真評估所有潛在的解決方案。
結束語
創建好新的文檔系統之後,我將所有文檔都轉換成新的格式,並將新文檔張貼到現有站點上。此外,我還創建了到 gentoo-cvs 郵件列表訂閱頁面的鏈接。這裡的關鍵是我將這些功能都集成到 現有站點,因此用戶可以立即從這些改進中受益。