2007年11月5日 星期一

關掉自動播放

最近一堆病毒都是透過隨身碟的自動播放來執行與傳播的,其實微軟搞這個功能真的蠻煩人的,不如直接關掉。

關掉的方法如下:
執行 regedit,並修改 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion
\Policies\Explorer\,把 NoDriveTypeAutoRun 的值改為 ff(16進位)或是 255(10進位),再重開機即可。(可參考下圖)

如果還搞不清楚,或嫌麻煩,可以直接下載 TurnOffAutoRun.reg,執行後再重開機即可。

2007年11月4日 星期日

馬英九並非斯德哥爾摩症患者


今天(2007/11/04)看到一則新聞,謝長廷批評馬英九像得了 "斯德哥爾摩症" 似的,大意是說馬英九最近的一些行為跟本是學民進黨或陳水扁那樣,拿香對拜,例如入聯/返聯、公投、發票報帳等事。
真不知道是哪個豬頭教他講的,這個比喻不倫不類,而且蠢到不行。不但會被反譏說謝長廷自己才是被綁架的人,而且也直接把自己陣營的陳水扁變成是 "綁匪"。總之這個比喻實在爛的離譜,跟本就是把自己的嘴送上去給人打巴掌。

純就選戰策略來說,要指控這種拿香對拜的行為,倒是有個蠻適合套在馬英九身上的例子:慕容復!
慕容復最出名的手法就是 "以彼之道,還施彼身",很多有看過天龍八部的人都知道,這是拿對手的招式打回去的手法。
以慕容復來指控馬英九的好處在於可以有一些有趣的類比:

  • 一個是以彼之道還施彼身,另一個是拿香對拜
  • 一個想當皇帝,另一個想當總統
  • 兩人的外表應該都不錯,雖然前者主要靠武功、謀略,後者就很有靠臉吃飯的味道了
  • 一個發瘋了,另一個....哦,還不知道,這行刪掉!
  • 最有趣的是,一個想復興祖國 "大燕",另一個要...... (振興中國、反獨漸統? 大家自己想吧)

2007年10月23日 星期二

釋夢人 - 三個怪夢及其解析

釋夢人」是一本我去年看過的小說,其實與本文無關,只是借用其名,暫時充當自己的「釋夢人」。
昨天晚上,老婆跟我談了半天關於未來的生涯規劃的事,當然包括工作、發展。夜裡,我一如預期的失眠了,未來該怎麼走的問題其實在這一年來始終困擾著我。

繼續閱讀 ....

2007年9月14日 星期五

我貼的文上了推推王的本日熱門榜首

廢話不多說,有圖有真像:


第一次貼了上榜首的文,特此紀念! 推推王的原始連結在此,原文則是自由時報的報導
總的來說,會這麼熱門有兩個原因:

  1. 王建民
  2. 中天、中時做的太過火,犯了眾怒。
媒體可以無恥至此,簡直是匪夷所思,但其實卻這不是什麼罕見的事,只是因為這次對像是王建民,大家才比較有感覺,其他時候可能大家也不細察,就這樣被偷渡了一堆政治宣傳進了大腦。

2007年7月28日 星期六

依法行政

最近看到一些blog 與討論,讓我對所謂的依法行政有更深一層的了解,而事件的起源是北投纜車(還不是最近被罵到爆的貓空纜車)。
什麼是依法行政? 北投纜車鑽法律漏洞不執行環評就是馬前市長的口頭禪:依法行政!

繼續閱讀 ....

2007年7月24日 星期二

懶叫又來了!

國民黨真是讓人想不透啊,我真的很懷疑他們的文宣是民進黨派去臥底的,而且一臥就是這麼多年。自從 2004 年選舉那場連戰被人笑掉大牙的懶叫頭網站撤了以後,沒想到過了好幾年,輪到馬英九時竟然又搞出令人匪夷所思的台灣九九網站,讓人從壯陽的久久神功一路聯想到瘋狗配
你以為就只有這樣嗎? 不! 懶叫頭沒了,不過懶叫又出來了! 他們又選了一個藍鳥(藍鵲)當 logo! 拜託來點新鮮的啦...

