<?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>Java Json-lib note</title>
	<description><![CDATA[
			
    JSON array: convert to Java JSONArray.
    JSONArray instance: convert to List.
    List: convert to Java JSONArray.
    JSONArray instance: convert to JSON array(String).
    ClassCastException.
    You can not use iterator() for enhanced for-loop.


		]]>
	</description>
	<content:encoded><![CDATA[
			<ol>
    <li>JSON array: convert to Java JSONArray.</li>
    <li>JSONArray instance: convert to List.</li>
    <li>List: convert to Java JSONArray.</li>
    <li>JSONArray instance: convert to JSON array(String).</li>
    <li>ClassCastException.</li>
    <li>You can not use iterator() for enhanced for-loop.</li>
</ol>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/11126901.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/11126901.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/11126901.html</guid>
	<category>C/C++</category>
	<pubDate>Mon, 21 Dec 2009 16:16:25 +0800</pubDate>
</item>
<item>
	<title>Hibernate 查詢某個欄位的絕對值</title>
	<description><![CDATA[
			
當我們試圖從資料庫中查詢某個欄位的絕對值時，我們有兩種途徑。第一種是自定新的 Hibernate UserType ，再透過 HQL 查詢。
第二種則是利用 SQL abs() 函數，透過 SQL 查詢。



自定新的 Hibernate UserType 並不太難，僅需實作 UserType 介面，再套用一個範例來修改即可。
範例可參考 https://www.hibernate.org/388.html 。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
當我們試圖從資料庫中查詢某個欄位的絕對值時，我們有兩種途徑。第一種是自定新的 Hibernate UserType ，再透過 HQL 查詢。
第二種則是利用 SQL <code>abs()</code> 函數，透過 SQL 查詢。
</p>

<p>
自定新的 Hibernate UserType 並不太難，僅需實作 UserType 介面，再套用一個範例來修改即可。
範例可參考 https://www.hibernate.org/388.html 。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/11126093.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/11126093.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/11126093.html</guid>
	<category>C/C++</category>
	<pubDate>Mon, 21 Dec 2009 15:09:48 +0800</pubDate>
</item>
<item>
	<title>Java Enum 範例 - enum HttpStatusCode</title>
	<description><![CDATA[
			
HTTP 協定規範了 HTTP Status Code，這個狀態碼本身就包含了兩種表達形式，即三位數字的狀態碼，與文字訊息的狀態訊息。


加上 Enum 的定義後，在 Java 語言內就可以用三種表達形式，例如: 200, "Ok", HttpStatusCode.Ok。這實在是用來展示 Enum 用法的絕佳範例。


		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
HTTP 協定規範了 <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes">HTTP Status Code</a>，這個狀態碼本身就包含了兩種表達形式，即三位數字的狀態碼，與文字訊息的狀態訊息。
</p>
<p>
加上 Enum 的定義後，在 Java 語言內就可以用三種表達形式，例如: 200, "Ok", HttpStatusCode.Ok。這實在是用來展示 Enum 用法的絕佳範例。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/10973291.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/10973291.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/10973291.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 09 Dec 2009 22:35:43 +0800</pubDate>
</item>
<item>
	<title>Java Enum and Generic</title>
	<description><![CDATA[
			
Enum(列舉) 在 C 語言時代就是賦予常數值可讀意義的簡便方法。 C# 也是一開始就提供 Enum 型別。 Java 則遲到 5.0 才提供。不過遲來總比不來好。


本文是 Java 語言的 Enum (列舉)型別與 Generic (泛型) 能力共同運作的筆記。 Java 的列舉型別是一種特殊型別，當我們要在列舉型別的場合中加上泛型能力時，需要運用一些不同的處理手段。我們也需要用到 Reflection (反射)。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
Enum(列舉) 在 C 語言時代就是賦予常數值可讀意義的簡便方法。 C# 也是一開始就提供 Enum 型別。 Java 則遲到 5.0 才提供。不過遲來總比不來好。
</p>
<p>
本文是 Java 語言的 Enum (列舉)型別與 Generic (泛型) 能力共同運作的筆記。 Java 的列舉型別是一種特殊型別，當我們要在列舉型別的場合中加上泛型能力時，需要運用一些不同的處理手段。我們也需要用到 Reflection (反射)。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/10960895.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/10960895.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/10960895.html</guid>
	<category>C/C++</category>
	<pubDate>Wed, 09 Dec 2009 00:10:14 +0800</pubDate>
</item>
<item>
	<title>與 metavige 和 alexchen 對話 Java 語言</title>
	<description><![CDATA[
			

所以當然這個 Java 老語言來說，自然沒得比了~


目前的開發方式或者是環境變遷，強調的是快速開發，以往那種慢工出細活的方式已經有點不合時宜了

metavige



有趣的是，Java一點都不老。我在 從中介編程與反射能力來談 Java 語言 列出十年世代的程式語言列表，Java 名列其中。它比Python 年輕3歲，跟Ruby, PHP, JavaScript 同年發佈。單純看語言的特性，Smalltalk這個40歲的程式語言都比 Java 靈活，這才是 Java 令我們老輩程序員驚奇的事。


		]]>
	</description>
	<content:encoded><![CDATA[
			<blockquote>
<p>
所以當然這個 Java 老語言來說，自然沒得比了~
</p>
<p>
目前的開發方式或者是環境變遷，強調的是快速開發，以往那種慢工出細活的方式已經有點不合時宜了
</p>
<cite><a href="http://blog.roodo.com/rocksaying/archives/10867569.html#comment-20134467">metavige</a></cite>
</blockquote>

<p>
有趣的是，Java一點都不老。我在 <a href="http://blog.roodo.com/rocksaying/archives/10717609.html" class="bookname_notation">從中介編程與反射能力來談 Java 語言</a> 列出十年世代的程式語言列表，Java 名列其中。它比Python 年輕3歲，跟Ruby, PHP, JavaScript 同年發佈。單純看語言的特性，Smalltalk這個40歲的程式語言都比 Java 靈活，這才是 Java 令我們老輩程序員驚奇的事。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/10914229.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/10914229.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/10914229.html</guid>
	<category>C/C++</category>
	<pubDate>Thu, 03 Dec 2009 23:50:43 +0800</pubDate>
</item>
<item>
	<title>從 C++ Template 到 Java Generic，一步一步來</title>
	<description><![CDATA[
			
Java 實作了泛型(generic)機制以實現 C++ 樣板(template) 的一部份能力，兩者的語法乍看之下也有些相似。
雖然我覺得 C++ 樣板很難搞，而且兩者的語法有點像，但是相較於完全陌生的 Java 泛型，我用起 C++ 樣板來還是比較熟練的。很自然的，當我試圖要用 Java 的泛型重構程式碼時，我會先從 C++ 樣板的觀點來思考。


我將日前工作中碰到的一段我想用泛型重構的程式碼，取其大綱出來練習。本文紀錄了大致的改寫過程。

		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
Java 實作了泛型(generic)機制以實現 C++ 樣板(template) 的一部份能力，兩者的語法乍看之下也有些相似。
雖然我覺得 <a href="http://blog.roodo.com/rocksaying/archives/2583288.html">C++ 樣板很難搞</a>，而且兩者的語法有點像，但是相較於完全陌生的 Java 泛型，我用起 C++ 樣板來還是比較熟練的。很自然的，當我試圖要用 Java 的泛型重構程式碼時，我會先從 C++ 樣板的觀點來思考。
</p>
<p>
我將日前工作中碰到的一段我想用泛型重構的程式碼，取其大綱出來練習。本文紀錄了大致的改寫過程。
</p>
		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/10890551.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/10890551.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/10890551.html</guid>
	<category>C/C++</category>
	<pubDate>Tue, 01 Dec 2009 20:35:05 +0800</pubDate>
</item>
<item>
	<title>嘗試使用 Java 的 reflection 重構指派資料欄位值的程式碼</title>
	<description><![CDATA[
			
如果你熟悉動態語言，你大概會嘗試使用 Java 的反射(reflection)來重構程式碼。我個人提供一個重構經驗，告訴你使用 Java 的反射時，你可能會感到失望。


這是一段透過 Hibernate 進行的資料更新動作。我從使用者端取得要更新的資料項，接著先向 Hibernate 查詢要更新的資料項目是否存在，存在的話再把新的資料內容更新進去。


		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
如果你熟悉動態語言，你大概會嘗試使用 Java 的反射(reflection)來重構程式碼。我個人提供一個重構經驗，告訴你使用 Java 的反射時，你可能會感到失望。
</p>
<p>
這是一段透過 Hibernate 進行的資料更新動作。我從使用者端取得要更新的資料項，接著先向 Hibernate 查詢要更新的資料項目是否存在，存在的話再把新的資料內容更新進去。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/10867569.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/10867569.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/10867569.html</guid>
	<category>C/C++</category>
	<pubDate>Mon, 30 Nov 2009 00:33:07 +0800</pubDate>
</item>
<item>
	<title>從中介編程與反射能力來談 Java 語言</title>
	<description><![CDATA[
			
公司這個月開始一件專案，我分配到用 Java 開發 web service 那一塊。
於是我親身體驗到一本書說的故事。




找一個很聰明，但是沒有 Java 經驗的開發者，讓他去學學 Java web 企業應用的那一堆技術，然後再問問他的想法。問題是兩方面的，首先，它很難；再者，失敗的後果很悲慘。


對我來說，或許這意味者程式碼應該在較高等級的抽象中，而我們無法在 Java 中做到這一點。


《超越 Java》(Beyond Java)，Bruce Tate，O'Reilly出版



我不算聰明的開發者，但十幾年基本功練下來，功底還算紥實。OOP, ORM, Design pattern 這些概念都懂。Web 架構更是熟悉。儘管如此，當我試圖使用 Spring, Hibernate 等框架時，我完全無法理解為什麼 Java 語言可以把一件簡單的事搞成這麼複雜。這件事促成我寫出《不同程式語言的中介編程與反射能力系列文章》。


		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
公司這個月開始一件專案，我分配到用 Java 開發 web service 那一塊。
於是我親身體驗到一本書說的故事。
</p>

<blockquote>
<p>
找一個很聰明，但是沒有 Java 經驗的開發者，讓他去學學 Java web 企業應用的那一堆技術，然後再問問他的想法。問題是兩方面的，首先，它很難；再者，失敗的後果很悲慘。
</p>
<p>
對我來說，或許這意味者程式碼應該在較高等級的抽象中，而我們無法在 Java 中做到這一點。
</p>
<cite>
《超越 Java》(Beyond Java)，Bruce Tate，O'Reilly出版
</cite>
</blockquote>
<p>
我不算聰明的開發者，但十幾年基本功練下來，功底還算紥實。OOP, ORM, Design pattern 這些概念都懂。Web 架構更是熟悉。儘管如此，當我試圖使用 Spring, Hibernate 等框架時，我完全無法理解為什麼 Java 語言可以把一件簡單的事搞成這麼複雜。這件事促成我寫出《不同程式語言的中介編程與反射能力系列文章》。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/10717609.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/10717609.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/10717609.html</guid>
	<category>C/C++</category>
	<pubDate>Sun, 15 Nov 2009 23:41:17 +0800</pubDate>
</item>
<item>
	<title>擁抱變化，從函數指標到函數個體</title>
	<description><![CDATA[
			
我來說個關於函數指標(在 C 語言中，function 就是一個 function pointer)與函數個體(function object)的小故事。這個故事還有一個 Java 版的，在本文的最後一節。只對 Java 語言有興趣的，可以先看後面的 Java 版，再回頭看前面。



有一天，"偉大的"架構設計師交代甲和乙兩位程序員共同負責撰寫一個小程式。這個程式配置了兩個陣列，一個是傳統的整數陣列，一個是整數vector。這個程式要將這兩個陣列的內容傾印出來。


		]]>
	</description>
	<content:encoded><![CDATA[
			<p>
我來說個關於函數指標(<span class="Onote">在 C 語言中，function 就是一個 function pointer</span>)與函數個體(function object)的小故事。這個故事還有一個 Java 版的，在本文的最後一節。只對 Java 語言有興趣的，可以先看後面的 Java 版，再回頭看前面。
</p>

<p>
有一天，"偉大的"架構設計師交代甲和乙兩位程序員共同負責撰寫一個小程式。這個程式配置了兩個陣列，一個是傳統的整數陣列，一個是整數<code>vector</code>。這個程式要將這兩個陣列的內容傾印出來。
</p>

		<a class="acontinues" href="http://blog.roodo.com/rocksaying/archives/10700785.html">(繼續閱讀...)</a>
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/rocksaying/archives/10700785.html</link>
	<guid>http://blog.roodo.com/rocksaying/archives/10700785.html</guid>
	<category>C/C++</category>
	<pubDate>Sat, 14 Nov 2009 23:52:42 +0800</pubDate>
</item>
<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>