2008年12月25日 星期四

TclDocTest

自從玩過 python 的 doctest,我就一直覺得這概念實在很優秀,讓人勤於寫範例,又兼顧一些簡單的測試。因此,我也用 Tcl 實作了一個 TclDocTest。

不過目前只有一些簡單的比對,仍有許多需要調整修正的地方,整套我是用 XOTcl 實作的,這是我第一隻 XOTcl 程式。

仍需要修正的部分做些簡單的紀錄 ...

1. 應該以一個 Example 為單位,一個 Example 只要一個步驟錯誤便可以 return 出去。
2. 加入 puts 的測試
3. 計算每個 Example 的測試時間,可以了解每個測試所花費的時間。
4. 仍需可以印出 Example 的標題(標題有可能是一個 proc 的名字,或是一個較為完整的測試)
5. 每個測試最好可以用一個獨立的 interp
6. 可以實作一些結果的巨集,讓人寫測試結果不需要這麼斤斤計較(這的確會讓人感到寫範例很厭煩)
# % set x 100.1 ;# 我只想檢查它是否為浮點數
# <<float>>
# % set y 123 ;# 根本不想檢查這行
# <<pass>>
# % add $x $y ;# 這才是我想檢查的部分
# 223.1


7. 總測試個數
8. 總測試時間
9. 總錯誤個數

有空的時候就開始修正這些 ...

2008年12月18日 星期四

什麼是重構?

其實大師們三兩句就講出重構的精神,以下擷取於
重構 - 改善既有代碼的設計 (Refactoring: Improving the Design of Existing Code) 一書
Martin Fowler 著
侯捷 熊節 / 合譯


「程式碼被閱讀和修改的次數遠遠多於它被編寫的次數。保持程式碼易讀、易修改的關鍵,就是重構。」

「在不改變程式碼外在行為的前提下,對程式碼作出修改,以改進程式的內部結構。」

如果上面那句是用來形容重構的關鍵,那底下這句就是平實的呈現重構的過程。我相信這兩句話已經可以表達出90% 的重構精神了。

2008年12月12日 星期五

Eclipse & DLTK 的環境設置

主要是介紹如何設置一個 Tcl 的 IDE 環境。

打開 Eclipse 之後,進入 Window / References



接著來到 Tcl / Editor



將設定更改為。
這樣設置可以讓 Tab 縮排為四格空白,符合網路上標準縮排,避免 Tab 與 空白格之間的排版有問題。(這不是絕對要求,事實上遇到排版有問題的情況也不多,不過以防萬一我是會這樣設置的。)



接著來到 interpreters ,將設定更改為。
建置好這樣才可以直接執行 Tcl Script,並且將 Tcl/lib 全部載入進來。



建置 debug 環境。
去下載頁面。



下載 Tcl 的 Windows 版本



將路徑指向 dbgp_tcldebug.exe



這樣就完成了 debug 環境建置。

它還有一些好用的設置,好比說 Tcl / Editor / Template ,可以自行研究看看!

2008年12月11日 星期四

設置 Breakpoint 的盲點

這篇很短,不過解決這個問題花了我大概半個小時。

在測試 breakpoint 的時候,我隨手點一個 breakpoint ,怎麼執行都沒有停在 breakpoint 。我以為是我設置 debugmode 的時候出錯了。

找了老半天,才發現我把 breakpoint 設置在一個不會為真的 if 判斷式內 ...

切記!不要再把 breakpoint 設置在根本不會執行的地方來做測試了!

Eclipse & DLTK 的安裝方法

Eclipse 是一套 Open Source 的 IDE 。

而 DLTK 是它的一套 plugin ,讓 Dynamic Language 可以在 Eclipse 上有 IDE 。

安裝 Eclipse 的方法可以輕易的在網上搜尋到,所以這邊是介紹 DLTK 的安裝方法。
(若無法順利執行 eclipse.exe 請參考這個網站)


首先,必須先完成 Eclipse 的安裝。


接著進入此網站下載並安裝以下的 plugin
RSE-runtime-core-3.0.2.zip
emf-runtime-2.4.1.zip
Dynamic Languages Toolkit Bundles - SDK

Eclipse 安裝 plugin 的方法很簡單,只要解壓縮時指定放置在 Eclipse 安裝路徑底下,並執行解壓縮即可。

Ex : C:\Eclipse\

完成以上動作,便可以開始使用 Eclipse & DLTK 了。

下一篇再紀錄如何設置環境。

利用 ruby 的 net/http 套件將網路上的圖片抓下來

底下是使用ruby獨有的寫作方式來抓取圖片,可以與 Tcl 跟 Python 做些比較
這是 Tcl 版本
這是 Python 版本

require 'net/http'

# 開啟一個二進制檔案,將檔案物件放入 f 這個變數內
open('yahoo_logo.gif', 'wb') do |f|
    
# 將底下網址回傳的內容放入 image 這個變數內
    
image = Net::HTTP.get('l.yimg.com', '/tw.yimg.com/i/tw/hp/spirit/yahoo_logo.gif')
    
    
# 將內容寫入檔案內
    
f.write(image)
    
    
# 關閉檔案
    
f.close()
end



這樣就會在執行目錄底下產生一個叫做 yahoo_logo.gif 的圖片了