<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Joe Horn 的啟示錄</title>
	
	<link>http://www.joehorn.idv.tw</link>
	<description>Joe Horn's Blog</description>
	<lastBuildDate>Wed, 25 Aug 2010 18:16:46 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<feedburner:info uri="joehorn-rss2" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://www.joehorn.idv.tw/feed/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><item>
		<title>PHP 的 mysqlnd（MySQL Native Driver）</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/MhYCu7G7v40/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/08/25/851/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 14:56:57 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[mysqlnd]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=851</guid>
		<description><![CDATA[PHP 自 5.3.0 開始，引入 mysqlnd 這個 extension。 在 5.3.0 的 Full ChangeLog 中可以看到這行： Added mysqlnd extension as replacement for libmysql for ext/mysql, mysqli and PDO_mysql. (Andrey, Johannes, Ulf) 依照個人的過往經驗，native driver 的效能都會比較好，而 mysqlnd 也不例外（有興趣的可以看看這篇文章）。 比較可惜的是，mysqlnd 在 Windows 平台的 PHP 是預設套件；在 *NIX 平台，使用前必須在編譯前就先做好設定（configure；參數可參考 PHP 官方的mysqlnd 安裝文件）。 剛才，很高興看到 FreeBSD 的 PHP5 ports 加入了 option，讓我們可以輕鬆搞定。 Technorati Tags: FreeBSD, MySQL, [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2008/09/03/304/' rel='bookmark' title='Permanent Link: FreeBSD i386 與 amd64 platform 的差異'>FreeBSD i386 與 amd64 platform 的差異</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2010/03/08/768/' rel='bookmark' title='Permanent Link: [MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要'>[MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/05/29/609/' rel='bookmark' title='Permanent Link: 網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"'>網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/08/25/851/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p><a href="http://php.net/" target="_blank">PHP</a> 自 5.3.0 開始，引入 <a href="http://dev.mysql.com/downloads/connector/php-mysqlnd/" target="_blank">mysqlnd</a> 這個 extension。<br />
在 <a href="http://www.php.net/ChangeLog-5.php#5.3.0" target="_blank">5.3.0 的 Full ChangeLog</a> 中可以看到這行：</p>
<blockquote><p>Added mysqlnd extension as replacement for libmysql for ext/mysql, mysqli and PDO_mysql. (Andrey, Johannes, Ulf)</p></blockquote>
<p>依照個人的過往經驗，native driver 的效能都會比較好，而 <a href="http://dev.mysql.com/downloads/connector/php-mysqlnd/" target="_blank">mysqlnd</a> 也不例外（有興趣的可以看看<a href="http://blog.ulf-wendel.de/?p=136" title="How fast is mysqlnd-5.0.0-alpha?" target="_blank">這篇文章</a>）。</p>
<p>比較可惜的是，<a href="http://dev.mysql.com/downloads/connector/php-mysqlnd/" target="_blank">mysqlnd</a> 在 Windows 平台的 <a href="http://php.net/" target="_blank">PHP</a> 是預設套件；在 *NIX 平台，使用前必須在編譯前就先做好設定（configure；參數可參考 <a href="http://tw2.php.net/manual/en/mysqlnd.install.php" target="_blank">PHP 官方的mysqlnd 安裝文件</a>）。</p>
<p>剛才，很高興看到 <a href="http://www.freebsd.org">FreeBSD</a> 的 <a href="http://www.freshports.org/lang/php5/">PHP5 ports</a> 加入了 option，讓我們可以輕鬆搞定。 <img src='http://www.joehorn.idv.tw/wp-includes/images/smilies/joehorn/my_cool.png' alt='8)' class='wp-smiley' /> </p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/FreeBSD' rel='tag' target='_self'>FreeBSD</a>, <a class='technorati-link' href='http://technorati.com/tag/MySQL' rel='tag' target='_self'>MySQL</a>, <a class='technorati-link' href='http://technorati.com/tag/mysqlnd' rel='tag' target='_self'>mysqlnd</a>, <a class='technorati-link' href='http://technorati.com/tag/PHP' rel='tag' target='_self'>PHP</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2008/09/03/304/' rel='bookmark' title='Permanent Link: FreeBSD i386 與 amd64 platform 的差異'>FreeBSD i386 與 amd64 platform 的差異</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2010/03/08/768/' rel='bookmark' title='Permanent Link: [MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要'>[MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/05/29/609/' rel='bookmark' title='Permanent Link: 網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"'>網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/PVlhX86_2Vg8Oj6Mcqwnb6E11B0/0/da"><img src="http://feedads.g.doubleclick.net/~a/PVlhX86_2Vg8Oj6Mcqwnb6E11B0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PVlhX86_2Vg8Oj6Mcqwnb6E11B0/1/da"><img src="http://feedads.g.doubleclick.net/~a/PVlhX86_2Vg8Oj6Mcqwnb6E11B0/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/08/25/851/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/08/25/851/</feedburner:origLink></item>
		<item>
		<title>別再瀏覽「看看誰把你從 MSN 聯繫名單中刪除了」這種網站了</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/WiJDx2XhF-E/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/08/13/846/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 17:55:18 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[MSN]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Windows Live Messenger]]></category>
		<category><![CDATA[WLM]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=846</guid>
		<description><![CDATA[剛剛在 WLM（原稱 MSN）收到這種訊息： ###### 說： 看看誰把妳從他的MSN聯繫名單中刪除了。 http://www.#######chat.info?mid=13868233133262797975 心血來潮上來貼這篇文章。 這種訊息應該不少人都收過，這種網站也應該有很多人看過。 我無法理解的是，當一個陌生的網站要你輸入你在其他網站或軟體的帳號密碼時，你怎麼能安心的輸入？ 你能保證這個網站不會紀錄你輸入的密碼，用你的帳號密碼為非作歹？ 這樣還不懂的話，我舉個生活化一點的例子： 陌生人：「我能幫你查你在XX證券開立的帳戶裡目前總值是多少哦！」 網站標題：「我能幫你查看看有誰把你從 MSN 聯繫名單中刪除了哦！」 你：好啊好啊！我想知道！怎麼查？ 陌生人：只要給我你的帳戶的帳號跟密碼，我就可以幫你查。 網站內容：「請輸入你的帳號跟密碼，我就可以幫你查！」 假如真的有陌生人這麼跟你說，你會給他帳號跟密碼嗎？ 醒醒吧！ 如果你已經把帳號密碼送給某個（或是某些）網站的話，就... 快點變更密碼吧。 如果你收到朋友傳送類似的訊息，或是怪怪的網站給你的話，請回訊給對方，提醒對方變更密碼，甚至是檢查電腦是否中毒。 Technorati Tags: MSN, security, Windows Live Messenger, WLM No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/08/13/846/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>剛剛在 <a href="http://messenger.live.com" title="Windows Live Messenger" target="_blank">WLM</a>（原稱 MSN）收到這種訊息：</p>
<blockquote><p>###### 說：<br />
看看誰把妳從他的MSN聯繫名單中刪除了。</p>
<p>http://www.#######chat.info?mid=13868233133262797975</p></blockquote>
<p>心血來潮上來貼這篇文章。</p>
<p>這種訊息應該不少人都收過，這種網站也應該有很多人看過。<br />
我無法理解的是，當一個陌生的網站要你輸入你在其他網站或軟體的帳號密碼時，你怎麼能安心的輸入？<br />
你能保證這個網站不會紀錄你輸入的密碼，用你的帳號密碼為非作歹？</p>
<p>這樣還不懂的話，我舉個生活化一點的例子：</p>
<blockquote><p>陌生人：「我能幫你查你在XX證券開立的帳戶裡目前總值是多少哦！」<br />
<font color="red">網站標題：「我能幫你查看看有誰把你從 MSN 聯繫名單中刪除了哦！」</font></p>
<p>你：好啊好啊！我想知道！怎麼查？<br />
陌生人：只要給我你的帳戶的帳號跟密碼，我就可以幫你查。<br />
<font color="red">網站內容：「請輸入你的帳號跟密碼，我就可以幫你查！」</font></p></blockquote>
<p>假如真的有陌生人這麼跟你說，你會給他帳號跟密碼嗎？<br />
醒醒吧！ <img src='http://www.joehorn.idv.tw/wp-includes/images/smilies/joehorn/my_jejeje.jpg' alt=':evil:' class='wp-smiley' /> </p>
<p>如果你已經把帳號密碼送給某個（或是某些）網站的話，就... 快點變更密碼吧。<br />
如果你收到朋友傳送類似的訊息，或是怪怪的網站給你的話，請回訊給對方，提醒對方變更密碼，甚至是檢查電腦是否中毒。</p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/MSN' rel='tag' target='_self'>MSN</a>, <a class='technorati-link' href='http://technorati.com/tag/security' rel='tag' target='_self'>security</a>, <a class='technorati-link' href='http://technorati.com/tag/Windows+Live+Messenger' rel='tag' target='_self'>Windows Live Messenger</a>, <a class='technorati-link' href='http://technorati.com/tag/WLM' rel='tag' target='_self'>WLM</a></p>

<!-- end wp-tags-to-technorati -->


<p>No related posts.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/f8fTtDLPifQCCPCIz35IMmkLMY0/0/da"><img src="http://feedads.g.doubleclick.net/~a/f8fTtDLPifQCCPCIz35IMmkLMY0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/f8fTtDLPifQCCPCIz35IMmkLMY0/1/da"><img src="http://feedads.g.doubleclick.net/~a/f8fTtDLPifQCCPCIz35IMmkLMY0/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/08/13/846/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/08/13/846/</feedburner:origLink></item>
		<item>
		<title>[PHP] 試玩 MongoDB 的資料關聯</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/3dJGoms6IyM/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/08/08/840/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 10:57:21 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[ODBMS]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=840</guid>
		<description><![CDATA[發現 MongoDB 是好一陣子前的事，而我也在某台機器上把它裝起來。 之前玩的時候，發現 MongoDB 不須帳號與密碼就可以連接，而且也無法配置使用者權限，所以把它丟在旁邊。 前幾天，我在網路上看到網友詢問 MongoDB 有沒有辦法作 JOIN，得到的答案是否定的。 趁著今天在家閒閒沒事作，書也看完幾個段落，就透過 PHP 來試試這種 ODBMS 如何實作資料關聯。 MongoDB 與常見的資料庫（例如：MySQL）有些微的不同： 資料庫 資料表 MongoDB 稱之為 Database（DB） Collection MySQL 稱之為 Database（DB） Table 先把這個觀念講清楚，底下的範例程式碼才不會看得霧煞煞。 首先，先建立 DB 與 Collection： // 連接 MongoDB $m = new Mongo(); // 連接資料庫，名稱就是 test $testDB = $m-&#62;selectDB( 'test' ); // 建立 Collection，名稱分別是 user 與 sex $testDB-&#62;createCollection( 'user' [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2008/01/13/268/' rel='bookmark' title='Permanent Link: 在 MySQL 中處理時間資料'>在 MySQL 中處理時間資料</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/05/29/609/' rel='bookmark' title='Permanent Link: 網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"'>網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2007/01/31/240/' rel='bookmark' title='Permanent Link: 詭異的 mytop ...'>詭異的 mytop ...</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/08/08/840/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>發現 <a href="http://www.mongodb.org/" target="_blank">MongoDB</a> 是好一陣子前的事，而我也在某台機器上把它裝起來。<br />
之前玩的時候，發現 <a href="http://www.mongodb.org/" target="_blank">MongoDB</a> 不須帳號與密碼就可以連接，而且也無法配置使用者權限，所以把它丟在旁邊。</p>
<p>前幾天，我在網路上看到網友詢問 <a href="http://www.mongodb.org/" target="_blank">MongoDB</a> 有沒有辦法作 JOIN，得到的答案是否定的。<br />
趁著今天在家閒閒沒事作，書也看完幾個段落，就透過 <a href="http://www.php.net" target="_blank">PHP</a> 來試試這種 <a href="http://en.wikipedia.org/wiki/ODBMS" title="Object database" target="_blank">ODBMS</a> 如何實作資料關聯。</p>
<p><a href="http://www.mongodb.org/" target="_blank">MongoDB</a> 與常見的資料庫（例如：<a href="http://dev.mysql.com/ target="_blank"">MySQL</a>）有些微的不同：</p>
<table border="1">
<tr>
<td></td>
<td>資料庫</td>
<td>資料表</td>
</tr>
<tr>
<td><a href="http://www.mongodb.org/" target="_blank">MongoDB</a> 稱之為</td>
<td>Database（DB）</td>
<td><font color="red">Collection</font></td>
</tr>
<tr>
<td><a href="http://dev.mysql.com/ target="_blank"">MySQL</a> 稱之為</td>
<td>Database（DB）</td>
<td>Table</td>
</tr>
</table>
<p>先把這個觀念講清楚，底下的範例程式碼才不會看得霧煞煞。 <img src='http://www.joehorn.idv.tw/wp-includes/images/smilies/joehorn/my_cool.png' alt='8)' class='wp-smiley' /> </p>
<p>首先，先建立 DB 與 Collection：</p>
<pre class="brush: php;">
// 連接 MongoDB
$m = new Mongo();

// 連接資料庫，名稱就是 test
$testDB = $m-&gt;selectDB( 'test' );

// 建立 Collection，名稱分別是 user 與 sex
$testDB-&gt;createCollection( 'user' );
$testDB-&gt;createCollection( 'sex' );
</pre>
<ul>
<li><a href="http://www.mongodb.org/" target="_blank">MongoDB</a> 沒有 createDB 這種指令。只要選擇資料庫，建立 Collection 之後，系統就會自動產生 DB。</li>
<li>指令列模式下，選擇資料庫的指令跟 <a href="http://dev.mysql.com/ target="_blank"">MySQL</a> 相同（USE DB_NAME）。</li>
</ul>
<p>再來，存入性別資料：</p>
<pre class="brush: php;">
// 連接 MongoDB
$m = new Mongo();

// 連接資料庫，名稱就是 test
$testDB = $m-&gt;selectDB( 'test' );

// 在 sex 這個 Collection 裡面放入資料，好讓程式分辨男性與女性
$testDB-&gt;sex-&gt;insert( array('sex_name' =&gt; 'Female') );
$testDB-&gt;sex-&gt;insert( array('sex_name' =&gt; 'Male') );

// 把 sex 這個 Collection 的資料倒出來看
$cursor = $testDB-&gt;sex-&gt;find();
$array = iterator_to_array($cursor);
var_dump($array);
</pre>
<ul>
<li>以往我們儲存在 Table 的 data row 會有個 id 值，方便我們建立關聯。<a href="http://www.mongodb.org/" target="_blank">MongoDB</a> 這種資料庫則是在 Collection 裡面放物件，可以不需要 id 值。</li>
</ul>
<p>開始存入使用者名稱，並紀錄他（她）們的性別：</p>
<pre class="brush: php;">
// 連接 MongoDB
$m = new Mongo();

// 連接資料庫，名稱就是 test
$testDB = $m-&gt;selectDB( 'test' );

// 找出男性資料，並取得關聯值
$male = $testDB-&gt;sex-&gt;findOne( array('sex_name' =&gt; 'Male') );
$refMale = $testDB-&gt;sex-&gt;createDBRef( $male );

// 找出女性資料，並取得關聯值
$female = $testDB-&gt;sex-&gt;findOne( array('sex_name' =&gt; 'Female') );
$refFemale = $testDB-&gt;sex-&gt;createDBRef( $female );

// 存入使用者資料
$testDB-&gt;user-&gt;insert( array('name' =&gt; 'BoyName', 'sex' =&gt; $refMale) );
$testDB-&gt;user-&gt;insert( array('name' =&gt; 'GirlName', 'sex' =&gt; $refFemale) );

// 取出並顯示使用者資料
$cursor = $testDB-&gt;user-&gt;find();
$array = iterator_to_array($cursor);
foreach ( $array as $user ) {
        // 找出性別的關聯物件
        $sexRef = $testDB-&gt;user-&gt;getDBRef($user['sex']);
        echo &quot;Name: {$user['name']}\tSex: {$sexRef['sex_name']}\n&quot;;
}
</pre>
<p>以上，簡單的試玩心得。  <img src='http://www.joehorn.idv.tw/wp-includes/images/smilies/joehorn/my_embarrassed.png' alt=':oops:' class='wp-smiley' /> </p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/Database' rel='tag' target='_self'>Database</a>, <a class='technorati-link' href='http://technorati.com/tag/MongoDB' rel='tag' target='_self'>MongoDB</a>, <a class='technorati-link' href='http://technorati.com/tag/Object' rel='tag' target='_self'>Object</a>, <a class='technorati-link' href='http://technorati.com/tag/ODBMS' rel='tag' target='_self'>ODBMS</a>, <a class='technorati-link' href='http://technorati.com/tag/PHP' rel='tag' target='_self'>PHP</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2008/01/13/268/' rel='bookmark' title='Permanent Link: 在 MySQL 中處理時間資料'>在 MySQL 中處理時間資料</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/05/29/609/' rel='bookmark' title='Permanent Link: 網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"'>網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2007/01/31/240/' rel='bookmark' title='Permanent Link: 詭異的 mytop ...'>詭異的 mytop ...</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/KS7fsMMuDJemc_Bwt-m7djT5LG4/0/da"><img src="http://feedads.g.doubleclick.net/~a/KS7fsMMuDJemc_Bwt-m7djT5LG4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/KS7fsMMuDJemc_Bwt-m7djT5LG4/1/da"><img src="http://feedads.g.doubleclick.net/~a/KS7fsMMuDJemc_Bwt-m7djT5LG4/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/08/08/840/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/08/08/840/</feedburner:origLink></item>
		<item>
		<title>PHP 的內建常數</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/GFFF8PCi5Ao/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/07/14/829/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 13:00:39 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[constant]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=829</guid>
		<description><![CDATA[昨晚在 PTT 的 PHP 板回了一篇文章，提到 PHP 的內建常數；現在來分享一下，順便作個紀錄，方便日後查詢。 PHP 有不少實用的內建常數，方便我們寫程式時直接呼叫。 有興趣研究的人，可以看看這個網頁，或是用 get_defined_constants() 把內建常數全部倒進陣列，再用 var_dump() 或 print_r() 顯示。 下表列出一些我覺得常用的內建常數，範例值來自 64 位元版本的 FreeBSD ports 安裝之 PHP 5.3.2： 常數名稱 常數型態 範例值或說明 可用版本 PHP_VERSION string "5.3.2" 無限制 PHP_MAJOR_VERSION integer 5 5.2.7+ PHP_MINOR_VERSION integer 3 5.2.7+ PHP_RELEASE_VERSION integer 2 5.2.7+ PHP_EXTRA_VERSION string "" 5.2.7+ PHP_OS string "FreeBSD" 無限制 PHP_PREFIX string "/usr/local" [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2006/06/22/232/' rel='bookmark' title='Permanent Link: [VB.Net] 將 DataSet 匯出成 CSV 檔'>[VB.Net] 將 DataSet 匯出成 CSV 檔</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/02/16/20/' rel='bookmark' title='Permanent Link: portupgrade'>portupgrade</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/07/14/829/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>昨晚在 <a href="telnet://ptt.cc">PTT</a> 的 PHP 板回了一篇文章，提到 <a href="http://php.net" target="_blank">PHP</a> 的內建常數；現在來分享一下，順便作個紀錄，方便日後查詢。</p>
<p><a href="http://php.net" target="_blank">PHP</a> 有不少實用的內建常數，方便我們寫程式時直接呼叫。<br />
有興趣研究的人，可以看看<a href="http://php.net/manual/en/reserved.constants.php" title="PHP: Predefined Constants - Manual" target="_blank">這個網頁</a>，或是用 <a href="http://php.net/get_defined_constants" target="_blank">get_defined_constants()</a> 把內建常數全部倒進陣列，再用 <a href="http://php.net/var_dump" target="_blank">var_dump()</a> 或 <a href="http://php.net/print_r" target="_blank">print_r()</a> 顯示。</p>
<p>下表列出一些我覺得常用的內建常數，範例值來自 64 位元版本的 <a href="http://www.freebsd.org" target="_blank">FreeBSD</a> ports 安裝之 <a href="http://php.net" target="_blank">PHP</a> 5.3.2：</p>
<table border="1">
<tr>
<td>常數名稱</td>
<td>常數型態</td>
<td>範例值或說明</td>
<td>可用版本</td>
</tr>
<tr>
<td>PHP_VERSION</td>
<td>string</td>
<td>"5.3.2"</td>
<td>無限制</td>
</tr>
<tr>
<td>PHP_MAJOR_VERSION</td>
<td>integer</td>
<td>5</td>
<td>5.2.7+</td>
</tr>
<tr>
<td>PHP_MINOR_VERSION</td>
<td>integer</td>
<td>3</td>
<td>5.2.7+</td>
</tr>
<tr>
<td>PHP_RELEASE_VERSION</td>
<td>integer</td>
<td>2</td>
<td>5.2.7+</td>
</tr>
<tr>
<td>PHP_EXTRA_VERSION</td>
<td>string</td>
<td>""</td>
<td>5.2.7+</td>
</tr>
<tr>
<td>PHP_OS</td>
<td>string</td>
<td>"FreeBSD"</td>
<td>無限制</td>
</tr>
<tr>
<td>PHP_PREFIX</td>
<td>string</td>
<td>"/usr/local"</td>
<td>4.3.0+</td>
</tr>
<tr>
<td>PHP_BINDIR</td>
<td>string</td>
<td>"/usr/local/bin"</td>
<td>無限制</td>
</tr>
<tr>
<td>PHP_LIBDIR</td>
<td>string</td>
<td>"/usr/local/lib/php"</td>
<td>無限制</td>
</tr>
<tr>
<td>PHP_DATADIR</td>
<td>string</td>
<td>"${prefix}/share"</td>
<td>無限制</td>
</tr>
<tr>
<td>PHP_SYSCONFDIR</td>
<td>string</td>
<td>"/usr/local/etc"</td>
<td>無限制</td>
</tr>
<tr>
<td>PHP_LOCALSTATEDIR</td>
<td>string</td>
<td>"/usr/local/var"</td>
<td>無限制</td>
</tr>
<tr>
<td>PHP_CONFIG_FILE_PATH</td>
<td>string</td>
<td>"/usr/local/etc"</td>
<td>無限制</td>
</tr>
<tr>
<td>PHP_CONFIG_FILE_SCAN_DIR</td>
<td>string</td>
<td>"/usr/local/etc/php"</td>
<td>無限制</td>
</tr>
<tr>
<td>PHP_SHLIB_SUFFIX</td>
<td>string</td>
<td>"so"</td>
<td>4.3.0+</td>
</tr>
<tr>
<td>PHP_EOL</td>
<td>string</td>
<td>此變數可用來判斷 "\n"、"\r"、"\r\n"（三個通吃，超好用）。</td>
<td>4.3.0+</td>
</tr>
<tr>
<td>PHP_MAXPATHLEN</td>
<td>integer</td>
<td>1024</td>
<td>5.3.0+</td>
</tr>
<tr>
<td>PHP_INT_MAX</td>
<td>integer</td>
<td>9223372036854775807</td>
<td>4.0.4+ 與 5.0.5+</td>
</tr>
<tr>
<td>DATE_COOKIE</td>
<td>string</td>
<td>
"l, d-M-y H:i:s T"<br />
輸出範例：<br />
Wednesday, 14-Jul-10 20:25:07 CST
</td>
<td>5.1.1+</td>
</tr>
<tr>
<td>DATE_ISO8601</td>
<td>string</td>
<td>
"Y-m-d\TH:i:sO"<br />
輸出範例：<br />
2010-07-14T20:26:18+0800
</td>
<td>5.1.1+</td>
</tr>
<tr>
<td>DATE_RFC822</td>
<td>string</td>
<td>
"D, d M y H:i:s O"<br />
輸出範例：<br />
Wed, 14 Jul 10 20:27:39 +0800
</td>
<td>5.1.1+</td>
</tr>
<tr>
<td>DATE_RFC850</td>
<td>string</td>
<td>
"l, d-M-y H:i:s T"<br />
輸出範例：<br />
Wednesday, 14-Jul-10 20:28:44 CST
</td>
<td>5.1.1+</td>
</tr>
<tr>
<td>DATE_RFC1036</td>
<td>string</td>
<td>
"D, d M y H:i:s O"<br />
輸出範例：<br />
Wed, 14 Jul 10 20:29:40 +0800
</td>
<td>5.1.1+</td>
</tr>
<tr>
<td>
DATE_RFC1123<br />
DATE_RSS
</td>
<td>string</td>
<td>
"D, d M Y H:i:s T"<br />
輸出範例：<br />
Wed, 14 Jul 2010 20:31:51 CST
</td>
<td>5.1.1+</td>
</tr>
<tr>
<td>
DATE_RFC2822
</td>
<td>string</td>
<td>
"D, d M Y H:i:s O"<br />
輸出範例：<br />
Wed, 14 Jul 2010 20:31:51 +0800
</td>
<td>5.1.1+</td>
</tr>
<tr>
<td>
DATE_RFC3339<br />
DATE_ATOM<br />
DATE_W3C
</td>
<td>string</td>
<td>
"Y-m-d\TH:i:sP"<br />
輸出範例：<br />
2010-07-14T20:36:18+08:00
</td>
<td>5.1.1+</td>
</tr>
</table>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/constant' rel='tag' target='_self'>constant</a>, <a class='technorati-link' href='http://technorati.com/tag/PHP' rel='tag' target='_self'>PHP</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2006/06/22/232/' rel='bookmark' title='Permanent Link: [VB.Net] 將 DataSet 匯出成 CSV 檔'>[VB.Net] 將 DataSet 匯出成 CSV 檔</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/02/16/20/' rel='bookmark' title='Permanent Link: portupgrade'>portupgrade</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/soFtkb2MIrcruLelYX_jcoT0TUA/0/da"><img src="http://feedads.g.doubleclick.net/~a/soFtkb2MIrcruLelYX_jcoT0TUA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/soFtkb2MIrcruLelYX_jcoT0TUA/1/da"><img src="http://feedads.g.doubleclick.net/~a/soFtkb2MIrcruLelYX_jcoT0TUA/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/07/14/829/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/07/14/829/</feedburner:origLink></item>
		<item>
		<title>WordPress 3.0 Released</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/kjfdm_8eQHc/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/06/18/826/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 17:44:23 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Thelonious]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=826</guid>
		<description><![CDATA[WordPress 3.0 在十幾分鐘前 release 了，官方的文章 提供了這段影片作介紹： 2.9.2 升級可直接把下載下來的壓縮檔直接覆蓋原本的目錄，再透過瀏覽器執行升級程式（ wp-admin/upgrade.php ）。 因為 WordPress 3.0 的預設佈景主題換了，所以沒改過預設佈景主題的人記得開管理後台檢查一下。 WordPress 3.0 的壓縮檔裡面沒有這些檔案與目錄（注意： wp-content/themes/classic 與 wp-content/themes/default 列在其中），想讓目錄乾淨一點的可以清掉： wp-admin/categories.php wp-admin/edit-category-form.php wp-admin/edit-page-form.php wp-admin/edit-pages.php wp-admin/images/browse-happy.gif wp-admin/images/fav-top.png wp-admin/images/screen-options-left.gif wp-admin/images/wp-logo-vs.gif wp-admin/images/wp-logo.gif wp-admin/import wp-admin/js/wp-gears.dev.js wp-admin/js/wp-gears.js wp-admin/options-misc.php wp-admin/page-new.php wp-admin/page.php wp-admin/rtl.css wp-admin/rtl.dev.css wp-admin/update-links.php wp-admin/wp-admin.css wp-admin/wp-admin.dev.css wp-content/themes/classic wp-content/themes/default wp-includes/js/codepress wp-includes/js/jquery/interface.js wp-includes/js/scriptaculous/prototype.js wp-includes/js/tinymce/wp-tinymce.js Technorati Tags: Thelonious, WordPress Related posts:升級 WordPress 2.1 [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2007/01/25/239/' rel='bookmark' title='Permanent Link: 升級 WordPress 2.1'>升級 WordPress 2.1</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2007/11/05/248/' rel='bookmark' title='Permanent Link: 升級成 WordPress 2.3.1'>升級成 WordPress 2.3.1</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/05/10/148/' rel='bookmark' title='Permanent Link: WordPress 1.5.1 Released !'>WordPress 1.5.1 Released !</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/06/18/826/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p><a href="http://wordpress.org">WordPress</a> 3.0 在十幾分鐘前 release 了，<a href="http://wordpress.org/development/2010/06/thelonious/" title="WordPress 3.0 “Thelonious”" target="_blank">官方的文章</a> 提供了這段影片作介紹：<br />
<embed src="http://v.wordpress.com/wp-content/plugins/video/flvplayer.swf?ver=1.21" type="application/x-shockwave-flash" width="640" height="360" wmode="transparent" seamlesstabbing="true" allowfullscreen="true" allowscriptaccess="always" overstretch="true" flashvars="guid=BQtfIEY1&amp;width=640&amp;height=360&amp;locksize=no&amp;dynamicseek=false&amp;qc_publisherId=p-18-mFEk4J448M" title="Introducing WordPress 3.0 &quot;Thelonious&quot;"></embed></p>
<p>2.9.2 升級可直接把下載下來的壓縮檔直接覆蓋原本的目錄，再透過瀏覽器執行升級程式（ wp-admin/upgrade.php ）。</p>
<p>因為 <a href="http://wordpress.org">WordPress</a> 3.0 的預設佈景主題換了，所以沒改過預設佈景主題的人記得開管理後台檢查一下。</p>
<p><a href="http://wordpress.org">WordPress</a> 3.0 的壓縮檔裡面沒有這些檔案與目錄（注意： wp-content/themes/classic 與 wp-content/themes/default 列在其中），想讓目錄乾淨一點的可以清掉：</p>
<ul>
<li>wp-admin/categories.php</li>
<li>wp-admin/edit-category-form.php</li>
<li>wp-admin/edit-page-form.php</li>
<li>wp-admin/edit-pages.php</li>
<li>wp-admin/images/browse-happy.gif</li>
<li>wp-admin/images/fav-top.png</li>
<li>wp-admin/images/screen-options-left.gif</li>
<li>wp-admin/images/wp-logo-vs.gif</li>
<li>wp-admin/images/wp-logo.gif</li>
<li>wp-admin/import</li>
<li>wp-admin/js/wp-gears.dev.js</li>
<li>wp-admin/js/wp-gears.js</li>
<li>wp-admin/options-misc.php</li>
<li>wp-admin/page-new.php</li>
<li>wp-admin/page.php</li>
<li>wp-admin/rtl.css</li>
<li>wp-admin/rtl.dev.css</li>
<li>wp-admin/update-links.php</li>
<li>wp-admin/wp-admin.css</li>
<li>wp-admin/wp-admin.dev.css</li>
<li>wp-content/themes/classic</li>
<li>wp-content/themes/default</li>
<li>wp-includes/js/codepress</li>
<li>wp-includes/js/jquery/interface.js</li>
<li>wp-includes/js/scriptaculous/prototype.js</li>
<li>wp-includes/js/tinymce/wp-tinymce.js</li>
</ul>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/Thelonious' rel='tag' target='_self'>Thelonious</a>, <a class='technorati-link' href='http://technorati.com/tag/WordPress' rel='tag' target='_self'>WordPress</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2007/01/25/239/' rel='bookmark' title='Permanent Link: 升級 WordPress 2.1'>升級 WordPress 2.1</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2007/11/05/248/' rel='bookmark' title='Permanent Link: 升級成 WordPress 2.3.1'>升級成 WordPress 2.3.1</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/05/10/148/' rel='bookmark' title='Permanent Link: WordPress 1.5.1 Released !'>WordPress 1.5.1 Released !</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/hbAS-C_-xyvWXwLSL6C4rxZsbP8/0/da"><img src="http://feedads.g.doubleclick.net/~a/hbAS-C_-xyvWXwLSL6C4rxZsbP8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/hbAS-C_-xyvWXwLSL6C4rxZsbP8/1/da"><img src="http://feedads.g.doubleclick.net/~a/hbAS-C_-xyvWXwLSL6C4rxZsbP8/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/06/18/826/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/06/18/826/</feedburner:origLink></item>
		<item>
		<title>[PHP] 使用 PDO 要注意的事</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/UdxwbjwCoXU/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/05/27/814/#comments</comments>
		<pubDate>Thu, 27 May 2010 07:52:38 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PDO]]></category>
		<category><![CDATA[PDOStatement]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=814</guid>
		<description><![CDATA[以前，我喜歡用 ADOdb 來連接資料庫；自從 PDO 被放進 PHP 5.1 後，它便成了我的新寵... 我在 PHP 5.1.6 環境上幫人家抓蟲時，看到以下兩段程式。 $pdo = New PDO(......); $sql = &#34;SELECT .....&#34;; $st = $pdo-&#62;prepare($sql); $st-&#62;execute(); $rows = $st-&#62;fetchAll(); $pdo = New PDO(......); $sql = &#34;SELECT .....&#34;; $st = $pdo-&#62;query($sql); $rows = $st-&#62;fetchAll(); 雖然以上兩段程式都可以取出 $rows ，但重複並交叉執行的話，就會出現問題。 這段程式可以正確取出 $rows1 與 $rows2： $pdo = New PDO(......); $sql = &#34;SELECT [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2010/03/08/768/' rel='bookmark' title='Permanent Link: [MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要'>[MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/05/27/814/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>以前，我喜歡用 <a href="http://adodb.sourceforge.net/" target="_blank" title="ADOdb Database Abstraction Library for PHP (and Python)">ADOdb</a> 來連接資料庫；自從 <a href="http://php.net/pdo" target="_blank" title="PHP Data Objects">PDO</a> 被放進 <a href="http://php.net" target="_blank">PHP</a> 5.1 後，它便成了我的新寵...</p>
<p>我在 <a href="http://php.net" target="_blank">PHP</a> 5.1.6 環境上幫人家抓蟲時，看到以下兩段程式。</p>
<ol>
<li>
<pre class="brush: php;">$pdo = New PDO(......);

$sql = &quot;SELECT .....&quot;;
$st = $pdo-&gt;prepare($sql);
$st-&gt;execute();
$rows = $st-&gt;fetchAll();</pre>
</li>
<li>
<pre class="brush: php;">$pdo = New PDO(......);

$sql = &quot;SELECT .....&quot;;
$st = $pdo-&gt;query($sql);
$rows = $st-&gt;fetchAll();</pre>
</li>
</ol>
<p>雖然以上兩段程式都可以取出 $rows ，但重複並交叉執行的話，就會出現問題。</p>
<ul>
<li>這段程式可以正確取出 $rows1 與 $rows2：
<pre class="brush: php;">$pdo = New PDO(......);

$sql = &quot;SELECT .....&quot;;
$st = $pdo-&gt;query($sql);
$rows1 = $st-&gt;fetchAll();

$sql = &quot;SELECT .....&quot;;
$st = $pdo-&gt;prepare($sql);
$st-&gt;execute();
$rows2 = $st-&gt;fetchAll();</pre>
</li>
<li>這段程式只能正確取出 $rows1 ，$rows2 會是個空的陣列：
<pre class="brush: php;">$pdo = New PDO(......);

$sql = &quot;SELECT .....&quot;;
$st = $pdo-&gt;prepare($sql);
$st-&gt;execute();
$rows1 = $st-&gt;fetchAll();

$sql = &quot;SELECT .....&quot;;
$st = $pdo-&gt;query($sql);
$rows2 = $st-&gt;fetchAll();</pre>
</li>
</ul>
<blockquote><p>這問題有兩種解法：</p>
<ul>
<li>別偷懶，乖乖的用 <a href="http://php.net/manual/en/pdo.prepare.php" target="_blank">PDO::prepare</a> 與 <a href="http://php.net/manual/en/pdostatement.execute.php" target="_blank">PDOStatement->execute</a>。</li>
<li>若要用變數接收 <a href="http://php.net/manual/en/pdo.query.php" target="_blank">PDO::query</a> 回傳的 <a href="http://php.net/manual/en/class.pdostatement.php" target="_blank">PDOStatement</a>，請先 <a href="http://php.net/unset" target="_blank">unset()</a>，例： unset($st); 。</li>
</ul>
</blockquote>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/PDO' rel='tag' target='_self'>PDO</a>, <a class='technorati-link' href='http://technorati.com/tag/PDOStatement' rel='tag' target='_self'>PDOStatement</a>, <a class='technorati-link' href='http://technorati.com/tag/PHP' rel='tag' target='_self'>PHP</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2010/03/08/768/' rel='bookmark' title='Permanent Link: [MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要'>[MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/vGcr1qzolLqjTfyOWVp2nW1DxNY/0/da"><img src="http://feedads.g.doubleclick.net/~a/vGcr1qzolLqjTfyOWVp2nW1DxNY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/vGcr1qzolLqjTfyOWVp2nW1DxNY/1/da"><img src="http://feedads.g.doubleclick.net/~a/vGcr1qzolLqjTfyOWVp2nW1DxNY/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/05/27/814/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/05/27/814/</feedburner:origLink></item>
		<item>
		<title>C# 的 ==、Equals 與 JAVA 的 ==、equals</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/Os8u0Obc4vg/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/04/18/808/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 10:14:09 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=808</guid>
		<description><![CDATA[剛感到好奇，各在 C# 與 JAVA 寫測試程式。 C#： Object myObj1 = 1; Object myObj2 = myObj1; Object myObj3 = 1; Console.WriteLine(&#34;myObj2.Equals(myObj1) = &#34; + myObj2.Equals(myObj1)); Console.WriteLine(&#34;myObj3.Equals(myObj1) = &#34; + myObj3.Equals(myObj1)); Console.WriteLine(&#34;(myObj2 == myObj1) = &#34; + (myObj2 == myObj1)); Console.WriteLine(&#34;(myObj3 == myObj1) = &#34; + (myObj3 == myObj1)); 結果： myObj2.Equals(myObj1) = True myObj3.Equals(myObj1) = True (myObj2 == [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/07/03/181/' rel='bookmark' title='Permanent Link: Live 8 !'>Live 8 !</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/04/18/808/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>剛感到好奇，各在 C# 與 JAVA 寫測試程式。</p>
<ul>
<li>C#：
<pre class="brush: csharp;">Object myObj1 = 1;
Object myObj2 = myObj1;
Object myObj3 = 1;

Console.WriteLine(&quot;myObj2.Equals(myObj1) = &quot; + myObj2.Equals(myObj1));
Console.WriteLine(&quot;myObj3.Equals(myObj1) = &quot; + myObj3.Equals(myObj1));

Console.WriteLine(&quot;(myObj2 == myObj1) = &quot; + (myObj2 == myObj1));
Console.WriteLine(&quot;(myObj3 == myObj1) = &quot; + (myObj3 == myObj1));</pre>
<p>結果：</p>
<pre class="brush: plain;">myObj2.Equals(myObj1) = True
myObj3.Equals(myObj1) = True
(myObj2 == myObj1) = True
(myObj3 == myObj1) = False</pre>
</li>
<li>JAVA：
<pre class="brush: java;">Object myObj1 = 1;
Object myObj2 = myObj1;
Object myObj3 = 1;

System.out.println(&quot;myObj2.equals(myObj1) = &quot; + myObj2.equals(myObj1));
System.out.println(&quot;myObj3.equals(myObj1) = &quot; + myObj3.equals(myObj1));

System.out.println(&quot;(myObj2 == myObj1) = &quot; + (myObj2 == myObj1));
System.out.println(&quot;(myObj3 == myObj1) = &quot; + (myObj3 == myObj1));</pre>
<p>結果：</p>
<pre class="brush: plain;">myObj2.equals(myObj1) = true
myObj3.equals(myObj1) = true
(myObj2 == myObj1) = true
(myObj3 == myObj1) = true</pre>
</li>
</ul>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/C%23' rel='tag' target='_self'>C#</a>, <a class='technorati-link' href='http://technorati.com/tag/JAVA' rel='tag' target='_self'>JAVA</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/07/03/181/' rel='bookmark' title='Permanent Link: Live 8 !'>Live 8 !</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/I2KxWapu6FIKJ4xhgu3TQZWXwNE/0/da"><img src="http://feedads.g.doubleclick.net/~a/I2KxWapu6FIKJ4xhgu3TQZWXwNE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/I2KxWapu6FIKJ4xhgu3TQZWXwNE/1/da"><img src="http://feedads.g.doubleclick.net/~a/I2KxWapu6FIKJ4xhgu3TQZWXwNE/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/04/18/808/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/04/18/808/</feedburner:origLink></item>
		<item>
		<title>[Benchmark] eAccelerator v.s. APC on PHP 5.3</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/DJuNQBEPiZ8/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/04/16/797/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 02:45:07 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WWW]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[APC]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[eAccelerator]]></category>
		<category><![CDATA[ports]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=797</guid>
		<description><![CDATA[FreeBSD ports tree 的 lang/php5 升級到 5.3.2， www/eaccelerator 也升級到 0.9.6。 但是... 目前，FreeBSD ports tree 的 www/pecl-APC 依然是 3.0.19，無法在 PHP 5.3 運作；為了讓它正常運作，jnlin送過 PR（我沒有先查詢，也送了一個 ）。 其實 eAccelerator 0.9.6 在 2010 年 2 月初就已經釋出了，可是，從 changelog 看來，很多不錯的功能被砍掉（反璞歸真？）： Changes in this version: * Support for PHP 5.3. * The encoder is removed * The user cache functions are removed * [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/12/28/210/' rel='bookmark' title='Permanent Link: 詭異的 eAccelerator'>詭異的 eAccelerator</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/01/18/15/' rel='bookmark' title='Permanent Link: eAccelerator 與 turck-mmcache'>eAccelerator 與 turck-mmcache</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2006/05/23/225/' rel='bookmark' title='Permanent Link: 抖抖..'>抖抖..</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/04/16/797/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p><a href="http://www.freebsd.org" target="_blank">FreeBSD</a> ports tree 的 lang/php5 升級到 5.3.2， www/eaccelerator 也升級到 0.9.6。<br />
但是... 目前，<a href="http://www.freebsd.org" target="_blank">FreeBSD</a> ports tree 的 www/pecl-APC 依然是 3.0.19，無法在 <a href="http://www.php.net" target="_blank">PHP</a> 5.3 運作；為了讓它正常運作，<a href="http://jnlin.org/" target="_blank">jnlin</a>送過 <a href="http://www.freebsd.org/cgi/query-pr.cgi?pr=145624" target="_blank">PR</a>（我沒有先查詢，也送了<a href="http://www.freebsd.org/cgi/query-pr.cgi?pr=145729">一個</a>  <img src='http://www.joehorn.idv.tw/wp-includes/images/smilies/joehorn/my_embarrassed.png' alt=':oops:' class='wp-smiley' />  ）。</p>
<p>其實 <a href="http://eaccelerator.net/" target="_blank">eAccelerator</a> 0.9.6 在 2010 年 2 月初就已經釋出了，可是，從 changelog 看來，很多不錯的功能被砍掉（反璞歸真？）：</p>
<blockquote><p>Changes in this version:</p>
<p>    * Support for PHP 5.3.<br />
    * The encoder is removed<br />
    * The user cache functions are removed<br />
    * The session handler is removed<br />
    * The minimal PHP version supported is now 5.1<br />
    * Some internal refactoring to clean up the code<br />
    * Fixed some bugs (and probably added some) </p></blockquote>
<p>這麼看來，2008 年的<a href="http://2bits.com/articles/benchmarking-drupal-with-php-op-code-caches-apc-eaccelerator-and-xcache-compared.html" title="Benchmarking Drupal with PHP op-code caches: APC, eAccelerator and XCache compared" target="_blank">這篇文章</a>的參考價值就低了些...<br />
為了滿足我自己的好奇心，就把 <a href="http://pecl.php.net/package/APC" target="_blank">APC</a> 3.1.3p1 裝起來測試看看。</p>
<p>系統/硬體：</p>
<ul>
<li>CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz</li>
<li>Memory: 6G（DDR2 800 MHz, Dual-Channel）</li>
<li><a href="http://www.freebsd.org" target="_blank">FreeBSD</a> 8.0-RELEASE-p2 amd64</li>
<li><a href="http://httpd.apache.org/" target="_blank">Apache HTTPD</a> 2.2.14</li>
<li><a href="http://www.php.net" target="_blank">PHP</a> 5.3.2</li>
</ul>
<p>設定：</p>
<ul>
<li><a href="http://eaccelerator.net/" target="_blank">eAccelerator</a> 0.9.6：
<pre class="brush: plain;">eaccelerator.shm_size=&quot;128&quot;
eaccelerator.cache_dir=&quot;/tmp/eaccelerator&quot;
eaccelerator.enable=&quot;1&quot;
eaccelerator.optimizer=&quot;1&quot;
eaccelerator.debug=&quot;0&quot;
eaccelerator.log_file=&quot;/var/log/eaccelerator.log&quot;
eaccelerator.name_space = &quot;&quot;
eaccelerator.check_mtime=&quot;1&quot;
eaccelerator.filter=&quot;&quot;
eaccelerator.shm_max=&quot;0&quot;
eaccelerator.shm_ttl=&quot;0&quot;
eaccelerator.shm_prune_period=&quot;0&quot;
eaccelerator.shm_only=&quot;0&quot;
eaccelerator.compress=&quot;1&quot;
eaccelerator.compress_level=&quot;9&quot;
eaccelerator.keys=&quot;shm_and_disk&quot;</pre>
</li>
<li><a href="http://pecl.php.net/package/APC" target="_blank">APC</a> 3.1.3p1：
<pre class="brush: plain;">apc.enabled=1
apc.shm_segments=1
apc.shm_size=128
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.cache
apc.enable_cli=1</pre>
</li>
</ul>
<p>測試結果（<a href="http://httpd.apache.org/docs/2.2/programs/ab.html" title="Apache HTTP server benchmarking tool" target="_blank">ab</a> -c5 -n500）：</p>
<table border="1">
<tr>
<td></td>
<td>Pure PHP</td>
<td>eAccelerator</td>
<td>APC</td>
</tr>
<tr>
<td><a href="http://wordpress.org" target="_blank">WordPress</a> 2.9.2</td>
<td>3.00 req./sec.<br />332.834 ms/req.</td>
<td>7.61 req./sec.<br />131.487 ms/req.</td>
<td>8.87 req./sec.<br />112.750 ms/req.</td>
</tr>
<tr>
<td><a href="http://www.mediawiki.org/" target="_blank">MediaWiki</a> 1.15.3</td>
<td>1.81 req./sec.<br />552.822 ms/req.</td>
<td>2.75 req./sec.<br />363.124 ms/req.</td>
<td>5.93 req./sec.<br />168.580 ms/req.</td>
</tr>
<tr>
<td><a href="http://gallery.menalto.com/" target="_blank">Gallery</a> 2.3.1</td>
<td>3.51 req./sec.<br />284.979 ms/req.</td>
<td>7.91 req./sec.<br />126.421 ms/req.</td>
<td>7.38 req./sec.<br />135.506 ms/req.</td>
</tr>
</table>
<p>依照結果看來，<a href="http://pecl.php.net/package/APC" target="_blank">APC</a> 3.1.3p1 的確略勝 <a href="http://eaccelerator.net/" target="_blank">eAccelerator</a> 0.9.6。 <img src='http://www.joehorn.idv.tw/wp-includes/images/smilies/joehorn/my_cool.png' alt='8)' class='wp-smiley' /><br />
可惜的是.. <a href="http://xcache.lighttpd.net/">Xcache</a> 目前的最新版本（1.3.0）沒辦法在 <a href="http://www.php.net" target="_blank">PHP</a> 5.3 跑...</p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/Apache' rel='tag' target='_self'>Apache</a>, <a class='technorati-link' href='http://technorati.com/tag/APC' rel='tag' target='_self'>APC</a>, <a class='technorati-link' href='http://technorati.com/tag/benchmark' rel='tag' target='_self'>benchmark</a>, <a class='technorati-link' href='http://technorati.com/tag/eAccelerator' rel='tag' target='_self'>eAccelerator</a>, <a class='technorati-link' href='http://technorati.com/tag/PHP' rel='tag' target='_self'>PHP</a>, <a class='technorati-link' href='http://technorati.com/tag/ports' rel='tag' target='_self'>ports</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/12/28/210/' rel='bookmark' title='Permanent Link: 詭異的 eAccelerator'>詭異的 eAccelerator</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/01/18/15/' rel='bookmark' title='Permanent Link: eAccelerator 與 turck-mmcache'>eAccelerator 與 turck-mmcache</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2006/05/23/225/' rel='bookmark' title='Permanent Link: 抖抖..'>抖抖..</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/t5i3LqX_Siu5d-V3CdK3ihEhpos/0/da"><img src="http://feedads.g.doubleclick.net/~a/t5i3LqX_Siu5d-V3CdK3ihEhpos/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/t5i3LqX_Siu5d-V3CdK3ihEhpos/1/da"><img src="http://feedads.g.doubleclick.net/~a/t5i3LqX_Siu5d-V3CdK3ihEhpos/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/04/16/797/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/04/16/797/</feedburner:origLink></item>
		<item>
		<title>[MySQL] 處理 weekday 欄位</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/cPVPO0y6XJU/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/04/01/791/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 03:11:09 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[DAYOFWEEK]]></category>
		<category><![CDATA[ENUM]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[WEEKDAY]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=791</guid>
		<description><![CDATA[最近在 MySQL 處理包含 weekday 型態的資料，發覺... 在 MySQL 處理 weekday 真的是「輕鬆寫意」... 根據 DAYOFWEEK() 與 WEEKDAY() 的定義，回傳的資料都是數值。 而大多數 DBMS 都有取得 weekday 的方法。 我會說「 MySQL 處理 weekday 輕鬆寫意」的原因是... ENUM ！ 我把將欄位型態定義為 enum('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')。 今天（2010/04/01，愚人節）是星期四，若是要抓出該欄位為 Thu 的資料，只要用這種語法： SELECT ... WHERE `col`= DAYOFWEEK( NOW() ) 用這類方法要注意的是，DAYOFWEEK() 與 WEEKDAY() 對於每個 weekday，回傳的數值都不一樣。 Technorati Tags: DAYOFWEEK, ENUM, MySQL, [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2009/11/20/705/' rel='bookmark' title='Permanent Link: 一些增進 MySQL 效能的 tips'>一些增進 MySQL 效能的 tips</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/05/29/609/' rel='bookmark' title='Permanent Link: 網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"'>網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2008/03/19/282/' rel='bookmark' title='Permanent Link: 用 MySQL 處理時間資料所應該注意的事'>用 MySQL 處理時間資料所應該注意的事</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/04/01/791/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>最近在 <a href="http://dev.mysql.com" target="_blank">MySQL</a> 處理包含 weekday 型態的資料，發覺... 在 <a href="http://dev.mysql.com" target="_blank">MySQL</a> 處理 weekday 真的是「輕鬆寫意」...  <img src='http://www.joehorn.idv.tw/wp-includes/images/smilies/joehorn/my_cool.png' alt='8)' class='wp-smiley' /> </p>
<p>根據 <a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_dayofweek" target="_blank">DAYOFWEEK()</a> 與 <a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_weekday" target="_blank">WEEKDAY()</a> 的定義，回傳的資料都是數值。<br />
而大多數 <a href="http://en.wikipedia.org/wiki/Database_management_system" target="_blank">DBMS</a> 都有取得 weekday 的方法。</p>
<p>我會說「 <a href="http://dev.mysql.com" target="_blank">MySQL</a> 處理 weekday 輕鬆寫意」的原因是... <a href="http://dev.mysql.com/doc/refman/5.1/en/enum.html" target="_blank">ENUM</a> ！<br />
我把將欄位型態定義為 <strong>enum('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')</strong>。<br />
今天（2010/04/01，愚人節）是星期四，若是要抓出該欄位為 Thu 的資料，只要用這種語法：</p>
<pre class="brush: sql;">SELECT ... WHERE `col`= DAYOFWEEK( NOW() )</pre>
<p>用這類方法要注意的是，<a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_dayofweek" target="_blank">DAYOFWEEK()</a> 與 <a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_weekday" target="_blank">WEEKDAY()</a> 對於每個 weekday，回傳的數值都不一樣。</p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/DAYOFWEEK' rel='tag' target='_self'>DAYOFWEEK</a>, <a class='technorati-link' href='http://technorati.com/tag/ENUM' rel='tag' target='_self'>ENUM</a>, <a class='technorati-link' href='http://technorati.com/tag/MySQL' rel='tag' target='_self'>MySQL</a>, <a class='technorati-link' href='http://technorati.com/tag/WEEKDAY' rel='tag' target='_self'>WEEKDAY</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2009/11/20/705/' rel='bookmark' title='Permanent Link: 一些增進 MySQL 效能的 tips'>一些增進 MySQL 效能的 tips</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/05/29/609/' rel='bookmark' title='Permanent Link: 網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"'>網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2008/03/19/282/' rel='bookmark' title='Permanent Link: 用 MySQL 處理時間資料所應該注意的事'>用 MySQL 處理時間資料所應該注意的事</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/F9Ywsf97xziTrnfslKA44rdeedw/0/da"><img src="http://feedads.g.doubleclick.net/~a/F9Ywsf97xziTrnfslKA44rdeedw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/F9Ywsf97xziTrnfslKA44rdeedw/1/da"><img src="http://feedads.g.doubleclick.net/~a/F9Ywsf97xziTrnfslKA44rdeedw/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/04/01/791/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/04/01/791/</feedburner:origLink></item>
		<item>
		<title>[MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/BBG5wjjqN_U/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/03/08/768/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 15:23:43 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[INDEX]]></category>
		<category><![CDATA[LIMIT]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PDO]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Primary Key]]></category>
		<category><![CDATA[Query Cache]]></category>
		<category><![CDATA[Super Smack]]></category>
		<category><![CDATA[UNIQUE]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=768</guid>
		<description><![CDATA[我利用前兩天的空閒時間寫了個 PHP 的小程式，運用 PHP 的 PDO 元件，對 MySQL 進行小測試。 Server 作業系統與硬體： 作業系統：FreeBSD 8.0-RELEASE CPU：Intel(R) Pentium(R) 4 CPU 3.00GHz (3042.62-MHz 686-class CPU)，Hyper-Threading 開啟 RAM：2G DDR2 800 放資料庫的 HDD：WDC WD800JB-00JJA0，UDMA 100 MySQL 5.1.44 的設定（/etc/my.cnf）： # defult setting (maybe changed) key_buffer_size = 128M max_allowed_packet = 4M table_open_cache = 4096 sort_buffer_size = 1M net_buffer_length = 8K read_buffer_size = 256K [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2009/05/29/609/' rel='bookmark' title='Permanent Link: 網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"'>網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/11/20/705/' rel='bookmark' title='Permanent Link: 一些增進 MySQL 效能的 tips'>一些增進 MySQL 效能的 tips</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2008/01/13/268/' rel='bookmark' title='Permanent Link: 在 MySQL 中處理時間資料'>在 MySQL 中處理時間資料</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/03/08/768/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>我利用前兩天的空閒時間寫了個 <a href="http://www.php.net" target="_blank">PHP</a> 的小程式，運用 <a href="http://www.php.net/pdo" target="_blank">PHP 的 PDO 元件</a>，對 <a href="http://dev.mysql.com/" target="_blank">MySQL</a> 進行小測試。</p>
<p>Server 作業系統與硬體：</p>
<ul>
<li>作業系統：<a href="http://www.freebsd.org" target="_blank">FreeBSD</a> 8.0-RELEASE</li>
<li>CPU：Intel(R) Pentium(R) 4 CPU 3.00GHz (3042.62-MHz 686-class CPU)，Hyper-Threading 開啟</li>
<li>RAM：2G DDR2 800</li>
<li>放資料庫的 HDD：WDC WD800JB-00JJA0，UDMA 100</li>
</ul>
<p><a href="http://dev.mysql.com/" target="_blank">MySQL</a> 5.1.44 的設定（/etc/my.cnf）：</p>
<pre class="brush: plain;"># defult setting (maybe changed)
key_buffer_size = 128M
max_allowed_packet = 4M
table_open_cache = 4096
sort_buffer_size = 1M
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

# added for tunning by Joe Horn
skip-name-resolve
connect_timeout = 60
join_buffer_size = 1M
max_connect_errors = 10000
max_connections = 100
max_heap_table_size = 1G
query_cache_size = 16M
slave_net_timeout = 30
sync_binlog=1
thread_cache_size = 512
thread_concurrency = 8
tmp_table_size = 1G
table_definition_cache = 512
# choose one ( depend on query amount )
#concurrent_insert=2
low_priority_updates=1</pre>
<p>這台機器跑 <a href="http://vegan.net/tony/supersmack/" target="_blank">Super Smack</a> 的結果：</p>
<pre class="brush: plain;"># super-smack -d mysql update-select.smack 80 1000
Query Barrel Report for client smacker
connect: max=14ms  min=1ms avg= 4ms from 80 clients
Query_type      num_queries  max_time  min_time  q_per_s
select_index    80000        101       6         717.91
update_index    80000        108       1         717.91</pre>
<p>我用<a href="http://www.joehorn.idv.tw/download/test.phps" target="_blank">測試程式</a>產生了一百萬筆資料的 <a href="http://en.wikipedia.org/wiki/MyISAM" target="_blank">MyISAM</a> table，各種測試各循環 1000 次，產生如下的測試結果（後面的數字單位是秒）：</p>
<pre class="brush: plain; gutter: true;">SELECT BY PK_COL WITH_QUERY_CACHE:              0.058
SELECT BY PK_COL WITHOUT_QUERY_CACHE:           0.062
SELECT BY PK_COL LIMIT WITH_QUERY_CACHE:        0.058
SELECT BY PK_COL LIMIT WITHOUT_QUERY_CACHE:     0.062
SELECT BY UNIQUE_COL WITH_QUERY_CACHE:          0.058
SELECT BY UNIQUE_COL WITHOUT_QUERY_CACHE:       0.062
SELECT BY UNIQUE_COL LIMIT WITH_QUERY_CACHE:    0.058
SELECT BY UNIQUE_COL LIMIT WITHOUT_QUERY_CACHE: 0.062
SELECT BY INDEX_COL WITH_QUERY_CACHE:           0.058
SELECT BY INDEX_COL WITHOUT_QUERY_CACHE:        0.061
SELECT BY INDEX_COL LIMIT WITH_QUERY_CACHE:     0.058
SELECT BY INDEX_COL LIMIT WITHOUT_QUERY_CACHE:  0.063
SELECT BY COL WITH_QUERY_CACHE:                 0.786
SELECT BY COL WITHOUT_QUERY_CACHE:              0.063
SELECT BY COL LIMIT WITH_QUERY_CACHE:           0.059
SELECT BY COL LIMIT WITHOUT_QUERY_CACHE:        0.062
UPDATE BY PK_COL WITH_QUERY_CACHE:              1.139
UPDATE BY PK_COL WITHOUT_QUERY_CACHE:           1.199
UPDATE BY PK_COL LIMIT WITH_QUERY_CACHE:        0.125
UPDATE BY PK_COL LIMIT WITHOUT_QUERY_CACHE:     0.142
UPDATE BY UNIQUE_COL WITH_QUERY_CACHE:          2.734
UPDATE BY UNIQUE_COL WITHOUT_QUERY_CACHE:       1.203
UPDATE BY UNIQUE_COL LIMIT WITH_QUERY_CACHE:    0.147
UPDATE BY UNIQUE_COL LIMIT WITHOUT_QUERY_CACHE: 0.163
UPDATE BY INDEX_COL WITH_QUERY_CACHE:           1.183
UPDATE BY INDEX_COL WITHOUT_QUERY_CACHE:        1.063
UPDATE BY INDEX_COL LIMIT WITH_QUERY_CACHE:     0.138
UPDATE BY INDEX_COL LIMIT WITHOUT_QUERY_CACHE:  0.154
UPDATE BY COL WITH_QUERY_CACHE:                 4704.859
UPDATE BY COL WITHOUT_QUERY_CACHE:              4641.191
UPDATE BY COL LIMIT WITH_QUERY_CACHE:           0.156
UPDATE BY COL LIMIT WITHOUT_QUERY_CACHE:        0.167</pre>
<p>根據測試結果，大概可以看到出以下幾個要點：</p>
<ol>
<li>根據第 21 行與 22 行的差異看來，<a href="http://dev.mysql.com/doc/refman/5.1/en/query-cache.html" target="_blank">MySQL Query cache</a> 還是有點用處，不過效用不大。</li>
<li>根據第 13 行與第 29 行的結果看來，有沒有設定 Primary Key、UNIQUE、INDEX 的影響不小。</li>
<li>根據 UPDATE 語法的測試結果看來，有沒有 LIMIT 頗重要。</li>
</ol>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/FreeBSD' rel='tag' target='_self'>FreeBSD</a>, <a class='technorati-link' href='http://technorati.com/tag/INDEX' rel='tag' target='_self'>INDEX</a>, <a class='technorati-link' href='http://technorati.com/tag/LIMIT' rel='tag' target='_self'>LIMIT</a>, <a class='technorati-link' href='http://technorati.com/tag/MySQL' rel='tag' target='_self'>MySQL</a>, <a class='technorati-link' href='http://technorati.com/tag/PDO' rel='tag' target='_self'>PDO</a>, <a class='technorati-link' href='http://technorati.com/tag/PHP' rel='tag' target='_self'>PHP</a>, <a class='technorati-link' href='http://technorati.com/tag/Primary+Key' rel='tag' target='_self'>Primary Key</a>, <a class='technorati-link' href='http://technorati.com/tag/Query+Cache' rel='tag' target='_self'>Query Cache</a>, <a class='technorati-link' href='http://technorati.com/tag/Super+Smack' rel='tag' target='_self'>Super Smack</a>, <a class='technorati-link' href='http://technorati.com/tag/UNIQUE' rel='tag' target='_self'>UNIQUE</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2009/05/29/609/' rel='bookmark' title='Permanent Link: 網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"'>網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/11/20/705/' rel='bookmark' title='Permanent Link: 一些增進 MySQL 效能的 tips'>一些增進 MySQL 效能的 tips</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2008/01/13/268/' rel='bookmark' title='Permanent Link: 在 MySQL 中處理時間資料'>在 MySQL 中處理時間資料</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/8AcIddqTFqWcjtZCeZbx0Jq3eis/0/da"><img src="http://feedads.g.doubleclick.net/~a/8AcIddqTFqWcjtZCeZbx0Jq3eis/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8AcIddqTFqWcjtZCeZbx0Jq3eis/1/da"><img src="http://feedads.g.doubleclick.net/~a/8AcIddqTFqWcjtZCeZbx0Jq3eis/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/03/08/768/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/03/08/768/</feedburner:origLink></item>
		<item>
		<title>Xuite 的問題（with RSS/Atom feed from Feedburner）</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/bymXJ7yG-wM/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/03/07/763/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 10:41:18 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[WWW]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[FeedBurner]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Xuite]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=763</guid>
		<description><![CDATA[這是前陣子在寫 Plurk Bot 時發現的問題。 因為 FeedBurner 已經被 Google 買下了。 所以，FeedBurner 會以「http://feedproxy.google.com/.....」這種 URL 進行 HTTP 重新導向，使瀏覽器連結到「http://原始URL/?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A......」這種頁面。 若是部落客用 FeedBurner 把放在 Xuite 上面的部落格 RSS/Atom feed 燒起來，而訂閱者透過 feedproxy.google.com 連結到文章頁面時，得到 HTTP 400 Error 的頁面（只有第一次被重新導向時，是正常的）。 會得到 HTTP 400 Error 頁面的原因是... 經過第一次的瀏覽後，瀏覽器的 cookie 被塞入兩個值，而 Xuite 無法正確解析瀏覽器的 cookie。 目前使用者自行排除問題的方式是拒絕 Xuite 存取瀏覽器的 cookie。 Technorati Tags: cookie, FeedBurner, Google, Xuite Related posts:我這個 Blog 的 feeds [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/03/20/73/' rel='bookmark' title='Permanent Link: 我這個 Blog 的 feeds'>我這個 Blog 的 feeds</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/02/25/39/' rel='bookmark' title='Permanent Link: 我錯怪 Bloglines 了..orz'>我錯怪 Bloglines 了..orz</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/03/12/63/' rel='bookmark' title='Permanent Link: Bloglines...'>Bloglines...</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/03/07/763/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>這是前陣子在寫 <a href="http://www.plurk.com">Plurk</a> Bot 時發現的問題。</p>
<p>因為 <a href="http://www.feedburner.com">FeedBurner</a> 已經被 <a href="http://www.google.com">Google</a> 買下了。<br />
所以，<a href="http://www.feedburner.com">FeedBurner</a> 會以「<em>http://feedproxy.google.com/.....</em>」這種 URL 進行 HTTP 重新導向，使瀏覽器連結到「<em>http://原始URL/?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A......</em>」這種頁面。</p>
<p>若是部落客用 <a href="http://www.feedburner.com">FeedBurner</a> 把放在 <a href="http://xuite.net/" target="_blank">Xuite</a> 上面的部落格 RSS/Atom feed 燒起來，而訂閱者透過 feedproxy.google.com 連結到文章頁面時，得到 HTTP 400 Error 的頁面（只有第一次被重新導向時，是正常的）。</p>
<p>會得到 HTTP 400 Error 頁面的原因是...<br />
經過第一次的瀏覽後，瀏覽器的 cookie 被塞入兩個值，而 <a href="http://xuite.net/" target="_blank">Xuite</a> 無法正確解析瀏覽器的 cookie。<br />
<a href="http://www.joehorn.idv.tw/upload/2010/03/Xuite-Feedburner.jpg" rel="lightbox"><img src="http://www.joehorn.idv.tw/upload/2010/03/Xuite-Feedburner.jpg" width="400" /></a></p>
<p>目前使用者自行排除問題的方式是拒絕 <a href="http://xuite.net/" target="_blank">Xuite</a> 存取瀏覽器的 cookie。</p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/cookie' rel='tag' target='_self'>cookie</a>, <a class='technorati-link' href='http://technorati.com/tag/FeedBurner' rel='tag' target='_self'>FeedBurner</a>, <a class='technorati-link' href='http://technorati.com/tag/Google' rel='tag' target='_self'>Google</a>, <a class='technorati-link' href='http://technorati.com/tag/Xuite' rel='tag' target='_self'>Xuite</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/03/20/73/' rel='bookmark' title='Permanent Link: 我這個 Blog 的 feeds'>我這個 Blog 的 feeds</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/02/25/39/' rel='bookmark' title='Permanent Link: 我錯怪 Bloglines 了..orz'>我錯怪 Bloglines 了..orz</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/03/12/63/' rel='bookmark' title='Permanent Link: Bloglines...'>Bloglines...</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/yOMn0ZioPs5EpuCDkcNeeq6CgBo/0/da"><img src="http://feedads.g.doubleclick.net/~a/yOMn0ZioPs5EpuCDkcNeeq6CgBo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yOMn0ZioPs5EpuCDkcNeeq6CgBo/1/da"><img src="http://feedads.g.doubleclick.net/~a/yOMn0ZioPs5EpuCDkcNeeq6CgBo/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/03/07/763/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/03/07/763/</feedburner:origLink></item>
		<item>
		<title>[筆記] 最近製作/修改 FreeBSD ports 的一些心得</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/9V0MO9FOHQQ/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/03/02/759/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 14:56:20 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[ports]]></category>
		<category><![CDATA[porttools]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=759</guid>
		<description><![CDATA[在 1 月底，我開始使用 FreeBSD Port Tools 來製作/修改 FreeBSD ports。 因為太好用了，使得我在一個月左右時間內，整整送了 10 個 FreeBSD PR（我知道這種量不值一提，但對我來說，這是目前為止的尖峰值）。 對 FreeBSD ports 有興趣的人，請先詳讀一下這個討論串。 針對 FreeBSD Port Tools 的使用，大概要注意的是： 要送出前，請先用 port test 測試過，並記得用 -- 參數來測試所有的 make 參數與選項。 修改 ports，但只是 patch，不是版本更新時，請用 port submit -m change，並記得修改 Synopsis。 對 ports 進行版本更新時，請用 port submit -m update。 製作新的 ports 時，請用 port submit -m new。 至於 FreeBSD [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/12/28/209/' rel='bookmark' title='Permanent Link: FreeBSD ports 裡的 Apache 2.2 啟動 shell script 的問題'>FreeBSD ports 裡的 Apache 2.2 啟動 shell script 的問題</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/03/22/77/' rel='bookmark' title='Permanent Link: 檢查 ports tree 的軟體更新'>檢查 ports tree 的軟體更新</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/11/28/208/' rel='bookmark' title='Permanent Link: FreeBSD 上面的 PHP 4.4.1'>FreeBSD 上面的 PHP 4.4.1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/03/02/759/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>在 1 月底，我開始使用 <a href="http://porttools.sourceforge.net/" target="_blank">FreeBSD Port Tools</a> 來製作/修改 FreeBSD ports。<br />
因為太好用了，使得我在一個月左右時間內，整整送了 10 個 <a href="http://www.freebsd.org/support/bugreports.html" target="blank">FreeBSD PR</a>（我知道這種量不值一提，但對我來說，這是目前為止的尖峰值）。</p>
<p>對 FreeBSD ports 有興趣的人，請先詳讀一下<a href="http://www.ptt.cc/man/FreeBSD/DEBD/D160/M.1135705310.A.E5B.html" title="[文件] send-pr 的基本介紹" target="_blank">這個討論串</a>。<br />
針對 <a href="http://porttools.sourceforge.net/" target="_blank">FreeBSD Port Tools</a> 的使用，大概要注意的是：</p>
<ul>
<li>要送出前，請先用 <strong>port test</strong> 測試過，並記得用 -- 參數來測試所有的 make 參數與選項。</li>
<li>修改 ports，但只是 patch，不是版本更新時，請用 <strong>port submit -m change</strong>，並記得修改 Synopsis。</li>
<li>對 ports 進行版本更新時，請用 <strong>port submit -m update</strong>。</li>
<li>製作新的 ports 時，請用 <strong>port submit -m new</strong>。</li>
</ul>
<p>至於 FreeBSD ports 的部份，大概要注意這些：</p>
<ul>
<li>如果是 <a href="http://www.php.net/" target="_blank">PHP</a> Web systems/projects，要先下載後解開，花點時間檢查該系統需要哪些 PHP extensions。可以參考 <a href="http://www.php.net/manual/en/funcref.php" target="_blank">PHP 的 Function Reference</a>，例如：mbstring 可以用 <strong>grep -r "mb_*" [PHP_PROJECT_ROOT_DIR]</strong>。</li>
<li>如果要在安裝後顯示的 pkg-message，或是 pkg-plist 帶入變數，建議在 [PORT_DIRECTORY]/files 放 pkg-message.in 或 pkg-plist.in 這種檔案。</li>
<li>儘量在 Makefile 使用變數，主要（常用）的變數可以參考 /usr/ports/Mk/bsd.port.mk，其他的請參考 /usr/ports/Mk/ 底下的其他檔案。</li>
</ul>
<p>由於我還算是新手小嫩咖，目前只能提供以上的心得（順便留個筆記）... orz</p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/FreeBSD' rel='tag' target='_self'>FreeBSD</a>, <a class='technorati-link' href='http://technorati.com/tag/ports' rel='tag' target='_self'>ports</a>, <a class='technorati-link' href='http://technorati.com/tag/porttools' rel='tag' target='_self'>porttools</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/12/28/209/' rel='bookmark' title='Permanent Link: FreeBSD ports 裡的 Apache 2.2 啟動 shell script 的問題'>FreeBSD ports 裡的 Apache 2.2 啟動 shell script 的問題</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/03/22/77/' rel='bookmark' title='Permanent Link: 檢查 ports tree 的軟體更新'>檢查 ports tree 的軟體更新</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/11/28/208/' rel='bookmark' title='Permanent Link: FreeBSD 上面的 PHP 4.4.1'>FreeBSD 上面的 PHP 4.4.1</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/HHtuGeSTPUxnfxv7cqfAUirW7Y0/0/da"><img src="http://feedads.g.doubleclick.net/~a/HHtuGeSTPUxnfxv7cqfAUirW7Y0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/HHtuGeSTPUxnfxv7cqfAUirW7Y0/1/da"><img src="http://feedads.g.doubleclick.net/~a/HHtuGeSTPUxnfxv7cqfAUirW7Y0/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/03/02/759/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/03/02/759/</feedburner:origLink></item>
		<item>
		<title>刪除 IE 與 Firefox 的 CNNIC 根憑證</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/wWRijU6znFY/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/02/02/748/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 14:23:29 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[Computer Software]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[WWW]]></category>
		<category><![CDATA[CNNIC]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[root certificate]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=748</guid>
		<description><![CDATA[這幾天，我的噗浪河道上，除了 Apple iPad 之外，也出現了一些關於 CNNIC 根憑證的噗。 基於中國大陸政府的黑暗與邪惡，以及中國網路界的「和諧」作風，我決定把 CNNIC 的根憑證移除掉，順便把移除方法貼出來。 IE（Internet Explorer）： Firefox（聽說 3.6 有。因為我在用的附加元件尚未完全相容，所以我還在用 3.5.7）： 2010/02/02 23:37 UPDATE 另有 MacOS 與 Linux 的移除教學文，有需要的請參考以下連結： 刪除 Mac OS X Key chain 的 CNNIC 根憑證 Root Certifications 在 Linux 上移除 CNNIC 憑證 Technorati Tags: CNNIC, Firefox, IE, Internet Explorer, root certificate Related posts:[好用軟體] IE7Pro（以前叫 IEPro ...） 給 Firefox [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2008/03/06/280/' rel='bookmark' title='Permanent Link: [好用軟體] IE7Pro（以前叫 IEPro ...）'>[好用軟體] IE7Pro（以前叫 IEPro ...）</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/07/05/184/' rel='bookmark' title='Permanent Link: 給 Firefox 1.x 用的 Google Toolbar 即將現身!'>給 Firefox 1.x 用的 Google Toolbar 即將現身!</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/07/03/181/' rel='bookmark' title='Permanent Link: Live 8 !'>Live 8 !</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/02/02/748/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>這幾天，<a href="http://www.plurk.com/JoeHorn">我的噗浪</a>河道上，除了 Apple iPad 之外，也出現了一些關於 <a href="http://www.cnnic.net.cn" rel="nofollow">CNNIC</a> 根憑證的噗。<br />
基於中國大陸政府的黑暗與邪惡，以及中國網路界的「和諧」作風，我決定把 <a href="http://www.cnnic.net.cn" rel="nofollow">CNNIC</a> 的根憑證移除掉，順便把移除方法貼出來。</p>
<ul>
<li>IE（Internet Explorer）：<br />
<a href="http://www.joehorn.idv.tw/upload/2010/02/2010-02-02-21-53-31.jpg" title="Remove CNNIC root certificate from IE" rel="lightbox"><img src="http://www.joehorn.idv.tw/upload/2010/02/2010-02-02-21-53-31.jpg" alt="Remove CNNIC root certificate from IE" title="Remove CNNIC root certification from IE" width="400" /></a></li>
<li>Firefox（聽說 3.6 有。因為我在用的附加元件尚未完全相容，所以我還在用 3.5.7）：<br />
<a href="http://www.joehorn.idv.tw/upload/2010/02/2010-02-02-22-01-58.jpg" title="Remove CNNIC root certificate from Firefox" rel="lightbox"><img src="http://www.joehorn.idv.tw/upload/2010/02/2010-02-02-22-01-58.jpg" alt="Remove CNNIC root certificate from Firefox" title="Remove CNNIC root certificate from Firefox" width="400" /></a></li>
</ul>
<p><strong>2010/02/02 23:37 UPDATE</strong><br />
另有 MacOS 與 Linux 的移除教學文，有需要的請參考以下連結：</p>
<ul>
<li><a href="http://jclin.blogspot.com/2010/02/mac-os-x-key-chain-cnnic-root.html">刪除 Mac OS X Key chain 的 CNNIC 根憑證 Root Certifications</a></li>
<li><a href="http://people.debian.org.tw/~chihchun/2010/02/02/remove-cnnic-cert-on-linux/">在 Linux 上移除 CNNIC 憑證</a></li>
</ul>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/CNNIC' rel='tag' target='_self'>CNNIC</a>, <a class='technorati-link' href='http://technorati.com/tag/Firefox' rel='tag' target='_self'>Firefox</a>, <a class='technorati-link' href='http://technorati.com/tag/IE' rel='tag' target='_self'>IE</a>, <a class='technorati-link' href='http://technorati.com/tag/Internet+Explorer' rel='tag' target='_self'>Internet Explorer</a>, <a class='technorati-link' href='http://technorati.com/tag/root+certificate' rel='tag' target='_self'>root certificate</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2008/03/06/280/' rel='bookmark' title='Permanent Link: [好用軟體] IE7Pro（以前叫 IEPro ...）'>[好用軟體] IE7Pro（以前叫 IEPro ...）</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/07/05/184/' rel='bookmark' title='Permanent Link: 給 Firefox 1.x 用的 Google Toolbar 即將現身!'>給 Firefox 1.x 用的 Google Toolbar 即將現身!</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/07/03/181/' rel='bookmark' title='Permanent Link: Live 8 !'>Live 8 !</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/U0c3NRendrGDkHqeQy91wc1N7WE/0/da"><img src="http://feedads.g.doubleclick.net/~a/U0c3NRendrGDkHqeQy91wc1N7WE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/U0c3NRendrGDkHqeQy91wc1N7WE/1/da"><img src="http://feedads.g.doubleclick.net/~a/U0c3NRendrGDkHqeQy91wc1N7WE/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/02/02/748/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/02/02/748/</feedburner:origLink></item>
		<item>
		<title>Gallery 的 RSS module 問題：Undefined index:  sfPhotosRecursiveLimit in ....</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/aT7SUQ1mcdk/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/01/09/744/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 21:58:10 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[Gallery]]></category>
		<category><![CDATA[RSS]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=744</guid>
		<description><![CDATA[有安裝 Apache 的 error log 裡面看到一大串如下的 log： PHP Notice: Undefined index: sfPhotosRecursiveLimit in [Gallery目錄]/modules/rss/SimpleRender.inc on line 78 追了一下程式，發現是變數沒處理好。 於是，我修改了 modules/rss/SimpleRender.inc，加了以下這段程式碼處理變數： if ( !isset($params['sfPhotosRecursiveLimit']) ) { $params['sfPhotosRecursiveLimit'] = $params['sfPhotosRecurseLimit']; } 修改過後的某個片段長這樣： $params['feedDate'] = $params['sfDate']; if ( !isset($params['sfPhotosRecursiveLimit']) ) { $params['sfPhotosRecursiveLimit'] = $params['sfPhotosRecurseLimit']; } /* apply defaults */ 跟我一樣，覺得那些 log 很礙眼的，就參考一下吧。 我把 patch 一併貼到官方論壇了（


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/03/29/89/' rel='bookmark' title='Permanent Link: FreeBSD telnet overflow vulnerability'>FreeBSD telnet overflow vulnerability</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/01/09/744/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>有安裝 <a href="http://gallery.menalto.com/" target=_blank">Gallery</a> 2 作為相簿系統的人可能跟我一樣，會在 <a href="http://httpd.apache.org/" target=_blank">Apache</a> 的 error log 裡面看到一大串如下的 log：</p>
<blockquote><p>PHP Notice:  Undefined index:  sfPhotosRecursiveLimit in [Gallery目錄]/modules/rss/SimpleRender.inc on line 78</p></blockquote>
<p>追了一下程式，發現是變數沒處理好。<br />
於是，我修改了 modules/rss/SimpleRender.inc，加了以下這段程式碼處理變數：</p>
<pre class="brush: php;">        if ( !isset($params['sfPhotosRecursiveLimit']) ) {
                $params['sfPhotosRecursiveLimit'] = $params['sfPhotosRecurseLimit'];
        }</pre>
<p>修改過後的某個片段長這樣：</p>
<pre class="brush: php;">        $params['feedDate'] = $params['sfDate'];

        if ( !isset($params['sfPhotosRecursiveLimit']) ) {
                $params['sfPhotosRecursiveLimit'] = $params['sfPhotosRecurseLimit'];
        }

        /* apply defaults */</pre>
<p>跟我一樣，覺得那些 log 很礙眼的，就參考一下吧。<br />
我把 patch 一併貼到官方論壇了（<a href="http://gallery.menalto.com/node/93705" target=_blank">Problem fix for RSS module</a>），不知道會不會被採用就是了。</p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/error' rel='tag' target='_self'>error</a>, <a class='technorati-link' href='http://technorati.com/tag/Gallery' rel='tag' target='_self'>Gallery</a>, <a class='technorati-link' href='http://technorati.com/tag/RSS' rel='tag' target='_self'>RSS</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/03/29/89/' rel='bookmark' title='Permanent Link: FreeBSD telnet overflow vulnerability'>FreeBSD telnet overflow vulnerability</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/HO2_-qI9ZKal46Nuh_G8aeXB7XU/0/da"><img src="http://feedads.g.doubleclick.net/~a/HO2_-qI9ZKal46Nuh_G8aeXB7XU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/HO2_-qI9ZKal46Nuh_G8aeXB7XU/1/da"><img src="http://feedads.g.doubleclick.net/~a/HO2_-qI9ZKal46Nuh_G8aeXB7XU/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/01/09/744/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/01/09/744/</feedburner:origLink></item>
		<item>
		<title>FreeBSD-SA-10:02.ntpd</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/_ZX3MRR_tpI/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/01/08/738/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 17:06:54 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[patch]]></category>
		<category><![CDATA[Security Advisories]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=738</guid>
		<description><![CDATA[昨天，FreeBSD 官方發布了三個 Security Advisories： FreeBSD-SA-10:01.bind FreeBSD-SA-10:02.ntpd FreeBSD-SA-10:03.zfs 根據 Advisories 內容，我原本打算透過以下的步驟作 patch： cd /usr/src &#038;&#038; make update cd /usr/src/lib/bind &#038;&#038; make obj &#038;&#038; make depend &#038;&#038; make &#038;&#038; make install cd /usr/src/usr.sbin/named &#038;&#038; make obj &#038;&#038; make depend &#038;&#038; make &#038;&#038; make install cd /usr/src/usr.sbin/ntp/ntpd &#038;&#038; make obj &#038;&#038; make depend &#038;&#038; make &#038;&#038; make install [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/06/30/178/' rel='bookmark' title='Permanent Link: FreeBSD 5.4-RELEASE-p3 !!'>FreeBSD 5.4-RELEASE-p3 !!</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/03/29/89/' rel='bookmark' title='Permanent Link: FreeBSD telnet overflow vulnerability'>FreeBSD telnet overflow vulnerability</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/12/28/209/' rel='bookmark' title='Permanent Link: FreeBSD ports 裡的 Apache 2.2 啟動 shell script 的問題'>FreeBSD ports 裡的 Apache 2.2 啟動 shell script 的問題</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/01/08/738/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>昨天，<a href="http://www.freebsd.org" target="_blank">FreeBSD</a> 官方發布了三個 Security Advisories：</p>
<ul>
<li><a href="http://security.freebsd.org/advisories/FreeBSD-SA-10:01.bind.asc" target="_blank">FreeBSD-SA-10:01.bind</a></li>
<li><a href="http://security.freebsd.org/advisories/FreeBSD-SA-10:02.ntpd.asc" target="_blank">FreeBSD-SA-10:02.ntpd</a></li>
<li><a href="http://security.freebsd.org/advisories/FreeBSD-SA-10:03.zfs.asc" target="_blank">FreeBSD-SA-10:03.zfs</a></li>
</ul>
<p>根據 Advisories 內容，我原本打算透過以下的步驟作 patch：</p>
<ol>
<li>cd /usr/src &#038;& make update</li>
<li>cd /usr/src/lib/bind &#038;& make obj &#038;& make depend &#038;& make &#038;& make install</li>
<li>cd /usr/src/usr.sbin/named &#038;& make obj &#038;& make depend &#038;& make &#038;& make install</li>
<li>cd /usr/src/usr.sbin/ntp/ntpd &#038;& make obj &#038;& make depend &#038;& make &#038;& make install</li>
<li>cd /usr/src &#038;& make kernel</li>
<li>[REBOOT]</li>
</ol>
<p>但是，進行到第 4 個步驟（<a href="http://security.freebsd.org/advisories/FreeBSD-SA-10:02.ntpd.asc" target="_blank">FreeBSD-SA-10:02.ntpd</a> 的編譯階段），就出現了如下的 message：</p>
<blockquote><p>make: don't know how to make /usr/obj/usr/src/usr.sbin/ntp/ntpd/../libparse/libparse.a. Stop</p></blockquote>
<p>找了一些討論後，我在<a href="http://forums.freebsd.org/showthread.php?t=1475" target="_blank" title="Error while building FreeBSD-SA-09:03.ntpd">這個討論串</a>裡看到好幾種作法。<br />
幾經嘗試，我最終在 FreeBSD 8.0-RELEASE-p1 amd64 用以下這個作法順利編譯成功：</p>
<ol>
<li>cd /usr/src/usr.sbin/ntp</li>
<li>rm -rf /usr/obj/*</li>
<li>make obj &#038;& make depend &#038;& make &#038;& make install</li>
</ol>
<p>有相同問題（狀況）的人可以參考看看。</p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/FreeBSD' rel='tag' target='_self'>FreeBSD</a>, <a class='technorati-link' href='http://technorati.com/tag/patch' rel='tag' target='_self'>patch</a>, <a class='technorati-link' href='http://technorati.com/tag/Security+Advisories' rel='tag' target='_self'>Security Advisories</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/06/30/178/' rel='bookmark' title='Permanent Link: FreeBSD 5.4-RELEASE-p3 !!'>FreeBSD 5.4-RELEASE-p3 !!</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/03/29/89/' rel='bookmark' title='Permanent Link: FreeBSD telnet overflow vulnerability'>FreeBSD telnet overflow vulnerability</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/12/28/209/' rel='bookmark' title='Permanent Link: FreeBSD ports 裡的 Apache 2.2 啟動 shell script 的問題'>FreeBSD ports 裡的 Apache 2.2 啟動 shell script 的問題</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/MZ2XIBK6QFovcqbiqAHAja9ExCo/0/da"><img src="http://feedads.g.doubleclick.net/~a/MZ2XIBK6QFovcqbiqAHAja9ExCo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/MZ2XIBK6QFovcqbiqAHAja9ExCo/1/da"><img src="http://feedads.g.doubleclick.net/~a/MZ2XIBK6QFovcqbiqAHAja9ExCo/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/01/08/738/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/01/08/738/</feedburner:origLink></item>
		<item>
		<title>[Javascript] 從 array 裡隨機挑出不重複的值</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/3_YKOmznsjc/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/01/07/735/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 09:17:25 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[Programing]]></category>
		<category><![CDATA[WWW]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[For loop]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=735</guid>
		<description><![CDATA[Javascript 提供了 For ... In ... ，我用的還蠻高興的（雖然我很少撰寫 Javascript）。 今天遇到某種特殊需求，我才發現這個迴圈語法並非萬能。 從 array 裡隨機挑出不重複的值有兩種情況，一種很單純，For ... In ... 迴圈可以處理的很好： var fruits = [&#34;Banana&#34;, &#34;Orange&#34;, &#34;Apple&#34;, &#34;Mango&#34;]; var x; while(fruits.length &#62; 0) { var r = Math.floor( Math.random() * fruits.length ); var n = fruits[r]; document.write(&#34;Choosen[&#34; + r + &#34;]: &#34; + n + &#34;&#60;br /&#62;&#34;); document.write(&#34;Array: &#34; + [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/03/08/55/' rel='bookmark' title='Permanent Link: 讓瀏覽者能快速將頁面加入 furl 跟 Del.icio.us 的作法'>讓瀏覽者能快速將頁面加入 furl 跟 Del.icio.us 的作法</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/07/01/179/' rel='bookmark' title='Permanent Link: Sun 進軍 NoteBook 市場!'>Sun 進軍 NoteBook 市場!</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2007/12/05/257/' rel='bookmark' title='Permanent Link: 網頁的簡繁轉換'>網頁的簡繁轉換</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/01/07/735/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>Javascript 提供了 <a href="http://www.w3schools.com/js/js_loop_for_in.asp" title="Javascript For ... In Statement" target="_blank">For ... In ...</a> ，我用的還蠻高興的（雖然我很少撰寫 Javascript）。<br />
今天遇到某種特殊需求，我才發現這個迴圈語法並非萬能。</p>
<p>從 array 裡隨機挑出不重複的值有兩種情況，一種很單純，<a href="http://www.w3schools.com/js/js_loop_for_in.asp" title="Javascript For ... In Statement" target="_blank">For ... In ...</a> 迴圈可以處理的很好：</p>
<pre class="brush: jscript;">var fruits = [&quot;Banana&quot;, &quot;Orange&quot;, &quot;Apple&quot;, &quot;Mango&quot;];
var x;

while(fruits.length &gt; 0) {
	var r = Math.floor( Math.random() * fruits.length );
	var n = fruits[r];
	document.write(&quot;Choosen[&quot; + r + &quot;]: &quot; + n + &quot;&lt;br /&gt;&quot;);
	document.write(&quot;Array: &quot; + fruits + &quot;&lt;br /&gt;&quot;);

	for(x in fruits) {
		if (fruits[x] == n) {
			fruits.splice(x, 1);
		}
	}
}</pre>
<p>若是 array 裡面已經存在重複的值，而且 array 的資料的來源不方便控制（例如是 HTML 裡面的 li 物件），<a href="http://www.w3schools.com/js/js_loop_for_in.asp" title="Javascript For ... In Statement" target="_blank">For ... In ...</a> 這種方便的迴圈語法就必須放棄，改用傳統的 for 迴圈：</p>
<pre class="brush: jscript;">var fruits = [&quot;Banana&quot;, &quot;Banana&quot;, &quot;Orange&quot;, &quot;Orange&quot;, &quot;Banana&quot;, &quot;Apple&quot;, &quot;Apple&quot;, &quot;Orange&quot;, &quot;Mango&quot;];
var i=0;

while(fruits.length &gt; 0) {
	var r = Math.floor( Math.random() * fruits.length );
	var n = fruits[r];
	document.write(&quot;Choosen[&quot; + r + &quot;]: &quot; + n + &quot;&lt;br /&gt;&quot;);
	document.write(&quot;Array: &quot; + fruits + &quot;&lt;br /&gt;&quot;);

	for(i=0; i&lt;fruits.length; i++) {
		if (fruits[i] == n) {
			fruits.splice(i, 1);
			i--;
		}
	}
}</pre>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/array' rel='tag' target='_self'>array</a>, <a class='technorati-link' href='http://technorati.com/tag/For+loop' rel='tag' target='_self'>For loop</a>, <a class='technorati-link' href='http://technorati.com/tag/Javascript' rel='tag' target='_self'>Javascript</a>, <a class='technorati-link' href='http://technorati.com/tag/random' rel='tag' target='_self'>random</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/03/08/55/' rel='bookmark' title='Permanent Link: 讓瀏覽者能快速將頁面加入 furl 跟 Del.icio.us 的作法'>讓瀏覽者能快速將頁面加入 furl 跟 Del.icio.us 的作法</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/07/01/179/' rel='bookmark' title='Permanent Link: Sun 進軍 NoteBook 市場!'>Sun 進軍 NoteBook 市場!</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2007/12/05/257/' rel='bookmark' title='Permanent Link: 網頁的簡繁轉換'>網頁的簡繁轉換</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/OUEaLMbRWTq2TT1yZRgSt_hxDNc/0/da"><img src="http://feedads.g.doubleclick.net/~a/OUEaLMbRWTq2TT1yZRgSt_hxDNc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/OUEaLMbRWTq2TT1yZRgSt_hxDNc/1/da"><img src="http://feedads.g.doubleclick.net/~a/OUEaLMbRWTq2TT1yZRgSt_hxDNc/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/01/07/735/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/01/07/735/</feedburner:origLink></item>
		<item>
		<title>[C#] 取得 wav 檔案格式</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/fMnoJMXhlSM/</link>
		<comments>http://www.joehorn.idv.tw/archives/2010/01/04/729/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 05:01:25 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[NAudio]]></category>
		<category><![CDATA[PCM]]></category>
		<category><![CDATA[wav]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=729</guid>
		<description><![CDATA[前陣子，在工作上剛好需要對 wav 檔案格式進行判定，可是 NAudio 製作出來的格式用來作判斷又有錯誤，所以土法煉鋼寫了一個小 class： using System; using System.Collections.Generic; using System.Text; using System.IO; class WavInfo { private String _Error; public String Error { get { return this._Error; } } private Boolean _PCM; public Boolean PCM { get { return this._PCM; } } private uint _Channel; public uint Channel { get { return this._Channel; } [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2006/06/22/232/' rel='bookmark' title='Permanent Link: [VB.Net] 將 DataSet 匯出成 CSV 檔'>[VB.Net] 將 DataSet 匯出成 CSV 檔</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2010/01/04/729/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>前陣子，在工作上剛好需要對 wav 檔案格式進行判定，可是 <a href="http://www.codeplex.com/naudio">NAudio</a> 製作出來的格式用來作判斷又有錯誤，所以土法煉鋼寫了一個小 class：</p>
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

class WavInfo
{
    private String _Error;
    public String Error
    {
        get
        {
            return this._Error;
        }
    }

    private Boolean _PCM;
    public Boolean PCM
    {
        get
        {
            return this._PCM;
        }
    }

    private uint _Channel;
    public uint Channel
    {
        get
        {
            return this._Channel;
        }
    }

    private uint _SampleRate;
    public uint SampleRate
    {
        get
        {
            return this._SampleRate;
        }
    }

    private uint _BitsPerSample;
    public uint BitsPerSample
    {
        get
        {
            return this._BitsPerSample;
        }
    }

    private uint _ByteRate;
    public uint ByteRate
    {
        get
        {
            return this._ByteRate;
        }
    }

    private uint _BlockAlign;
    public uint BlockAlign
    {
        get
        {
            return this._BlockAlign;
        }
    }

    public WavInfo(String FileName)
    {
        try
        {
            FileStream FS = File.OpenRead(@FileName);
            Byte[] ReadTmp = new Byte[36];

            FS.Read(ReadTmp, 0, 36);
            FS.Close();

            if (BitConverter.ToUInt16(ReadTmp, 20) == 1)
            {
                this._PCM = true;
            }

            this._Channel = BitConverter.ToUInt16(ReadTmp, 22);
            this._SampleRate = BitConverter.ToUInt32(ReadTmp, 24);
            this._BitsPerSample = BitConverter.ToUInt16(ReadTmp, 34);

            this._ByteRate = this._Channel * this._SampleRate * this._BitsPerSample / 8;
            this._BlockAlign = this._Channel * this._BitsPerSample / 8;

            this._Error = String.Empty;
        }
        catch (Exception e)
        {
             this._Error = e.ToString();
        }
    }
}
</pre>
<ul>
<li>檢查 Error 是否為空字串，就知道是否成功取得 wav 檔案資訊。</li>
<li>檢查 PCM 是否為 true，就知道該檔案是不是 PCM 格式的 wav 檔。</li>
<li>wav 檔播放的時間會等於 ByteRate。</li>
</ul>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/.NET' rel='tag' target='_self'>.NET</a>, <a class='technorati-link' href='http://technorati.com/tag/Audio' rel='tag' target='_self'>Audio</a>, <a class='technorati-link' href='http://technorati.com/tag/C%23' rel='tag' target='_self'>C#</a>, <a class='technorati-link' href='http://technorati.com/tag/file' rel='tag' target='_self'>file</a>, <a class='technorati-link' href='http://technorati.com/tag/NAudio' rel='tag' target='_self'>NAudio</a>, <a class='technorati-link' href='http://technorati.com/tag/PCM' rel='tag' target='_self'>PCM</a>, <a class='technorati-link' href='http://technorati.com/tag/wav' rel='tag' target='_self'>wav</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2006/06/22/232/' rel='bookmark' title='Permanent Link: [VB.Net] 將 DataSet 匯出成 CSV 檔'>[VB.Net] 將 DataSet 匯出成 CSV 檔</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/xLUyUKKhV89mwnXC1_31kDetHFY/0/da"><img src="http://feedads.g.doubleclick.net/~a/xLUyUKKhV89mwnXC1_31kDetHFY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/xLUyUKKhV89mwnXC1_31kDetHFY/1/da"><img src="http://feedads.g.doubleclick.net/~a/xLUyUKKhV89mwnXC1_31kDetHFY/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2010/01/04/729/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2010/01/04/729/</feedburner:origLink></item>
		<item>
		<title>輕鬆設定 PHP 的專案變數</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/NdLkeMmYZAI/</link>
		<comments>http://www.joehorn.idv.tw/archives/2009/12/10/718/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 17:31:05 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[auto_prepend_file]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[include_once]]></category>
		<category><![CDATA[php_value]]></category>
		<category><![CDATA[require]]></category>
		<category><![CDATA[require_once]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=718</guid>
		<description><![CDATA[我們在開發 PHP 專案時，時常會把一些常用變數放在某個 PHP 檔案，接著用 require()、require_once()、incluce()、include_once() 等函式將之引入。 若系統目錄很複雜，就會在很多檔案裡面看到類似這樣的語法： require_once('../../Config.php'); 然而，當這種系統必須變動目錄結構與檔案所在目錄時，開發人員就得額外多花些時間來更改上述之程式碼。 其實，PHP 的設定檔中，有個很少被注意到的變數，就是 auto_prepend_file 。 假設目前有個 PHP 專案，專案根目錄之系統絕對路徑為 /var/www/html/Project， 共用設定檔為 /var/www/html/Project/Config.php 。 我們可以在 /var/www/html/Project 下建立 .htaccess 檔案，內容如下： php_value auto_prepend_file "/var/www/html/Project/Config.php" 而 /var/www/html/Project 目錄下所有的檔案，以及所有子目錄中的檔案都會自行引入 /var/www/html/Project/Config.php 。 PS. 由於 auto_prepend_file 的設定是透過 require() 來實作，使用這種方法要特別注意以下兩點： 一旦設定了 auto_prepend_file ，該檔案就必須要存在，否則就會有 error ，導致該目錄下的所有 PHP 檔案無法正常執行。 include_path 會影響 auto_prepend_file。 Technorati Tags: auto_prepend_file, htaccess, include, [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2009/12/10/718/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>我們在開發 <a href="http://www.php.net">PHP</a> 專案時，時常會把一些常用變數放在某個 PHP 檔案，接著用 <a href="http://www.php.net/require">require()</a>、<a href="http://www.php.net/require_once">require_once()</a>、<a href="http://www.php.net/manual/en/function.include.php">incluce()</a>、<a href="http://tw2.php.net/manual/en/function.include-once.php">include_once()</a> 等函式將之引入。<br />
若系統目錄很複雜，就會在很多檔案裡面看到類似這樣的語法：</p>
<pre class="brush: plain;">require_once('../../Config.php');</pre>
<p>然而，當這種系統必須變動目錄結構與檔案所在目錄時，開發人員就得額外多花些時間來更改上述之程式碼。</p>
<p>其實，<a href="http://www.php.net">PHP</a> 的設定檔中，有個很少被注意到的變數，就是 <em>auto_prepend_file</em> 。</p>
<p>假設目前有個 <a href="http://www.php.net">PHP</a> 專案，專案根目錄之系統絕對路徑為 /var/www/html/Project，<br />
共用設定檔為 /var/www/html/Project/Config.php 。<br />
我們可以在 /var/www/html/Project 下建立 .htaccess 檔案，內容如下：</p>
<blockquote><p>php_value auto_prepend_file "/var/www/html/Project/Config.php"</p></blockquote>
<p>而 /var/www/html/Project 目錄下所有的檔案，以及所有子目錄中的檔案都會自行引入 /var/www/html/Project/Config.php 。</p>
<p>PS. 由於 auto_prepend_file 的設定是透過 <a href="http://www.php.net/require">require()</a> 來實作，使用這種方法要特別注意以下兩點：</p>
<ol>
<li>一旦設定了 auto_prepend_file ，該檔案就必須要存在，否則就會有 error ，導致該目錄下的所有 PHP 檔案無法正常執行。</li>
<li>include_path 會影響 auto_prepend_file。</li>
</ol>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/auto_prepend_file' rel='tag' target='_self'>auto_prepend_file</a>, <a class='technorati-link' href='http://technorati.com/tag/htaccess' rel='tag' target='_self'>htaccess</a>, <a class='technorati-link' href='http://technorati.com/tag/include' rel='tag' target='_self'>include</a>, <a class='technorati-link' href='http://technorati.com/tag/include_once' rel='tag' target='_self'>include_once</a>, <a class='technorati-link' href='http://technorati.com/tag/PHP' rel='tag' target='_self'>PHP</a>, <a class='technorati-link' href='http://technorati.com/tag/php_value' rel='tag' target='_self'>php_value</a>, <a class='technorati-link' href='http://technorati.com/tag/require' rel='tag' target='_self'>require</a>, <a class='technorati-link' href='http://technorati.com/tag/require_once' rel='tag' target='_self'>require_once</a></p>

<!-- end wp-tags-to-technorati -->


<p>No related posts.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/IOToY0cOtZncq7YSc6FAycrgl1w/0/da"><img src="http://feedads.g.doubleclick.net/~a/IOToY0cOtZncq7YSc6FAycrgl1w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/IOToY0cOtZncq7YSc6FAycrgl1w/1/da"><img src="http://feedads.g.doubleclick.net/~a/IOToY0cOtZncq7YSc6FAycrgl1w/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2009/12/10/718/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2009/12/10/718/</feedburner:origLink></item>
		<item>
		<title>一些增進 MySQL 效能的 tips</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/9_D_vnj0CTA/</link>
		<comments>http://www.joehorn.idv.tw/archives/2009/11/20/705/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 17:29:26 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[BLOB]]></category>
		<category><![CDATA[CHAR]]></category>
		<category><![CDATA[ENUM]]></category>
		<category><![CDATA[EXPLAIN]]></category>
		<category><![CDATA[INDEX]]></category>
		<category><![CDATA[MyISAM]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[NOT NULL]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[TEXT]]></category>
		<category><![CDATA[VARCHAR]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=705</guid>
		<description><![CDATA[幾天前，跟 Solaris 叔叔 談到 MySQL 的 ENUM，回家後上網找了些資料，剛好找出了一些使用 MySQL 時，與效能有關的 tips。 稍微整理過後，放在這裡： 善用 EXPLAIN SELECT 分析 SQL statement，以下列舉狀態解讀： EQ_REF 一對一比對 REF 一對多比對 RANGE 特定範圍的資料會被傳回 INDEX 使用 INDEX 裡的資料 ALL 對整個 TABLE 作掃瞄（最差） 善用 INDEX，以這個 SQL statement 為例： SELECT `col_a` FROM `table_a` LEFT JOIN `table_b` ON `table_a`.`col_b` = `table_b`.`col_c` WHERE `col_d` = ....; -- SELECT 的欄位不需 INDEX，ex： [...]


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2010/03/08/768/' rel='bookmark' title='Permanent Link: [MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要'>[MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2010/04/01/791/' rel='bookmark' title='Permanent Link: [MySQL] 處理 weekday 欄位'>[MySQL] 處理 weekday 欄位</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/05/29/609/' rel='bookmark' title='Permanent Link: 網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"'>網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2009/11/20/705/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>幾天前，跟 <a href="http://www.evil-elf.net/" target="_blank">Solaris 叔叔</a> 談到 <a href="http://dev.mysql.com/doc/refman/5.1/en/enum.html">MySQL 的 ENUM</a>，回家後上網找了些資料，剛好找出了一些使用 <a href="http://dev.mysql.com">MySQL</a> 時，與效能有關的 tips。</p>
<p>稍微整理過後，放在這裡：</p>
<ul>
<li>善用 EXPLAIN SELECT 分析 SQL statement，以下列舉狀態解讀：<br />
<table border="1">
<tr>
<td>EQ_REF</td>
<td>一對一比對</td>
</tr>
<tr>
<td>REF</td>
<td>一對多比對</td>
</tr>
<tr>
<td>RANGE</td>
<td>特定範圍的資料會被傳回</td>
</tr>
<tr>
<td>INDEX</td>
<td>使用 INDEX 裡的資料</td>
</tr>
<tr>
<td>ALL</td>
<td>對整個 TABLE 作掃瞄（最差）</td>
</tr>
</table>
</li>
<li>善用 INDEX，以這個 SQL statement 為例：
<pre class="brush: sql;">SELECT `col_a`
FROM `table_a` LEFT JOIN `table_b`
ON `table_a`.`col_b` = `table_b`.`col_c`
WHERE `col_d` = ....;

-- SELECT 的欄位不需 INDEX，ex： `col_a`。
-- JOIN 的欄位需要 INDEX，ex： `table_a`.`col_b` 與 `table_b`.`col_c`。
-- WHERE 的欄位需要 INDEX，ex： `col_d`。
</pre>
</li>
<li>儘量使用固定大小的欄位，MyISAM 搜尋固定大小欄位比較快；也就是說，能用 CHAR 就別用 VARCHAR。</li>
<li>儘量將欄位指定為 NOT NULL。</li>
<li>ENUM 格式的欄位，資料處理速度很快（<a href="http://www.mysqlperformanceblog.com/2008/01/24/enum-fields-vs-varchar-vs-int-joined-table-what-is-faster/" title="Enum Fields VS Varchar VS Int + Joined table: What is Faster?" target="_blank">實測結果在這</a>）。</li>
<li>不要取不需要的資料，下面這種語法就是不好的例子：
<pre class="brush: sql;">SELECT * ...</pre>
</li>
<li>把 BLOB 與 TEXT 拆開，減少 <a href="http://dev.mysql.com">MySQL</a> 開啟單一大檔（table 資料檔案過大）的機會。</li>
<li>JOIN 用的欄位資料格式最好是相同的，以免 <a href="http://dev.mysql.com">MySQL</a> 作 FULL TABLE SCAN。</li>
<li>使用 LIKE 時，避免把 % 放在字串開頭，以免 INDEX 利用率不佳。
<pre class="brush: sql;">-- 下列這種語法無法利用 INDEX
SELECT ... WHERE `col` LIKE '%string%';

-- 下列這種語法會利用 INDEX
SELECT ... WHERE `col` LIKE 'string%';</pre>
</li>
<li>注意 WHERE 子句內的運算式。
<pre class="brush: sql;">-- 下列這種語法會使用 INDEX，速度快。
SELECT ... WHERE `col` &lt; 100 / 10;

-- 下列這種語法會導致 FULL TABLE SCAN，速度慢。
SELECT ... WHERE `col` * 10 &lt; 100;</pre>
</li>
</ul>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/BLOB' rel='tag' target='_self'>BLOB</a>, <a class='technorati-link' href='http://technorati.com/tag/CHAR' rel='tag' target='_self'>CHAR</a>, <a class='technorati-link' href='http://technorati.com/tag/ENUM' rel='tag' target='_self'>ENUM</a>, <a class='technorati-link' href='http://technorati.com/tag/EXPLAIN' rel='tag' target='_self'>EXPLAIN</a>, <a class='technorati-link' href='http://technorati.com/tag/INDEX' rel='tag' target='_self'>INDEX</a>, <a class='technorati-link' href='http://technorati.com/tag/MyISAM' rel='tag' target='_self'>MyISAM</a>, <a class='technorati-link' href='http://technorati.com/tag/MySQL' rel='tag' target='_self'>MySQL</a>, <a class='technorati-link' href='http://technorati.com/tag/NOT+NULL' rel='tag' target='_self'>NOT NULL</a>, <a class='technorati-link' href='http://technorati.com/tag/performance' rel='tag' target='_self'>performance</a>, <a class='technorati-link' href='http://technorati.com/tag/TEXT' rel='tag' target='_self'>TEXT</a>, <a class='technorati-link' href='http://technorati.com/tag/VARCHAR' rel='tag' target='_self'>VARCHAR</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2010/03/08/768/' rel='bookmark' title='Permanent Link: [MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要'>[MySQL] Primary Key、UNIQUE、INDEX 與 LIMIT 有多重要</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2010/04/01/791/' rel='bookmark' title='Permanent Link: [MySQL] 處理 weekday 欄位'>[MySQL] 處理 weekday 欄位</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/05/29/609/' rel='bookmark' title='Permanent Link: 網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"'>網頁系統的使用者驗證與 MySQL 的 "SELECT ... LIMIT m,n"</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/L1ZDtmXqFOwa_8snLVkntoEXk_A/0/da"><img src="http://feedads.g.doubleclick.net/~a/L1ZDtmXqFOwa_8snLVkntoEXk_A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/L1ZDtmXqFOwa_8snLVkntoEXk_A/1/da"><img src="http://feedads.g.doubleclick.net/~a/L1ZDtmXqFOwa_8snLVkntoEXk_A/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2009/11/20/705/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2009/11/20/705/</feedburner:origLink></item>
		<item>
		<title>[小軟體] 備份 putty 的設定 - puttyBackup</title>
		<link>http://feedproxy.google.com/~r/JoeHorn-rss2/~3/QycCPhLkWck/</link>
		<comments>http://www.joehorn.idv.tw/archives/2009/10/11/701/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 10:02:27 +0000</pubDate>
		<dc:creator>Joe Horn</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Computer Software]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[registry]]></category>
		<category><![CDATA[Windows Form]]></category>

		<guid isPermaLink="false">http://www.joehorn.idv.tw/?p=701</guid>
		<description><![CDATA[這是我的第一個 C# Windows Form 程式。 執行畫面： 使用方法： 點選 Browse 按鈕，選擇並輸入 reg 檔存放位置與檔名。 點選 Backup 按鈕就能將 putty 的登錄檔輸出。 下載： puttyBackup Downloads: 226 File Size: 0.0 KB Technorati Tags: backup, C#, putty, registry, Windows Form Related posts:Windows 關機加速程式. 在 Visual Studio 2008 設定 Windows Form 的圖示 Live 8 !


Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/07/27/191/' rel='bookmark' title='Permanent Link: Windows 關機加速程式.'>Windows 關機加速程式.</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/10/08/698/' rel='bookmark' title='Permanent Link: 在 Visual Studio 2008 設定 Windows Form 的圖示'>在 Visual Studio 2008 設定 Windows Form 的圖示</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/07/03/181/' rel='bookmark' title='Permanent Link: Live 8 !'>Live 8 !</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.joehorn.idv.tw/archives/2009/10/11/701/&amp;layout=standard&amp;show_faces=false&amp;width=400&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=zh_TW" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:400px; height:25px"></iframe></div><p>這是我的第一個 C# Windows Form 程式。</p>
<p>執行畫面：<br />
<a href="http://www.joehorn.idv.tw/upload/2009/10/2009-10-11-17-53-24.png" rel="lightbox" title="puttyBackup"><img src="http://www.joehorn.idv.tw/upload/2009/10/2009-10-11-17-53-24.png" alt="puttyBackup" width="400" /></a></p>
<p>使用方法：</p>
<ol>
<li>點選 <strong>Browse</strong> 按鈕，選擇並輸入 reg 檔存放位置與檔名。</li>
<li>點選 <strong>Backup</strong> 按鈕就能將 putty 的登錄檔輸出。</li>
</ol>
<p>下載：<br />
<div class='download-link'>
							<a href='http://www.joehorn.idv.tw/download.php?file=http://www.joehorn.idv.tw/upload/puttyBackup.exe'><img alt='Download' class='leftalign' src='http://www.joehorn.idv.tw/wp-content/plugins/dBeautifier/icons/downloads.png' /></a>
							<h4>
								<a href='http://www.joehorn.idv.tw/download.php?file=http://www.joehorn.idv.tw/upload/puttyBackup.exe'>puttyBackup</a>
							</h4><p>Downloads: 226 File Size: 0.0 KB </p>
						</div></p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/backup' rel='tag' target='_self'>backup</a>, <a class='technorati-link' href='http://technorati.com/tag/C%23' rel='tag' target='_self'>C#</a>, <a class='technorati-link' href='http://technorati.com/tag/putty' rel='tag' target='_self'>putty</a>, <a class='technorati-link' href='http://technorati.com/tag/registry' rel='tag' target='_self'>registry</a>, <a class='technorati-link' href='http://technorati.com/tag/Windows+Form' rel='tag' target='_self'>Windows Form</a></p>

<!-- end wp-tags-to-technorati -->


<p>Related posts:<ol><li><a href='http://www.joehorn.idv.tw/archives/2005/07/27/191/' rel='bookmark' title='Permanent Link: Windows 關機加速程式.'>Windows 關機加速程式.</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2009/10/08/698/' rel='bookmark' title='Permanent Link: 在 Visual Studio 2008 設定 Windows Form 的圖示'>在 Visual Studio 2008 設定 Windows Form 的圖示</a></li>
<li><a href='http://www.joehorn.idv.tw/archives/2005/07/03/181/' rel='bookmark' title='Permanent Link: Live 8 !'>Live 8 !</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/ExfvgfptMRc7g_IHXwI2LdymBKc/0/da"><img src="http://feedads.g.doubleclick.net/~a/ExfvgfptMRc7g_IHXwI2LdymBKc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ExfvgfptMRc7g_IHXwI2LdymBKc/1/da"><img src="http://feedads.g.doubleclick.net/~a/ExfvgfptMRc7g_IHXwI2LdymBKc/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.joehorn.idv.tw/archives/2009/10/11/701/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joehorn.idv.tw/archives/2009/10/11/701/</feedburner:origLink></item>
	</channel>
</rss>
