2009年1月16日 星期五

組合語言的環境建置

可以參考這個網站,他講的非常詳細,讓我這個菜鳥也可以上手。
http://home.educities.edu.tw/wanker742126/index.html

說實在的,這網站詳細到目前我還沒有必要在這邊多紀錄些什麼 ... 等有哪些是我自己的心得再紀錄吧 ...

2009年1月4日 星期日

windows 上讀寫檔案會遇到的問題

這是我在一個論壇裡面 post 的文章,其實我也常常忘記為什麼會被置換,每次都要重想一遍 =P ,所以貼來這邊作紀錄。




若不使用 binary mode 讀取寫入檔案,在 windows 上讀取與寫入分別會遇到的問題有:

讀取:
對 windows 來說,Ctrl-Z(1A) 也算是檔案結尾,因此只要遇到 hex 1A ,就會看到它停止讀取。

所以可以看到本來陋陋長的檔案變成只有一點點大

寫入:
我們一般在撰寫 python 程式的時候,標準的換行字元都是 \n(0A),所以如果我們要排版一個 string,我們都會做這樣的動作


>>> str = '老師您好:\n我是bmcool'
>>> print str
老師您好:
我是bmcool
>>>


但我們都知道 windows 的標準換行字元為 \r\n(0D0A) ,跨平台的腳本語言都會有這種自動偵測與轉換的能力,因此當你沒有交代你即將寫入的資料為 binary 時,python 為了讓你排版美美的字串在 windows 上有一樣的排版效果,就會很雞婆的幫你把 \n 轉換成 \r\n ...

也就是圖片中只要含有 hex 0A,全部都會變置換成 hex 0D0A ... 可以把上述範例的 str 寫入檔案,並用 16 進制編輯器打開來看看,就會發現是怎麼回事了。



Mac 的標準換行字元為 \r,對 python 來說也會有一樣的影響,它會把所有的 \n 都換成 \r ...

Linux 的標準換行字元與 python 相同,都為 \n,因此不會有任何轉換。

抓取某網路遊戲中的血量、魔法力與耐力

這邊並不會提到太多實作的方法,只能算是個人的紀錄罷了 ...


BB 01 98 23 BB 01 73 00 00 00 4A 00 00 00 5C 00
00 00 73 00 00 00 4A 00 00 00 5C 00 00 00 ...


粗體的部份,前三個分別為血量、魔法力與耐力現有數值,後三個為最大值。

2009年1月3日 星期六

分解條件式 (Decompose Conditional)

這是一個由名字判斷是否為會員的程式片段。

global membersName

...

if {[lsearch $membersName "Jacky.Lin"] != -1} {
    
puts "歡迎 Jacky.Lin 會員"
} else {
    
puts "歡迎 Jacky.Lin 訪客"
}

...


Refactoring ...


...

if {[isMember "Jacky.Lin"]} {
    
puts "歡迎 Jacky.Lin 會員"
} else {
    
puts "歡迎 Jacky.Lin 訪客"
}

...



雖然最後的結果都一樣,但下方的程式碼可以清楚的知道條件式的作用。

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 ,可以自行研究看看!