顯示具有 programming 標籤的文章。 顯示所有文章
顯示具有 programming 標籤的文章。 顯示所有文章

2010年4月1日

Development Environment on Intel X25-V 40GB

新購一粒Intel X25-V 40GB SSD,打算在它瘦小的身軀裝上:

  1. Windows 7 Ultimate 64-bit
  2. Visual Studio 2008 w/ SP1
  3. Visual Studio 2010 (will be available on April 12)
  4. Windows SDK (w/o sample code)
  5. WDK 7.1 (w/o sample code)
  6. Paint.NET
  7. TrueCrypt
  8. Google Chrome
  9. Firefox
  10. Windows Live Writer
  11. Windows Live Messenger
  12. Microsoft Security Essential
  13. EmEditor
  14. Notepad2

最終目標是爭取15GB(10GB for TrueCrypt partition)剩餘空間作為程式碼與暫存檔使用。

安裝與甩肉

約十五分鐘裝完Windows 7 Ultimate 64-bit。開機到輸入密碼的畫面約十秒,讚!

還沒有裝任何驅動程式就佔了約14.5GB(餘25.5GB),看來有很多肉要甩!

Win7Fresh_HDDSpace 

先把Hibernate甩掉。開啟Command Prompt with administrator rights,輸入以下指令:

powercfg –h off

接著安裝第一輪的更新檔,剩餘27.2GB。

Install all drivers and Microsoft Security Essentials,剩餘25.7GB。

Install Visual Studio 2008 w/ SP1,剩餘20GB。

Install Windows SDK x64,剩餘19.1GB。Install WDK 7.1,剩餘18.1GB。

Install Paint.NET, Firefox, Chrome, Live Messenger, Live Writer, TortoiseSVn, Python 2.6, EmEditor。再加上10GB給TrueCrypt,剩餘6.5GB。

Intel SSD Speed

Before firmware updgrade (02HB):

SSD_Speed_Benchmark_before

Before firmware updgrade (02HD):

SSD_Speed_Benchmark_after

咦!怎麼變慢了?

在沒有特別調校的情況下,空間還剩約6GB。不過隨著使用時間變長,預期還會增加不少。到時再想辦法瘦身。

接下來,要等Visual Studio 2010了。

2009年10月28日

為什麼要讀別人的程式碼?

從許多前輩(書、文章)那裡學到的,要增強自己的實力,一定要多讀別人的程式碼。而且,讀程式碼的心態要正確。一開始心態就不正確,那可能適得其反。

我認為正確的心態是以學習(求知)的角度來看別人的程式碼。看到寫得好的程式,把招式學起來;看到不好的,告訴自己不要犯相同的錯誤。無論如何,都能增長見識,避免井底觀天。

我看到許多人,不主動看別人的程式,就算非看不可,也是抱持找麻煩的心態(寫得真爛…一無可取…重寫…)。心態不正確,真的很要命。

不好的程式碼當然要抓出來,先「重構」,重寫是下下策。但千萬不要有「只有自己出產的程式碼才是好的程式碼」的自戀情結。有自信很好,過頭了不但傷人還會自傷。

看到不懂的程式碼,先別說別人寫得爛、沒組織,有時只是自己的眼界太淺,沒看到全貌。此時最好的方式是學習,把不懂的地方搞懂,再來評論。

要研究過,知道、評估優缺點後再決定不使用新技術。只是因為不懂就不用,那會讓你原地踏步。「原地踏步」對於在科技時代的資訊業工作的下場有多淒慘,你不會想嘗試。

調整態度,多讀別人的程式碼,就算不是「站在巨人的肩膀上」,只要站在別人的肩膀,就能多看遠一點。一次一點點,累積起來的能量也是很巨大的。

2009年2月25日

C++ & Windows API: for_each and DeleteObject

當有一個HBITMAP Array需要釋放時,一般的寫法會是:

  for (int i = 0; i < numOfElement; ++i)
DeleteObject(bitmaps[i]);

另一種寫法是利用C++ STL:

  std::for_each(bitmaps, bitmaps + numOfElement, DeleteObject);

除了從原本的兩行,變成一行。此種用法也可適用於不同「容器」,不論是std::vector, std::list, std::deque:

  std::for_each(vBmp.begin(), vBmp.end(), DeleteObject);
CloseHandle, DestroyIcon等接收一個參數的API,都適用上述寫法。

2008年11月13日

九十七年電腦軟體設計乙級技術士通過人數

原本今年要報考「電腦軟體設計C++」乙級技術士考試,結果半途而廢,放棄了(都沒準備)。

查了一下今年(九十七年)通過的人數:3人(九十六年則有5人)。

