<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>石頭閒語-C/C++</title>
<link>http://blog.roodo.com/rocksaying/archives/cat_242667.html</link>
<description>[Licensed by GNU FDL]
Rock&#039;s Saying 
遊手好閒的石頭成的部落格 
Open Your Mind, Use the Source! 
//
</description>
<language>zh-tw</language>
<generator>Roodo Blog System</generator>
<copyright>All Rights Reserved</copyright>
<atom:link href="http://blog.roodo.com/rocksaying/archives/cat_242667.xml" rel="self" type="application/rss+xml" />
<item>
	<title>Openchange/libmapi API 用例</title>
	<description><![CDATA[
			
在 libmapi 中，主要的封包結構是 mapi_object_t。使用 mapi_object_init() 建構內容。
主要的函數回傳值是 enum MAPISTATUS，並以 MAPI_E_SUCCESS 表示成功執行。
通常在呼叫 libmapi API 後使用 if (retval != MAPI_E_SUCCESS) return false; 判斷程式流程。  


就設計架構而言， libmapi 運作時會管理記憶體資源。使用 MAPIFreeBuffer(), mapi_object_release() 便可釋放閒置的記憶體空間。
但就我實測結果顯示，它目前存有 memory lack 問題。以擷取連絡人清單為例，在擁有 256MB 實際記憶體與 384MB Swap 空間的 GNU/Linux 系統上，
大約在擷取200筆訊息後，就會因為記憶體不足而被系統中止程序。


openchangeclient -p rock --fetch-items=contact


這是目前使用 libmapi 開發大型客戶軟體時必須注意之處。其他Bug可以參考 Openchange開發工具補遺。


		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
在 libmapi 中，主要的封包結構是 <code>mapi_object_t</code>。使用 <code>mapi_object_init()</code> 建構內容。
主要的函數回傳值是 <code>enum MAPISTATUS</code>，並以 <code>MAPI_E_SUCCESS</code> 表示成功執行。
通常在呼叫 libmapi API 後使用 <code>if (retval != MAPI_E_SUCCESS) return false;</code> 判斷程式流程。  
</p>
<p>
就設計架構而言， libmapi 運作時會管理記憶體資源。使用 <code>MAPIFreeBuffer(), mapi_object_release()</code> 便可釋放閒置的記憶體空間。
但就我實測結果顯示，它目前存有 memory lack 問題。以擷取連絡人清單為例，在擁有 256MB 實際記憶體與 384MB Swap 空間的 GNU/Linux 系統上，
大約在擷取200筆訊息後，就會因為記憶體不足而被系統中止程序。
</p>
<pre>
openchangeclient -p rock --fetch-items=contact
</pre>
<p>
這是目前使用 libmapi 開發大型客戶軟體時必須注意之處。其他Bug可以參考 <a href="http://blog.roodo.com/rocksaying/archives/8689105.html">Openchange開發工具補遺</a>。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/8722399.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/8722399.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/8722399.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 15 Apr 2009 13:09:11 +0800</pubDate>
</item>
<item>
	<title>Openchange 開發工具補遺</title>
	<description><![CDATA[
			
日前有一項工作，需要從 Microsoft Exchange Server 中轉出行事曆、連絡人等等資料。我嘗試使用 Openchage 這套工具來處理。它透過 Exchange 預設的 SMB 封包協定交換資訊。應用軟體開發人員可使用其 libmapi 函數庫設計一般用戶程式。



OpenChange aims to provide a portable Open Source implementation of Microsoft Exchange Server and Exchange protocols.

Openchange


不過 Openchange 仍未臻成熟，在使用前必須修正不少地方。本文說明 header 檔路徑修正、常數定義修正與中日韓語系修正的內容。


		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
日前有一項工作，需要從 Microsoft Exchange Server 中轉出行事曆、連絡人等等資料。我嘗試使用 Openchage 這套工具來處理。它透過 Exchange 預設的 SMB 封包協定交換資訊。應用軟體開發人員可使用其 libmapi 函數庫設計一般用戶程式。
</p>

<blockquote>
OpenChange aims to provide a portable Open Source implementation of Microsoft Exchange Server and Exchange protocols.
<br/>
<cite><a href="http://www.openchange.org/">Openchange</a></cite>
</blockquote>
<p>
不過 Openchange 仍未臻成熟，在使用前必須修正不少地方。本文說明 header 檔路徑修正、常數定義修正與中日韓語系修正的內容。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/8689105.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/8689105.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/8689105.html</guid>
	<category>C/C++</category>
	<pubDate>Sun, 12 Apr 2009 14:07:30 +0800</pubDate>
</item>
<item>
	<title>bbslib::pool - 以小換大的設計啟學</title>
	<description><![CDATA[
			
bbslib::pool 是一個簡單的記憶體配置功能 (源碼: bbslib-20010331.tar.gz/strexp/pool.c)。乍看之下，像是一個動態長度字串，但實際上，卻是簡單的動態記憶體管理模組。bbslib::pool 當初在設計時，是有多種考量的，例如安全性。當它要複製或銜接一個字串時，如果原先的空間不足，就會自動重配置夠大的空間去儲存，如此可避免 buffer ovewflow 的問題。而在使用效率上， bbslib::pool 是用 page 為單位向系統要求配置記憶體空間。


		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
bbslib::pool 是一個簡單的記憶體配置功能 (源碼: <a href="http://home.educities.edu.tw/fbtip/software/bbslib-20010331.tar.gz">bbslib-20010331.tar.gz</a>/strexp/pool.c)。乍看之下，像是一個動態長度字串，但實際上，卻是簡單的動態記憶體管理模組。bbslib::pool 當初在設計時，是有多種考量的，例如安全性。當它要複製或銜接一個字串時，如果原先的空間不足，就會自動重配置夠大的空間去儲存，如此可避免 buffer ovewflow 的問題。而在使用效率上， bbslib::pool 是用 page 為單位向系統要求配置記憶體空間。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/4014249.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/4014249.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/4014249.html</guid>
	<category>C/C++</category>
	<pubDate>Sat, 25 Aug 2007 17:51:27 +0800</pubDate>
</item>
<item>
	<title>在 C 程式中使用 MD5 library 及其應用</title>
	<description><![CDATA[
			Tags: C md5 bbslib

簡單地說， MD5 是一種單向雜湊(hashing)演算法，可將你所給予的任何長度字串，藉由 MD5 雜湊演算得出一個長度為 128 位元 (術語稱之為 "digest code")的計算結果。後述以鍵值稱呼 digest code。MD5 演算法，是由 RSA Data Security, Inc 公司所提出的。演算原理參閱 MD5 - Wikipedia。


		]]>
	</description>
	<content:encoded><![CDATA[
			<div class="tags">Tags: C md5 bbslib</div>
<p>
簡單地說， MD5 是一種單向雜湊(hashing)演算法，可將你所給予的任何長度字串，藉由 MD5 雜湊演算得出一個長度為 128 位元 (術語稱之為 "digest code")的計算結果。後述以鍵值稱呼 digest code。MD5 演算法，是由 RSA Data Security, Inc 公司所提出的。演算原理參閱 <a href="http://en.wikipedia.org/wiki/MD5">MD5 - Wikipedia</a>。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/3873017.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/3873017.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/3873017.html</guid>
	<category>C/C++</category>
	<pubDate>Mon, 06 Aug 2007 18:17:55 +0800</pubDate>
</item>
<item>
	<title>在 C 程式中，使用 Regex (Regular Expression) library</title>
	<description><![CDATA[
			Tags: C Regex bbslib

我以前維護學校的 Firebird BBS 系統時，寫了一套 library ，其中字串處理部份包含了 Regex library 的使用函數。源碼可於此下載: bbslib2 sources tarball。接下來的 Regex library 說明內容，都取自其中的源碼，不另行列出。


Regex 於其他程式語言中之應用現狀，可見《Regular Expression (RegExp) in JavaScript》、《PHP Manual:Regular Expression Functions (POSIX Extended)》等。


		]]>
	</description>
	<content:encoded><![CDATA[
			<div class="tags">Tags: C Regex bbslib</div>
<p>
我以前維護學校的 Firebird BBS 系統時，寫了一套 library ，其中字串處理部份包含了 Regex library 的使用函數。源碼可於此下載: <a href="http://home.educities.edu.tw/fbtip/">bbslib2 sources tarball</a>。接下來的 Regex library 說明內容，都取自其中的源碼，不另行列出。
</p>
<p>
Regex 於其他程式語言中之應用現狀，可見《<a href="http://blog.roodo.com/rocksaying/archives/2670695.html">Regular Expression (RegExp) in JavaScript</a>》、《<a href="http://tw.php.net/manual/en/ref.regex.php">PHP Manual:Regular Expression Functions (POSIX Extended)</a>》等。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/3866523.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/3866523.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/3866523.html</guid>
	<category>C/C++</category>
	<pubDate>Sun, 05 Aug 2007 16:59:16 +0800</pubDate>
</item>
<item>
	<title>STL Vector/Map 的使用練習, 附 Ruby 對照程式碼</title>
	<description><![CDATA[
			Tags: C++ STL

最近在練習使用 C++ STL 中的 Container 功能。嗯，寫著寫著，覺得很不順手啊。例如不能用 Vector/Set/Map 直接建表。Stack 的 pop() 方法沒有回傳值；我用 C 寫的 stack 功能， pop() 是會推一個值出來的。


挑了兩個 STL Container 的練習程式碼，再用 Ruby 寫一段相同的。兩相比較，也算在吐槽吧。


		]]>
	</description>
	<content:encoded><![CDATA[
			<div class="tags">Tags: C++ STL</div>
<p>
最近在練習使用 C++ STL 中的 Container 功能。嗯，寫著寫著，覺得很不順手啊。例如不能用 Vector/Set/Map 直接建表。Stack 的 pop() 方法沒有回傳值；我用 C 寫的 stack 功能， pop() 是會推一個值出來的。
</p>
<p>
挑了兩個 STL Container 的練習程式碼，再用 Ruby 寫一段相同的。兩相比較，也算在吐槽吧。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/3679815.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/3679815.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/3679815.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 18 Jul 2007 16:11:49 +0800</pubDate>
</item>
<item>
	<title>舊程式碼中的 void* 轉型</title>
	<description><![CDATA[
			Tags: C++ void cast 函數指標

前一陣子，為了說明《程式語言中的介面》，我把大約八、九年前寫的 C 語言程式碼翻了出來。編譯的時候出現錯誤訊息，顯示我用了不被允許的轉型動作，即 (void*)。雖然心裡嘀咕了一下，不過還是很快地改成完整的轉型語法 (也更冗長)，將之用於文章範例。


這幾天抽空檢視了一下那些舊程式碼，才發現不是程式碼的問題，而是我用錯編譯器了。我的編輯器 PSPad 設定 C/C++ 文件呼叫的編譯器是 g++ (C++ compiler) ，而不是 gcc (C compiler)。而 C++ 不允許將 void* 轉型為其他型態指標。這點與 C 不同。我又測了一下舊有程式碼的 C/C++ 規範相容性。


		]]>
	</description>
	<content:encoded><![CDATA[
			<div class="tags">Tags: C++ void cast 函數指標</div>
<p>
前一陣子，為了說明《<a href="http://blog.roodo.com/rocksaying/archives/3556355.html">程式語言中的介面</a>》，我把大約八、九年前寫的 C 語言程式碼翻了出來。編譯的時候出現錯誤訊息，顯示我用了不被允許的轉型動作，即 <code>(void*)</code>。雖然心裡嘀咕了一下，不過還是很快地改成完整的轉型語法 (也更冗長)，將之用於文章範例。
</p>
<p>
這幾天抽空檢視了一下那些舊程式碼，才發現不是程式碼的問題，而是我用錯編譯器了。我的編輯器 PSPad 設定 C/C++ 文件呼叫的編譯器是 g++ (C++ compiler) ，而不是 gcc (C compiler)。而 C++ 不允許將 <code>void*</code> 轉型為其他型態指標。這點與 C 不同。我又測了一下舊有程式碼的 C/C++ 規範相容性。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/3641993.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/3641993.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/3641993.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 11 Jul 2007 18:08:13 +0800</pubDate>
</item>
<item>
	<title>C++ Template 筆記</title>
	<description><![CDATA[
			Tags: C++ template metaprogramming

C++ 的 Template 是種將資料型態參數化的功能。將資料型態資訊自程式碼中抽離，代之以簡化的符號 (T, T1, T2, ...)。再由編譯器透過類似巨集代換的方式，根據樣板內容產生實際的程式碼。


    Function Template (函數樣板)
    Class Template (類別樣板)。含部份特殊化。


		]]>
	</description>
	<content:encoded><![CDATA[
			<div class="tags">Tags: C++ template metaprogramming</div>
<p>
C++ 的 Template 是種將資料型態參數化的功能。將資料型態資訊自程式碼中抽離，代之以簡化的符號 (T, T1, T2, ...)。再由編譯器透過類似巨集代換的方式，根據樣板內容產生實際的程式碼。
</p>
<ul>
    <li>Function Template (函數樣板)</li>
    <li>Class Template (類別樣板)。含部份特殊化。</li>
</ul>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/3641717.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/3641717.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/3641717.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 11 Jul 2007 16:35:03 +0800</pubDate>
</item>
<item>
	<title>程式語言中的介面，在個體之間協議互動行為的多種形式</title>
	<description><![CDATA[
			Tags: interface class method 動態語言

racklin 說: 我的重點還是只放在 "關注類別是否有實作方法" 也就是 "介面" 的這個概念, 因為原文是討論這個議題. 嗯，我大概是跳太快了。我清楚 interface 是什麼。所以我的回應是在說明「個體之間如何協議互動行為」亦即「軟體合約」的形式。


以C/C++為例，在早期，程序員學了 C++ 可是還是要寫 C 程式的時代，我們會自己用 C 語言實作類別繼承、動態連結等觀念。但我們用的是 C compiler 而非 C++ compiler ，所以很多事我們必須自己處理。其中一點就是個體行為的協議。方法一、在函數文件上說明傳入的個體需擁有哪些行為，我在函數中會檢查此個體是否擁有此行為(函數指標是否為給定了)。方法二、限定一個 struct (只有純函數指標宣告)，呼叫者要自己填一張函數指標表傳入，這其實就是 interface 的概念。


		]]>
	</description>
	<content:encoded><![CDATA[
			<div class="tags">Tags: interface class method 動態語言</div>
<p>
<a href="http://blog.roodo.com/rocksaying/archives/3547207.html#comment-11093665">racklin 說</a>: <q>我的重點還是只放在 "關注類別是否有實作方法" 也就是 "介面" 的這個概念, 因為原文是討論這個議題</q>. 嗯，我大概是跳太快了。我清楚 interface 是什麼。所以<a href="http://blog.roodo.com/rocksaying/archives/3547207.html#comment-11089281">我的回應</a>是在說明「個體之間如何協議互動行為」亦即「軟體合約」的形式。
</p>
<p>
以C/C++為例，在早期，程序員學了 C++ 可是還是要寫 C 程式的時代，我們會自己用 C 語言實作類別繼承、動態連結等觀念。但我們用的是 C compiler 而非 C++ compiler ，所以很多事我們必須自己處理。其中一點就是個體行為的協議。方法一、在函數文件上說明傳入的個體需擁有哪些行為，我在函數中會檢查此個體是否擁有此行為(函數指標是否為給定了)。方法二、限定一個 struct (只有純函數指標宣告)，呼叫者要自己填一張函數指標表傳入，這其實就是 interface 的概念。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/3556355.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/3556355.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/3556355.html</guid>
	<category>C/C++</category>
	<pubDate>Sat, 30 Jun 2007 12:00:17 +0800</pubDate>
</item>
<item>
	<title>Metaprogramming - To Use C/C++ with Dynamic Languages is Easier Than Pure C++</title>
	<description><![CDATA[
			Tags: metaprogramming template c++

日前在回應 jaceju 《PHP為什麼快》一文時，我提到PHP 之所以快，確實跟它骨子裡包的是 C 語言函數有關。Python, Ruby 也是。在某種程度上，這造成了C++的衰退。因為用C語言寫函數庫給 PHP/Python/Ruby使用，還比寫一個C++ template class 簡單。


		]]>
	</description>
	<content:encoded><![CDATA[
			<div class="tags">Tags: metaprogramming template c++</div>
<p>
日前在回應 jaceju 《<a href="http://blog.roodo.com/jaceju/archives/3510483.html">PHP為什麼快</a>》一文時，我提到PHP 之所以快，確實跟它骨子裡包的是 C 語言函數有關。Python, Ruby 也是。在某種程度上，這造成了C++的衰退。因為用C語言寫函數庫給 PHP/Python/Ruby使用，還比寫一個C++ template class 簡單。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/3528035.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/3528035.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/3528035.html</guid>
	<category>C/C++</category>
	<pubDate>Mon, 25 Jun 2007 17:39:09 +0800</pubDate>
</item>
<item>
	<title>無聊之下寫的程式，把程式碼當資料...</title>
	<description><![CDATA[
			Tags: 圖靈

前些日子閱讀《沒有時間的世界》，書中說，圖靈 的圖靈機概念，最偉大的貢獻在於「把程式當資料儲存」的想法。我一時無聊，又想起了以前在 DOS 時代的記憶，就寫了一段 C 語言程式，把程式碼當資料複製，然後再去執行那段被複製的程式碼。 

		]]>
	</description>
	<content:encoded><![CDATA[
			<div class="tags">Tags: 圖靈</div>
<p>
前些日子閱讀《沒有時間的世界》，書中說，<a href="http://zh.wikipedia.org/w/index.php?title=%E8%89%BE%E4%BC%A6%C2%B7%E5%9B%BE%E7%81%B5&oldid=4396025">圖靈</a> 的圖靈機概念，最偉大的貢獻在於「把程式當資料儲存」的想法。我一時無聊，又想起了以前在 DOS 時代的記憶，就寫了一段 C 語言程式，把程式碼當資料複製，然後再去執行那段被複製的程式碼。 
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/3461127.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/3461127.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/3461127.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 13 Jun 2007 14:10:57 +0800</pubDate>
</item>
<item>
	<title>Delegate in C# and Module in Ruby</title>
	<description><![CDATA[
			ruby php c# delegate mix-in

我在《類別繼承、介面宣告與模組混成(mix-in)》中提到 Java 的介面(interface) 無助於提高程式碼再用性。而 jaceju 在回應中提醒我還有 delegate 這種方式。


		]]>
	</description>
	<content:encoded><![CDATA[
			<div class="tags">ruby php c# delegate mix-in</div>
<p>
我在《<a href="http://blog.roodo.com/rocksaying/archives/2860767.html">類別繼承、介面宣告與模組混成(mix-in)</a>》中提到 Java 的介面(interface) 無助於提高程式碼再用性。而 <a href="http://blog.roodo.com/rocksaying/archives/2860767.html#comment-4188757">jaceju</a> 在回應中提醒我還有 delegate 這種方式。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/2872705.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2872705.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2872705.html</guid>
	<category>C/C++</category>
	<pubDate>Sun, 18 Mar 2007 17:59:08 +0800</pubDate>
</item>
<item>
	<title>C++ library 的發展困境, part 2</title>
	<description><![CDATA[
			
jeffhung 在 HEMiDEMi 中回應：應該是因為不懂 template 的奧妙，才會覺得「C++ 中有一層厚厚的濃霧將 template 包圍起來」吧？(HEMiDEMi - 共享書籤 - C++ library 的發展困境)。我其實很欣賞 template 的概念，卻也因此我才說 template 是「C++發展困境」的原因。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
jeffhung 在 HEMiDEMi 中回應：<q>應該是因為不懂 template 的奧妙，才會覺得「C++ 中有一層厚厚的濃霧將 template 包圍起來」吧？(<cite><a href="http://www.hemidemi.com/bookmark/info/383431">HEMiDEMi - 共享書籤 - C++ library 的發展困境</a></cite>)</q>。我其實很欣賞 template 的概念，卻也因此我才說 template 是「C++發展困境」的原因。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/2583288.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2583288.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2583288.html</guid>
	<category>C/C++</category>
	<pubDate>Tue, 19 Dec 2006 23:35:21 +0800</pubDate>
</item>
<item>
	<title>Java SE6 發佈，打破三位一體機制，不再只說 Java language</title>
	<description><![CDATA[
			
Java SE 6 已經發佈 (2006/12/11) ， Sun 新聞稿標題宣稱這是革命性的版本。


Java SE 6 software makes development easier, faster and more cost-efficient and delivers enhanced functionality for web services, dynamic language support, diagnostics, and desktop applications.
Sun News: Sun Announces Revolutionary Version of Java Technology – Java Platform Standard Edition 6

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
Java SE 6 已經發佈 (2006/12/11) ， Sun 新聞稿標題宣稱這是革命性的版本。
</p>
<blockquote>
Java SE 6 software makes development easier, faster and more cost-efficient and delivers enhanced functionality for web services, dynamic language support, diagnostics, and desktop applications.
<cite>Sun News: <a href="http://www.sun.com/smi/Press/sunflash/2006-12/sunflash.20061211.1.xml">Sun Announces Revolutionary Version of Java Technology – Java Platform Standard Edition 6</a></cite>
</blockquote>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/2567157.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2567157.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2567157.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 13 Dec 2006 10:56:59 +0800</pubDate>
</item>
<item>
	<title>C Macro 似乎只剩下讓 programmer 少打些字的功能</title>
	<description><![CDATA[
			
看到《C 的 marco》中例舉的 C Macro ，讓我有憶起舊日時光的感觸。當初覺得 Macro (in Assembly and C) 很有趣，但和最近興起的動態語言比起來， Macro 似乎只剩下讓 programmer 少打些字的功能。再者， Macro 的內容沒什麼規範，換個 C compiler 可能就不能用了。雖然我也是 gcc 使用者的，但這類特殊功能我想還是能免則免。


在符合 ANSI C99 規範的 C compiler 之中，用 inline function 可保有 Macro 的優點，而沒有 Macro 的缺點。An Inline Function is As Fast As a Macro。Also see: Explain Inline Function in C (GCC compiler)。所以現在大多用 inline function 而不用 macro 了。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
看到《<a href="http://blog.gslin.org/archives/2006/11/02/858/">C 的 marco</a>》中例舉的 C Macro ，讓我有憶起舊日時光的感觸。當初覺得 Macro (in Assembly and C) 很有趣，但和最近興起的動態語言比起來， Macro 似乎只剩下讓 programmer 少打些字的功能。再者， Macro 的內容沒什麼規範，換個 C compiler 可能就不能用了。雖然我也是 gcc 使用者的，但這類特殊功能我想還是能免則免。
</p>
<p>
在符合 ANSI C99 規範的 C compiler 之中，用 inline function 可保有 Macro 的優點，而沒有 Macro 的缺點。<q cite="GNU GCC Manual">An Inline Function is As Fast As a Macro</q>。Also see: <a href="http://blog.roodo.com/rocksaying/archives/2139426.html">Explain Inline Function in C (GCC compiler)</a>。所以現在大多用 inline function 而不用 macro 了。
</p>
		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2550044.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2550044.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 06 Dec 2006 18:28:45 +0800</pubDate>
</item>
<item>
	<title>C++ library 的發展困境</title>
	<description><![CDATA[
			
晨星Workshop 提到：


C++現在最缺乏的就是 library的支援，因為相對於Java及一些script language，C++的lib相對的難以開發，需要考慮到的層面太廣了，像是記憶體管控、型別轉換，以及不同平台的實作，造成lib開發的不易

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
<a href="http://blog.roodo.com/gozule/archives/2544198.html">晨星Workshop</a> 提到：
</p>
<blockquote>
C++現在最缺乏的就是 library的支援，因為相對於Java及一些script language，C++的lib相對的難以開發，需要考慮到的層面太廣了，像是記憶體管控、型別轉換，以及不同平台的實作，造成lib開發的不易
</blockquote>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/2546332.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2546332.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2546332.html</guid>
	<category>C/C++</category>
	<pubDate>Mon, 04 Dec 2006 23:43:54 +0800</pubDate>
</item>
<item>
	<title>select() - I/O Multiplexer</title>
	<description><![CDATA[
			
How to use the select(), an I/O Multiplexer


根據《Boost application performance using asynchronous I/O》一文所做的區分，在 POSIX 上的 I/O 處理模式可分為四種。該文所舉的 POSIX AIO API 是晚近較新的處理模式，是 POSIX.1b 基於 realtime system (即時系統、實時系統) 之需求而定的規範內容，其概念是事件驅動模式， AJAX 中的 XMLHttpRequest 調用方式就是這種模式。在 POSIX 傳統上的非同步 I/O 模式 (即 Asynchronous blocking I/O) ，則是使用 select() 來達成。本文將說明這種傳統模式的使用方式。

		]]>
	</description>
	<content:encoded><![CDATA[
			<h3>
How to use the select(), an I/O Multiplexer
</h3>
<p>
根據《<a href="http://www-128.ibm.com/developerworks/linux/library/l-async/">Boost application performance using asynchronous I/O</a>》一文所做的區分，在 POSIX 上的 I/O 處理模式可分為四種。該文所舉的 POSIX AIO API 是晚近較新的處理模式，是 POSIX.1b 基於 realtime system (即時系統、實時系統) 之需求而定的規範內容，其概念是事件驅動模式， AJAX 中的 XMLHttpRequest 調用方式就是這種模式。在 POSIX 傳統上的非同步 I/O 模式 (即 Asynchronous blocking I/O) ，則是使用 select() 來達成。本文將說明這種傳統模式的使用方式。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/2333878.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2333878.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2333878.html</guid>
	<category>C/C++</category>
	<pubDate>Thu, 19 Oct 2006 23:13:20 +0800</pubDate>
</item>
<item>
	<title>2006 年乙級電腦軟體設計技術士應考記</title>
	<description><![CDATA[
			
隔了一年後再次應考乙級電腦軟體設計技術士 C++ 職類，依然歃羽而歸，真是令我情何以堪。好在學科成績可以保留三年，明年再挑戰吧。雖然已經是第三年進行術科檢定了 (第一年我沒考) ，但考題內容似乎還不是很完善，監考老師在檢定中途陸續修訂了數次題目的內容，多少令應檢者有些困擾。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
隔了一年後再次應考乙級電腦軟體設計技術士 C++ 職類，依然歃羽而歸，真是令我情何以堪。好在學科成績可以保留三年，明年再挑戰吧。雖然已經是第三年進行術科檢定了 (第一年我沒考) ，但考題內容似乎還不是很完善，監考老師在檢定中途陸續修訂了數次題目的內容，多少令應檢者有些困擾。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/2263707.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2263707.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2263707.html</guid>
	<category>C/C++</category>
	<pubDate>Sun, 08 Oct 2006 20:49:58 +0800</pubDate>
</item>
<item>
	<title>多工作業下的資料讀寫處理事項 - read()/write() 被 signal 中斷的處理</title>
	<description><![CDATA[
			
當 read() 或 write() 在處理資料時，若剛好產生了一個 signal ，系統為了要處理這個 signal ，便會中斷 read() 或 write() ，將程序狀態切換到 signal 的處理動作中。
而當 signal 的處理動作結束後，再將程序狀態切換到 read() 或 write() 的後續處理動作。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
當 read() 或 write() 在處理資料時，若剛好產生了一個 signal ，系統為了要處理這個 signal ，便會中斷 read() 或 write() ，將程序狀態切換到 signal 的處理動作中。
而當 signal 的處理動作結束後，再將程序狀態切換到 read() 或 write() 的後續處理動作。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/2159383.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2159383.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2159383.html</guid>
	<category>C/C++</category>
	<pubDate>Sun, 17 Sep 2006 18:11:59 +0800</pubDate>
</item>
<item>
	<title>Explain Inline Function in C (GCC compiler)</title>
	<description><![CDATA[
			
在 C++ 剛出現的時候，大多數 C++ compiler 引入了一個新關鍵字 'inline' ，用於解決個體行為 (methods of object) 的部份效率瓶頸。直到 ISO C99 時，才正式將 inline 定於規範之中。不過多數的 C/C++ compiler 只將 inline 用於 C++ program 中，並未延伸到 C program (*1)。'inline' is a keyword of ANSI/ISO C99. Some C/C++ compilers do not allow to use this in C program. '__inline__' is a keyword of GNU GCC. Some compilers use '__inline'.
)。
GCC 最晚在 2.9 版 ，為 C program 加入了一個擴充關鍵字 '__inline__' (*2)，使得 programmer 可以在 C program 中使用 inline function 。請參考 GNU GCC Info document setcion 'An Inline Function is As Fast As a Macro'. 說明文件意簡言骸，我將配合程式碼說明 inline function 在 C program 中運作的相關細節。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
在 C++ 剛出現的時候，大多數 C++ compiler 引入了一個新關鍵字 '<span class="dfn">inline</span>' ，用於解決個體行為 (methods of object) 的部份效率瓶頸。直到 ISO C99 時，才正式將 <span class="dfn">inline</span> 定於規範之中。不過多數的 C/C++ compiler 只將 <span class="dfn">inline</span> 用於 C++ program 中，並未延伸到 C program (*1)。'inline' is a keyword of ANSI/ISO C99. Some C/C++ compilers do not allow to use this in C program. '__inline__' is a keyword of GNU GCC. Some compilers use '__inline'.
</span>)。
GCC 最晚在 2.9 版 ，為 C program 加入了一個擴充關鍵字 '<span class="dfn">__inline__</span>' (*2)，使得 programmer 可以在 C program 中使用 inline function 。請參考 GNU GCC Info document setcion '<a href="http://sunsite.ualberta.ca/Documentation/Gnu/gcc-3.0.2/html_node/gcc_102.html">An Inline Function is As Fast As a Macro</a>'. 說明文件意簡言骸，我將配合程式碼說明 inline function 在 C program 中運作的相關細節。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/2139426.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2139426.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2139426.html</guid>
	<category>C/C++</category>
	<pubDate>Tue, 12 Sep 2006 20:29:03 +0800</pubDate>
</item>
<item>
	<title>How to use MinGW GNU GCC and with PSPad</title>
	<description><![CDATA[
			
"MinGW" 是取 Minimalist GNU for Windows 計劃之意，其目標為提供一個可在 Win32 平台上開發 Win32 native code 的 GNU GCC tools ，而非提供 Unix 程式移植到 Win32 平台之用，此即為其 Minimalist 之意。 2000年時，我曾在「安裝 GCC 2.95/Mingw32」說明過 MinGW 。不過那篇文章中的資訊已經過時了，現在 MinGW 的正式網址為 http://www.mingw.org/ 。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
"MinGW" 是取 Minimalist GNU for Windows 計劃之意，其目標為提供一個可在 Win32 平台上開發 Win32 native code 的 GNU GCC tools ，而非提供 Unix 程式移植到 Win32 平台之用，此即為其 Minimalist 之意。 2000年時，我曾在「<a href="http://home.educities.edu.tw/shirock/comp/Install_Mingw32.htm">安裝 GCC 2.95/Mingw32</a>」說明過 MinGW 。不過那篇文章中的資訊已經過時了，現在 MinGW 的正式網址為 <a href="http://www.mingw.org/">http://www.mingw.org/</a> 。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/2119992.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2119992.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2119992.html</guid>
	<category>C/C++</category>
	<pubDate>Fri, 08 Sep 2006 13:48:33 +0800</pubDate>
</item>
<item>
	<title>Borland C++ 5.5 Compiler with PSPad</title>
	<description><![CDATA[
			
雖然 Borland C++ 5.5 Compiler 是一套純命令列工具，但配合適當的程式編輯器，我們仍然可以建置出一個方便的視窗整合開發環境 (IDE) 。我慣用的輕量級程式編輯器是 PSPad ，就用它來說明吧。關於 PSPad 的一般性設定請參考它的說明或其他人寫的文章。此處直接說明關於 compiler 的設定。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
雖然 Borland C++ 5.5 Compiler 是一套純命令列工具，但配合適當的程式編輯器，我們仍然可以建置出一個方便的視窗整合開發環境 (IDE) 。我慣用的輕量級程式編輯器是 <a href="http://www.pspad.com/en/">PSPad</a> ，就用它來說明吧。關於 PSPad 的一般性設定請參考它的說明或其他人寫的文章。此處直接說明關於 compiler 的設定。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/2112499.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2112499.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2112499.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 06 Sep 2006 18:33:28 +0800</pubDate>
</item>
<item>
	<title>How to use Borland C/C++ 5.5 Complier</title>
	<description><![CDATA[
			
Borland C/C++ 5.5 Compiler 是由 Inspire (前身是 Borland) 免費提供下載與使用的 C/C++ compiler 和相關工具 (我記得大約在 2000 年時就已經發佈這項免費下載的資訊)。檔案不大，下載包約 8.7MB ，但已包含了完整的 ANSI/ISO C/C++ 的核心，包括 STL (Standard Template Library) ，對 ANSI C++ 的支援涵蓋到 C99 的規範內容。就 C/C++ language and programming 教學用途而言，已是非常完整的工具。
如果要開發應用軟體，其實也足夠，只是要自行下載與安裝各式 SDK (Software Development Kits) 罷了。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
Borland C/C++ 5.5 Compiler 是由 Inspire (前身是 Borland) 免費提供下載與使用的 C/C++ compiler 和相關工具 (我記得大約在 2000 年時就已經發佈這項免費下載的資訊)。檔案不大，下載包約 8.7MB ，但已包含了完整的 ANSI/ISO C/C++ 的核心，包括 STL (Standard Template Library) ，對 ANSI C++ 的支援涵蓋到 C99 的規範內容。就 C/C++ language and programming 教學用途而言，已是非常完整的工具。
如果要開發應用軟體，其實也足夠，只是要自行下載與安裝各式 SDK (Software Development Kits) 罷了。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/2112330.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/2112330.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/2112330.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 06 Sep 2006 17:46:36 +0800</pubDate>
</item>
<item>
	<title>ASP.Net::SqlParameter 和 Ad-Hoc 該用哪種方法？</title>
	<description><![CDATA[
			回應「對SqlParameter的不求甚解」一文。SqlParameter 和 Ad-Hoc 這兩種用法的選擇，嚴格來說是 programmer 的態度與技術問題，而不是安全性問題。我的習慣是 Ad-Hoc ，但我同時強調，資料的驗證與查核是 programmer 的份內工作，所以我的程式風格如下。試問這種 Ad-Hoc 寫法的安全性，會比 SqlParameter 差嗎？

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>回應「<a href="http://blog.sina.com.tw/dotnet/article.php?pbgid=4907&entryid=11318" target="_blank" class="outside">對SqlParameter的不求甚解</a>」一文。SqlParameter 和 Ad-Hoc 這兩種用法的選擇，嚴格來說是 programmer 的態度與技術問題，而不是安全性問題。我的習慣是 Ad-Hoc ，但我同時強調，資料的驗證與查核是 programmer 的份內工作，所以我的程式風格如下。試問這種 Ad-Hoc 寫法的安全性，會比 SqlParameter 差嗎？
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/1816510.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/1816510.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/1816510.html</guid>
	<category>C/C++</category>
	<pubDate>Mon, 26 Jun 2006 10:36:45 +0800</pubDate>
</item>
<item>
	<title>ASP.Net:: 產生 XML Schema</title>
	<description><![CDATA[
			
基於工作需要，我翻了一下 .Net Framework 中對 XML Schema (XSD) 的支援，想找在程式中維護 XML Schema 的方法。找到了兩種方法，一種是使用 System.Xml.Schema 類別，另一種是透過 DataSet 。以下是分別用這兩種方法產生同一份 XML Schema 的程式。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
基於工作需要，我翻了一下 .Net Framework 中對 XML Schema (XSD) 的支援，想找在程式中維護 XML Schema 的方法。找到了兩種方法，一種是使用 System.Xml.Schema 類別，另一種是透過 DataSet 。以下是分別用這兩種方法產生同一份 XML Schema 的程式。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/1776571.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/1776571.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/1776571.html</guid>
	<category>C/C++</category>
	<pubDate>Mon, 19 Jun 2006 17:42:22 +0800</pubDate>
</item>
<item>
	<title>ASP.Net::是用 codebehind 還是用 src ？</title>
	<description><![CDATA[
			
最近因工作需要，開始接觸 .Net Framework ，公司用的是 M$ VisualStupid 2003 .Net ，而我在家裡，當然是用 Mono 囉。說到 VisualStupid 這套工具，真是讓我愈用愈氣。我不懂 M$ 在想什麼。


		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
最近因工作需要，開始接觸 .Net Framework ，公司用的是 M$ VisualStupid 2003 .Net ，而我在家裡，當然是用 <a href="http://www.mono-project.com/" target="_blank">Mono</a> 囉。說到 VisualStupid 這套工具，真是讓我愈用愈氣。我不懂 M$ 在想什麼。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/1690704.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/1690704.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/1690704.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 31 May 2006 22:33:15 +0800</pubDate>
</item>
<item>
	<title>ASP.Net::自定控制項的 Property</title>
	<description><![CDATA[
			ASP.Net:: 自定控制項的 Property

在自訂控制項類別中，定義 public property 成員，則在 ASPX 頁面標籤中，就可使用相同名稱的標籤屬性(tag attribute)。 ASP.Net 會在 Page_Load() 之前就調用自訂控制項的 property set method ，設定控制項的屬性值。

		]]>
	</description>
	<content:encoded><![CDATA[
			<h1>ASP.Net:: 自定控制項的 Property</h1>
<p>
在自訂控制項類別中，定義 public property 成員，則在 ASPX 頁面標籤中，就可使用相同名稱的標籤屬性(tag attribute)。 ASP.Net 會在 Page_Load() 之前就調用自訂控制項的 property set method ，設定控制項的屬性值。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/1690535.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/1690535.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/1690535.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 31 May 2006 22:15:25 +0800</pubDate>
</item>
<item>
	<title>ASP.Net::Validator 驗證動作的執行時機</title>
	<description><![CDATA[
			Validator 驗證動作的執行時機

MSDN: 「因為這個屬性的預設值為 true ，所以如果您在執行驗證前查詢這個屬性，它會傳回 true 。例如，如果您企圖使用網頁之 Control.Load 事件中的這個屬性，則可能會發生這個狀況。」


		]]>
	</description>
	<content:encoded><![CDATA[
			<h4>Validator 驗證動作的執行時機</h4>
<blockquote>
MSDN: 「因為這個屬性的預設值為 true ，所以如果您在執行驗證前查詢這個屬性，它會傳回 true 。例如，如果您企圖使用網頁之 Control.Load 事件中的這個屬性，則可能會發生這個狀況。」
</blockquote>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/1690421.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/1690421.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/1690421.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 31 May 2006 21:51:10 +0800</pubDate>
</item>
<item>
	<title>乙級電腦軟體設計技術士應考記</title>
	<description><![CDATA[
			
上週六，我為了乙級電腦軟體設計技術士的術科測驗，跑了一趟台中，到勤益技術學院應考。


說起來，這次應檢經驗非常不愉快啊。明明就是在高雄報名，也在高雄考學科，竟然要我跑到台中考術科，感覺非常不爽，而且基本上是砸鍋了。沒想到出了一題最優路徑選擇演算法的實作題，偏偏我最弱的就是那一點，沒做完那題，是一定不過的。寫了十年 C/C++ 程式，竟然沒考過，實在是太大意了。附帶一提，當年 (民國83年) 丙級電腦設計技術士一開辦，我就考到了，隔了十二年「終於」等到乙級檢定...


		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
上週六，我為了乙級電腦軟體設計技術士的術科測驗，跑了一趟台中，到勤益技術學院應考。
</p>
<p>
說起來，這次應檢經驗非常不愉快啊。明明就是在高雄報名，也在高雄考學科，竟然要我跑到台中考術科，感覺非常不爽，而且基本上是砸鍋了。沒想到出了一題最優路徑選擇演算法的實作題，偏偏我最弱的就是那一點，沒做完那題，是一定不過的。寫了十年 C/C++ 程式，竟然沒考過，實在是太大意了。附帶一提，當年 (民國83年) 丙級電腦設計技術士一開辦，我就考到了，隔了十二年「終於」等到乙級檢定...
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/1122912.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/1122912.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/1122912.html</guid>
	<category>C/C++</category>
	<pubDate>Tue, 14 Feb 2006 20:49:01 +0800</pubDate>
</item>
</channel>
</rss>