Sunday, November 11, 2007

魏如昀 - 許哲珮

在星光大道節目中聽到魏如昀唱許哲珮的"白色婚禮",勾起我好久以前的回憶。 "氣球"是我大二時買的專輯,還記得跟我女朋友那時候剛在一起沒多久>///< 我們兩個人都很喜歡這個專輯裡面的歌曲,很可惜的這位創作型才女, 之後就再也沒有出過唱片,直到六年後的最近才出了第二張"許願盒"。 現在"氣球"還在我老家的房間裡。
白色婚禮 詞/曲:許哲珮 今天特別冷 我想 是冬天來了 翻出一件件毛衣也翻出有你的記憶 記得去年冬季 你說好下個冬季舉行一場白色婚禮 在耶誕前夕 就我和你 兩個人的婚禮也可以很甜蜜 接近零下的天氣 強迫自己穿著短袖上衣 冷到不能呼吸 卻害怕穿上毛衣 又想起了你 發現是冬季 眼淚結了冰 分不清 是太冷還是痛心 Oh來不及 毛衣來不及送洗 我過期的白色婚禮.沙灘不再美麗 情歌不再動 我們不再可以一起 一起 踩著浪花數著腳印 我們過期的約定
還有另外一首很棒的"小木船",讓身為上班族的我聽起來特別有感覺。
小木船 詞/曲:許哲珮 一個很黑的晚上 我們背靠著背講話 你問 未來會是什麼樣 朝九晚五的生活 不敢去想 不敢想 一個很黑的晚上 我們背靠著背想 你問 未來會是什麼樣 我說 只要和你在一起就算天天只吃玉米 我也甘之如飴 想要買一艘船 住在海上日子簡簡單單 什麼都不用想 不要管誰的眼光 說你的領帶沒變化 想要買一艘船 當一個家 用我的用你的夢想漆成牆 不要裡誰的嘴巴 說我的裙子太花

Saturday, November 10, 2007

六分鐘極限Demo結束感言

今天早上,在三四百人的面前,用英文完成了六分鐘極短的demo。 壓力非常的大,之前練到喉嚨都啞了。 通車的時候,就在捷運、公車上面喃喃自語的背稿。 請教美國同事糾正我的用字遣詞。 最後練到完全不用看投影片與影片,就可以很流利的背出全部六分鐘該說的話。 最後上台前,反而不那麼緊張 反覆的練習真的是免除緊張的最好方法。 最後,很高興完成這樣高難度的報告。 講完關鍵概念的時候,我聽到VIP桌那邊傳來了一聲"good"。 聽眾的回應對我來說就是最大的鼓勵。 Arther說我比七月初那次進步多了。 很高興又成長了。 謝謝Arther給我這個機會,讓我成長。 謝謝Ryan,有你的幫忙讓我可以專心present。 謝謝Ron、Fred,陪我練習。 謝謝Bobby、勞倫斯的投影片跟影片。 Thank you very much

Friday, October 19, 2007

Windows via C/C++ 12/12出版

Programming Applications for Microsoft Windows 第五版 改名為Windows via C/C++ 原本正為第四版絕版而苦惱... 現在又高興起來了 YA! "fully updated for Windows Vista, including the latest information about Windows XP" 基本上User mode programming這本必看啊! 看天瓏的討論區,似乎會立即進口。 等不及了!聖誕禮物就這本書吧!!

Wednesday, October 17, 2007

OSR的好文章 : Nt vs. Zw - Clearing Confusion On The Native API