2007年7月22日 星期日

2012 年國民黨的正副總統人選

現在是 2007 年的七月,人人都知道 2008 年總統大選國民黨的正副總統參選人是誰(雖然有些人認為其簡稱有些不雅,念起來像肖告配),而民進黨的總統人選也已確定,副總統人選據說將在中秋節前決定。
但我現在要告訴大家,其實我連 2012 年國民黨會推的人選都知道了!

繼續閱讀 ....

2007年7月19日 星期四

黑心包子? 黑心新聞? 還是黑心政府?

上個星期中國北京爆發黑心包子事件,不肖業者竟然將瓦楞紙煮爛處理後與病死豬肉混合來當包子的內餡,消息一出果然嚇壞了不少人,不少國際媒體也引用這篇報導。
沒想到這兩天案情大逆轉,這件黑心包子的新聞竟然是北京電視台造假的! 原來是黑心新聞,而不是黑心包子啊!

但在這個什麼都能黑心、造假的國度,我不禁懷疑,也許黑心包子並非造假,後者才是造假的! 黑心包子的新聞被不少國際媒體引用,也許北京當局擔心黑心包子引響形像過大,因此乾脆找個替死鬼,宣稱其實跟本沒這回事!

到底真像是什麼? 我不知道,我想也沒人能回答我,畢竟面對這種國家與政府,天曉得什麼才是真的!

2007年7月17日 星期二

在 VC IDE 的 Find/Replace 使用 Regular Expression

最近公司說要儘量把 compiler warnning 減到最少,在清理 warning 的過程中,我發現有一堆 warning 是來自像底下這種 code:

#define PI 3.14159
DSPfract p = PI;

會出現 warning C4305: 'initializing' : truncation from 'double' to 'float'.

繼續閱讀 ....

2007年7月13日 星期五

Blog 搬家

之前決定要從 Yahoo MyBlog 搬回 Blogger 已經快四個月了,中間幾乎沒寫任何東西。今天決定卯起來把之前在 Yahoo 寫的一篇一篇貼來,反正也沒幾篇。花了點時間,終於搬完了,不過只搬跟程式有關的文章,其他廢話就不浪費力氣了。

Visual Studio text editor 的空白與 Tab 變成特殊符號

連續有兩個人問我,關於Visual Studio text editor 的空白與 Tab 變成特殊符號要怎麼改回來。所有的空白都變成一個點,而 Tab 則變成箭頭,看起來很不習慣,就像這樣:

int.main(int.argc,.char**.argv)
{
→if.(.argc.<.2.)
→→return.-1;
→return.0;
}

在 Tools->Options 找了半天卻找不到,後來在 MSDN forume 問人才得到答案,原來是在 Edit-Advanced->View White Space。而它的熱鍵是連按 Ctrl+R, Ctrl+W,讓有些人不小心誤觸才變成這樣的。

參考 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1095029&SiteID=1

註:這篇是從 Yahoo Blog 搬過來的,原發文時間為 2007/01/23 14:26。

2007年7月12日 星期四

Cyclic dependency 造成的 memory leak issue

Cyclic dependency主要來自reference counted物件互相持有對方,導致無法順利將其指向所指向的物件解構。其實只需要一個reference counted物件即可說明此例,只要該物件持有自己即可,接下來以此為例說明。

繼續閱讀 ....

昇級到 Visual Studio 2005 Service Pack 1

雖然暫時還不會昇到 Service Pack 1, 不過還是把這篇存下來,到時候昇級時可以先看看人家的狀況,少碰點麻煩。

http://blogs.msdn.com/heaths/archive/2006/12/16/slipstreaming-visual-studio-2005-service-pack-1.aspx

註:這篇是從 Yahoo Blog 搬過來的,原發文時間為 2007/01/12 17:34。


functor 還是 boost 的好用 (續)

這篇寫 member function 的操作。例:

繼續閱讀 ....

functor 還是 boost 的好用

昨天看到有人貼了幾個 link, 比較 STL、Loki、Boost 的 functor,其中 Boost 的 functor 的評論大概還沒寫,所以沒看到(只有標題)

