2008年12月17日 星期三

CNN Top news - Passengers saved from dangling gondolas after tower snaps

Passengers have been rescued from a gondola dangling over a freezing creek after the tower snapped in half Tuesday at a ski resort near Whistler, British Columbia.

在Whistler附近的滑雪場纜車支柱於週二發生倒塌意外,一台纜車懸掛在結冰的河川上,上面的乘客已經被救出。


gondola [] n. 纜車

dangle[] v.i. 懸蕩
His keys dangled from a chain.

snap [] v.t. 咬;折斷
The dog snapped my leg.
He snapped the stick in two.


為什麼我馬上想到貓纜呢......科科

2008年12月15日 星期一

CNN Top news - Iraqi journalist throws shoes at Bush in Baghdad

"Hurling shoes at someone, or sitting so that the bottom of a shoe faces another person, is considered an insult among Muslims."

對於回教徒來說,往人身上丟鞋子,或是坐著將鞋底朝著人,都是一種侮辱。


hurl [] v.t. 猛力投擲
He hurled all the books out of the window.

insult [] n. 侮辱
Your sympathy for me is an insult to my pride.

布希去巴格達友善訪問,被一個記者丟鞋......
原來回教徒不能忍受別人的鞋底啊(筆記)

參考新聞

2008年12月9日 星期二

On the house

這句片語呢,跟字面上的意思完全無關!!
會提到這句片語,是因為魔獸世界裡面有一個NPC有一句台詞,而台灣的智XD翻譯成

"這是在屋頂上的"

下一句是

"既然是免費的......"

大家應該都覺得上下文完全無關吧...囧rz

第一句的英文原文是 "This is on the house"
而on the house絕對不是在屋頂上......應該是免費的意思!

These drinks are on the house.
這些飲料是免費的。

C/C++ Name mangling

相信常在使用一些C library的人,常常會在標頭檔看到以下的程式碼

