<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>石頭閒語</title>
<link>http://blog.roodo.com/rocksaying/</link>
<description>[Licensed by GNU FDL]
Rock&#039;s Saying 
遊手好閒的石頭成的部落格 
Open Your Mind, Use the Source! 
//
</description>
<language>zh-tw</language>
<generator>Roodo Blog System</generator>
<copyright>All Rights Reserved</copyright>
<atom:link href="http://blog.roodo.com/rocksaying/rss.xml" rel="self" type="application/rss+xml" />
<item>
	<title>SQLite/PHP/Apache 設定筆記</title>
	<description><![CDATA[<div class="tags">Tags: php sqlite database</div>
<p>
SQLite 目前有兩種版本，一是 SQLite 2，另一為 SQLite 3。PHP 兩種都支援，但所需的擴充項(extension)並不相同。
</p>
<blockquote>
<a href="http://www.sqlite.org/">SQLite</a> is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine.<br/>
<cite>SQLite Home Page</cite>
</blockquote>
<p>
在 PHP 中使用 SQLite2 ，必須載入 SQLite 擴充項(sqlite.so/php_sqlite.dll)。
</p>

<p>
在 PHP 中使用 SQLite3 ，必須載入 PDO_SQLite 擴充項(pdo_sqlite.so/php_pdo_sqlite.dll)。同時這也表示兩件事。一，SQLite3 是 PDO 擴充項的一個工廠(factory) ，你必須透過 PDO 介面去呼叫 SQLite3 的方法。二，PHP5 或以上的版本才支援 PDO 擴充項，故 PHP4 不能使用 SQLite3。
</p>
]]></description>
	<link>http://blog.roodo.com/rocksaying/archives/6319337.html</link>
	<guid isPermaLink="true">http://blog.roodo.com/rocksaying/archives/6319337.html</guid>
	<category>SQL/Database</category>
	<pubDate>Fri, 04 Jul 2008 11:23:56 +0800</pubDate>
</item>
<item>
	<title>新增資料時自動產生識別代號的一些方法</title>
	<description><![CDATA[<div class="tags">Tags: sql serial max</div>
<p>
時常接觸資料庫應用的編程人員，應該都會遇到需要新增資料後自動產生一個識別代號(ID)的設計。但遺憾的是， SQL Standard 並沒有定義任何相關型態或函數。於是各種資料庫系統都有自己的一套做法。使得這種普遍的應用設計，帶來了一個可攜性陷阱。
</p>

<p>
在不考慮使用資料庫系統特定方法的情況下，我長久以來習慣用 <code>MAX(id) + 1</code> 產生識別代號。至於 MySQL 的用戶，我都<strong>特別為它準備另一個 SQL Schema</strong>，改用 MySQL 特有的 <code>AUTO_INCREMENT</code> 欄位屬性。
</p>
]]></description>
	<link>http://blog.roodo.com/rocksaying/archives/6223035.html</link>
	<guid isPermaLink="true">http://blog.roodo.com/rocksaying/archives/6223035.html</guid>
	<category>SQL/Database</category>
	<pubDate>Tue, 24 Jun 2008 12:04:40 +0800</pubDate>
</item>
<item>
	<title>CentOS, 我搞不懂你...</title>
	<description><![CDATA[<div class="tags">Tags: linux</div>
<p>
最近公司分了一個案子下來，要在基於 CentOS 的環境進行開發工作。公司也配了一台開發用主機下來，不過是空機，OS要自己裝。於是我下載 CentOS 5 完成了安裝工作。安裝工作沒啥問題，但要測試 HTTP 和 FTP 等網路服務時卻出狀況了。其他主機都無法連接開發用主機上的網路服務，如 HTTP, FTP 和資料庫，只有SSH 可以連接(謎啊...)。我一開始認為是防火牆問題，於是新增了對應的 iptables 規則，但仍然無用。於是我開始 google 文件... 最後的答案告訴我，一切都是 SELinux 的問題。
</p>
<p>
我想想，我用了下列指令。
</p>
<pre>
$ getsebool -a

$ setsebool -P ftpd_disable_trans on
$ service vsftpd restart
## OK! 成功地開放 FTP 服務。

$ setsebool -P httpd_disable_trans on
$ setsebool -P httpd_can_network_connect on
$ service httpd restart
## OMG! HTTP服務還是無法連結 囧

## 也許 iptables 也有影嚮，試試...

$ iptables -A INPUT --dport 80 -j ACCEPT
$ service iptables save
## It still doesn't work.

$ service iptables stop
## 我關掉 iptables ，所有問題都迎刃而解了。
## 最後，我執行 ntsysv ，把 iptables 服務取消了...
</pre>
<p>
我到現在仍然搞不懂一件事。像 FTP, MySQL, PostgreSQL 這些服務，我在 SELinux 設定開啟後就能用了(但未在 iptables 設定對應規則)，卻為何在 SELinux 和 iptables 都設定開放 HTTP 服務了，外部主機還是無法連接 HTTP 服務呢？
</p>]]></description>
	<link>http://blog.roodo.com/rocksaying/archives/6163377.html</link>
	<guid isPermaLink="true">http://blog.roodo.com/rocksaying/archives/6163377.html</guid>
	<category>電腦技術</category>
	<pubDate>Wed, 11 Jun 2008 17:19:46 +0800</pubDate>
