Munou Diagram 2

Let's munou!

PolarLog Dev 開工啦

以下看看就好,
因為當時打完這篇之後沒多久就接觸到了 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

首先載入檔案,再印出標頭,然後開始輸出,一切都很美好,直到內文出現。對啊!內文怎麼辦,裡面是無限層的內文,迴圈總不能無限層的寫下去吧!

於是,我得試著寫出我生命中的第一個遞迴  ̄▽ ̄