2007年10月22日 星期一

STL map的insert與Java Hashtable的put

當Java的Hashtable已經含有(K,V)這個pair, 而我們又put(K, Vn)的時候
Vn會取代掉V, 並且把V return回來, 但是在STL map的insert卻不是這樣......

STL map的insert並不會取代舊的, 只會傳回pair<iterator, bool>這樣的pair object
然後在boolean value那邊設為false, iterator則指向那個已經存在的value, 所以insert失敗後要接下去用iterator來取代舊的

寫Java的人轉到STL應該都會踩過這個陷阱吧, 如果不好好讀文件的話......

2007年10月12日 星期五

Avoiding Development Disasters

Avoiding Development Disasters

文中那張The Code to Ruin流程圖還蠻有趣的
我目前的情況好像在第一個state就走向failure了耶......囧

2007年9月30日 星期日

一個多月沒寫blog了......

最近真的好累, 是精神上的累
現實和原則一直在我腦中衝撞, 我還太嫩, 不能百分百確定誰是對的

剩一年又三個月, 白痴才會回去當兵吧
只是好心情一直被搞砸, 看來我的EQ還需要磨練, 剩下的時間就來練到完全不動凡心的境界吧
整天往壞處想不只對現況沒有好處, 還會影響到身邊的人, 這是我所不願意的
我也常常禱告, 總會出自人類的私心, 但是,


阿爸!父啊!在你凡事都能;求你將這杯撤去。然而,不要從我的意思,只要從你的意思。

馬可福音 14:36

2007年8月24日 星期五

MMovie

MMovie = MMO + Movie, 多人網路線上遊戲的動畫作成電影, 這次VOIG公司要推出以WOW的遊戲為主題的電影耶。以WOW的遊戲畫面來做電影的手法還蠻常見的, 我最印象深刻的就是那一部號稱史詩的電影和南方四劍客......(Mom!! Bathroom!! Bathroom!!)

這次VOIG推出兩分多鐘的預告片, 而且不久以後將推出正式的電影......要進電影院看的=.=。我很好奇會有幾個人去看啦......不過全世界WOW的玩家這麼多, 票房說不定還不錯哩, 不過我是不會花錢跑去看的啦, 哈哈哈, 我只要玩就好了, 電影嘛......總是有機會可以看到的嘛......

以下為預告片內容



KUSO點詳解, 轉載自PTT WOW版

0:02-鬥陣俱樂部
0:21-畢業生
0:30-星際大戰
0:36-古墓奇兵
0:41-拿破崙炸藥
0:48-公主新娘
0:52-魔戒
0:58-鐵達尼號
1:06-魔鬼終結者(原文最後是要摩托車)
1:20-三百壯士
1:29-法櫃奇兵
1:36-當哈利遇見了莎莉
1:58-綠野仙蹤
2:03-ID4(但是ID4有兩個人,而且是男的,相當不確定)

2007年8月10日 星期五

牛獅大戰


感想:團結力量大......

2007年8月9日 星期四

Boost lexical_cast

http://www.boost.org/libs/conversion/lexical_cast.htm

屬於Boost Conversion Library下的一支,很平常的功能,卻有莫大的幫助。

我想很多C++ programmer遇到要把一個字串轉成整數的情況時,還是會不由自主的使用C時代的atoi。但是atoi有一個很嚴重的問題,就是轉換失敗時一律回傳0,這樣就不知道到底真的是0還是轉換失敗了。

C++的IOstream本身就提供了很好用的類別 - stringstream。

stringstream s("12345");
int d;
s >> d;

可以呼叫fail()來測試轉換是否成功,比atoi好了一點,但是卻比較囉唆,為了轉換一個字串還要在stack裡多產生一個stringstream的object,讓人有點擔心效率。於是,Boost lexical_cast就誕生了:

int d = boost::lexical_cast<int>("12345");

很簡潔的寫法,轉換錯誤的話會丟出bad_lexical_cast這個exception。

那整數要轉成string呢?古早時代有人會用itoa這種非標準的函式來做,現在大部分的programmer可能都懂得要用sprintf這個比較general的function來做:

char s[32];
int d = 12345;
sprintf(s, "%d", d);

而lexical_cast的作法還是一樣:

int d = 12345;
string s = boost::lexical_cast<string>(d);


所以,把atoi丟掉吧,C++時代不用再遷就C的老舊函式了。

2007年8月1日 星期三

Distributed Web Crawler - Grub

http://www.grub.org/

這東西很妙...類似SETI@home那樣,電腦閒閒沒事做的人可以下載Grub的client回家裝,這樣就可以幫忙去"爬"網路上的網頁,然後做一些index的處理,再送回Grub的資料庫存起來。理論上這是集眾人之力來索引整個Internet的終極方法。

今天有一個新聞,Wikia的創辦人Jimmy Wales買下了Grub,打算用來挑戰Google或Yahoo這些強大的search engine,靠的就是Grub背後這個資料庫。

不過,這樣不就變成大家幫他們找資料,錢都是他們賺嗎?我自己也寫過web crawler,最棘手的問題就是頻寬不夠或是機器不夠......,Grub這一招讓這些難題都迎刃而解。當然也有很多人質疑說為什麼他們可以拿大家爬來的資料來賺錢,Grub是說open source不等於免費啦,還有可以優先爬自己的網站增加自己網站的曝光率等等,當然他們也有提供interface可以讓任何人使用這個資料庫啦......不過資料庫還是在他們那裡就是了。

Grub這樣的賺錢手法我個人認為還好,有名大站不也是靠大家貼照片和寫blog來賺錢嗎?Web 2.0時代嘛......內容提供者由以前的網站變成使用者自己,想賺錢的就看誰能夠吸引最多人來提供內容囉。對我來說,我對那個可以索引網頁的interface比較感興趣......