星期二, 4月 24, 2007
星期一, 4月 23, 2007
星期三, 4月 18, 2007
在DOS Batch File中傳遞任意個數參數
- %0代表目前這個批次檔名
- 傳統上只有%1 ~ %9共九個參數可供使用,NT4之後新增了%*,用來代表包含%1之後的所有參數。
- 參考:http://www.robvanderwoude.com/parameters.html
星期二, 4月 17, 2007
以C#撰寫的Scott Hanselman Tiny OS
看來是個學習OS以及增強C#功力的好東西
- Blog: http://www.hanselman.com/blog/RescuingTheTinyOSInC.aspx
- Tiny OS in C#
- Tiny OS in VB.NET
- PPT Slides on the Tiny OS presented at TechEd Malaysia 20
星期日, 4月 15, 2007
在Visual C++使用內建功能偵測memory leak
對於非MFC的程式碼
MFC程式碼
- 啟動偵測memory leak :
在任何一個檔案中,如下定義_CRTDBG_MAP_ALLOC並同時引入兩個header
#define _CRTDBG_MAP_ALLOC
#include
#include
在程式最後呼叫 _CrtDumpMemoryLeaks();
或在程式一開頭呼叫 _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); - 只要發現memory leak,就算發生leak的原始碼檔案中沒有引入前述header,還是會傾印出該leak訊息
- 似乎只有使用malloc所造成的memory leak才會得到完整的錯誤訊息,如:
c:\temp\testmemoryleakdetection\testmemoryleakdetection.cpp(16) : {106} normal block at 0x003A9FB0, 2 bytes long.
Data: < > CD CD - 在無引入前述header的檔案中發生因new而導致的memory leak,其錯誤訊息如下:
c:\program files\microsoft visual studio 8\vc\include\crtdbg.h(1147) : {107} normal block at 0x003A3450, 4 bytes long.
Data: < > CD CD CD CD - 在無引入前述header的檔案中發生因malloc而導致的memory leak,其錯誤訊息如下:
{107} normal block at 0x003A3450, 2 bytes long.
Data: < > CD CD - 在有引入前述header的檔案中發生因new而導致的memory leak,其錯誤訊息如下:
c:\program files\microsoft visual studio 8\vc\include\crtdbg.h(1147) : {106} normal block at 0x003A9FB0, 4 bytes long.
Data: < > CD CD CD CD
這樣的訊息似乎沒有什麼作用,因為並沒有明確指出究竟是哪一部份的程式碼造成這個leak。也許有其他方法可以讓用new的錯誤也能產生完整的訊息。
MFC程式碼
- MFC程式碼似乎不需做任何設定,自動就有在debug模式下偵測memory leak的功能。可以產生如下的錯誤訊息:
{126} normal block at 0x003AE548, 4 bytes long.
Data: < > CD CD CD CD - 如果要產生完整的錯誤訊息,必須要在檔案前面加上
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
c:\temp\testmfcmemoryleak\testmfcmemoryleak.cpp(29) : {126} normal block at 0x003AE548, 4 bytes long.
Data: < > CD CD CD CD
星期日, 4月 08, 2007
Douglas Crockford的Javascript教學
投影片: http://yuiblog.com/assets/crockford/javascript.zip
影片
- http://video.yahoo.com/video/play?vid=111593
- http://video.yahoo.com/video/play?vid=111594
- http://video.yahoo.com/video/play?vid=111595
- http://video.yahoo.com/video/play?vid=111596
與C,C++,Java,C#等語言相較,Javascript的特殊之處有
- Javascript是一個Functional Language
- 只有一種浮點數字類別,沒有如int之類等其他數字類別。這個唯一的數字類別是
IEEE-754浮點數標準,其大小為64 bits。 - 雖然只有一種數字類別,但有一種特殊的數字「值」: NaN (Not a Number)。NaN與自己做等於、大於、小於運算的結果都是false。
- 在C中,整數0為false,非0整數則被當成true。在Javascript中,此概念被擴大成:
false, null, undefined, "" (空字串), 0, NaN 都被視為是false,不屬於這些的則都被視為true。 - + 的怪用法: +"42" 會將字串"42"轉換成數字42。這種用法方便是方便,但,會不會太怪了些。
- &&的怪用法,用來避免null reference:
return a &&amp; a.member;
等同於
if (a) {
return a.member;
} else {
return a;
} - 的怪用法,用來設定預設值:
var last = input nr_items;
上式在input為falsy value時,會指定nr_items給last。 - break到指定的階層(label)
loop: for (;;) {
...
if (...) {
break loop;
}
...
} - 有類似C#中foreach的描述,但有點怪怪的
for (var name in object) {
if (object.hasOwnProperty(name)) {
// within the loop,
// name is the key of current member
// object[name] is the current value
}
}
注意/建議事項
- 使用parseInt將字串轉換成數字時,最好使用有兩個參數的版本,明確指定字串所表達數字是幾進位的。否則的話會出現 parseInt("08") ==> 0,只有parseInt("08", 10)能正確轉換成8。
星期二, 4月 03, 2007
軟工大師Grady Booch
- Software Engineering Radio 專訪
- BCS/IET Turing Lecture Sides
- 關於軟體開發我們目前所知的原則有
基本原則:
* Craft crisp and resilient abstractions: 建立小而有彈性的抽象層
* Maintain a good separation of concerns: 適當的耦合
* Create a balance distribution of responsibilities: 平均分攤責任到各元件或模組
開發流程原則:
Grow a system’s architecture through the incremental and iterative release of testable executables
Peter Chen (陳品山) 與 ER Model
Peter Chen, ER Model創始者
- http://bit.csc.lsu.edu/~chen/chen.html
台灣大學畢業 - Channel 9 Peter Chen的podcast:
Dr. Peter Chen on the Entity Relationship Model and ADO.NET Entity Framework
星期一, 4月 02, 2007
vc++ strncpy_s
char buf[10];
const char* source = "0123456789abc";
//strncpy_s(buf, 10, source, 10); // 執行時會發生錯誤,因為Buffer 10太小,應該要有11才能夠放下之後的null
//strncpy_s(buf, 11, source, 10); // 會發生runtime check failure,因為已經11超過buf的大小10
strncpy_s(buf, 10, source, 9); // 012345678 會正確填入
const char* source = "0123456789abc";
//strncpy_s(buf, 10, source, 10); // 執行時會發生錯誤,因為Buffer 10太小,應該要有11才能夠放下之後的null
//strncpy_s(buf, 11, source, 10); // 會發生runtime check failure,因為已經11超過buf的大小10
strncpy_s(buf, 10, source, 9); // 012345678 會正確填入
訂閱:
文章 (Atom)