人數真的不多啊。

2008年10月22日

Bug in Code

以下是我寫的一段程式,犯了一個不該犯的錯,產生一個致命的臭蟲,看出來了嗎?

  1 void ShameOnDPP()
2 {
3 enum { MaxRetry = 500 };
4 unsigned char retried = 0;
5
6 while (++retried < MaxRetry) {
7 OutputDebugString("Shame on you\n");
8 }
9 OutputDebugString("I forgive you\n");
10 }
11


呼叫這個函數,會一直輸出Shame on you的除錯訊息,永遠看不到"I forgive you”。

原因是retried型別為unsigned char,其最大值只到255,因此與MaxRetry (500)比較,結果永遠為真,變成無窮迴圈。

犯錯了,最重要就是要知道自己錯在哪裡,勇敢承認,不要死不認錯

2008年9月4日

Learning from Chrome: Visual Studio Project Property Sheets

Google Chrome整合了許多Open Source projects,其中,許多專案共用一些工具專案,欲簡化管理,Google Chrome使用了Visual Studio的一項功能叫:Visual Studio Project Property Sheets

什麼是Project Property Sheets?三個字:好東西。舉例說明:

假設有好幾個專案都有用到Boost C++ Library,一般會在Project Properties裡的C/C++ > General > Additional Include Directories,填上Boost的路徑。這樣該專案便能使用到boost的標頭檔。