</item>
<item>
	<title>留言機器人又進化了，還會自動抓前面的回應內容來填</title>
	<description><![CDATA[<p>
最近兩週忙著新案子，沒什麼時間上來看看部落格。一案未止一案又起，各個專案的時程表在哪啊？我怎麼都沒看過，這就是 CMMI 3 認證的公司開發專案的實際情形啊。
</p>
<p>
哎呀，扯遠了。總之呢，當我上來查看新留言時，發現其中兩篇的留言內容非常熟悉，好像看過一樣。而且留言者的連結是一樣的。正當我感到困惑之際，我往上捲頁一看，就知道那熟悉感從何而來了。原來根本是留言機器人自動從前面的留言中抓一段出來，冒充新的留言填上去嘛。我真佩服那些機器人的作者了，真是愈寫愈聰明啊。不過這樣做，小心違反著作權法喔，畢竟你是 copy 別人的留言／文章當自己的留言用。廣告留言也許無法可罰，但侵害著作權有法可罰。
</p>
]]></description>
	<link>http://blog.roodo.com/rocksaying/archives/6136153.html</link>
	<guid isPermaLink="true">http://blog.roodo.com/rocksaying/archives/6136153.html</guid>
	<category>生活記事</category>
	<pubDate>Thu, 05 Jun 2008 17:43:25 +0800</pubDate>
</item>
<item>
	<title>開發自動化文章參考</title>
	<description><![CDATA[<div class="tags">Tags: agile_method</div>
<p>
前幾天在 developerWorks 看到一篇關於負載測試的新文章，《<a href="http://www.ibm.com/developerworks/cn/java/j-ap04088/">让开发自动化: 自动负载测试 - 使用 Apache Ant 和 Apache JMeter 频繁进行负载测试</a>》。它提醒了我一件事：負載測試也有自動化工具。我以往很少在這一方面下功夫。大部份時候，我都是針對特定情況，自行撰寫特定的負載測試工具，而且不是很好用...
</p>
<p>
我目前尚未引入 JMeter 到日常工作之中，暫時先在此做過標註。不過有一點可以先說，JMeter 是針對應用軟體的成品或者整個運作環境進行負載測試，跟你的應用軟體開發工具無關。所以並不侷限於 Java 開發的專案才能用 JMeter 。使用 PHP 或其他工具開發的案子也能用。
</p>
<ul>
<li><a href="http://www.ibm.com/developerworks/cn/java/j-ap04088/">让开发自动化: 自动负载测试 - 使用 Apache Ant 和 Apache JMeter 频繁进行负载测试</a></li>
<li><a href="http://jakarta.apache.org/jmeter/index.html">Apache JMeter</a></li>
<li><a href="http://www.programmerplanet.org/pages/projects/jmeter-ant-task.php">JMeter Ant Task</a></li>
</ul>
<p>
附帶一提，developerWorks 專欄作者 Paul Duvall 所撰寫的《<a href="http://www.ibm.com/developerworks/cn/java/j-ap/?S_TACT=105AGX02&S_CMP=ART">让开发自动化</a>》專欄，皆有相當高的實務價值，值得一讀。
</p>
]]></description>
	<link>http://blog.roodo.com/rocksaying/archives/6136087.html</link>
	<guid isPermaLink="true">http://blog.roodo.com/rocksaying/archives/6136087.html</guid>
	<category>Programming</category>
	<pubDate>Thu, 05 Jun 2008 17:11:41 +0800</pubDate>
</item>
<item>
	<title>利用 NullObject 改善程式可讀性，No more if, no more try</title>
	<description><![CDATA[<div class="tags">Tags: php5 refactoring nullobject</div>
<p>
剛在重構一組類別的程式碼時，突然想到 Martin 在《敏捷軟體開發原則、樣式與實務》一書中提到的一個編程技巧，就是在失敗狀況時回傳 <var>NullObject</var> ，避免行為調用者用 <code>if</code> 或 <code>try</code> 處理失敗狀況，影響程式可讀性。
</p>
<p>
我重構中的類別程式碼，基本上是一個聚合類別，它包含了其他類別的個體。此聚合類別提供一個方法 <code>get()</code> ，以取得它所包含的個體。外部調用 <code>get()</code> 後取得內容個體後，立即呼叫該個體的一個方法。
</p>
]]></description>
	<link>http://blog.roodo.com/rocksaying/archives/6028145.html</link>
	<guid isPermaLink="true">http://blog.roodo.com/rocksaying/archives/6028145.html</guid>
	<category>Programming</category>
	<pubDate>Thu, 15 May 2008 16:27:36 +0800</pubDate>
</item>
<item>
	<title>請在「持續整合」的原則下利用版本控制工具的合併功能</title>
	<description><![CDATA[<div class="tags">Tags: svn subversion cvs version_control agile_method</div>
<p>
前一陣子在工作場所碰到一件事，我的同事抱怨 SVN 不能幫他合併他修改過的分支內容。我覺得很奇怪，因為我並沒有碰過這種情形。一開始我以為他是不熟悉 TortoiseSVN 工具，後來我實際看了他操作後，看到他竟然一次要合併近百份源碼檔，當場無言以對。
</p>

<p>
我記得我曾說過 SVN 可以幫我們程序員自動合併分支的源碼內容，並在衝突時提示我們。然而，在碰到同事這件例子後，我發覺我忘了加一個但書: <strong>「請在持續整合(Continuous Integration)的原則下利用合併功能」</strong>。否則再好的版本控制工具也無法幫你合併。
</p>
]]></description>
	<link>http://blog.roodo.com/rocksaying/archives/5990201.html</link>
	<guid isPermaLink="true">http://blog.roodo.com/rocksaying/archives/5990201.html</guid>
	<category>Programming</category>
	<pubDate>Wed, 07 May 2008 18:33:02 +0800</pubDate>
</item>
</channel>
</rss>