2010年5月2日 星期日

[貓] C++ 五歲了


C++五歲了

有時候時間這東西很奇妙,不知不覺中,這隻貓女兒已經陪我度過了這麼多年

不管是大學、研究所、當兵夏令營到現在的上班族,每段日子都有C++的蹤跡

今天趁她剛過五歲,來回顧一下C++的成長史:


2005年6月12號,感謝好心的貓中途讓我領養了她。有圖為證,那時候才兩個月左右
真的是好小一隻。


2005/07,似乎長大了一丁點,看起來還是很瘦弱可憐的樣子。


2005/08,毛色比較亮麗了,眼神楚楚可憐是她的大絕招,常常用此逃過處罰XD


2005/11,肚子開始變胖了XD

2006 照片消失了 >_<


2007/09,跟我住到新竹去,看起來很大隻其實都被獸醫說瘦。


偶爾要假裝自己是蛇


偶爾也要幫某運動廠商宣傳


喜歡霸佔電腦不給我用


2009,又跟我搬回台北了,而且他適應新環境都很快,真是一隻好貓。


現在最常玩手不見了的遊戲(因為大部分時間都在睡覺orz)


西家家 生日快樂~

要乖乖喔~

2010年2月26日 星期五

[C++][STL] delete item in loop

STL 好用是好用,小地方還是要注意,不然很容易爆炸又難DEBUG

1. Use List:
list中erase會回傳iterator,所以要erase(it)
list<int> tmp;
for(list::iterator it = tmp.begin() ; it != tmp.end() ; /*empty*/ )
{
        if( something )
                it = tmp.erase(it);
        else
                it++;
}

2. Use Map:
map中erase竟然又不一樣,回傳void,所以需要erase(it++)
map<int,int> tmp;
for(map::iterator it = tmp.begin() ; it != tmp.end() ; /*empty*/ )
{
        if( something )
                tmp.erase(it++);
        else
                it++;
}

其實應該要看他內部為啥實做成兩種模式的
但是STL聖經一直供在桌上懶得看XD
有空再來研究

[Blog] 在blogger貼漂亮的程式碼

換身為一個宅宅工程師,在BLOG上貼漂亮的程式碼也是合情合理的(推眼鏡)

上網可以搜尋到一缸子的blogger解法
很囧的是不知道為啥很多人貼的解法我都弄不起來
經過多次嘗試失敗
一怒之下直接去看人家的原始網頁
然後就成功貼出程式碼了XD

我是範例程式碼
int main()
{
   printf("hello world");
   return 0;
}
我是範例程式碼

主要步驟記錄一下:
1. Blogger後台選擇〔版面配置〕→〔修改HTML〕→勾選〔展開小裝置範本〕
2. 把以下這段CSS貼到裡面,貼哪裡不知道可以看網頁原始碼
.post pre {
background: #F0F0F0 url(http://klcintw.images.googlepages.com/Code_BG.gif) repeat-y scroll left top;
border: 1px solid #CCCCCC;
color: #333333;
display: block;
font-family: Courier New;
font-size: 10pt;
line-height: 120%;
margin: 5px 0 0 20px;
max-height: 200px;
overflow: auto;
padding: 10px 10px 10px 21px;
width: 90%;
}
.CODE  {
display: block; /* fixes a strange ie margin bug */
font-family: Courier New;
font-size: 8pt;
overflow:auto;
background: #f0f0f0 url(http://klcintw.images.googlepages.com/Code_BG.gif) l\
eft top repeat-y;
border: 1px solid #ccc;
padding: 10px 10px 10px 21px;
max-height:200px;
height:200px; // for IE6
line-height: 1.2em;
}

3. 麻煩的大於小於轉換:
HTML ENCODE網站去轉換

4. 在<pre class="code">和</pre>之間插入你的程式碼

不過blogger貼程式碼還是不太friendly阿~_~||

參考文章:
高登工作室
Forgot 同花打不打得過俘虜浩司
SeekING Bernie

2010年2月3日 星期三

[C++][STL] map如何使用一個struct當作key

拿來當key的struct,裡面有兩個variables:
struct S
{
        int x;
        int y;
};
由於map在insert時就會用KEY做排序,所以必須自己寫一個比較函式:
struct CmpFunction
{
        bool operator() ( const struct S s1, const struct S s2 ) const
        {
                return ( (s1.x < s2.x) || ((s1.x == s2.x) && (s1.y < s2.y)) );
        }
};
接下來就可以直接定義map的typedef,比較簡單好用:
typedef std::map<struct S, int value , CmpFunction> map_t;
宣告:
map_t mymap;
如此一來就可以用find去快速搜尋:
struct S mystruct;
map_t::iterator iter = mymap.find( mystruct );
if( iter == mymap.end() ) // not found
else // found

2010年2月1日 星期一

那年,我們約館麥


最近在捷運上或公車上常聽到學生模樣的人聊天
「ㄟ 等下約北車喔!」 「好,北車見」
北車北車,短暫的疑惑直到他們陸續在台北車站下車我才啞然失笑
原來北車就是台北車站的簡稱阿,這群小鬼真是...
「台北車站就台北車站,什麼北車南車」
我一邊踏出車廂一邊暗自搖頭
走出擁擠的人潮,卻不經意地抬頭看見赫哲旁邊鮮黃色的大M招牌
原來,八、九年前的我們,

一樣的嘻嘻哈哈跨出車廂,
一樣的打著手機呼朋引伴,
可能也一樣的有一位老頭在旁邊嗤之以鼻:
「館前路麥當勞就館前路麥當勞,什麼館賣館買」