連結 : OSR的好文章 : Nt vs. Zw - Clearing Confusion On The Native API 這篇提到一件很有趣的事情 所有的Native API都有Nt 跟Zw兩種 prefix 再加上ntdll.dll與ntosknl.exe各自都有expose Nt*/Zw* 所以總共有四種可能性 1.User mode呼叫Nt* 2.User mode呼叫Zw* 3.Kernel mode呼叫Nt* 4.Kernel mode呼叫Zw* 如果用debugger下去看的話,會發現1跟2沒有差別。3 的話就是直接呼叫真正的service,也就是1跟2最後會到的地方。 4卻會規規矩矩的把service放到eax,ebx指向parameter然後呼叫KiSystemService,KiSystemService再依照eax的值,查KeServiceDecriptorTable->KiServiceTable的內容 呼叫對應的service,也就是3。 乍看之下這樣的作法,與1跟2在ntdll.dll裡面的作法很像。 差別在於kernel service需要知道呼叫自己的人是來自於user mode或是kernel mode。 如果用1.2.呼叫,就是來自user mode。 4的話則是來自kernel mode。基本上service會信任kernel mode,而懷疑user mode。 這樣微妙的差異會導致某些運算成功或是失敗。 那麼3的previous mode會設定成甚麼呢?答案是user mode。 所以雖然3的呼叫方式看起來overhead比較小,但是會加上諸多限制。 所以比較好的作法是,在user mode使用1跟2。kernel mode使用4。
The moral of this bedtime story is that if you are in User Mode, use whatever variant you think makes your code look pretty. In Kernel Mode, use the ZwXxx routines and get your previous mode set properly, to Kernel Mode.

Sunday, October 7, 2007

煎餃 實戰!

先把鍋燒熱,油燒熱。 排剛從冰箱拿出來的餃子到鍋子。煎一下子之後倒適量"麵粉水",這是讓餃子底酥酥脆脆的關鍵。最後蓋上鍋蓋。聽聲音跟聞香味判斷水是否乾了。乾了的話會有煎餃香,跟油滋滋叫的聲 音。水乾了以後再煎一下下就可以拿起來了。 不需要鍋剷下去翻面,這樣底才會煎的好。基本上餃子是被"蒸"熟的,所以不要太常打開鍋蓋偷看。

Thursday, September 27, 2007

南京出差

同事A的相機,我出現比較多次:

有人在大街上曬棉被跟褲子的
南京的城牆還在 市政府很帥氣
一般人民可以感覺的出來貧富差距很大
市區跟郊區的差距大到吐血
高架橋下滿滿的人在下棋喝茶...

出差的行程很滿,早上報告完。
中午大陸的同事就開車帶我們去中山陵走走。
中山陵在南京市近郊,是個很漂亮的地方。
頂著大太陽一行人爬上中山陵的頂端,往下遠眺就是南京市,景色很棒。
國父的陵寢天花板上浮雕著中華民國國旗,周圍的牆壁刻著建國綱要,保存的很好。
外面的牆上還有許多歷史文件,以及建造中山陵時的黑白歷史照片。
就是一整個很有文化。

中午吃完飯,同事沿著長江路開回去,沿途的一磚一瓦都有故事。
處處都是充滿古代中國風的建築,混合著民國初期的上海風建築。
有明朝宮殿的遺跡、民國南京總統府、通過憲法的人民大會堂、國父辦的小學...etc
路上的楊柳隨著風飄逸,太漂亮了,不愧是六朝古都。

南京的捷運才剛發展兩年。
搭起來就是一整個很有熟悉感 因為跟台北捷運的系統實在是太像了。
用的也是感應幣,不能吃東西之類的。
不過只有一條線,而且也沒有幾站,還沒有說發展的很完全。

去吃了豪邁的新疆菜。
新疆菜的老闆很帥氣,剛進門的時候還會拉著手裝熟(當然是拉長官的手啦)
要結帳的時候人就不見了,怕剛才裝的太熟,客人要折扣 =.=
新疆羊肉一點都不騷,小羊前臂烤的金黃,一人抓一支就啃,很過癮。
還有特殊調味的醬料與烤餅,熱熱的正好吃。
有一位同事不能吃羊,所以烤洋臂我還吃了兩隻 (有沒有國防役吃香喝辣的八卦 囧rz)
邊吃邊聽老闆說一些新疆的趣事,真的很酷。
他說有一次他開車睡著了,醒來以後發現不知道開到那邊,爬到附近的小山丘上遠眺。
發現公路在遠遠的另外一邊,然後再把車開過去。(都沒有撞車...因為沒得撞)
吃完以後來一串新疆葡萄,小小甜甜的沒有子,會讓人越吃越順口。
長官要不到折扣,就要了一包葡萄回去吃 :P