http://blog.csdn.net/hdqqq/archive/2006/01/25/588348.aspx
http://blog.csdn.net/hdqqq/archive/2006/02/07/593877.aspx

我認為跟本也不用考慮了,Boost 的 functor 以 Boost function + Boost bind 組合,彈性是最強大的。你可以把有 n 個參數的的 function 透過 bind 任意指定其中幾個而成為另一個 boost function(也就是 functor),甚至連順序都可以改變! 底下是一些簡單的範例:

繼續閱讀 ....

為何不要用 #define - 再加一個例子,這次兇手是微軟!

才剛寫完一篇為何不要用 #define 的實例,立刻又碰上另外一個。先來看個 example:

#include <windows.h>
int MyMax = std::numeric_limits ::max( );
一切看來很正常,compile 起來也很正常。但當你加入一行 #include 後,一切就毀了。這次的兇手是微軟,追蹤下去後,發現原因是在 ,有一行(應該說一堆)大家都知道的爛 macro:

#define max(a,b) (((a) > (b)) ? (a) : (b))



繼續閱讀 ....

為何不要用 #define

這兩天在拆 header file dependency 時(本公司的 coupling 情況很嚴重),碰到一個 compile error:

error C2632: 'char' followed by 'char' is illegal



繼續閱讀 ....

const 物件的初始化

昨天(2006/9/25, 這篇是搬過來的舊文) Orson 跟我抱怨,說某人 break build 的責任該算在我頭上,因為上星期我的教學課程叫大家多用 const, 可是某人用了 const 造成 g++ compile 不過.

trace 了一下發現他宣告了一個 const 物件而沒有初始化它,VC(不管VC6或VC8都一樣)卻只吐個 warning C4269 而已(跟我想的不一樣),而 g++ 則是出現 compile error.

今天早上來公司後,想到這件事,就決定查查看 SPEC 怎麼寫的。查了好一陣子,終於找到了:



繼續閱讀 ....

自己做個 ScopeGuard

試了 Loki 的 ScopeGuard 後,我覺得可以用 boost 來做到同樣的功能,就自己練習看看。我覺得 Loki 版的有兩點不太好用:

1. 針對 function 與 member function 需要用不同的呼叫(MakeGuard 與 MakeObjectGuard ).
2. 目前它使用的 functor 只接受到三個參數,不夠方便.

自己用 boost 試做,後來發現可以做的很簡單,不需要搞 ScopeGuard 繼承體系,也不需要用 MakeGuard 與 MakeObjectGuard 這類的 template function 來包裝。
原始碼如下:


繼續閱讀 ....

2007年7月11日 星期三

Incredibuild 在 console 模式 build project 的語法

雖然我通常都用 script 在 build,但有時用別人的電腦沒有現成的 script 就比較麻煩,所以還是把這些語法 blog 起來省的忘掉時還要再看 help(順便給其他同事看,免得常常要用 VC IDE 還境開那個有上百個 project 的 solution 檔).
語法:
BuildConsole <其他參數>
常用參數有:
指定 project 名稱:/prj=project name
(這個參數若不指定則會 build 所有的 project)
指定 configuration /cfg=configuration
Clean project 或 solution:/clean
Rebuild:/rebuild
例:
BuildConsole GpiProxy.sln /cfg="Debug|Win32"
BuildConsole GpiProxy.sln /prj="GpiProxy" /cfg="Debug|Win32"
BuildConsole LibCopp.vcproj /cfg="Debug|Win32"
BuildConsole LibCopp.vcproj /cfg="Debug|Win32" /rebuild

以上的 sln/vcpoj 檔都沒寫路徑,要用的時候記得自己要加上去,或是切到該目錄再輸入命令,像這樣:
BuildConsole D:\usr\P4\Shared\Components\GpiProxy\GpiProxy.sln /prj="GpiProxy" /cfg="Debug|Win32"

若不想用 Incredibuild 而想用 VC 的 console build,其實做法也差不多(Incredibuild 的語法要相容於 VC),只是執行檔從 BuildConsole 改成 DevEnv,詳情請參照 MSDN

關閉 VC 環境下的 assert 視窗

