最近看到一些blog 與討論,讓我對所謂的依法行政有更深一層的了解,而事件的起源是北投纜車(還不是最近被罵到爆的貓空纜車)。
什麼是依法行政? 北投纜車鑽法律漏洞不執行環評就是馬前市長的口頭禪:依法行政!
2007年7月28日 星期六
2007年7月24日 星期二
2007年7月22日 星期日
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日 星期五
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 的好用
昨天看到有人貼了幾個 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
#define max(a,b) (((a) > (b)) ? (a) : (b))
繼續閱讀 ....
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 檔都沒寫路徑,要用的時候記得自己要加上去,或是切到該目錄再輸入命令,像這樣:
若不想用 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 還有很多其他功能,可以參考這邊。