May 24, 2005

聲音發電

我們家在大馬路邊,平常車水馬龍,很吵。
所以我突然想到,聲音可以用來發電嗎?
不過可能聲音要夠大才行吧......

May 9, 2005

WinNFSd v1.0 在 SourceForge 發表了

之前為了工作需要而寫了一個 NFS server for Windows,WinNFSd v1.0 今天在 SourceForge 上發表了。
這是我第一個公開發表的 open source 的計畫,以 GPL 發表,雖然不是一個多了不起的計畫,但總算跨出了第一步。
之前我有提到我電腦裡的軟體幾乎都是自由軟體或免費軟體,今天我總算能貢獻一下了。
類似的自由軟體我只有找到 SOSSNT,但它似乎不允許 client 做寫入的動作,而且很久沒更新了。
所以我才動手寫了一個,不但允許 client 寫入,也有簡單的文字介面。

May 4, 2005

Compare signed and unsigned integer expression

在 compile C 程式碼的時候可能會出現這個 warning,代表什麼意思呢?
讓我們來看一個例子:

unsigned int big = 0x90909090;
int small = -1;
printf("big %c small", big > small? '>' : '< ');


你猜會輸出什麼?答案是 big < small。
這是因為 small 轉成 unsigned int 之後變成 0xFFFFFFFF,而大於 0x90909090。

那如果把 big 換成 unsigned shortsmall 換成 short,結果又是如何?

unsigned short big = 0x9090;
short small = -1;


答案是 big > small。
這是因為 bigsmall 都被轉成 int 了,所以 big 仍然大於 small

May 2, 2005

如何寫一個能編輯大檔案的軟體

除非沒有合用的,不然我一定盡量使用 freeware 或自由軟體。
由於最近想找合用的 hex editor,找到了 hexploreXVI32,但是它們在編輯大檔案時都吃掉很多記憶體。
後來我找到了 HexEdit,特別的是,作者還在網頁分享了如何寫一個能編輯大檔案的軟體,這樣就不用把整個檔案載入記憶體囉。
可惜它還不是百分之百合我用,也不是 open source 的,所以我也沒辦法改。

ftell 超出檔案大小

以前總以為 C 函式裡頭的 ftell 回傳值不會超出檔案大小的範圍。
但是在一次意外中,竟讓我發現我錯了。
寫個小程式研究一下,原來是因為 fseek 導致的。

f = fopen("small", "rb"); //開啟一個小檔案
fseek(f, 100000, SEEK_SET); //故意fseek到超出檔案大小
printf("%dn", ftell(f)); //結果竟然顯示100000


雖然 fseek 會回傳成功或失敗,但是失敗時卻不會做任何處理,和我想像中的不一樣啊。

自序

最近逛了一些 blog,讓我也越來越想開始寫日誌。
這樣才能把我的想法記錄下來,不然以我的記性一定馬上忘記。
這是我的第一篇日誌,希望能夠像別人寫得一樣好。