2009年5月15日 星期五

函式指標與callback

請教了高手,好像似懂非懂...記錄下來。

函式指標感覺就像是把這套處理邏輯放在某個位置,這讓函數的處理邏輯有了傳遞的可能性(傳遞那個位置)。

而一整套系統中,往往有些步驟,需要另外撰寫處理邏輯(可依照每個人的需求不同調整),而你把寫好的處理邏輯傳給那套系統就是callback,不知道這樣理解有沒有問題?

有了位置之後,甚至可以動態置換那位置的邏輯,只要介面(參數與傳回值)不要改變就好。

2009年4月30日 星期四

我對物件導向的認識

每每在網際網路上,看到各種解釋「何謂物件導向」,都覺得十分的精采。每個人解釋的方法都不相同,但往往都隱約指向同一種概念。每個解釋的作者,都希望盡可能簡單的表達物件導向的概念,常常都會用一些非常有趣的例子來解釋,讓讀者可以感覺「喔~原來這就是物件導向」。

可是為什麼要用物件導向?這是比較少作者願意在此著墨的議題,原因不明。

我認為任何的事物,都無法脫離「事出必有因」這五個字,也就是說,「物件導向」應是在某種事情發生後,擁有智慧者帶領大家發展出來的一套想法,讓事情更容易處理,而這個想法經過多人反覆驗證後,不斷的修改以及發揚,讓世界上的人都認同這樣的概念。

也就是說,其實你只要想辦法能讓事情動的最穩定,最簡單,不用特別去學「物件導向」,就會讓事情接近物件導向的概念。(這可能是我自認為=P)

舉個例子。

有一間剛成立的公司叫「佳佳」,裡面有小明、小華、小王三個人。

公司成立後,不管是做什麼事情都由三個人分攤來做,有客人來了,小明有空就小明去接待,公司需要採購,小王有空就由小王去採買。

漸漸的,小華對小明接待客人的流程有意見,小華認為小明應該先帶客人到座位上再倒茶,他們兩個為了這樣的事情吵了起來,小王出面協調後,他們制訂了「待客流程」,希望三個人都可以記下這個流程。

接著採購流程、出貨流程...etc 也都跟著出爐,他們還是維持著誰有空,就叫誰照著流程走。

有天小王在緊急狀況下,發現採購流程有點問題,他馬上對流程做了修正,但並未通知其他兩位。

過了三天,小明因為採購流程的問題,犯了錯誤,造成公司非常大的損失。小王很難過,因為這問題他有發現,但他卻忘記通知其他兩位,他也認為自己對採購的天份比起其他兩位高,因此他接下了採購,從此小王便不用負責待客與出貨,只要專心負責採購就好。

小華也認為自己對待客,人事處理比較有心得,因此小華專心處理行政。

小明則專心處理出貨,腦袋中再也不用裝下好幾套「流程」了!因此在出貨上,小明也處理的比以前出色許多。

......




一間公司只需要單純的分工就可以順利運作了嗎?我想這故事還可以繼續往下說...

如何運用智慧讓事情動的更順利,就會越接近物件導向...

不過可能一切都是我自認為=P,我對於物件導向內很多術語都還感到模糊,什麼多型、介面、重載...但我相信都是為了讓事情更好運作所產生出來的東西就是了。

2009年2月19日 星期四

當一個主管最糟糕的就是

1. 不信任下屬
2. 不加班就是不忙
3. 無法聽進下屬的話
4. 決定任何東西沒有與大家討論過
5. 用命令式口氣與下屬交談
6. 不了解全貌就否定新觀念
7. 以自己的標準衡量下屬
8. 不花時間了解下面的抱怨
9. 說自己很忙,所以工作要給下面做

2009年2月16日 星期一

Pair Programming

雖然我對於 XP 並不熟悉,但我卻非常嚮往 PP,第一次 PP 是為了快速讓較資淺的進入狀況,所以帶著他一起 refactoring ,就如其他先進的說法,過程中我體會了

1. 隨時被審視
2. 很少花時間在思考邏輯陷阱
3. 持續性的專注思考
4. 時間過的非常快!(其實就是過程中很快樂)
5. 加班一起加班= ="
6. 其他 .. (其實真的蠻符合網路上查到的一些優點@@..

但我不太同意網路上的一些說法 .. 有空的時候再一口氣整理出來好了。

2009年2月1日 星期日

twapi

這 twapi 應該是 win32 api 最「腳本」的模組吧 ...

寫起來非常的快速,只不過不夠底層 ... 而且菜鳥小弟我也不知道如何擴充它 ...

只好配合其它語言來玩玩了!

2009年1月20日 星期二

對上對下的至理名言

當然,付錢的是老大,所以好像理所當然的上面一定是對的,除非你走人。

不過站在客觀立場上,還是有分所謂的對與錯,至於何謂「客觀立場」,我想那些著名的書籍應該可以「勝任」這樣的角色。

這些書籍有分好幾種角度來思考,有下看上,也有上看下。

如果每天上面與下面都拿一篇文章分別要求彼此照著客觀規則來走,不知道是上面要改的多還是下面?

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 訪客"
}

...



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