Visual Studio + Version Control

前言

    Visual Studio 是 Windows 上大家常用的 IDE ,它以專案的方式管理你的程式,因此儲存時會有一些額外的檔案出現,並以 Microsoft 自訂的格式儲存著,如果這些檔案都是檔案都是純文字也就還好,要是以 binary 存在,除了會吃掉較多 repository 空間外,也容易造成 version control 上的麻煩…


一些 Version Control 的限制

    以 CVS 為例,它對 binary 的支援較不完善 [1],例如說: cvs diff、conflct 呈現是以 plain text 為原則而設計的,它會以 new line 的方式去逐行比對、進行呈現,因此,我們往往需要使用額外的指令 [2] 去操控 CVS,而有些指令則無法用於 binary 檔上。Essential CVS [3] 一書整理了一些 CVS 無法處理的檔案: 裝置檔、符號連結、無法開啟或修改的檔案;要想處理這類檔案,我們可以用間接的方式:改將用來建立或連接它們的命令檔存入 CVS。
    而 SVN 呢?根據 SVN 的 features [4] ,雖然它號稱處理 binary 的相當有效率,不過它有著和 CVS 類似的不便:

例如 [5] 所說:

  1. Not attempt to automatically merge received changes with local changes during svn update or svn merge
  2. Not show the differences as part of svn diff
  3. Not show line-by-line attribution for svn blame

結論與 Visual Studio

    因此,我們使用 Version Control System 時,通常會盡量不讓 binary 檔存入 repository 以避免一些麻煩和不便。而為了讓 Visual Studio 能讓 Version Control System 合作無間,我們當然也希望過濾一些 binary file,常見的檔案類型與副檔名可以在 MSDN 上找到,如 VS 2005 可參考 [7]。而 VC 常見的 binary file  有: *.ncb (Intellisense Database),用在自動完成、查詢上, VC 會自動更新產生可不必加入 repository 以及 *.suo (Solution User ptions),根據 [6][8] 也可不必加入監控行列。

Reference

  1. CVS and binary files
    http://ximbiot.com/cvs/cvshome/cyclic/cvs/dev-binary.html
  2. CVS and binary files
    http://durak.org/sean/pubs/software/cvsbook/CVS-And-Binary-Files.html
  3. Essential CVS
    http://www.oreilly.com/catalog/cvs/
  4. Subversion's Features
    http://subversion.tigris.org/
  5. Subversion FAQ - How does Subversion handle binary files?
    http://subversion.tigris.org/faq.html#binary-files
  6. 請勿將某些檔案類型的檔案簽入到 Subversion 版本庫
    http://blog.miniasp.com/category/e5b088e6a188e7aea1e79086.aspx
  7. File Types and File Extensions in Visual Studio
    http://msdn2.microsoft.com/en-us/library/xhkhh4zs.aspx
  8. Introducing Source Control
    http://msdn2.microsoft.com/en-us/library/ms171339(VS.80).aspx

混亂的一週

自從買了眼罩後,晚上睡覺就輕鬆多了,不必顧慮向右側睡時,走廊光線會透入;也不必想到向左側睡,早上會被陽光亮醒!後來又買了耳塞,從此睡覺彷彿與世隔絕,但一個禮拜前,我發現只要戴著眼罩睡,那晚就會作惡夢 -_-|| 而且是那種緊張刺激的夢,夢中的我,幾乎每次都在逃難,逃離戰爭、逃離仇家追殺…此外,還有歷經身離死別的劇情,害我睡醒後,都覺得肩膀、背部酸疼,還有一種腦袋動了一晚沒休息到的感覺…

兩個禮拜前的感冒使我拉了兩天的肚子,洗澡時發現自己瘦了,而四、五個月後,又將舉行畢業口試,口試完就要當兵了。頓時間,有種內憂外患的感覺,似乎告訴我該規律運動了,想起老爸每年都會對我說,我對你只有三個期望:多吃、多睡、多運動。

希望自己這學期能每天吃三餐、睡八個小時、慢跑半小時!

什麼是 Arity