Wednesday, September 12, 2007

自己的時間?

昨天晚上 花了七十分鐘回家 到家開始吃晚餐已經是八點的事情。 吃完以後,開始用微波解凍魚,趕快煮一煮 不然下禮拜要去南京,下下禮拜又回家過中秋,魚放太久不好。 送進去微波大約十分鐘,乘空檔洗個菜,幫我的黑NDSL穿上FFCC果凍套。 穿上之後...hmm...黑底燙金字樣很有感覺,但是如果是白色NDSL會更配。 拿掉了任天堂的腕帶,換上莫古吊飾。有了這個東西晚上回家還會想唸書嗎!!XD 回到廚房,一面煎魚一面燙青菜 (抱歉學長囧rz 我對"炒"真的有天生的障礙) 剛退冰的魚發出噁心的味道,配上融化有重味道的水,趕快丟到鍋子裡開始煎。 ㄜ...忘了抹鹽了...算了... 一面煎個十分鐘,再翻面,魚開始發出香味,表面變成微焦的金黃色 :) 送魚半個檸檬,希望這樣會好吃一點。 最後煎兩個荷包蛋,完成! 看看手上的手錶,九點,剛好小k打電話來要我去接他下班。 晚上不能太晚睡,不然明天上班會沒有精神。 甚麼時候可以抱著我的NDS玩 T_T 公車上好晃...只能背背單字 最近已經背到想吐,暫停了大約一個禮拜。 在上班出門前上廁所的時候玩惡魔城玩了十五分鐘。 結果讓小k晚出門了,因為他們公司最好八點半之前到公司。 我到公司的時候九點半...RD只來了兩個...加上我兩個 囧rz 只是不習慣改變,以前的我在公司吃便當,下班以後有事就看書 沒事就打戰爭機器打到11點 隔天早上看電視看到九點半再出門。 標準阿宅宅。 只是正在習慣改變,改變要付出代價。 只是睡覺前跟上班前,還是會看著我的NDS流口水 :)

Wednesday, September 5, 2007

iWoz來我們公司演講


昨天中午Woz來我們公司演講,因為同樣是工程師,所以大家對這場演講特別感興趣吧,想要瞻仰大師的風采,十二點不到會議室就被擠爆。幾乎大家都來了,不能來的也用線上streaming在座位上看。
剛開始的時候,我想Woz不確定他想說甚麼,他甚至不確定我們能不能聽懂他的英文。所以演講的一開始他說的很慢,直到後來我們對他的笑話有反應,他才放鬆開始越講越快,笑話越來越多。這也顯示了他善解人意的一面。

演講的內容跟他的自傳有很大的重疊,講他發明APPLE 1,APPLE 2的心路歷程與經過。不一樣的是穿插了一些有趣的秘辛。演講中Woz不時提到賈伯斯,他說賈伯斯是一位自我期許很高的人,非常想成為人群中的菁英,像莎士比亞、牛頓之流的人物。所以當賈伯斯拿到大學課表的時候,很失望而且激動的對Woz說:我到大學來是要成為莎士比亞、牛頓的,我要拿諾貝爾獎、我要開大公司作大事,但是你看看大學安排的課表,我要上英文?基礎數學?....。
接下來的事情大家就知道了,賈伯斯就沒有去上課了。他在校園裡與人談論,去旁聽自己想上的課,不論有沒有學分。(小朋友不要學,賈杯杯知道自己在作甚麼)
不過Woz也有透露其實賈伯斯花滿多時間與他的女朋友待在房間裡面(羞)
不知道大家有沒有看過工程計算機?那種可以計算三角函數,有的甚至可以寫計算程式的計算機。第一次看到工程計算機是甚麼感覺呢?我記得我那時候跟我女朋友說:我這輩子如果可以自己設計出一台工程計算機,那我就沒有白活了。我的感動與Woz見到工程計算機的感動相同,他覺得這個東西實在是太酷了,因為要籌錢交學費,Woz甚至休學一年加入了製作工程計算機的公司。(雖然後來Woz大學沒有畢業)
Woz是個工程師,真正的工程師。他很年輕的時候就決定要作一輩子的工程師,而不決晉升管理階級去掌控公司。他喜歡數學、工程,這些東西他認為裡面存有真理,給正確的Input,就會回報正確的Output,而不像歷史或政治,這些是非常主觀的東西。工程師發明洗碗機、電視機、電話、網路、洗衣機...這些東西幫助人們改善日常生活,他覺得工程師是世界上最Nice的人(說到這裡全場鼓掌XD)
希望大家看完他的自傳以後,也可以被他的"工程師之心"給感動。