麻煩來了,如果你有十個專案都用到Boost,同樣的動作需要做十次(以上)。更慘的是,如果Boost出新版,而你又很想要新版才有的功能,那麼又要重覆十次(以上)的動作...Orz
From Coder to Developer:DRY (Don't Repeat Yourself)

這個時候Property Sheets就派上用場了。到Visual Studio 2005/2008,View > Property Manager,打開Property Manager後,在你的專案上點選右鍵,選擇Add New Project Property Sheet...,給個名字,出現一個與Project Properties一模一樣的視窗。

在該視窗上設定好Additional Include Directories,存檔後,同目錄下就會出現一個副檔名為vsprops的檔案,就叫它using_boost.vsprops吧。

接下來只要到其它九個專案的Property Manager,點選Add Existing Property Sheet...,選擇using_boost.vsprops。再把原本的Additional Include Directories設定殺掉,這些專案就會用到using_boost.vsprops提供的設定。未來要變更Boost路徑或升級,只要更改using_boost.vsprops即可。

我也是看了Google Chrome source code,才知道有這麼好用的功能,唉~真是慚愧...Orz

Learning from Chrome: Unit Test Using Google Test

Google Chrome使用了自家的Google C++ Testing Framework。底下是Chrome Unit Test的輸入,相當簡潔、親切可人,令人愛不釋手...

透過Google Chrome,順便了解Google Test的設計內涵,以及使用方式。

如何正確的使用Unit Test Tool,提昇程式碼的穩定性,降低錯誤率,是任何有志從事程式設計的人,必修的課題。這是基本功,但很多人都忽略了,包括我自己..Orz

From Coder to Developer,你要當有腦子的Software Engineer,還是只會蠻幹的Programmer?

Unit Test Tool很多,底下列舉幾個我聽過的:

2008年9月3日

Learning from Chrome: Accelerating the build

Google Chrome Build Instruction,〈Accelerating the build〉 一節提到提昇編譯效率的幾個方法,其中一項為:

Defragment your hard drive regularly

有幾個「鐵齒」的同事,每次談到「磁碟重組」時,其論調是「磁碟重組」只會讓硬碟更快損壞,既浪費時間,又沒效益,所以他們重來都不做「磁碟重組」,因為那根本就是狗屎…

自信過頭的結果,容易忽略顯而易見的事實。找一下相關的資料,就可以知道「磁碟重組」到底有沒有幫助。如果一點幫助也沒有,那些靠這個吃飯的廠商還混什麼?Windows 幹嘛要內建這樣的工具?

積極學習的第一步是:千萬別裝瞎!

2008年6月21日

持續更新 保持學習動力

記得第二年開始,才真正稱得上是「程式設計師」,真正靠寫程式混飯吃,在此之前的工作內容,恐怕連文書編輯的程度都不到。

從那時起,幾乎天天逛Code Project, Code Guru, 程式設計俱樂部等與程式設計有關的網站。透過「閱讀」免費的程式碼,逐漸累積實力。慢慢地,從原本只能滿足專案部分需求,到現在負責處理專案大部分工作,我知道自己成長了。

最近,發現自己愈來愈少上這些網站,看別人程式碼的時間大量減少。這不是好事。

失去學習動力就像癌症,早期發現早期治療,復原的機會很大。到了癌末,要想補救,難度很高。

我屬雜食類,三十五歲以前,多多接觸不同領域的技術,試圖尋找值得深入鑽研的領域。到了四十歲,成為該領域的專家。算不算大器晚成?

2008年5月23日

Building Linux Development Environment

公司計劃染指Linux領域,派我打頭陣,看能不能弄出一點什麼毛。

考慮後,打算強佔Ferrari 4000,做為研究Linux之用。打算建置下列環境:
  1. Windows XP w/ SP3:目前功力不足,沒裝這個簡直就像缺手缺腳。
  2. Ubuntu 8.04:應該算是Debian派的代表,我現在的觀念只能用套件管理程式來區分不同的distro。(它是APT
  3. Fedora 9:另一派的代表。(RPM)
打算把這些東西放到160GB的硬碟上,多重開機問題不大,至於各個系統怎麼共享資料倒是需要好好規劃。

Linux作業系統之奧義的圖像

《Linux 作業系統之奧義》對於MBR, Partition Table, GRUB, 以及Linux多重開機環境有相當豐富的說明。

2008年4月12日

當「你寫的程式我看不懂」時,誰該檢討?

fr3@K處看到這篇〈五種寫For Loop的方法〉,讓我想起之前同事在看我寫的程式時,遇到的問題。

當時的程式便是一個for loop,而我的寫法是該文提到的第二種方法「for_each加上手寫的functor」。(fr3@K的評論是:(註:感謝fr3@K的指正,差一句,真的差很多)若大規模的使用,很可能要寫一堆這種小小的 functor,一點也不優雅,還很令人困擾)。

當同事告訴我,他看不懂我寫的那段for_each的程式碼,(心裡)直覺的反應是:『老天,未免太不用功了吧!這麼簡單的程式,居然看不懂』。後來他又補上一句:『公司好像只有你寫這種程式』。喔,難道是質疑我寫「這種程式」的動機是讓別人都看不懂嗎?

for_each是C++ Standard Template Library,公司使用C++開發軟體,難道限制我不用C++ Standard Template Library,的理由是別人會看不懂嗎?

面對這種情況,我不會妥協,看不懂是只怪你不夠用功。如果自認為是「專業」的程式設計師,多讀點書,至少C++要摸熟吧。

以下是當時的程式碼精簡版:

vector<object> vo;
// add some object to vo
for_each(vo.begin(), vo.end(), DoSomethingOnIt);

針對vector裡的每一個物件,進行DoSomethingOnIt的動作。for_each幫我處理迴圈等鎖事,我只要專心處理DoSomethingOnIt裡的程式邏輯。DoSomethingOnIt可以是可重複利用的碼。

一些關於C++歷史的資料

Paul McJones整理了一些C++歷史紀錄

他與STL之父Alexander Stepanov在著手撰寫一本關於程式設計的書《Elements of Programming》(可下載最新的草稿)

2008年4月11日

新訂兩個Blog

Herb Sutter原本在Live Space的blog,因為受不了Comment Spam的關係,被迫移到wordpress.com。新的位址為:

http://herbsutter.wordpress.com/

說來真糗,Live Space是微軟提供的服務,自己的員工(Herb Sutter is a Software Architect for Microsoft)「出走」,真是情何以堪。

更新Sutter's Mill的意外驚喜,找到另一位C++大師,Andy Koenig的Blog:

http://www.ddj.com/blog/cppblog/

2008年4月9日

對於任職公司的建議之一

我目前在一間小軟體公司任職六年,這幾年的觀察,對於公司學習新知的文化不甚滿意,打算提出(一系列)建言信,希望能有所改善,這是第一封:

Dear all,

身為Windows Platform的開發人員,除了對該平台的演進過程(過去)、當前的開發技術(現在)有所了解外,平台未來的走向也很重要。那麼,除了平常的工作以外,你還有持續吸收軟體開發的相關資訊嗎?

這裡列出一些跟Windows Platform有關的資訊,主要由Microsoft發佈。希望各位同仁抽空收看,將對公司有幫助的資料,或是值得進一步了解的議題淬取出來,加上自己的研究心得,與其他同仁分享、討論:

  • MSDN Flash:Microsoft定期發行的電子報,乍看之下有很多跟公司無關的訊息,但偶爾也有寶貴的資訊在裡面,誰知道呢?
  • MSDN Magazine:月刊,台灣微軟有中文版。
  • WHDC Newspaper(英文中文):硬體、驅動程式,以及WHQL認證等相關訊息。另外,WHDC網站有大量的相關文件,鼓勵同仁利用時間找有興趣的來研習。
  • Windows Sysinternals:常用的DebugView就是從這裡來的。裡面還有一大堆好用的工具(Process ExplorerProcess Monitor),可以在軟體開發時提供幫助。裡面有些工具還附有原始碼。

XX科技,(目前為止)定位為Windows Platform軟體解決方案的製造商,在這方面我們(應該、必須)是專業。持續提昇專業能力,才能讓客戶滿意,讓公司成長。

以上所列,僅是一小部分的訊息來源,外頭還有數不清的資源,供人取用。面對這麼多的資料,可能有人會認為,花時間注意這些東西,工作都別做了。

我們是專業的「知識工作者」,知道什麼是有用的資訊,什麼時候該花時間學習,什麼時候該完成工作。「吸收新知」不是家庭作業,沒有規定,最重要的是積極主動的心態。

2008年4月8日

Google App Engine

Google App Engine是什麼碗糕?

以下是Google的說明

Google App Engine lets you run your web applications on Google's infrastructure. App Engine applications are easy to build, easy to maintain, and easy to scale as your traffic and data storage needs grow. With App Engine, there are no servers to maintain: You just upload your application, and it's ready to serve your users.

Google App Engine Announcement Video:

白話文版本:Google幫你架好Web server,提供500MB空間、免費domain (appspot.com)、Python runtime environment。

所以只要懂Python,了解Web application開發,其它的Google都幫你作好了。

下面是示範影片(敲鍵盤的聲音聽起來蠻過癮的):

相關連結

2008年2月12日

Windows SDK for Vista SP1 and Server 2008

Windows Vista SP1已於2/6發佈RTM (on Microsoft Connect)。Windows SDK也不落人後,於隔日發佈Windows SDK for Vista SP1 and Server 2008

趕快去下載

COM之歷久不衰

侯捷老師翻譯的《COM本質論》大約是五年前入手,已經忘了當初買這本書的用意(當然是要學它囉),只記得第一次頭昏眼花,沒多久就投降了。

之後又看了幾次,雖然每次都有領悟,卻又每次都有不懂的地方。

雖然侯老師翻譯的書品質沒話說,但每次到天瓏書局,還是會抬頭看看櫃台旁的書櫃上,那本Don Box的《Essential COM》還在不在?心想:這麼舊的書,老闆怎麼還不優惠出清,只要價格一鬆動,我二話不說就買下來了。不急,反正這年頭,大概沒有人會想學COM這種頭殼壞掉的人才會學的技術吧?!

一年了,還是沒降。沒關係,書還在...

萬萬沒想到,就在不久前,因為公司專案需要用到COM,下定決心要把『它』帶回家研讀。到天瓏網站確定價格,咦!怎麼寫缺貨,不可能一定是系統弄錯了,這麼冷門,又是原文書,怎麼會有人買,明天去店裡走一趟好了...

靠!真的被買走了........Orz

「有花堪折直須折,莫待無花空折枝」(幸好Amazon.com還有存貨

2008年1月18日

Yet Another Unit Testing Tool - WinUnit

MSDN Magazine 二月號,介紹了一個新的Unit Testing Tool, WinUnit

我現在都用boost Unit Test Framework,還蠻不錯的。不過既然有新的玩意可以玩,當然不能放過。

這是微軟員工寫的,順便觀摩一下程式的寫法與小型專案的組織方式。

  • 說明文件以及範例程式都蠻齊全的
  • 用到doxygen產生文件
  • 測試與Visual Studio IDE整合

2008年1月14日

學習COM:每次都有新的領悟

前陣子因為工作需要,再一次挑戰COM

這幾天研讀Don Box的《Essential COM》(中文版侯捷譯),以及《Developers's Workshop to COM and ATL 3.0》,又有新的領悟。

此次動手實作公司專案的介面架構,並參考UMDF的設計,再讀一次《An Introduction to COM for UMDF Developers》,發現許多以前沒有注意到的地方,了解了更多COM的Why and How,收獲不少。

COM實在是博大精深,書中說的「學習COM不頭昏眼花的話,不算真的了解COM」,說的真是太貼切了。

2008年1月8日

再一次挑戰COM

為了設計公司應用程式通用的介面,再次面對COM (Component Object Model),打算師法UMDF,以Light weight COM的設計理念,捨棄複雜的機制,另求簡單。

寫這篇文章的時候,新增了「COM」這個label,一瞬間想到的是:「要用大寫還是小寫?」

就是這樣,容易分心。偏離主題太遠了,工作也是。

Google Analytics

Powered By Blogger
Get Paint.NET!