記得以前在研究 Boost.function 的實做時,遇到一個有趣的 static class member ,名叫 arity 。由於沒看過這個單字,譯典通也找不到這個字,只好先猜猜它的意思!後來透過 Google 才知道這個字的意思是:一個函式的參數個數;wiki 的解釋更加清楚:

The arity of a function or operations is the number of arguments or operands that the function takes.

後記

  1. 記得當初上 wiki 查,沒找到這個單字,沒想到今天就出現了!出現的原因是:上 wiki 看 Tcl 的資料,找到 variadic ;看 variadic ,理所當然就會看到 arity 啦!網路的更新真的是快速又有趣,熱心的人們加上搜尋引擎內部會進行長期的資料分析,讓網路彷彿就像個有機體一樣,會成長、進化!
  2. 附帶一提,Tcl 在 wiki 的資料也更新了,更完整囉!

參考

  1. Arity - wikipedia: http://en.wikipedia.org/wiki/Arity
  2. Variadic - wikipedia: http://en.wikipedia.org/wiki/Variadic
  3. Tcl - wikipedia: http://en.wikipedia.org/wiki/Tcl

感冒三天…

三天前的夜晚,因著某種不知名的因素,我感冒了…

第一天:

    症狀是喉嚨微痛、鼻涕些許,腰酸背痛甚鉅。但因為 2/26 有個進度要趕,只好硬著頭皮上工。走去實驗室的路上,一直想不到為什麼著涼了,唯一有可能的原因是:洗完澡,沒吹乾頭髮,坐在書桌前看書。難道我看個書會招來人神共憤、以致有感冒報應?!

第二天:

    前晚特地早睡加上有去看醫生,沒想到起床時腰酸背痛就好了,讓我一度懷疑醫生開的是肌肉鬆弛劑而不是感冒藥,沒想到喝了幾口水後,肚子開始叫,這一叫,讓我心揪了一下,可能感冒引起腸胃炎了,X,果然沒錯!開始拉肚子了… 但因為 2/26 有個進度要趕,只好硬著頭皮上工。不幸的事還不只在我身上發生,這天為了測試一個 Windows AVstream driver 的安裝,我的小黑系統被弄亂了,雖然可以正常工作,但很多關於 driver 的呼叫、安裝都會直接跳出藍色畫面。天啊,屋漏偏逢連夜雨、船遲又遇打頭風!重灌不是難事,備份卻很討厭;重灌虛擲光陰,進度需要時間。還好學弟提醒我有系統還原可用,也好在我極少因為貪小便宜(?!),把系統還原關掉,最後小黑回來了,Welcome back ...

    由於乖巧學弟有重大進度突破,讓我可以準時睡覺,沒想到惡夢開始:差不多每個小時要跑一次廁所,大概持續到凌晨兩點多。加上有點發燒,蓋棉被嫌熱、不蓋又會冷,又因為是假日,交誼廳一直傳來電視聲、喧鬧聲,真是內憂外患…

第三天:

肚子比較安分點了,睡了一整天…

重點:

  1. 原本是要紀錄一段難過的過去,但看完一點都不難過…
  2. 謝謝冠廷學弟體諒我感冒,情誼相挺跟我一起把 2/26 的進度弄出來。
  3. 由於我台南沒有機車,是浩鈞學弟載我去的,回程還下起大雨,學弟竟然把車上唯一一件雨衣給我穿。起初我不肯,他還一直說我是病人,讓你是應該…等的話,到最後直接撇過頭去直到我拿起雨衣…真的是很感謝學弟,我真是個只會讓學弟照顧的學長 T_T
最後,真要說什麼,希望這是最後一次在成大生病了,要畢業了,好像有點感傷…

 

網頁(有時)無法正常顯示

第一次在 Ubuntu 64 上使用 Apache 就遇到了奇怪的問題,不知道是不是自己沒搞清楚?!

症狀:

    上傳的網頁無法正常顯示,但也不會出現錯誤頁面等資訊,僅是空白頁而已。