最後提問的時候,有提到Woz下一個感興趣的東西是甚麼。Woz回答是"機器人",可以幫他泡咖啡的機器人、可以幫他洗車的機器人。所以小紅,如果你看到這篇,恭喜你,英雄所見略同。希望你們可以帶來下一個科技革命。
Woz是非常害羞但是體貼、有愛心的人,像當年他就辦了用電話聽笑話的服務,還買了笑話大全親自上陣去講笑話給打進來的聽眾。來到我們公司一定要問一下他對Virus的看法。(Woz是個非常gentle的人,他絕對絕對不會說pccillin suck之類的話。)不過他說"我從來沒有裝過防火牆,因為我都用蘋果電腦。"(恩,標準蘋果人的回答)
依照Woz的看法,發Spam的人非常可惡,應該要立法制裁。因為在美國你可以聲明家裡的郵筒不想收到信,郵差就不會把信塞到你的郵筒。個人的email雖然是電子化的東西,但是也應該要受到相同的保護。
有人問Woz最喜歡的玩具是甚麼?Woz說 恩,我想應該是我的GameBoy.... XD
最後Woz勉勵我們把人性帶入科技。他說"想像你拿著一塊鵝卵石,光滑又稱手、恰盈一握...那就應該是滑鼠在人們手中的感覺"

Monday, August 20, 2007

情人節晚餐 自製小批薩

披薩的底,食譜上建議用蔥油餅皮(我們用蛋餅皮 有一點太薄) 餅皮塗上一層 用電鍋蒸好的馬鈴薯泥 厚薄可以依照個人喜歡 我來塗的話一定是厚的跟牆一樣吧=.= 接著灑上想吃的原料 我們有加蕃茄、洋蔥、鳳梨、火腿、肉醬 最後均勻灑上起司絲,沒有的話把起司片撕成絲也可以。 送進烤箱200度烤十分鐘 烤到起司融化就口以了!! 好棒的小k~

Tuesday, July 17, 2007

第一次煮菜(補圖)

第一個自己準備的便當。
其實不作菜的話,時間也是拿去上網打電動花掉了。還不如拿來學習作菜燒飯,自我成長。

第一次炸東西,逃不過焦掉的命運 囧rz


第一次自己煮的晚餐
讓大家見笑了,都是些很簡單的東西。
新手上路ㄎㄎ

Friday, July 13, 2007

星期四、五便當菜色

昨天太忙了,沒有時間寫。 昨天的便當菜有小k煮的花耶菜 地瓜飯,一片火腿跟一片起司,然後飯上面加上海苔醬 蒸便當的時候起司跟海苔醬就會黏在一起,還滿好吃的 今天的便當有牛肉,不過吃起來很像排骨肉@_@ 還有小k煮的萵苣,再配上地瓜飯 家裡面昨天晚上有煮玉米濃湯 其實只是買個康寶濃湯加個蛋而已 最近在公司裡比較忙,但是還是堅持三餐都是我們自己弄 像昨天晚上九點才到家,小k更晚。 自己弄的成就感真的不錯 對於煮飯也覺得不是那麼困難的事情了

Wednesday, July 11, 2007

今日便當菜色

今天是剩菜剩飯大作戰 1.剩飯作的蛋炒飯 2.里肌肉排 這次應該熟了... 3.剩下來的香腸 4.最後的高麗菜 昨天去了家樂福買了牛肉跟蕃茄晚上來挑戰牛肉蕃茄湯ㄎㄎ

Tuesday, July 10, 2007