這個之前就提了好幾次了,只是每次跟同事提到時,都要重新找一下要怎麼做,乾脆寫在 blog 算了,blog 超久沒寫東西了。
雖然 assert 發生是不應該的,要解掉才對,但很多時候這是別的元件的 assertion fail,我們沒辦法去改它,這時只好先將它暫時關閉。
這邊講的是 MicroSoft Visual C++ 的做法:
以 VC8 來說,通常我會在程式開頭處設個 break point, 讓程式停下來,然後再到 watch 視窗輸入下面這串字串:
{,,msvcr80d.dll}_CrtSetReportMode(2,2)
成功的話會看到 Value = 4,Type 為 int,像這樣:










如果要把 assert 再打開的話就輸入:
{,,msvcr80d.dll}_CrtSetReportMode(2,6)

_CrtSetReportMode 還有很多其他功能,可以參考這邊

2007年4月18日 星期三

面試沒好好挑人真是惡夢

今天公司著名的天兵J來問我問題,我真的不知道該哭還是該笑。事情是這樣的,他要回傳一個字串,內容是 driver 版本,透過 driver API,他得到了 4 個數字,接下來就不知道該怎麼辦了。一開始我還不確定他的問題就是這個,因為蠢到太另人難以致信。
##CONTINUE##
我:你可以用 sprintf 啊! (不期待他會知道 C++ 的 stringstream 或是非標準的 sprintf_s)
J:啊?
我:那你總用過 printf 吧?
J:嗯....能不能給個 sample code?
我受不了了,不過還是寫給他看:


int a = 123, b = 456, c = 789, d = 135;
char buf[buf_size];
sprintf(buf, "%d.%d.%d.%d", a,b,c,d); // 顯示為 123.456.789.135

此時,J似乎有所領的提出質疑:可是這樣不會超過 char 的上限嗎? (8bit, 0~255, -128~127)

我吐血了,敗給他了! 叫他自己先去看 MSDN,確定會用 printf 再說吧!

天兵J是進公司已經兩年的 software engineer,台大電信所的碩士。要怎麼爛那是個人的事啦,不過幫公司面試這種人進來,是怕公司倒的不夠快嗎?

2007年3月26日 星期一

張貼程式碼

即然要重搞 blog 就要搞的好看一點,之前一直都沒管 css 到底是怎麼用的,所以在 yahoo 的 blog 上寫的 code 看起來會很亂,排版不好. 現在用人家寫 code 專用的 css 應該會比較好了,那麼就用 template partialization 的 code 來個測試吧:
##CONTINUE##


#include <iostream>
using namespace std;

template<typename T>
struct RemoveAllPtr
{
typedef T Type;
};
template<typename T>
struct RemoveAllPtr<T*>
{
typedef typename RemoveAllPtr<T>::Type Type;
};

int main()
{
cout << typeid(double).name() << endl;
cout << typeid(double*).name() << endl;
cout << typeid(double**).name() << endl;

cout << typeid(RemoveAllPtr<double>::Type).name() << endl;
cout << typeid(RemoveAllPtr<double*>::Type).name() << endl;
cout << typeid(RemoveAllPtr<double**>::Type).name() << endl;

return 0;
}


輸出結果呢? 用 VC8 的輸出結果是
double
double *
double * *
double
double
double

用 g++ 4.2.0 的輸出結果則是
d
Pd
PPd
d
d
d

看來 VC8 的 type_info 的 human-readable name 比較 readable 啊 :)

回到 blogger 的懷抱

雖然我的 blog 沒幾篇文章,不過在使用了 yahoo 的 blog 一段時間後,還是覺得 Google 系列的產品好用,所以還是回到 blogger 的懷抱.
##CONTINUE##
之前其實就有用過 blogger, 不過一直沒寫東西,只是偶爾當雜記本。後來為了寫些東西要公開給大家看,就覺得原來的一些雜記太亂,就跑去 yahoo 申請一個 blog 並且開始在那邊寫東西.
Anyway, 我會把之前寫在 yahoo 的東西慢慢搬過來,以後應該不會再用 yahoo 的 blog 了.