解決方法:

  1. 檢查編碼:有時檔案的編碼會讓 apache 無法正常解析網頁,這種情形尤其會發生在,使用者使用在 Windows 上使用 frontpage 設定了跟主機端不同的編碼格式。
  2. 若有 PHP ,請檢查 php.ini 的 memory_limit 是不是太小了?! 若是太小,則可能有些 php 頁面可顯示,如僅執行 phpinfo();但有些需要大量記憶體的 php 服務就會失敗,如 blog, wiki ...

參考:

  1. 強者我學弟
  2. 強者我學長

MySQL: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)

OS: Ubuntu 6.06.1 Dapper Drake (2.6.15-51-amd64-server)
MySQL: 5.0.22

第一次安裝 MySQL 就遇到了奇怪的問題,不知道是不是自己沒搞清楚?!

症狀:

       使用 synaptic 安裝 mysql 後,呼叫 mysql_install_db 初始化後,想透過 SHELL> mysql -u root 登入,建立密碼,卻出現 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO),即使想透過 mysql -u root -p ,強制輸入密碼,仍一樣出錯,只是錯誤變成 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

解決方法[3]:

  1. 先關閉 mysql daemon
  2. 以 --skip-grant-tables 喚起 mysql daemon ,如:mysqld --skip-grant-tables
  3. 這時應當可透過以下指令登入:mysql -u root mysql
  4. 利用 mysql 指令修改使用者密碼。
  5. mysql> UPDATE user SET Password=PASSWORD('your_new_password') where USER='root';
    mysql> FLUSH PRIVILEGES;
  6. 關閉 mysql daemon 後,再正常啟動。
  7. 似乎之後新增 database user 也需透過這個方法。

參考資料:

  1. MySQL Manual 2.10.3. Securing the Initial MySQL Accounts http://dev.mysql.com/doc/refman/4.1/en/default-privileges.html
  2. 鳥哥的 Linux 私房菜 http://linux.vbird.org/
  3. MySQL Forum http://forums.mysql.com/read.php?11,34014,46593#msg-46593

Qt4.3.3

Qt4.3.3 已經在 2007/12/05 釋出了!似乎從 4.3.2 之後也就修改了對 Visual Studio 2005 compiler 的支援了,不需要再進行 patch 就可以編譯!連編譯都更人性化了,只需要 configure, nmake 就行了。除此之外,Trolltech 也提供了 Qt Eclipse Integration for C++ and Java plugin ,真是越來越大方了!

而 Qt4.4 也已經在開放 preview 了,據說會是 Qt4 發佈以來最引人注目的版本之一,將提供 webkit、multimedia、enhanced xml support、concurrency、IPC、new help system。其中 webkit 將提供更多開發 web 需要的元件,想必以後用 Qt 可以快速地開發小型瀏覽器、應用程式整合網頁服務了! Qt4.4 preview 可以在 http://trolltech.com/products/qt/whatsnew/qt44-preview 看到 : )

表格測試

Pin Routines

(Prefix: AVStrMiniPin)

IRQL Filter control mutex Mode Pending [1]
AVStrMiniPinCreate PASSIVE_LEVEL
AVStrMiniPinClose
AVStrMiniPinProcess PASSIVE_LEVEL, DISPATCH_LEVEL Pin-Centric Processing
AVStrMiniPinReset Pin-Centric Processing
AVStrMiniPinSetDataFormat
AVStrMiniPinSetDeviceState
AVStrMiniPinConnect
AVStrMiniPinDisconnect

使用 Blogger 的 TicTac Blue Template 時,Ordered List

問題

    使用 TicTac Blue 這個 template 會讓 li 的前置符號都變成 tictac_blue.gif 這個 icon,因此原本期望 ol + li 會出現的編號列舉階層就失去作用了!

解決方法

    若希望保留該功能的話,可以去修改範本。將 L.109 ~ L.115(見下方程式碼片段)註解掉!若只註解掉這部份,會發現右方 side bar 的 li 就出問題了,像是 tictac blue icon 會蓋到文字(標籤、Links 等都會遭殃),因此我們還得去修改範本的 L.340 的 .sidebar li,幫它加上被我們註解掉的屬性,但不要加上 margin-bottom: 3px;,否則 tictac blue icon 會跑出範圍。