今日便當菜色

1.美奶滋炒蛋煎香腸 晚餐的時候已經吃了一半 甜甜的好吃 蛋打的太少 所以主角變成了香腸 2.炒高麗菜 用煎香腸的美奶滋炒的 但是口味上沒有比較特別 3.蕃茄蛋炒飯 前一天的剩飯 打個蛋配上蕃茄醬丟到鍋裡炒 吃起來跟外面賣的一樣不好吃XD 4.雞塊 第一次油炸東西 果然逃不掉炸焦雞塊的命運 不過還好裡面是熟的

Monday, July 9, 2007

中天中午的便當菜色

1.里肌肉排 用鹽與醬油醃過 再煎十分鐘 我也不知道熟了沒有 2.炒蛋 原本應該是荷包蛋的 翻面失敗就變成炒蛋了 3.炒高麗菜 一陣手忙腳亂之下作出來的 但是不知道為甚麼顏色有點深@_@ 4.地瓜飯 跟阿公學的 地瓜去皮切塊 與米飯一起煮

Friday, July 6, 2007

抓Memory Leak的好工具 VLD (限Visual Stdio)

http://www.codeproject.com/tools/visualleakdetector.asp#build 他會去hook new/delete檢查memory leak的情況 用的時候不用寫任何的code 只要include他的header filestatic link 他的lib與DLL 他會自動生成一個global的object 在constructor的時候去hook memory operationdestructor的時候結算 然後產生的report可以show 在debuger上或是dump到file裡面 下載下來以後會有一個安裝程式會去寫register(老奸!) HKEY_LOCAL_MACHINE\Visual Leak Detector\底下記載default的.ini檔案的位置 這個vld.ini可以改很多設定 包括dump的file name 所以這個default的.ini位置要先處理一下 看是要改還是要砍 如果要用在多個project上,我是建議砍了它 default會去working directory找這個檔案

Wednesday, July 4, 2007

剛上班半年,最近好忙。

最近比較忙,所以積了好一些文章存貨在BBS上面的個人版。 6/25跟7/4兩場英文的presentation,花了好多時間準備。 剛好公司的project正要邁入重要的stage,很多bug要解,很多email要回。 又恰巧要搬到內湖的新家,要打掃張羅新的小窩。 好多事情撞在一起,很忙,但是很充實,學到很多東西。 對了,西湖國中附近的青田家很棒。 不是甚麼高級的店,東西簡單價格也便宜。 但是店裡面乾淨整潔,餐點也非常的好吃。 我最喜歡大碗的雞肉絲飯,再配一盤炒空心菜跟炸豆腐。 想到就餓了.... 不過不可以常常吃,因為新家有廚房,該是要學習下廚的時候了:P

Friday, May 25, 2007

devenv.exe佔據太多CPU % ?有可能是IntelliSense搞的鬼

最近遇到一個問題,用VS2005開啟某些solution,devenv.exe就吃掉了50%的CPU usage。 而且並沒有要吐出來的意思 囧rz 使用Google之後才發現IntelliSense有一個Bug。 首先,甚麼是IntelliSense? 這個東西就是在VS寫程式的時候,譬如打一個變數的名字打到一半,就會跳出一個box, 裡面包含幾個已經宣告過的變數,讓你選你想使用的變數是哪一個。 這裡(連結)是IntelliSense在Wiki上面的解釋。 這裡(連結)是MSDN的解釋。 這篇文章(連結)提到IntelliSense一個很有意思的問題。 程式裡有時候會有無限循環的時候, 譬如在釐清父類別關係時,如果兩個class互相繼承,就會產生一個無限循環。 絕大多數的情況,VS2005的compiler並不會被影響,它使用了一些技術來克服這個情況。 (不然就跳出error叫programmer改:P) 但是為了提供使用者short cut而去Scan code的IntelliSense卻會落入無限循環之中。 因為IntelliSense的確會因為某些情況 (也許是連結上面提到的例子,也許是別的)落入無限循環之中, 間接的就造成devenv.exe吃掉很多CPU。

Monday, April 30, 2007

海芋田


拍的不是很好,加上下雨,就是一整個慘。