#ifdef __cplusplus
extern "C" {
#endif

簡單講,這是為了避免C++的name mangling造成linker無法link到正確的symbol。

C++支援function overloading,所以下列兩個function可以同時存在

void foo(int a);
void foo(double a);

這是因為C++ compiler會將function name"變形",例如:

void func_int(int a);
void func_double(double a);

這樣就沒有衝突的情形了。
但是用C compiler所編譯出來的object,裡面的symbol可是沒有什麼name mangling的
所以linker當然就沒辦法找到C++變形過後的symbol,就出現unresolved symbol的error了
因此,C++提供了extern "C"這個辦法,只要用extern "C"包起來的,compiler就知道裡面的symbol都是"unmangled"的,例如:

extern "C"
{
#include "c_library.h"
}

如此一來,就可以順利link C compiler所編出的object了

另外,各家compiler實做name mangling的方式也不一樣
所以用VC編好的library,沒辦法直接拿去跟gcc的一起link喔,不過這總比因為不相容造成一堆奇怪的問題好多了

參考資料 http://en.wikipedia.org/wiki/Name_mangling

2008年10月17日 星期五

Psalms chapter 90, 10-17

The measure of our life is seventy years; and if through strength it may be eighty years, its pride is only trouble and sorrow, for it comes to an end and we are quickly gone.

Who has knowledge of the power of your wrath, or who takes note of the weight of your passion?

So give us knowledge of the number of our days, that we may get a heart of wisdom.

Come back, O Lord; how long? let your purpose for your servants be changed.

In the morning give us your mercy in full measure; so that we may have joy and delight all our days.

Make us glad in reward for the days of our sorrow, and for the years in which we have seen evil.

Make your work clear to your servants, and your glory to their children.

Let the pleasure of the Lord our God be on us: O Lord, give strength to the work of our hands.

2008年9月24日 星期三

容易緊張

從小就很容易緊張,尤其是月考的那一天,都會緊張的很想大便。
我是不懂心理緊張跟胃腸有什麼關係,但是說不定就是這樣常緊張,才導致我胃腸不好。

長大之後,緊張不會再讓我肚子痛了,但是還是常常"窮緊張"。
明明就是小事,或是根本無法預測會怎樣的事,我還是會心臟跳很快的緊張。
馬太福音六章34節:『不要為明天憂慮,因為明天自有明天的憂慮;一天的難處一天當就夠了。』
人真的是常常想太多的動物,明明就對未來沒有絕對的決定權,想那麼多幹嘛?
舉例來說,有時候今天決定程式要這樣寫,明天老闆一句話就沒有道理的否決你,你又能怎樣?
做好每一天的事就好,讓心臟跳慢一點,也可以活久一點......

2008年9月16日 星期二

頭腦不靈光了

剛剛跟老闆討論事情,腦袋走往錯誤的方向卻完全不知道
還要被人家戳破才知道......真的很糗啊

最近常常這樣呢,遇到要即時思考的情況,都會覺得腦袋很亂
亂轉亂轉找到一個可能的出口之後,就會往那個出口出去,然後思考邏輯就被那個出口合理化了
不知道有沒有人聽的懂,反正就是應該講對的事情,不經思索講成錯的
這種弱點在應徵工作面試的時候,應該會被電得很慘吧Q.Q

2008年8月22日 星期五

小巧可愛的C/C++ library

C/C++不像Java,有齊全的SDK可以用,所以慣用C/C++的人,一定會有一些常用的3rd party libraries
例如XML就會想到libxml,加解密會想到openssl這樣
麻煩的是,這些library都需要先編譯成程式庫才能順利使用
對於常常需要在不同的電腦甚至不同的平台上編譯的程式而言,實在很麻煩
在unix-like的系統上,configure、make、make install三部曲很通用,頂多是花點compilng time
但是在windows上就不是這麼回事了,因為不是每個人都用VC(linux上沒人不用gcc的吧?)
所以library作者可能會用到千奇百怪的build system,光要安裝跟使用這些build system不知道就要多少時間了

以下是一些小巧可愛的library
rapidxml - 只有header file,C++ style
md5 - 很小的C library,就是只算md5而已,不必動用crypto++或是openssl啦
另外就是從其他大的library挖出一小塊想用的來用,例如
apr - Apache Portable Runtime,裡面什麼都有......module的dependency不會太嚴重,還算好拆

2008年8月15日 星期五

Boost 1.36.0 released

http://www.boost.org/users/news/version_1_36_0

好快,跟前一版只差幾個月而已
常用的Thread在1.35.0有個嚴重的bug,雖然馬上被fix了,不過是在1.35.0 release之後
本來想說等1.35.1出來修正這些bug後再來用,沒想到直接跳到1.36.0了= =

2008年5月26日 星期一

Wt

Wt, C++ Web Toolkit

簡單講,就是用C++寫Web AP,就像在用Qt或是GTK一樣。HTML或是啥AJAX的東西,全部都被封裝在這個library裡了。還有,這套library也是建構在Boost之上的。

2008年5月22日 星期四

5/22有感

節錄自老殘遊記
「贓官可恨,人人知之;清官尤可恨,人多不知,蓋贓官自知有病,不敢公然為非;清官則自以為不要錢,何所不可,剛愎自用,小則殺人,大則誤國」

有的人只會怪別人污錢,自以為堂堂正正,人家就該全聽他的。可笑可笑,『
自以為不要錢,何所不可,剛愎自用』,不就是在說他嗎?唉~這些贓官清官搞得一塌糊塗,看來我真的要好好思考未來的出路了嗎?

2008年5月5日 星期一

賣命工作還是享受人生?

最近PTT八卦版正熱烈討論一個新聞標題

[新聞]研究所畢業「三低族」 只想當總機

裡面大概是講到現在的年輕人愈來愈不喜歡辛苦的工作
寧願去當個沒啥前途的總機,也不想為公司加班賣命賺取更多的收入云云
這種討論最近真是愈來愈多,Tech_Job版也有很多人開始將自己的時薪與7-11的工讀生比較看看XD

我呢,我只想到國中時讀過的論語先進篇
子路、曾皙、冉有、公西華侍坐,子曰:「以吾一日長乎爾,毋吾以也。居則曰:﹃不吾知也。﹄如或知爾,則何以哉?」子路率爾而對曰:「千乘之國,攝乎大國 之間,加之以師旅,因之以饑饉,由也為之,比及三年,可使有勇,且知方也。」夫子哂之。「求!爾何如?」對曰:「方六七十,如五六十,求也為之,比及三 年,可使足民,如其禮樂,以俟君子。」「赤!爾何如?」對曰:「非曰能之,願學焉。宗廟之事,如會同,端章甫,願為小相焉。」「點!爾何如?」鼓瑟希,鏗爾,舍瑟而作,對曰:「異乎三子者之撰。」子曰:「何傷乎!亦各言其志也。」曰:「莫春者,春服既成,冠者五六人,童子六七人,浴乎沂,風乎舞雩,詠而歸。」夫子喟然歎曰:「吾與點也!


吾與點也!!

2008年4月23日 星期三

最近很無聊

最近真的很無聊

工作就不用講了,只剩268天,快結束了。最近的工作跟XML有關,但是在現今XML已經普遍到哪裡都看得到,甚至資料交換的方式已經不只有XML可以選擇的情景下,他們還要我提出XML跟memcpy()到底有哪裡不同,還真是非.常.無.聊。三年多了,真是一點長進也沒有。

最喜歡玩的WOW也慢慢淡出了,真的很好玩,但是佔用我太多時間了,所以只好忍痛縮短玩WOW的時間。Blizzard怎麼那麼厲害呢,做出來的遊戲都很好玩,而且不管是高階低階電腦都可以跑,也很少有BUG,這樣的軟體品質到底是怎麼做出來的呢ˊˋ?沒有WOW玩的空檔時間就玩玩Travian,但是這種遊戲就只是點來點去的,點久了也是會無聊......

無聊開的兩個project也變無聊了。第一個PPPoE Killer,功能就是把室友的pppoe撥接連線斷掉,當初是因為老妹的室友狂用foxy塞爆網路,跑來跟我求救,我好不容易想出來寫出這個東西,結果她們直接換光纖大家一起開foxy=口=,辛苦寫好的東西總不能放著不用,所以就把這東西丟到網路上公諸於世......但是我覺得像這種影響到網路使用權利的行為,還是透過溝通來解決比較恰當且有效,所以這個軟體我已經不太想理它了= =。第二個XRelayer,說穿了其實就是一個HTTP PROXY而已,只是我常自己加一些奇怪的功能,所以library dependency愈來愈重......不過是個HTTP PROXY而已,要準備的library那麼多誰會想自己compile啊......而且HTTP PROXY好像也沒啥特別的,我是不是該來接觸一下driver programming,這樣以後比較好找工作呢?

準備考TOEIC......念英文更無聊,買MP3 player是要拿來練英文聽力的,結果現在一開起來都是在聽歌......因為聽英文真的很無聊啊ˊˋ

接的case看起來也只是苦工,蠻無聊的。教會因為人的關係四分五裂,唉~~也變得無聊了,人果然是軟弱的。最近又開始下雨......無聊的氣氛又更添幾分了,無聊到寫不下去了,吃飯了。

2008年3月31日 星期一

2008年3月17日 星期一

CMake

CMake - Cross-Platform Make

它的makefile就是一個txt檔, 可以在不同平台上產生不同的makefile, 例如在VC8裡它就可以產生sln和vcproj, 在linux上就會產生unix-style的makefile (而且還有彩色的進度呈現......cool)

簡單易上手, 很多人在用(KDE也採用), 所以文件資源豐富, 跟我之前在用的Boost Build比起來, CMake真的是比較好找到需要的文件或解答, 所以我跳槽了= ="

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上掃毒的技術, 不就都綁手綁腳的嗎?

2008年2月21日 星期四

Wubi

Wubi - unofficial Ubuntu installer for Windows

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



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;
}


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可是會要人老命的。

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

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++這個iterator的運算在兩個平台上有不同的implementation, gcc是先erase才做++的動作, 因為erase後iterator會指向無法預測的地方, 所以才會產生seg-fault。而VC2003則是先++才把原iterator傳進去, 所以沒有問題。

