This page looks plain and unstyled because you're using a non-standard compliant browser. To see it in its best form, please visit upgrade to a browser that supports web standards. It's free and painless.

Fillano's Learning Notes 會員登入 會員註冊

在Douglas Crockford的書《JavaScript: 優良部份》以及演講「Ajax Performance」中,看到memoizer這個奇妙的東西,利用他以及適當地調整遞迴函數,可以把遞迴函數改成用iteration的方式執行,當計算的參數較大時,效能改進很明顯。

memoizer的原理是,把每次計算的結果記錄下來,提供下次計算使用,這樣函數就不用每次都計算到遞迴結束,減少的冗餘計算很多,所以可以大幅改善效能,但是又能使用遞迴函數簡潔的好處。

 (閱讀全文)

之前在it邦幫忙試著回覆別人使用xen的網路問題,結果自己灌CentOS 5.1來測試,在使用xen時也發生了一樣的問題。結果其實很......無言,也看到不少人在xen的maillist上吐苦水。後來自己試著調整xen的設定並且利用brctl手動改bridge,才確定問題。

原來自從CentOS 5.1開始,他會內建兩個bridge,一個叫做xenbr0,一個叫做virbr0,dom0的peth0(實體網路卡)以及vif0.0都會綁在xenbr0,但是虛擬機除非指定使用xenbr0,否則他預設會綁在virbr0。

virbr0的作用類似NAT,他提供DHCP以及Gateway給內部的虛擬機器使用,虛擬機器透過他就可以自動抓到ip,也可以上網,但是從dom0以及實體網路上,都看不到虛擬機器。

由於xen的官方說明文件中完全沒提到virbr0,所以許多人大惑不解,說明文件也找不到,只能說:virbr0是什麼鬼阿?

 (閱讀全文)

上一篇文章中,對於除了null以及undefined之外的型別做了一些測試,這幾天有用同樣的closure函數做一點深入的測試來試探他的效果。也很有趣。

主要的測試如下:

 (閱讀全文)
今天有一篇迴響講到我在「搞清楚lexical scope與closure」舉的例子有問題,我檢查了一下,的確有問題,不過在測試時發現好玩的現象,乾脆對所有型別做一些測試。

所作的測試包含使用Literal產生物件、使用Constructor產生物件、針對陣列元素、針對Date物件時間修改等做測試。程式如下:

 (閱讀全文)

在iTHome新聞看到:Google推出Native Client測試計劃。想想可以在瀏覽器中執行NativeCode?那就來試試看吧。

首先要下載原始碼,這些從官網就可以找到:nativeclient

建構環境需要一些工具:

  1. 編譯器:用微軟的VisualStudio 2008 Express也可以通,但是我是在Windows SDK的Console環境編譯,詳情上微軟的網站看看吧。
  2. python:建構環境使用scons,所以需要用到python。我用的是python2.5

一些需要的系統設定:

  1. 把python目錄加到path環境變數,這樣才有辦法執行scons.bat
  2. 我不確定是否是必要步驟,但是我另外設了一個環境變數叫做PYTHONHOME,內容還是指向phython目錄
  3. 修改nacl\googleclient\native_client\npapi_plugin\nacl_plugin.rc檔案,把afxres.h改成windows.h,否則會因為Windows SDK缺少這個resource header檔案而出錯。其實一些常數定義透過windows.h就可以了。

 (閱讀全文)

好多年沒開發使用win32api的東西了,因為有需要,前幾天稍微測試了一下。

簡單的原理是用SetWindowsHookEx函數安裝一個WH_KEYBOARD hook來攔截,但是發現在事件處理的函數中即使不呼叫CallNextHookEx而直接return,還是無法擋住Print Screen的動作......

找了一下MSDN,最後用了Clipboard相關的函數來解決,方法是攔截到PrintScreen鍵時,立刻取得clipboard(用到GetClipboardOwner跟OpenClipboard兩個函數),然後呼叫EmptyClipboard函數來清除剪貼簿。目前看起來這樣應該可以簡單地防止PrintScreen把螢幕或應用程式的畫面拷貝到剪貼簿,當然也就無法貼到小畫家等程式存檔了。

不過這樣的方法只能防君子不能防小人,一些snapshot軟體可以透過拷貝DeviceContext的方式取得其他應用程式畫面,這樣就無法用這個方法阻止了。

(其他心得:在網路上找了一支用Memory Map File來共享資料的類別,可以用他來共享hook handle,這樣就可以用Dev-C++來做,不必非靠VisualC不可了。另外,VC9 runtime dll配置的方法跟以前的vc runtime差真多阿?我以為只要copy到同一個目錄就能用了啦。果然太久沒碰了......)