第二張左上角黑黑的是雨傘XD

Sunday, April 29, 2007

陽明山採海芋

之前公司有一位大陸同胞來台灣出差,剛好坐在我們那個block。 有一次聽到他與友人閒聊: 友:週末去那邊玩? 同胞:上陽明山,走的腳好酸,有看到好大朵的牡丹! 友:啊,那不是牡丹,是"海芋"。 同胞:是芋頭啊?原來芋頭花可以開那麼大。 友&我: .............................(當然這是一場誤會) 最近是海芋季的最後幾天,昨天便和小花花兩個人衝上陽明山看海芋。 中午十一點半在七張坐捷運,先到劍潭站的士林夜市吃了午餐。 在士林夜市用餐實在不是很愉快的經驗,我們在店家的眼中就好像活動提款機 對待提款機需要甚麼態度呢?提款前極為飢渴、提款中極為不耐、提款後急速離開。 小花花買了一個泡芙想嚐嚐,餡少也就算了,還留著冷凍的僵硬感,整體極為粗糙。 也許士林夜市還是有好店家吧,當時是中午,有開的店家不算多。 不過我對士林夜市的好感已經降到了冰點。 吃飽午餐以後在捷運站搭紅五公車,就一路上陽明山公車總站了。 到山上以後,太陽還有露臉,天氣算是很涼爽很不錯。 因為要看海芋要到竹子湖,那是在更裡面的地方,所以還要轉搭108公車。 108公車是小巴士,車上悶悶的,所以上車後不久我就在座位上閉幕養神。 想不到一到竹子湖,竟然起大霧,而且下著大雨! 天啊,差個一兩公里路天氣差這麼多!真的是來到了山裡面。 下車之後就開始走路,由小花花帶路,目標是海芋田! 這時候的路邊已經開始看的到農人擺出來,一束束的海芋待售。 朝山裡走著約二十分鐘的路程,便看到滿山遍野,又大又白的海芋!! 這裡的海芋都是私人栽種,不過開放遊客下田採花。 各農家計算費用的方式不同,不過比花店的計算可以說便宜的很多很多。 我們挑了一個田便開始採花,因為我是第一次採,也不知道要用甚麼標準去衡量 要不要採一朵花,所以一進田便在第一朵花前站穩馬步準備採花XD (大哥,你是要採一整排的喔!) 後來經過與小花花的討論: 1.採還沒開很大的,回家以後可以活比較久。 2.花瓣白潔沒有明顯瑕疵。 其實田裡面的海芋算是水準滿高的,上述的標準大部分都可以符合, 所以我們就隨機挑選受害者啦! 拔海芋完全不用剪刀,是用雙手用力一拔!Po的一聲海芋就入手了。非常有快感... (手邊沒有傳輸線,晚一點補上海芋田的相片。) 採完海芋循原路去搭公車,天啊小巴士的擁擠與氣味真的不敢領教。 而且聽說天氣好的話, 會有滿山滿谷的人來採海芋。那我以後都要挑天氣不好的時候來... 坐著紅五下山,心血來潮的想去吃士林捷運站旁,中正路上面的田中家Tanaka。 這件店...可以說是複合式餐飲吧,從甜點到簡餐都賣,但是我肯定他的泡芙非常好吃。 餡可以說是"爆"出來的程度,多到泡芙嫩皮必須劃出一大道缺口,驕傲的展示可口的內餡。 泡芙皮恰如其份的扮演配角,徜徉在滿口的餡料時,泡芙皮香脆的給人驚奇,卻又不逾越 配角的本分,可以說是非常棒的組合。 雖然只是玩了一個下午,但是感覺非常的充實有趣。 (小學生日記的結尾....囧rz)

Saturday, March 31, 2007

About digital signature