/*
li {
  list-style: none;
  padding-left: 14px;
  margin-bottom: 3px;
  background: url(http://www.blogblog.com/tictac_blue/tictac_blue.gif) no-repeat 0 6px;
}
*/
.sidebar li {
  list-style: none;
  padding-left: 14px;
  background: url(http://www.blogblog.com/tictac_blue/tictac_blue.gif) no-repeat 0 5px;
}

     另外還受影響的有: ul + li 。因為原本的 li 被註解掉了, ul 下會出現的 style 圖案也就消失了,因此我們可以新增像是下面的 css selector:

ul li {
  list-style: none;
  padding-left: 23px;
  margin-bottom: 3px;
  background: url(http://www.blogblog.com/tictac_blue/tictac_blue.gif) no-repeat 0 6px;
  }

不要嘗試著直接修改 ul selector,因為那樣會連 sidebar 的部份一起更動到,這會讓 archive 部份變醜 :)

更新

  1. 2008/01/24,修改 ol + li 失去數字階層。
  2. 2008/04/05,修改 ul + li 失去 style 圖案。

推薦使用 Windows Live Writer 撰寫 Blogger (Blogspot) 文章

由於 Blogger 內建的 WYSIWYG/HTML 編輯器實在是不好用,尤其對於程式討論,有兩項缺點存在:

  1. 不支援 tab。我們無法按出 tab 的功能,即使已經先在其他工具(記事本、Word 等)編輯好內容,透過貼上複製,可以出現 tab 的縮排,但編輯器最後仍會將 tab 轉換成一個空白。
  2. 編輯既有文件時,會去重排 HTML 版面。這點對於使用 SyntaxHighlighter 這類排版模組的使用非常不便,因為重排會讓已經在 <pre></pre> 被破壞,因此每次修改文章,就得重新排一次程式碼…

在尋尋覓覓之後,發現 Windows Live Writer (WLW) 還蠻符合需求的,不過它是一個桌面軟體,無法在瀏覽器上使用(但有差嗎?),而且使用上也相當直覺,就像在使用 Wordpad 一樣,目前遇到要注意的問題是:標籤。Blogger 有提供標籤(label)的功能,可以讓你為文章做分類,也可依標籤(label)找文章,是個相當方便的功能,要使用它,只需要在文章邊即時設定就好(見下圖紅框)。

BloggerEditor

當然,WLW 也有提供標籤的功能,只不過 WLW 的標籤(tag)與你在 Blogger 上使用的標籤(label)稍有不同,若要達到 Blogger 上標籤的功能則要改用 WLW 的類別。下圖紅色框處是 WLW 讓你選擇類別的地方,點選後會跳出一個小視窗,羅列著 Blogger 現有的標籤(label),你也可以在 WLW 新增你要的標籤(label),相當方便,如此一來,就不需要重回 Blogger Editor 先設定標籤再利用 WLW 編輯,也不至於發生修改文章標籤時,HTML 排版會亂掉 : )

WLW1

Boost 安裝(Windows XP + Visual C++ 2003 + Boost 1.33.1)

