以下看看就好,
因為當時打完這篇之後沒多久就接觸到了 RoR,
我立刻就把這個專案給遺棄了.
寫這麼久的程式好像笨蛋一樣,
別人早就有一套超棒的 Framework 給我用了…
一直希望做個能夠個人化又易維護的日誌工具,
用來紀錄我碰到的各種問題以及解決方式,
接觸 Ruby 之後終於不會覺得鬥志全無了了 ._.
選用工具
為了學習 Ruby 以及之前所說的易於維護的特性,
所以我在文件語言方面選擇了 YAML.
之所以沒有使用 XML 的原因在於他太麻煩了!
想想看,
光是要輸入標籤就要比平常多按數百次的 Shift,
加上除了空標籤以外的每個標籤都要關閉,
還要定義 DTD, 實在浪費太多時間了.
然而 Ruby 從 1.8 之後開始直接支援 YAML,
對我來說真是一大福音啊!
所以當然程式語言就選擇用 Ruby 囉.
圖形製作
顧內在也要顧門面,
醜得要死的網頁別說別人,
自己怎麼看得下去呢?
我選擇使用 GIMP ( ver 2.0.2 ) 來製作,
反正有朝一日要是 Unix 平台突然變得好用的話,
要轉移平台也容易就多啦.
GIMP 的美麗與哀愁
優點
- 轉換平台方便
- 功能堪稱完整
- 可擴充性強
- It’s FREE !
缺點
- 沒有 MDI 介面
- 速度非常緩慢
- 似乎沒有內建簡單幾何圖形的繪製工具
YAML 文件格式
既然是日誌,
那麼第一層就不免要有日期、時間,
主題當然也是不可或缺,
還有為了以後的方便特別加了「類別」這樣的屬性,
如此一來就算以碰到不同類型的問題也好整理.
再來就是內文的部分了,由於我認為裡面應該還會再分層,於是我採用一個標題一段內文這樣的概念來著手,後來決定使用樹狀延伸的方式達到延伸文件的效果,不過這樣埋下了兩個問題:HTML 所定義的標題最多只到六層,我能夠順利做到無限延伸嗎?還有,無限延伸的排版做得到嗎?我決定使用 DL 標籤來排版,而捨棄使用 Hn,因為 DL 可以做到無限階層排版,而且還會自動縮排,真是一舉數得。
先不談排版,就 YAML 而言還是有一些必須克服的地方,第一個就是:我看不懂 YAML 的規格說明書,很正式,講得白話一點就是,很鳥。為此我決定去找替代的說明書,我把腦筋動到了 Ruby 上面,既然有 YAML for Ruby,那麼應該就會有 for Ruby 的說明書吧,果不其然,到股溝搜尋「YAML Ruby」兩個關鍵字就找到了官方網頁,下載的說明書也附有「YAML Cookbook for Ruby」,哈!我正好愛看 Cookbook,真是合我胃口啊! XD
YAML 解析
光說不練可就不行了,立刻來撰寫解析我的 YAML 的函式。首先用 YAML::load 方法將它開啟,一直到解析日期時間、主題都沒有問題,可是一到了內文,惡夢就來了,怎麼說呢?先看解析部分的程式碼:
#!/usr/local/bin/ruby
require "cgi"
require "yaml"
f = File.open( “yaml.txt” )
y = YAML::load( f )
print “Content-Type: text/plain; charset=big5\r\n\r\n”
y.each do |diary|
puts “撰寫時間:”+diary[“time”].strftime( “%m/%d/%Y %I:%M %p” )
puts “類別:”+diary[“class”]
puts “主題:”+diary[“subject”]
puts diary[“content”]
end
首先載入檔案,再印出標頭,然後開始輸出,一切都很美好,直到內文出現。對啊!內文怎麼辦,裡面是無限層的內文,迴圈總不能無限層的寫下去吧!
於是,我得試著寫出我生命中的第一個遞迴  ̄▽ ̄