那年,我們約館麥


--獻給所有曾經約在館麥見面的高中好友們

2010年1月29日 星期五

茶壺裡的風暴

"茶壺裡的風暴"
常常在新聞上看到這個詞
可是其實不太了解它的意思
上網查了一下發現很有趣
這詞是來自英文諺語 但偉大的中文卻有另一種解釋:

英文:
a tempest in a teapot
a storm in a teacup
因為在茶壺裡發生的風暴其實也沒啥大不了的
所以是表示小題大作的意思

中文:
雖然也可以直接借用小題大作之原意
但是一般常用在內部鬥爭的現象
例如: 大家族成員爭奪家產 掀起茶壺裡的風暴
很明顯的我們嗜血的媒體應該會常用到這個意思XD

參考資料:

2010年1月28日 星期四

[Android] How to send key event by adb command

Reference: Link
使用Adb shell command直接送key event給Android
adb shell input keyevent 7    # for key '0'
adb shell input keyevent 8    # for key '1'
adb shell input keyevent 29    # for key 'A'
adb shell input keyevent 54    # for key 'B'
也可以直接送STRING進去:
adb shell input text "ANDROID" 
Support的key code:
0 -->  "KEYCODE_UNKNOWN"
1 -->  "KEYCODE_MENU"
2 -->  "KEYCODE_SOFT_RIGHT"
3 -->  "KEYCODE_HOME"
4 -->  "KEYCODE_BACK"
5 -->  "KEYCODE_CALL" 
6 -->  "KEYCODE_ENDCALL" 
7 -->  "KEYCODE_0" 
8 -->  "KEYCODE_1" 
9 -->  "KEYCODE_2" 
10 -->  "KEYCODE_3"
11 -->  "KEYCODE_4" 
12 -->  "KEYCODE_5" 
13 -->  "KEYCODE_6" 
14 -->  "KEYCODE_7" 
15 -->  "KEYCODE_8" 
16 -->  "KEYCODE_9" 
17 -->  "KEYCODE_STAR" 
18 -->  "KEYCODE_POUND" 
19 -->  "KEYCODE_DPAD_UP" 
20 -->  "KEYCODE_DPAD_DOWN" 
21 -->  "KEYCODE_DPAD_LEFT" 
22 -->  "KEYCODE_DPAD_RIGHT"
23 -->  "KEYCODE_DPAD_CENTER" 
24 -->  "KEYCODE_VOLUME_UP" 
25 -->  "KEYCODE_VOLUME_DOWN" 
26 -->  "KEYCODE_POWER" 
27 -->  "KEYCODE_CAMERA" 
28 -->  "KEYCODE_CLEAR" 
29 -->  "KEYCODE_A" 
30 -->  "KEYCODE_B" 
31 -->  "KEYCODE_C" 
32 -->  "KEYCODE_D" 
33 -->  "KEYCODE_E" 
34 -->  "KEYCODE_F" 
35 -->  "KEYCODE_G" 
36 -->  "KEYCODE_H" 
37 -->  "KEYCODE_I" 
38 -->  "KEYCODE_J" 
39 -->  "KEYCODE_K" 
40 -->  "KEYCODE_L" 
41 -->  "KEYCODE_M"
42 -->  "KEYCODE_N" 
43 -->  "KEYCODE_O" 
44 -->  "KEYCODE_P" 
45 -->  "KEYCODE_Q" 
46 -->  "KEYCODE_R" 
47 -->  "KEYCODE_S" 
48 -->  "KEYCODE_T" 
49 -->  "KEYCODE_U" 
50 -->  "KEYCODE_V" 
51 -->  "KEYCODE_W" 
52 -->  "KEYCODE_X"
53 -->  "KEYCODE_Y" 
54 -->  "KEYCODE_Z" 
55 -->  "KEYCODE_COMMA" 
56 -->  "KEYCODE_PERIOD"
57 -->  "KEYCODE_ALT_LEFT" 
58 -->  "KEYCODE_ALT_RIGHT" 
59 -->  "KEYCODE_SHIFT_LEFT" 
60 -->  "KEYCODE_SHIFT_RIGHT" 
61 -->  "KEYCODE_TAB" 
62 -->  "KEYCODE_SPACE" 
63 -->  "KEYCODE_SYM" 
64 -->  "KEYCODE_EXPLORER" 
65 -->  "KEYCODE_ENVELOPE" 
66 -->  "KEYCODE_ENTER" 
67 -->  "KEYCODE_DEL" 
68 -->  "KEYCODE_GRAVE" 
69 -->  "KEYCODE_MINUS" 
70 -->  "KEYCODE_EQUALS" 
71 -->  "KEYCODE_LEFT_BRACKET" 
72 -->  "KEYCODE_RIGHT_BRACKET" 
73 -->  "KEYCODE_BACKSLASH" 
74 -->  "KEYCODE_SEMICOLON" 
75 -->  "KEYCODE_APOSTROPHE"
76 -->  "KEYCODE_SLASH" 
77 -->  "KEYCODE_AT" 
78 -->  "KEYCODE_NUM" 
79 -->  "KEYCODE_HEADSETHOOK" 
80 -->  "KEYCODE_FOCUS"
81 -->  "KEYCODE_PLUS"
82 -->  "KEYCODE_MENU"
83 -->  "KEYCODE_NOTIFICATION"
84 -->  "KEYCODE_SEARCH" 
85 -->  "TAG_LAST_KEYCODE"