正確的寫法應該是 vi = v.erase(vi);

2008年1月16日 星期三

破冬感言

破冬是軍中術語, 指的是役期只剩下一年了, 所以我也可以使用破冬這個詞了
感想很多, 當然都是不好的, 我只想講一個對後進比較有用的結論
那就是剛出社會的年輕人不要一開始就綁死自己, 像我一開始就必須要留在同一個地方四年
如果這個地方是好的, 那四年或許還可以持續的學習與成長, 甚至累積財富
如果是不好的, 那真的很浪費, 因為年輕人的時間很寶貴, 這段時間的頭腦還很清楚, 體力也比較充沛
應該要好好的利用, 畢竟人生中這段精華的時間不會再有了

剩下一年的時間, 我打算把還沒學到的部份都學一學看一看, 作一個我可以引以自豪的東西
開會臨時硬湊出來的神奇idea, 居然就成為以後產品的主軸, 讓人覺得不知所措
整天寫super-specialized demo code去搶案子, 真的讓人很沒成就感
人家說工作的動力是來自成就感和金錢, 兩者都沒有的情況下, 真的會覺得很沮喪

聽說接下來這裡又接了很多案子, 但是我可以保證, 這一切一定又只有一個結果 - 失敗
失敗之前的掙扎想必又是一陣腥風血雨, 但是沒關係, 這一切都還有個望得到的盡頭
羅馬書上面寫著『忍耐生老練,老練生盼望』, 聖經上寫的過程居然和我這三年不謀而合
沒錯!! 開始擺老之後接下來就是盼望了, 姆哈哈