Boost 官方網站:http://www.boost.org
  1. Boost 的建置系統叫做 Boost.Build,它裡頭使用了 Boost.jam(簡稱 bjam)程式作為編譯程式的工具。取得 bjam 的方法有幾種: 1) 下載完、解壓縮後,在 boost\boost_1_33_1\tools\build\jam_src\bin.ntx86 下頭就有個 bjam.exe 了。 2) 在 boost\boost_1_33_1\tools\build\jam_src 下有個 build.bat,透過這個批次檔,我們可以建立出 bjam.exe。 3) 在 sourceforge.net 中搜尋 boost,在專案下載列表中就有附上已經編譯好的 bjam.exe。
  2. 為了待會的安裝方便,可以將 bjam.exe 設定到環境變數 PATH 去或是將 bjam.exe 複製到 boostboost_1_33_1 去。
  3. 開始 --> 執行 --> 打入"cmd"。進入命令模式後,切換到 boostboost_1_33_1。
  4. 4. Boost 支援多種平台與編譯工具,因此編譯 Boost 時,我們必須告訴 bjam 該使用何種工具組(toolset),指定的方式如下:
    "-sTOOLS=your_toolset"
    這邊要注意的是, bjam 對於各種 toolset 有它的命名方式,在 "-sTOOLS=your_toolset" 指定時,要符合這個規範,例如: TOOLS Name -> Abbreviation
    vc7 -> vc vc7-stlport ->vc vc-7_1 -> vc (Visual V++ 2003) vc7_1-stlport ->vc vc-8.0 -> vc gcc -> gcc
    (完整對照可在 http://www.boost.org/more/getting_started.html 或是在 boost\boost_1_33_1\tools\build\v1\build_system.htm 看到)
  5. 為了讓 bjam 在執行時,可以正確地呼叫指定的 toolset,有兩種方式來達成: 1) 事前設定好環境變數。 2) 呼叫 bjam 時,透過參數指定:
    "-stoolset_ROOT=your_toolset_path"。
    "-stoolset_ROOT=your_toolset_path"的命名規範跟 "-sTOOLS=your_toolset"不同。各種 toolset 的 toolset_ROOT 命名可以在 boost\boost_1_33_1\tools\build\v1 下找到,方法是找檔名與 toolset 相同的 html 檔。 VC7_1 是 "-sVC71_ROOT=your_vc7_1_path"
  6. 使用 bjam 安裝 boost,預設會將 hpp 檔、lib 檔、dll 檔安裝到 C:Boost 下去,並佔去約 1.18GB 的硬碟空間。要改變安裝的目錄,可以透過 bjam 參數去設定:
    "-sPrefix=your_install_path"
  7. 行文至此,已介紹了 bjam 三個重要的參數。安裝時,就是
bjam "-sTOOLS=vc-7_1" "-sVC71_ROOT= "--prefix=your_vc7_1_path"your_install_path" ins

2006最後一天

今天是 2006 年的最後一天!寢室、實驗室都只剩我一個人,想起去年的今天,正為著專題展在做最後測試與準備,那時,無論寢室、實驗室都還有很多人在。不過也了自己個機會,想想過去一整年到底做了什麼?仔細想想,只覺庸庸碌碌罷了。時間過得很快,總是推著人們向前走,在我們身上留下痕跡,卻未在心中留下充實!呼~寄望明年能朝夢想更邁進,至少不要再做個沒良心的白吃<囧>

討論與批判

長久以來,與爸爸聊天的感覺,總是帶有許多批判的味道,無形之中,我在與它人對話時,也可能不自覺表現出幾分類似的味道。 上了大學,少了些能一起討論專業知識的朋友,也不是很喜歡整天瞎扯蛋的對話。就像論語上寫著:終日群居,言不及義,好行小慧,難矣哉。 九品芝麻官裡,包龍星對老鴇說:你不會覺得寂寞空虛、覺得冷嗎? 唉,想必太久沒寫作文了,其實這篇文章原本是想說我從老爸那看到了批判的言語,不自覺也對旁人言語多所不見諒,對他們意見不易接受。但這不是批判,只是批評,批評只是針對缺點進行攻擊,批判則是對人事物的是非與否提出見解,價值在於發於聲前,我們清楚瞭解問題,並有自己一套思維。大學生當有批判的能力,時至今日已是碩士新生,我對自己仍只會批評感到羞愧。

歷史與我

午餐過後閒逛 ptt ,在八卦版看到討論清代帝王的八卦,見到了一篇有趣的文章,主要描述雍正是個刻薄且自負的傢伙,並引用了幾篇奏折作為例子譬如說: 一次一個巡輔看到雍正寫給他的朱批說,要他多效法顎爾泰做官行事,那個巡輔一看到當然不敢違抗,馬上回奏說會改進,一定會多多效法顎爾泰存心行事,以圖上報之類的雍正居然批說:『亦不過醜婦笑顰耳,大言不慚』 莞爾之餘,不禁勾起我對歷史的嚮往,但又不禁懷疑我喜歡的只是聽故事而已呢!沒有接受過正統歷史學的教育,自己也沒有很勤奮地往裡頭鑽, 一直停留在走馬看花的地步,或許該找些什麼書籍來看看了,走出電腦之外,世界還是有很多有趣的東西 : D