當我們用API把digital signature抓出來之後,怎樣證明這個檔案真的由此issuer所發行? 通常為了保證這個檔案真的是由issuer所發出,會請第三者保證這個issuer無誤。 但是怎麼確定這個第三者是公正的?那就會請到第三者的第三者...然後再請第三者的第三者第三者.... 如此循環下去,稱為Certificate chain,最後一定會遇到一個root,就稱為root certificate。 這樣的作法會遇到一個問題,那就是有可能certification被revoke了。 所以再使用API作驗證的時候,通常會作 revokation checking。 API驗證的作法可以參考: http://msdn2.microsoft.com/en-us/library/aa388208.aspx 另外,Platform SDK也有tool可以作驗證,不想寫驗證程式的話或許可以利用(?!) http://msdn2.microsoft.com/en-us/library/aa387764.aspx 這個工具也可以拿來sign程式,只不過要先拿到certificate就是了... 另外要確定一個檔案是否安全的方法就是透過Windows Catalog Database Windows記錄了通過微軟認證的安全file或是driver,並且把它們儲存在catalog database。 所以經由catalog database我們也可以得知一個程式是否可以被trust。 只是我覺得這個 catalog database似乎永遠太小....要hit還滿難的.... 要使用catalog database可以參考CryptCAT* API family. 流程就是先算檔案的hash value,然後依照此hash value找尋catalog file。 只要找到catalog file,就可以獲得許多的資訊。

Sunday, February 25, 2007

在BBS上看到大二時寫的舊文

五年前的文章,真的很熱血。 作者: fruitfox (rock,baby !) 站內: P-fruitfox標題: [轉錄][通告] 給大家的一封信時間: 2005/08/04 Thu 15:11:36 ※ 本文轉錄自 [fruitfox] 信箱 作者: fruitfox ()標題: [通告] 給大家的一封信時間: Thu Jun 6 00:35:19 2002 ※ [通告] 共 3 人收件※ KETU BraveHeart mars93--------------------------------------------------------------------------- 恩,那就單刀直入吧 各位覺得這次遊戲設計比賽能挑贏學長那一隊的機率是多少?? 我自己估了一下 以目前的情勢來看 是沒有小於萬分之一 不過也沒有大於千分之一啦 以目前的實力,要贏過學長是一件機率很小的事情,我是了然於胸的 更何況,我們是第93隊,強敵環伺,高手不知凡幾 既然如此,為甚麼我還邀各位來送死? 我想知道 要是我整個暑假投入一件工作 半年之後 我可以交出怎樣的成績單 因為我不想要一個 每天睡到日上三竿 手握遙控器換百台的日子 因為我想要嘗試長時間 沒日沒夜的吸收 以及付出 最重要的是 因為我想知道 我們大家齊力 可以走多遠 想要知道這些事情 是要有決心以及覺悟的 各位 準備好了嗎 ? -- "And most imporant,because you are alive." --※ Origin: 成功大學資訊工程學系[醉資心BBS]  ◆ From: 140.116.142.47 ⊕ Modify: fruitfox

Friday, February 9, 2007

Unicode使用123(續)

因為上官大大的發問,我一時好奇就做了幾個實驗。 因為想說的有點多,所以另外開一篇文章。 關於使用"Unicode"中文,就用_T("這是中文")。 下面是我的實驗心得 (under Windows XP SP2, Visual Stdio 2005) 1.使用printf 這是一個很詭異的function 如果把string轉換成multibyte,printf不能正常印出 但是!!如果直接餵中文給他吃,卻可以正常的印出。 推測是因為呢 _T把bit order給重排了 而printf裡面的運作是以char為單位 所以呢...造成了這樣的現象 如果說用命令列引數傳給printf印也是正常印出 我懷疑在這過程中我給的中文引數被動了手腳... 恩恩 以上純屬推測XD 2.關於wprintf 原來C裡面的multibyte不一定是Unicode,有可能是任何的編碼方式 如果直接餵他吃multibyte的中文...也是不行印出來 但是如果先呼叫setlocale(LC_ALL,"chs"); 就可以讓wprintf知道要印出來的是中文,就可以了。 MSDN上面關於setlocale的資訊:Use the setlocale function to set, change, or query some or all of the current program locale information specified by locale and category. 3.關於_tprintf printf與wprintf的組合 4.關於WriteConsole Windows NT之後使用的是Unicode編碼 其API也對Unicode有良好支援 如果要輸出純Unicode String 這裡是一個例子 TCHAR CHString[100] = _T("這是中文!\n"); DWORD ws; WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), CHString, wcslen(CHString), &ws, NULL); 如果有define unicode的話,就會呼叫WriteConsoleW,不然的話就會呼叫WriteConsoleA 來處理ASCII。 5.心得 C lib支援multibyte的編碼,但不一定是Unicode。 使用setlocale(LC_ALL,"chs");設定編碼方式 可以讓multibyte的C function印出中文 也就是說要寫general的程式 _tprintf可以辦的到 但是要先setlocale 但是! 如果需要完整Unicode的支援,最好使用Windows所提供的API。 而且Windows API大都實做成general的方式 會看處理的字串是Unicode或是ASCII作對應的轉換 所以guidline要加上一條...Windows底下請愛用Windows API 如果很在意可攜性,那麼進一步研究C lib 的multibyte是必要的... (在下目前是Windows guy 既然NT與CE都support Unicode...就讓我偷懶一下吧:P ) reference: http://blog.vckbase.com/bruceteen/archive/2005/11/15/14924.aspx http://www.cppblog.com/sandy/archive/2006/06/21/8779.html http://blog.csdn.net/imwkj/archive/2007/01/23/1490647.aspx

