CMake - Cross-Platform Make
它的makefile就是一個txt檔, 可以在不同平台上產生不同的makefile, 例如在VC8裡它就可以產生sln和vcproj, 在linux上就會產生unix-style的makefile (而且還有彩色的進度呈現......cool)
簡單易上手, 很多人在用(KDE也採用), 所以文件資源豐富, 跟我之前在用的Boost Build比起來, CMake真的是比較好找到需要的文件或解答, 所以我跳槽了= ="
2008年3月17日 星期一
2008年2月22日 星期五
ClamAV - open source的防毒軟體
ClamAV AntiVirus
Wow, 連防毒軟體都有open source的(其實也沒啥大驚小怪的, 整個OS都可以open source了不是嗎), 想知道防毒軟體怎麼運作的, 這是個很好學習的對象。不過這是專門用來在gateway上掃毒的, 所以可能跟一般個人用防毒軟體有點差距。
其實是因為最近open source社群有件事情, 才讓我注意到這個軟體, 請看Boycott Trend Micro。起因就是Barracuda Networks這家公司想要把他們產品內的掃毒引擎由趨勢的東西換成ClamAV, 乍看之下好像沒啥問題 - 我不想用你們的東西, 換個東西用應該沒犯法吧? 但是!! 重點就在於趨勢手上握有一項專利 - 在gateway上掃毒。所以趨勢要求Barraccda要付給他們patent fee, 就因為Barracuda在gateway上掃毒侵犯了他們的專利權= =
趨勢之前好像也靠這個專利告贏了幾家廠商, 沒辦法, 這就是法律。坦白講我自己覺得這是專利權危害軟體發展的最好例子, 在gateway上掃毒只是個概念而已吧? 又不是像光碟片有自己特殊的製造技術, 所以擁有這個製造技術的專利。趨勢這樣搞法, 以後大家想要實做一項在gateway上掃毒的技術, 不就都綁手綁腳的嗎?
Wow, 連防毒軟體都有open source的(其實也沒啥大驚小怪的, 整個OS都可以open source了不是嗎), 想知道防毒軟體怎麼運作的, 這是個很好學習的對象。不過這是專門用來在gateway上掃毒的, 所以可能跟一般個人用防毒軟體有點差距。
其實是因為最近open source社群有件事情, 才讓我注意到這個軟體, 請看Boycott Trend Micro。起因就是Barracuda Networks這家公司想要把他們產品內的掃毒引擎
趨勢之前好像也靠這個專利告贏了幾家廠商, 沒辦法, 這就是法律。坦白講我自己覺得這是專利權危害軟體發展的最好例子, 在gateway上掃毒只是個概念而已吧? 又不是像光碟片有自己特殊的製造技術, 所以擁有這個製造技術的專利。趨勢這樣搞法, 以後大家想要實做一項在gateway上掃毒的技術, 不就都綁手綁腳的嗎?
2008年2月21日 星期四
Wubi
Wubi - unofficial Ubuntu installer for Windows
1. 直接在Windows安裝, 不用燒安裝CD
2. 不用分割硬碟, 它把Ubuntu裝在一個資料夾裡, 所以反安裝也很簡單
3. 不用安裝bootloader, 安裝完直接重開機就可以選擇Windows或Ubuntu
4. 效能幾乎一樣, 差別只在硬碟存取可能比較慢, 這跟磁區的defragment有關
很無痛的玩法......
1. 直接在Windows安裝, 不用燒安裝CD
2. 不用分割硬碟, 它把Ubuntu裝在一個資料夾裡, 所以反安裝也很簡單
3. 不用安裝bootloader, 安裝完直接重開機就可以選擇Windows或Ubuntu
4. 效能幾乎一樣, 差別只在硬碟存取可能比較慢, 這跟磁區的defragment有關
很無痛的玩法......
2008年2月4日 星期一
dbgdel.cpp的錯誤......
code老是無預警當掉, 用VC的debug build來run, 卻總是出現以下訊息
_ASSERT(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
而且還是dbgdel.cpp的錯誤......
google了一下, 原來double free記憶體或是buffer overflow都是這樣子的exception, VC這樣寫還真的是看不懂啊
而且, VC的release build並不會馬上對double free做出反應, 而是在不定時間crash = ="
參考以下簡單的一段code
這樣的double free用VC 2005的release build來run沒有問題, gcc 4.1.1倒是會印出double free or corruption。不過, 寫作習慣比較好(這表示...偷懶的時候常常會省略)的coding方法應該要避免這種dangling pointer:
free前先檢查是不是null pointerThe ANSI standard ANSI X3.159-1989 "Programming Language C." specifies that free(NULL) is a no op. "free deallocates the space pointed to by p: it does nothing if p is NULL." Quoted from "The C Programming Language" second edition by Kernighan and Ritchie with the subtitle "ANSI C"., free完的pointer一律設為null pointer(free完就不理它的話, 就叫做dangling pointer啦) 很麻煩的寫法, 不過卻可以保命......抓這種bug可是會要人老命的。
_ASSERT(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
而且還是dbgdel.cpp的錯誤......
google了一下, 原來double free記憶體或是buffer overflow都是這樣子的exception, VC這樣寫還真的是看不懂啊
而且, VC的release build並不會馬上對double free做出反應, 而是在不定時間crash = ="
參考以下簡單的一段code
int main(void)
{
char *n = new char[32];
delete n;
delete n;
return 1;
}
這樣的double free用VC 2005的release build來run沒有問題, gcc 4.1.1倒是會印出double free or corruption。不過, 寫作習慣比較好(這表示...偷懶的時候常常會省略)的coding方法應該要避免這種dangling pointer:
int main(void)
{
char *n = new char[32];
delete n;
n = NULL;
delete n;
n = NULL;
return 1;
}
2008年1月29日 星期二
Floating Point Exception
參考文件
今天用FC6的機器compile了一隻程式, 丟到FC4的機器上跑, 想不到一開始就給了我一串令人挫折的訊息 - Floating Point Exception。原來FC6以後版本的gcc現在在link的時候會採用--hash-style=gnu這個hash方式, 據信可以提昇動態鍊結50%的效率。然而, 舊的glibc版本並不支援, 所以想要在舊的glibc版本上跑的話, link的時候記得加上 -Wl, --hash-style=sysv。
今天用FC6的機器compile了一隻程式, 丟到FC4的機器上跑, 想不到一開始就給了我一串令人挫折的訊息 - Floating Point Exception。原來FC6以後版本的gcc現在在link的時候會採用--hash-style=gnu這個hash方式, 據信可以提昇動態鍊結50%的效率。然而, 舊的glibc版本並不支援, 所以想要在舊的glibc版本上跑的話, link的時候記得加上 -Wl, --hash-style=sysv。
2008年1月28日 星期一
C++ STL - Iterator的erase
std::vector<int> v;
v.push_back(0);
std::vector<int>::iterator vi = v.begin();
while(vi != v.end())
{
if(*vi == 0)
{
v.erase(vi++);
continue;
}
++vi;
}
以上這段code在VC2003上run是正常的, 用gcc 3.2.2的話會造成segmentation fault。
正確的寫法應該是 vi = v.erase(vi);
2008年1月16日 星期三
破冬感言
破冬是軍中術語, 指的是役期只剩下一年了, 所以我也可以使用破冬這個詞了
感想很多, 當然都是不好的, 我只想講一個對後進比較有用的結論
那就是剛出社會的年輕人不要一開始就綁死自己, 像我一開始就必須要留在同一個地方四年
如果這個地方是好的, 那四年或許還可以持續的學習與成長, 甚至累積財富
如果是不好的, 那真的很浪費, 因為年輕人的時間很寶貴, 這段時間的頭腦還很清楚, 體力也比較充沛
應該要好好的利用, 畢竟人生中這段精華的時間不會再有了
剩下一年的時間, 我打算把還沒學到的部份都學一學看一看, 作一個我可以引以自豪的東西
開會臨時硬湊出來的神奇idea, 居然就成為以後產品的主軸, 讓人覺得不知所措
整天寫super-specialized demo code去搶案子, 真的讓人很沒成就感
人家說工作的動力是來自成就感和金錢, 兩者都沒有的情況下, 真的會覺得很沮喪
聽說接下來這裡又接了很多案子, 但是我可以保證, 這一切一定又只有一個結果 - 失敗
失敗之前的掙扎想必又是一陣腥風血雨, 但是沒關係, 這一切都還有個望得到的盡頭
羅馬書上面寫著『忍耐生老練,老練生盼望』, 聖經上寫的過程居然和我這三年不謀而合
沒錯!! 開始擺老之後接下來就是盼望了, 姆哈哈
感想很多, 當然都是不好的, 我只想講一個對後進比較有用的結論
那就是剛出社會的年輕人不要一開始就綁死自己, 像我一開始就必須要留在同一個地方四年
如果這個地方是好的, 那四年或許還可以持續的學習與成長, 甚至累積財富
如果是不好的, 那真的很浪費, 因為年輕人的時間很寶貴, 這段時間的頭腦還很清楚, 體力也比較充沛
應該要好好的利用, 畢竟人生中這段精華的時間不會再有了
剩下一年的時間, 我打算把還沒學到的部份都學一學看一看, 作一個我可以引以自豪的東西
開會臨時硬湊出來的神奇idea, 居然就成為以後產品的主軸, 讓人覺得不知所措
整天寫super-specialized demo code去搶案子, 真的讓人很沒成就感
人家說工作的動力是來自成就感和金錢, 兩者都沒有的情況下, 真的會覺得很沮喪
聽說接下來這裡又接了很多案子, 但是我可以保證, 這一切一定又只有一個結果 - 失敗
失敗之前的掙扎想必又是一陣腥風血雨, 但是沒關係, 這一切都還有個望得到的盡頭
羅馬書上面寫著『忍耐生老練,老練生盼望』, 聖經上寫的過程居然和我這三年不謀而合
沒錯!! 開始擺老之後接下來就是盼望了, 姆哈哈
訂閱:
文章 (Atom)