三峽大壩 生態浩劫

在網路上看到的新聞,敘述著長江三峽大壩如何阻斷了魚類迴游產卵的道路,影響到了哪些魚種,敘述著長江三峽大壩如何開始因為赤潮藻類而瀰漫著死亡的氣息 ...... 讓我想起前陣子回家,跟爸爸一起看到 Discovery 在介紹大壩的興建與帶來的影響,我與他爭辯人類不應該這樣破壞環境只為了解決經濟問題,並引用我在大學通識課上到的,應當結合當地經濟與生態,在金錢誘因下,鼓勵人民一起進行環境保護,可是還是說不過老爸,最後我啞口無言,不是認輸,只是當我無法提出更多實際方案時,又能如何說服他,又如何說服更多更多跟他一樣經歷過貧窮的人呢! 今年三月大陸宣告南水北調工程動工,七月京藏鐵路通車。中國傾己之力,為了解決民生經濟問題,持續規劃大型國家建設,努力朝已開發國家邁進!或許是因我不曾困苦過,才會在這大放厥詞,消失的城牆、倒下的大樹 ...,我覺得可惜!

換新窩囉

辛苦了一整天,實驗室大風吹到晚上終於大功告成! 身為碩一新鮮人,挑選座位的順序自然在博班、碩二學長姐之後,順位雖是倒數第二,但位子很棒,可惜沒帶DC下來,不然可以好好對比一下之前的座位。液晶螢幕取代了CRT,騰出不少空間,160cm長的桌子,更容納小黑仍顯游刃有餘 :D 希望未來一年能在這座位有更多的成長,未來一年的座右銘還是:追求神乎其技讓他的熱情不減!加油、加油、加油!

歸途

一個人要從實驗室回宿舍,左腳大拇指因為下午打球而扭傷,只能一跛一跛地走。有點想找人講些話,卻無論腦海如何翻動,都無法浮起一個人名,哪怕是一張臉龐的勾勒,都見不著。或許這就是離家的寂寞吧,或許這就是長大了… 長大了,離鄉了!是的,我長大了,長得越大,心靈越脆弱,二十二歲的今天比起十二歲的懵懂、比起二歲的無知,我有更多的自由、更多的享受、更多的更多,直到某一日才猛然驚覺,成長似乎是更多的物質獲得、更多的心靈流失。錯過的親情與友情太多了,有一天回家,才發現奶奶已經到安養院了,有一天回家,才發現有架飛機失事,上面載著當導遊的阿姨。 有一天,我們會老,也可能會有孫子,他/她可能會很興奮地說:我想趕快長大唷!

HAPPY BIRTHDAY!!

貴中~~ 生日快樂唷,終於你也跟我一樣22歲了呢!! 好好把握研究生的生涯,努力加油吧!! 祝你身體健康 平安順利唷!! ^_^

Bug 殺不完

這幾天生病,但為了不讓計畫的進度落後,還是到實驗室去寫程式,昨天遇到一個奇怪的bug,找了一個下午都找不出來,又一直咳嗽!吃過晚飯後,就難過地回到宿舍休息!今天中午吃過飯後又回到實驗室,原本已經是不抱希望,沒想到就讓我找到了這小bug ~,~ 仔細看看這bug,沒有特別的地方,但昨天下午就是遍尋不著,看來生病的確讓一個人的判斷力、專注力都差了很多,以後真的不舒服的話,還是不要上工得好!Orz

MiniFilter InstanceSetupCallback is not called?

一般來說,MiniFilter 的 InstanceSetupCallback 會在 filter manager 把 minifilter attache 到 volume 後呼叫。如果沒有的話,可以檢查一下 minifilter 的 INF 是否把 instance fla...