Thursday, February 8, 2007

Unicode使用123

記得碩一的時候為了處理中文路徑就已經survey過了 但是年代久遠又忘光了,這次就做個筆記吧! (from Windows System Programming 3th) Windows NT之後內部的系統都是用unicode在作處理(豆知識) NTFS的file name與file path都是unicode編碼 在Windows 底下如果要寫可以同時處理Unicode(UTF-16)與ASCII(8-bits)字串的程式, 以下有 幾條guideline可以follow: 1.使用TCHAR、LPTSTR以及LPCTSTR 我們來看一下TCHAR的定義: #ifdef UNICODE #define TCHAR WCHAR #else #define TCHAR CHAR #endif 很棒吧! LPTSTR則是: #ifdef UNICODE typedef LPWSTR LPTSTR; #else typedef LPSTR LPTSTR; #endif LPCTSTR: #ifdef UNICODE typedef LPCWSTR LPCTSTR; #else typedef LPCSTR LPCTSTR; #endif 簡單的說,上面的三個type會依照程式的define,在Unicode或ASCII之間變換 2.如果要使用Unicode,在所有的module中定義#define UNICODE 以及 #define _UNICODE。前者控制windows function,後者控制C library。 這兩個定義要下在windows.h之前。如果要處理的是ASCII的話,就不需要define。 3.用sizeof(TCHAR)幫你計算buffer size 4.使用tchar.h中的general C library function,如: _fgettc, _itot (for itoa), _stprintf (for sprintf), _tstcpy (for strcpy), _ttoi, _totupper, _totlower,_tprintf. "_"代表的意義是這些function由Microsoft C所提供,這些function在其他的系統上 應該是以不同的名字出現。 5.include tchar.h after windows.h,to get required definitions for text macros and generic C library functions 6.用下面的格式表示constant string: L"this is string" _T("this is string") 前者由ANSI C所提供,後者由Microsoft C compiler所支援。 書中還有提到幾個好玩的事情 1.String comparisons can use lstrcmp and lstrcmpi rather than the generic _tcscmp and _tcscmpi to account for the specific language and region, or locale, at run time and also to perform word rather than string comparisons.String comparisons simply compare the numerical values of the characters, whereas word comparisons consider locale-specific word order. 有意思,下次來用看看會得到怎樣的結果。 2.程式的entry point可以用_tmain來取代,會依照定義變成main或wmain。 #include #include int _tmain (int argc, LPTSTR argv []) { ... } 這樣就可以吃ASCII或Unicode的命令列引數了 3.有一些程式會依照define在底層做變形,例如CreateFile,當定義Unicode時會呼叫 CreateFileW,不然就會呼叫CreateFileA。在Debug資訊裡面就會看到這些我們沒有呼叫的 function。(奇怪,我明明呼叫的是CreateFile,怎麼有CreateFileA??)