<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Temporality &#187; computer</title>
	<atom:link href="http://www.sylin.net/blog/category/computer/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sylin.net/blog</link>
	<description>my causerie</description>
	<lastBuildDate>Sat, 05 Mar 2011 18:32:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Qualcomm 7&#215;30</title>
		<link>http://www.sylin.net/blog/2009/12/07/170</link>
		<comments>http://www.sylin.net/blog/2009/12/07/170#comments</comments>
		<pubDate>Mon, 07 Dec 2009 02:45:55 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[7x30]]></category>
		<category><![CDATA[qualcomm]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=170</guid>
		<description><![CDATA[高通最新的智能手機芯片組開闢移動性的新天地 先進無線技術、產品和服務的領先開發及創新廠商高通公司日前宣佈，公司最新的智能手機芯片組系列正在出樣，將為主流智能手機的移動性能開闢新的天地。MSM7x30芯片組系列以強大的多媒體性能為特色，支持高清視頻錄像和回放、專用2D和3D內核的出色圖形性能、以及為反應快速、引人入勝的網絡體驗而優化的整體芯片設計。首款基於MSM7x30主打芯片組系列的終端預計將於2010年年底前商用。 高通CDMA技術集團產品管理副總裁阿力克斯·卡圖贊表示：「高通公司繼續重視支持最佳的移動體驗。這一最新的芯片組系列將為智能手機細分市場帶來無可比擬的功能。隨著智能手機市場需求的不斷增長，我們的創新技術將支持終端廠商合作夥伴推出具有超凡價值的產品。」 MSM7x30芯片組系列包括針對HSPA+網絡的MSM7230 解決方案，和支持多模HSPA+/EV-DO版本B與SV-DO的MSM7630解決方案，其設計均以最優的數據吞吐量和強大的多媒體功能為核心。7&#215;30芯片組使用的是與此前已商用的Snapdragon QSD8x50相同的市場領先的Scorpion CPU。7&#215;30使用基於ARM v7指令集的800 MHz 至1 GHz定制超標量CPU，以低功耗提供出色的高端處理能力，支持如下特性： 支持每秒30幀的720p高清視頻編碼與解碼； 集成2D 和 3D圖形GPU，支持OpenGL ES 2.0和OpenVG 1.1 行業標準API； 專用低功耗音頻子系統，支持5.1環繞立體聲； 支持1200萬像素攝像頭； 整合GPS針對Location-based Service； 支持包括Android，Windows Mobile，Brew MP和Symbian在內的領先移動操作系統； 支持層疊封裝內存以壓縮主板面積、優化功耗並獲得反應更快的性能。 MSM7x30芯片組系列由PM8058功率管理集成線路和集成Bluetooth與調頻廣播的QTR8600射頻子系統支持。MSM7x30芯片組還將與高通公司的WCN1312 WLAN解決方案直接接口以支持802.11 b/g/n。 © admin for Temporality, 2009. &#124; Permalink &#124; No comment &#124; Add to del.icio.us Post tags: 7x30, qualcomm Feed enhanced by Better Feed from Ozh]]></description>
			<content:encoded><![CDATA[<h3><a href="http://news.ic-trade.com/doc/12479_3.aspx">高通最新的智能手機芯片組開闢移動性的新天地</a></h3>
<p>先進無線技術、產品和服務的領先開發及創新廠商高通公司日前宣佈，公司最新的智能手機芯片組系列正在出樣，將為主流智能手機的移動性能開闢新的天地。MSM7x30芯片組系列以強大的多媒體性能為特色，支持高清視頻錄像和回放、專用2D和3D內核的出色圖形性能、以及為反應快速、引人入勝的網絡體驗而優化的整體芯片設計。首款基於MSM7x30主打芯片組系列的終端預計將於2010年年底前商用。</p>
<p>高通CDMA技術集團產品管理副總裁阿力克斯·卡圖贊表示：「高通公司繼續重視支持最佳的移動體驗。這一最新的芯片組系列將為智能手機細分市場帶來無可比擬的功能。隨著智能手機市場需求的不斷增長，我們的創新技術將支持終端廠商合作夥伴推出具有超凡價值的產品。」<br />
<span id="more-170"></span><br />
MSM7x30芯片組系列包括針對HSPA+網絡的MSM7230 解決方案，和支持多模HSPA+/EV-DO版本B與SV-DO的MSM7630解決方案，其設計均以最優的數據吞吐量和強大的多媒體功能為核心。7&#215;30芯片組使用的是與此前已商用的Snapdragon QSD8x50相同的市場領先的Scorpion CPU。7&#215;30使用基於ARM v7指令集的800 MHz 至1 GHz定制超標量CPU，以低功耗提供出色的高端處理能力，支持如下特性：</p>
<ul>
<li>支持每秒30幀的720p高清視頻編碼與解碼；</li>
<li>集成2D 和 3D圖形GPU，支持OpenGL ES 2.0和OpenVG 1.1 行業標準API；</li>
<li>專用低功耗音頻子系統，支持5.1環繞立體聲；</li>
<li>支持1200萬像素攝像頭；</li>
<li>整合GPS針對Location-based Service；</li>
<li>支持包括Android，Windows Mobile，Brew MP和Symbian在內的領先移動操作系統；</li>
<li>支持層疊封裝內存以壓縮主板面積、優化功耗並獲得反應更快的性能。</li>
</ul>
<p>MSM7x30芯片組系列由PM8058功率管理集成線路和集成Bluetooth與調頻廣播的QTR8600射頻子系統支持。MSM7x30芯片組還將與高通公司的WCN1312 WLAN解決方案直接接口以支持802.11 b/g/n。</p>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2009. |
<a href="http://www.sylin.net/blog/2009/12/07/170">Permalink</a> |
<a href="http://www.sylin.net/blog/2009/12/07/170#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2009/12/07/170&title=Qualcomm 7&#215;30">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/7x30" rel="tag">7x30</a>, <a href="http://www.sylin.net/blog/tag/qualcomm" rel="tag">qualcomm</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2009/12/07/170/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autoload in ZF 1.8</title>
		<link>http://www.sylin.net/blog/2009/05/03/158</link>
		<comments>http://www.sylin.net/blog/2009/05/03/158#comments</comments>
		<pubDate>Sun, 03 May 2009 06:01:21 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=158</guid>
		<description><![CDATA[最近 Zend Framework 推出了 1.8 Release, 除了許多新功能以外，原有的功能也做了一些改變。對原有的project來說，如果沒用到新功能的部份，那放著不管是沒關係的，可是舊功能的改變卻可能影響到原本程式的行為，所以反而要更注意。 Zend_Loader_Autoloader 的功用(目的) 提供真正的namespace autoloader (之前是不區分namespace的) 提供註冊任意個數的callback 函式作為 autoload function, 其中是以 stack 的方式運作。這是為了克服 PHP 5標準的 spl_autoload 只允許一個 callback function 的問題。 允許最佳化的 namespace 比對方式，提高解析類別的速度。 原本的 autoload 是這樣用的 (最簡單的情況) require_once&#40;'Zend/Loader.php'&#41;; Zend_Loader::registerAutoload&#40;&#41;; 在 ZF 1.8 要改成 require_once&#40;'Zend/Loader/Autoloader.php'&#41;; $autoloader = Zend_Loader_Autoloader::getInstance&#40;&#41;; $autoloader-&#62;setFallbackAutoloader&#40;true&#41;; 這適用於函式庫中沒有自己加的 namepsace，所以會使用預設的 Zend_ 跟 ZendX_，這也是 Zend Framework 中 class 所使用的 prefix [...]]]></description>
			<content:encoded><![CDATA[<p>最近 Zend Framework 推出了 <a href="http://www.sylin.net/blog/2009/05/03/157">1.8 Release</a>, 除了許多新功能以外，原有的功能也做了一些改變。對原有的project來說，如果沒用到新功能的部份，那放著不管是沒關係的，可是舊功能的改變卻可能影響到原本程式的行為，所以反而要更注意。</p>
<p>Zend_Loader_Autoloader 的功用(目的)</p>
<ul>
<li>提供真正的namespace autoloader (之前是不區分namespace的)</li>
<li>提供註冊任意個數的callback 函式作為 autoload function, 其中是以 stack 的方式運作。這是為了克服 PHP 5標準的 spl_autoload 只允許一個 callback function 的問題。</li>
<li>允許最佳化的 namespace 比對方式，提高解析類別的速度。</li>
</ul>
<p><span id="more-158"></span><br />
原本的 autoload 是這樣用的 (最簡單的情況)</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Zend/Loader.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Zend_Loader<span style="color: #339933;">::</span><span style="color: #004000;">registerAutoload</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>在 ZF 1.8 要改成</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Zend/Loader/Autoloader.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$autoloader</span> <span style="color: #339933;">=</span> Zend_Loader_Autoloader<span style="color: #339933;">::</span><span style="color: #004000;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$autoloader</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFallbackAutoloader</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>這適用於函式庫中沒有自己加的 namepsace，所以會使用預設的 Zend_ 跟 ZendX_，這也是 Zend Framework 中 class 所使用的 prefix ，這首先讓 Zend Framework 內的 class 能夠自動被載入。而 setFallbackAutoloader(true) 則是讓寫在 include_path 中，又沒有的 namespace 的 class 能被載入，這通常會是在 models/ 之中的檔案。</p>
<p>不過這邊有一點相當奇怪，假設我沒有 model，不需要 setFallbackAutoloader(true)，那麼就應該不需要執行 getInstance()而一樣可以使用 Zend_ 跟 ZendX_ 的類別，但實際上如果我只有 require_once(&#8216;Zend/Loader/Autoloader.php&#8217;) 的話，我之後還是不能使用 Zend_* 的類別，這部份還不清楚是 Zend_Loader_Autoloader 的 bug 還是 spl_autoload 的問題。</p>
<p>新版的改進其實還有 Zend_Tool 跟 Zend_Application 可以用，這部份之後再來研究，先把 Autoload 這部份 Apply 到現有的程式上。</p>
<p>參考資料</p>
<ul>
<li><a href="http://akrabat.com/2009/04/30/zend_loaders-autoloader_deprecated-in-zend-framework-18/">Zend_Loader&#8217;s autoloader deprecated in Zend Framework 1.8</a></li>
<li><a href="http://framework.zend.com/manual/en/zend.loader.autoloader.html">ZF Manual &#8211; Zend Loader Autoloader</a></li>
</ul>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2009. |
<a href="http://www.sylin.net/blog/2009/05/03/158">Permalink</a> |
<a href="http://www.sylin.net/blog/2009/05/03/158#comments">2 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2009/05/03/158&title=Autoload in ZF 1.8">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/zend-framework" rel="tag">zend framework</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2009/05/03/158/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Git 入門筆記</title>
		<link>http://www.sylin.net/blog/2009/02/22/151</link>
		<comments>http://www.sylin.net/blog/2009/02/22/151#comments</comments>
		<pubDate>Sun, 22 Feb 2009 10:54:26 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[linus]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=151</guid>
		<description><![CDATA[前言 這兩天花了蠻多時間在 Survey Git 這套先進的 SCM。在新的工作上，我打算從 Subversion 轉換到 Git 來做專案、程式的版本控制。 之前在學習 Subversion 時，是根據 SVN Book 中文版開始入門，從而瞭解 CVS 和 Subversion 設計及使用的觀念，讓我知道，使用 CVS 或 Subversion 的差異，以及該如何使用 SVN 融入我的開發流程，以文件來說， SVN Book 是寫的相當清楚易懂的。不過 Git 在這個部份，我卻沒有找到相似的介紹文件，尤其是它著名的 Distributed 特性，讓我不太了解如何套用，以及使用這樣 Distributed 的特性，會對原本工作的流程產生什麼樣的影響和變化。這些都是在 Survey 的過程中需要先被確認的。 疑問 &#8211; 如何規劃 Repository? 首先，我的第一個問題就是「我該如何規劃 Repository?」在 CVS/Subversion 中，我們可以使用一個 Repository 來放許多個不同的 Project，並以目錄來區分，如同工作複本這段所敘述的。更複雜一點的，可以使用檔案庫配置這段所建議兩種架構中選擇一種。 而在工作目錄的部份，可以直接依據情況，只 checkout 需要的子目錄部份即可，而因為 Subversion 會在 Working Directory [...]]]></description>
			<content:encoded><![CDATA[<h3>前言</h3>
<p>這兩天花了蠻多時間在 Survey <a href="http://git-scm.com/">Git</a> 這套先進的 SCM。在新的工作上，我打算從 <a href="http://subversion.tigris.org/">Subversion</a> 轉換到 Git 來做專案、程式的版本控制。</p>
<p>之前在學習 Subversion 時，是根據 <a href="http://twpug.net/docs/Subversion/">SVN Book 中文版</a>開始入門，從而瞭解 CVS 和 Subversion 設計及使用的觀念，讓我知道，使用 CVS 或 Subversion 的差異，以及該如何使用 SVN 融入我的開發流程，以文件來說， SVN Book 是寫的相當清楚易懂的。不過 Git 在這個部份，我卻沒有找到相似的介紹文件，尤其是它著名的 Distributed 特性，讓我不太了解如何套用，以及使用這樣 Distributed 的特性，會對原本工作的流程產生什麼樣的影響和變化。這些都是在 Survey 的過程中需要先被確認的。<br />
<span id="more-151"></span></p>
<h3>疑問 &#8211; 如何規劃 Repository?</h3>
<p>首先，我的第一個問題就是「我該如何規劃 Repository?」在 CVS/Subversion 中，我們可以使用一個 Repository 來放許多個不同的 Project，並以目錄來區分，如同<a href="http://twpug.net/docs/Subversion/#svn-ch-2-sect-3.1">工作複本</a>這段所敘述的。更複雜一點的，可以使用<a href="http://twpug.net/docs/Subversion/#svn-ch-5-sect-6.1">檔案庫配置</a>這段所建議兩種架構中選擇一種。<br />
<img alt="" src="http://twpug.net/docs/Subversion/ch05dia1.png" class="alignnone" width="341" height="187" /><br />
<img alt="" src="http://twpug.net/docs/Subversion/ch05dia2.png" class="alignnone" width="424" height="202" /><br />
而在工作目錄的部份，可以直接依據情況，只 checkout 需要的子目錄部份即可，而因為 Subversion 會在 Working Directory 的每個子目錄下，都建立一個 .svn/ ，所以它仍可以正確對應目錄資訊，不過 Git 由於只在 Working Directory 的最頂層放一個 .git/ 來處理，使得我蠻懷疑要怎麼處理這樣的狀況？</p>
<p>從這樣的一個基本的疑問，我開始查資料去瞭解 Git ~</p>
<h3>參考文件</h3>
<p>一開始我先看 Linus 之前在 Google 演講 Git 的錄影 &#8211; <a href="http://www.youtube.com/watch?v=4XpnKHJAok8">Linus Torvalds on git</a> (相關介紹可參考 <a href="http://people.debian.org.tw/~chihchun/2008/12/19/linus-torvalds-on-git/">Rex&#8217;s 的介紹</a>)，不過聽了半天，發現我只能斷斷續續的聽懂幾句話，而且錄影是以 Linus 的講演為主，對我來說學習的效果不佳，只好另外找其他資料。<br />
於是找到了另一篇簡報的錄影 &#8211; <a href="http://excess.org/article/2008/07/ogre-git-tutorial/">OGRE Git Tutorial</a>，這篇介紹了 Git 的內部設計(實做)概念，以及幾個主要的 Work Flow 跟常用指令，這一篇就蠻有幫助的。<br />
以下是一些相關的筆記：</p>
<ul>
<li>不需要 trunk 或 branch 這樣的目錄結構，在 .git 裡面會處理這訊息 *</li>
<li>
<p>git show = svn status (and svn diff)<br />
	git show &#8211;stat 單純顯示 status, 也就是 Working 和 HEAD 的差異<br />
	git show &#8211;name-status 如同 svn st 的顯示方式</p>
</li>
<li>branch 分成3種: local branch (綠色方塊)、tag (藍紫色方塊)、remote branch(橘色方塊)</li>
<li>使用 git checkout -b 做切換分支的動作 *</li>
<li>HEAD 代表目前 Work Directory 所使用的 branch (的最新版本)</li>
<li>merge 指令</li>
<li>rebase 指令, 可以將 (local) branch 整合到 (local) trunk 上，但和 merge 有點不同，感覺有點類似 merge 以後將分支砍掉的感覺 *</li>
</ul>
<p>其中有標 * 的表示和 Subversion (包括觀念或用法)比較不同的地方。<br />
不過在最後面有關 push 跟 poll 的部份，我還沒有看懂是怎麼分辨其他人能不能 push patch 到 original 去的，不過這不是大問題，用了以後就會知道了。</p>
<h3>結論</h3>
<p>基本上看完這些以後，目前是傾向把一個 git 來管理一個 project 吧，否則一個 branch 或 tag 在 git 是代表整個 repository 的版本，但對對多個 project 來說，這樣的 branch 或 release tag 並沒有意義。</p>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2009. |
<a href="http://www.sylin.net/blog/2009/02/22/151">Permalink</a> |
<a href="http://www.sylin.net/blog/2009/02/22/151#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2009/02/22/151&title=Git 入門筆記">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/git" rel="tag">git</a>, <a href="http://www.sylin.net/blog/tag/linus" rel="tag">linus</a>, <a href="http://www.sylin.net/blog/tag/scm" rel="tag">SCM</a>, <a href="http://www.sylin.net/blog/tag/subversion" rel="tag">subversion</a>, <a href="http://www.sylin.net/blog/tag/svn" rel="tag">svn</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2009/02/22/151/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSI Model</title>
		<link>http://www.sylin.net/blog/2009/01/14/144</link>
		<comments>http://www.sylin.net/blog/2009/01/14/144#comments</comments>
		<pubDate>Tue, 13 Jan 2009 18:47:37 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[computer network]]></category>
		<category><![CDATA[OSI]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[thread]]></category>
		<category><![CDATA[udp]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=144</guid>
		<description><![CDATA[再來新增幾個問題&#8230; 也是太久沒唸忘記的 ~_~ OSI Model 有那七層 TCP/IP 的五層是那五層 TCP 和 UDP 的差別 Process 和 Thread 的差別 OSI Model 有那七層 Physical Layer Data Link Layer Network Layer Transport Layer Session Layer Presentation Layer Application Layer 若以 TCP/IP 的架構來分的話，則是 Physical Layer Data Link Layer &#8211; MAC Layer 連線服務 &#8211; IP 傳輸服務 &#8211; TCP/UDP 連線服務 &#8211; HTTP/TELNET/&#8230; 參考資料 [...]]]></description>
			<content:encoded><![CDATA[<p>再來新增幾個問題&#8230; 也是太久沒唸忘記的 ~_~</p>
<ul>
<li>OSI Model 有那七層
<ul>
<li>TCP/IP 的五層是那五層</li>
</ul>
</li>
<li>TCP 和 UDP 的差別</li>
<li>Process 和 Thread 的差別</li>
</ul>
<p><span id="more-144"></span></p>
<h3>OSI Model 有那七層</h3>
<ol>
<li>Physical Layer</li>
<li>Data Link Layer</li>
<li>Network Layer</li>
<li>Transport Layer</li>
<li>Session Layer</li>
<li>Presentation Layer</li>
<li>Application Layer</li>
</ol>
<p>若以 TCP/IP 的架構來分的話，則是</p>
<ol>
<li>Physical Layer</li>
<li>Data Link Layer  &#8211;  MAC Layer</li>
<li>連線服務 &#8211; IP</li>
<li>傳輸服務 &#8211; TCP/UDP</li>
<li>連線服務 &#8211; HTTP/TELNET/&#8230;</li>
</ol>
<h4>參考資料</h4>
<ul>
<li><a href="http://www.ithome.com.tw/itadm/article.php?c=47085">iThome &#8211; 什麼是OSI的7層架構？</a></li>
<li><a href="http://lips.lis.ntu.edu.tw/YTCHIANG/STUDY/others/tcpiposi.htm">TCP/IP與OSI之比較研究</a></li>
</ul>
<h3>UDP 和 TCP 的差別</h3>
<p>TCP 提供 Connection Oriented 的可靠傳輸，UDP則是 COnnectionless Oriented。TCP 會透過確認及重送機制來保證封包正確抵達，在傳送的過程中，封包可不必按照順序進行接收。因此，UDP在傳送過程中可能會遺失、重複、錯誤，但傳輸的效能可以比較好，適合用於訊息量較大、注重時效性的協定。</p>
<h4>參考資料</h4>
<ul>
<li><a href="http://forum.icst.org.tw/phpbb/viewtopic.php?f=24&#038;t=14508">TCP &#038; UDP 的差異在哪?</a></li>
</ul>
<h3>Process 和 Thread 的差別</h3>
<ol>
<li>
<h4>Process</h4>
<p>Heavy weight, 獨立的Program Segment、Data Segment, OS resource 等, 但切換時(Context Switch), CPU 需將當前 Process 的狀態保存起來，再載入下一個要執行的 Process 的狀態，負責儲存這個狀態的稱為PCB (Process Controll Block，或稱 Process Descriptor)</li>
<li>
<h4>Thread</h4>
<p>Light weight process,有自己的 program counter, register set, stack space, no (or a little) context switch<br />
每個 Thread 有自己的 PC, register set, stack space 表示 thread 可以有自己的 call graph 來執行程式。一個Process中的Thread共用Address Space(包括Program/Data Segment、Resource)，因此切換Thread時不需要切換/複製Address Space，處理代價相對輕很多。</li>
</ol>
<h4>參考資料</h4>
<ul>
<li><a href="http://vrschool.ice.cycu.edu.tw/vrschool/Course/OS/CHAP4/CH4_5.HTM">Thread</a></li>
<li><a href="http://vrschool.ice.cycu.edu.tw/vrschool/course/os/%A7%EB%BCv%A4%F9/%A7@%B7~%A8t%B2%CE%B2%C4%A5%7C%B3%B9/sld012.htm">環境切換</a></li>
</ul>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2009. |
<a href="http://www.sylin.net/blog/2009/01/14/144">Permalink</a> |
<a href="http://www.sylin.net/blog/2009/01/14/144#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2009/01/14/144&title=OSI Model">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/computer-network" rel="tag">computer network</a>, <a href="http://www.sylin.net/blog/tag/osi" rel="tag">OSI</a>, <a href="http://www.sylin.net/blog/tag/tcp" rel="tag">tcp</a>, <a href="http://www.sylin.net/blog/tag/thread" rel="tag">thread</a>, <a href="http://www.sylin.net/blog/tag/udp" rel="tag">udp</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2009/01/14/144/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pidgin錯誤 &#8211; 無法讀取MSN通訊錄</title>
		<link>http://www.sylin.net/blog/2009/01/12/141</link>
		<comments>http://www.sylin.net/blog/2009/01/12/141#comments</comments>
		<pubDate>Mon, 12 Jan 2009 15:17:04 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[MSN]]></category>
		<category><![CDATA[pidgin]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=141</guid>
		<description><![CDATA[今天要連線上 MSN 時發現怎麼連都連不上，一直都是顯示「無法讀取MSN通訊錄」 在網路上查詢以後發現蠻多第三方 client 都出問題了，還包含 Mac 上的 Adium 也出現問題。 有關 pidgin 的 issue 在此: http://developer.pidgin.im/ticket/8080 原本推測是因為 MSN Server 改 protocol 導致第三方 client 水土不服，不過後來有人回應說使用 msn-pecan 就可以了 使用方式 安裝完成後開啟 Pidgin 停用MSN帳號 從管理帳號裡去編輯 MSN 的帳號 將通訊協定(Protocol)改成WLM 儲存 介紹 msn-pecan 是一套 Pidgin 的 MSN Plug-in。 由於作者(Felipe Contreras)接手以後，覺得目前 Pidgin 裡面的 MSN 有許多 issue 需要解決，所以就開了一個分支來作新的 MSN module，和 Pidgin 官方提供的 MSN [...]]]></description>
			<content:encoded><![CDATA[<p>今天要連線上 MSN 時發現怎麼連都連不上，一直都是顯示「無法讀取MSN通訊錄」<br />
在網路上查詢以後發現蠻多第三方 client 都出問題了，還包含 Mac 上的 <a href="http://www.adiumx.com/">Adium</a> 也出現問題。</p>
<p>有關 pidgin 的 issue 在此: <a href="http://developer.pidgin.im/ticket/8080">http://developer.pidgin.im/ticket/8080</a>  </p>
<p>原本推測是因為 MSN Server 改 protocol 導致第三方 client 水土不服，不過後來有人回應說使用 msn-pecan 就可以了<br />
<img src="http://www.sylin.net/blog/wp-content/uploads/2009/01/ticket8080.jpg" alt="ticket8080" title="ticket8080" width="702" height="290" class="alignnone size-full wp-image-142" /></p>
<h4>使用方式</h4>
<ol>
<li>安裝完成後開啟 Pidgin</li>
<li>停用MSN帳號</li>
<li>從管理帳號裡去編輯 MSN 的帳號</li>
<li>將通訊協定(Protocol)改成WLM</li>
<li>儲存</li>
</ol>
<p><span id="more-141"></span></p>
<h4>介紹</h4>
<p><a href="http://code.google.com/p/msn-pecan/">msn-pecan</a> 是一套 Pidgin 的 MSN Plug-in。<br />
由於作者(Felipe Contreras)接手以後，覺得目前 Pidgin 裡面的 MSN 有許多 issue 需要解決，所以就開了一個分支來作新的 MSN module，和 Pidgin 官方提供的 MSN 功能比起來，msn-pecan 有以下優點:</p>
<ul>
<li>登入更快</li>
<li>連線的問題更少</li>
<li>出錯當機的機會更少</li>
<li>支援直接連線(傳檔較快)</li>
<li>儲存使用者顯示名稱</li>
<li>支援手寫訊息(只能讀)</li>
</ul>
<p>另外還有 (這些後來的pidgin 好像都支援了)</p>
<ul>
<li>支援Personal status messages </li>
<li>支援離線訊息</li>
<li>支援客製化表情</li>
</ul>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2009. |
<a href="http://www.sylin.net/blog/2009/01/12/141">Permalink</a> |
<a href="http://www.sylin.net/blog/2009/01/12/141#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2009/01/12/141&title=Pidgin錯誤 &#8211; 無法讀取MSN通訊錄">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/msn" rel="tag">MSN</a>, <a href="http://www.sylin.net/blog/tag/pidgin" rel="tag">pidgin</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2009/01/12/141/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Paginator</title>
		<link>http://www.sylin.net/blog/2008/09/14/104</link>
		<comments>http://www.sylin.net/blog/2008/09/14/104#comments</comments>
		<pubDate>Sun, 14 Sep 2008 07:32:31 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=104</guid>
		<description><![CDATA[Zend_Paginator 是 Zend Framework 1.6 的新功能之一 是用來提供作資料分頁的 Component，雖然分頁是個簡單的小功能，可是有時候自己寫又嫌麻煩，所以拿現成的元件來套用也蠻方便的。 Controller 要使用 Zend_Paginator 前，要知道 Zend_Paginator 支援下列四種方式: Array &#8211; 將資料集合以 Array 的形式傳入。 DbSelect &#8211; 將資料庫查詢所需的 Select Query 以 Zend_Db_Select 或字串的形式傳入，會根據 Query 向 DB 抓取對應所需的資料。 Iterator &#8211; 傳 Iteraotr ，沒仔細看，不過使用上應該跟 Array 差不多。 Null &#8211; 不處理資料，只用來處理分頁控制的部份。 以 Array Adapter 為例，在 Controller 裡可以用 $paginator = new Zend_Paginator&#40;new Zend_Paginator_Adapter_Array&#40;$array&#41;&#41;; 或是透過 factory pattern [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://framework.zend.com/manual/en/zend.paginator.html">Zend_Paginator</a> 是 <a href="http://framework.zend.com/">Zend Framework</a> 1.6 的新功能之一</p>
<p>是用來提供作資料分頁的 Component，雖然分頁是個簡單的小功能，可是有時候自己寫又嫌麻煩，所以拿現成的元件來套用也蠻方便的。</p>
<h3>Controller</h3>
<p>要使用 <a href="http://framework.zend.com/manual/en/zend.paginator.html">Zend_Paginator</a> 前，要知道 <a href="http://framework.zend.com/manual/en/zend.paginator.html">Zend_Paginator</a> 支援下列四種方式:</p>
<ol>
<li>Array &#8211; 將資料集合以 Array 的形式傳入。</li>
<li>DbSelect &#8211; 將資料庫查詢所需的 Select Query 以 Zend_Db_Select 或字串的形式傳入，會根據 Query 向 DB 抓取對應所需的資料。</li>
<li>Iterator &#8211; 傳 Iteraotr ，沒仔細看，不過使用上應該跟 Array 差不多。</li>
<li>Null &#8211; 不處理資料，只用來處理分頁控制的部份。</li>
</ol>
<p><span id="more-104"></span></p>
<p>以 Array Adapter 為例，在 Controller 裡可以用</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #000088;">$paginator</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Paginator<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Zend_Paginator_Adapter_Array<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>或是透過 factory pattern</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #000088;">$paginator</span> <span style="color: #339933;">=</span> Zend_Paginator<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>接著設定頁數及每頁項目數量</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow">
<span style="color: #000088;">$paginator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentPageNumber</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span>
<span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemCountPerPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Default is 10</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginator</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$paginator</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<h2>View</h2>
<p>而顯示的部份則交由 view script 來處理。這 View 的處理可分為兩個部份，一個是資料項目的顯示，另一個是分頁功能表的顯示。</p>
<p>資料項目的部份，由於 <a href="http://framework.zend.com/manual/en/zend.paginator.html">Zend_Paginator</a> 實做 SPL 的 <a href="http://www.php.net/%7Ehelly/php/ext/spl/interfaceIteratorAggregate.html" target="_top">IteratorAggregate</a> 介面，所以可以使用 foreach() 很方便地來詢訪資料項目。</p>
<p>分頁功能表(用來選擇上一頁、下一頁、或跳頁的控制像) 則透過 paginationControl() 這個 View Helper 來處理</p>
<p>以下為<a href="http://framework.zend.com/manual/en/zend.paginator.usage.html#zend.paginator.rendering">範例的程式碼</a></p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow">
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>Example<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginator</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginator</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
      <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?=</span> <span style="color: #000088;">$item</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endif</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginationControl</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginator</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Sliding'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'my_pagination_control.phtml'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
</div></pre><!--END_DEVFMTCODE--></p>
<p><a href="http://framework.zend.com/manual/en/zend.paginator.html">Zend_Paginator</a> 預設提供四種 Scrolling (捲頁) Style: All、Elastic、Jumping和Sliding。Elastic 和 Sliding分別是 Google 和 Yahoo，不過除了 Elastic 會列出比較多頁數以外，我感覺好像沒什麼差別，下面這是 Sliding Style 的例子:</p>
<p><img class="aligncenter" title="Zend_Paginator Sliding Scrolling Style" src="http://framework.zend.com/manual/en/figures/zend.paginator.usage.rendering.control.png" alt="" width="337" height="36" /></p>
<p>All 則是會把所有頁數全部列出來，可以用在使用 select box 選擇頁數的時候。</p>
<p>Manual 裡除了範例程式外，還提供了幾個常用的分頁控制項的的例子，其中有提到 <a href="http://developer.yahoo.com">YDN</a> 的一些資源，是有關一些 UI 或 Web UI 常見的 pattern，還蠻不錯的，可以<a href="http://developer.yahoo.com/ypatterns/">參考看看</a></p>
<h2>Advance</h2>
<p>再來討論一些我遇到的問題跟解決方法</p>
<p>第一個是 Zend_Db_Table 和 Zend_Paginator 的配合，目前雖然有 DbSelect Adapter 可以用，不過傳回來的東西會是 Array，但是因為我把一些邏輯寫在 Zend_Db_Table_Row 裡面，所以希望資料項目能是 Zend_Db_Table_Rowset 或 Zend_Db_Table_Row，所以有人寫了<a href="http://www.noginn.com/2008/08/25/zend_paginator-and-zend_db_table/">Paginator_Adapter_DbTable</a> ，改寫 getItem() 的部份，透過 Zend_Db_Table 去作 fetchAll()，不過這個 Adapter 目前還沒有被官方正式採納，所以我就改成使用 Null Adapter 並且自己管理 Data Item。</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow">
<span style="color: #000088;">$select</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$select</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">where</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">limitPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchAll</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$selectCount</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$selectCount</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">from</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;table&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;cnt&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'COUNT(*)'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">where</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$cnt</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchRow</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$selectCount</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span> <span style="color: #339933;">=</span> Zend_Paginator<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cnt</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentPageNumber</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span>
          <span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemCountPerPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
</div></pre><!--END_DEVFMTCODE--></p>
<p>再來另外一個問題是有關 Zend_Db_Table 的 Relationship Operation，前面我自己寫兩次 Query 分別去取得資料跟總數已經是個爛方法了，可是如果我要用的資料是透過 findManyToManyRowset() 得到的，那就有問題了，似乎不能使用 from() 去設定 COUNT(*)。</p>
<p>在 <a href="http://www.google.com">Google</a> 上查查看，找到<a href="http://framework.zend.com/issues/browse/ZF-3727;jsessionid=2A7FA62545E84B06F226AFAD5E076F3D?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel">這個作法</a>，發現在呼叫完 findManyToManyRowset() 之後，$select 會被改寫成包含 (inner) join 的 SQL Query，所以我可以拿著這個 $select 去請 Zend_Paginator 幫我處理總資料數目。裡面提到會發生 Exception 的問題似乎已經解決了，所以直接用就可以了</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow">
<span style="color: #000088;">$bugsTable</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Bugs<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$bugsRowset</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$bugsTable</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span>1234<span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$select</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$bugsTable</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$select</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">where</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">limitPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$productsRowset</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$bug1234</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">findManyToManyRowset</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Products'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'BugsProducts'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span> <span style="color: #339933;">=</span> Zend_Paginator<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentPageNumber</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span>
          <span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemCountPerPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>另外原來自己查詢 COUNT(*)使用 Null Apdapter 的作法也可以同樣換掉</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow">
<span style="color: #000088;">$select</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$select</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">where</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">limitPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchAll</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span> <span style="color: #339933;">=</span> Zend_Paginator<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentPageNumber</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span>
         <span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemCountPerPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>這樣的作法在 Controller 中看起來會滿簡潔的，不過我不確定在校能上會不會有問題，例如說是多做了一次 Query、或是每次都查詢所有的資料。</p>
<h3>參考資料</h3>
<ul>
<li><a href="http://www.noginn.com/2008/08/25/zend_paginator-and-zend_db_table/">Zend_Paginator and Zend_Db_Table</a></li>
<li><a href="http://framework.zend.com/issues/browse/ZF-3727;jsessionid=2A7FA62545E84B06F226AFAD5E076F3D?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel">Clear limitoffset and limitcount parts in Dbselect adapter when getting the total items count</a></li>
<li><a href="http://www.ajaxray.com/blog/2008/08/24/join-problems-with-zend_paginator-and-zend_db_select-objects/">Join Problems with Zend_Paginator and Zend_Db_Select objects</a></li>
</ul>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2008. |
<a href="http://www.sylin.net/blog/2008/09/14/104">Permalink</a> |
<a href="http://www.sylin.net/blog/2008/09/14/104#comments">2 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2008/09/14/104&title=Zend_Paginator">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/zend-framework" rel="tag">zend framework</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2008/09/14/104/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>新電腦規格</title>
		<link>http://www.sylin.net/blog/2008/04/20/78</link>
		<comments>http://www.sylin.net/blog/2008/04/20/78#comments</comments>
		<pubDate>Sun, 20 Apr 2008 11:45:57 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[computer]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=78</guid>
		<description><![CDATA[配備 Intel E2220 Gigabyte 73PVM-S2H Apacer DDR-800 2G 海韻S12II 330W 西華約克夏機殼 規格 Intel E2220 2.4GHz, LGA 775, 65nm 製程, 1M L2 Cache Bus Speed(外頻) 800MHz, Bus/Core Ratio(倍頻) 12x, 65W Dual Core Enhanced Intel Speedstep® Technology Intel® EM64T 1 Enhanced Halt State (C1E) Execute Disable Bit 2 Intel® Thermal Monitor 2 不支援 Virtualization Technology、vPro 及 Viiv [...]]]></description>
			<content:encoded><![CDATA[<h2>配備</h2>
<ul>
<li>Intel E2220</li>
<li>Gigabyte 73PVM-S2H</li>
<li>Apacer DDR-800 2G</li>
<li>海韻S12II 330W</li>
<li>西華約克夏機殼</li>
</ul>
<p><span id="more-78"></span></p>
<h2>規格</h2>
<h3>Intel E2220</h3>
<p>2.4GHz, LGA 775, 65nm 製程, 1M L2 Cache</p>
<p>Bus Speed(外頻) 800MHz,  Bus/Core Ratio(倍頻) 12x, 65W</p>
<ul>
<li>Dual Core</li>
<li>Enhanced Intel Speedstep® Technology</li>
<li>Intel® EM64T <sup>1 </sup></li>
<li>Enhanced Halt State (C1E)</li>
<li>Execute Disable Bit <sup>2 </sup></li>
<li>Intel® Thermal Monitor 2</li>
<li><span style="color: #ff0000;">不支援</span> Virtualization Technology、vPro 及 Viiv 技術</li>
</ul>
<p>較便宜的入門級Pentium Dual-Core系列有基本的Execute Disable Bit、EIST、Intel  64技術，不過並沒有Virtualization Technology、vPro及Viiv技術，L2的快取也縮減變成了1MB。</p>
<h3>Gigabyte 73PVM-S2H</h3>
<p>官方網頁 <a href="http://www.gigabyte.tw/Products/Motherboard/Products_Overview.aspx?ProductID=2691">73PVM-S2h</a> ，這是目前少數內建顯示卡且含 DVI 介面的主機板，手冊在此 <a href="http://asia.giga-byte.com/FileList/Manual/motherboard_manual_ga-73pvm-s2h_c.pdf">GA-73PVM-S2H</a></p>
<ul>
<li>支援 LGA 775 插槽</li>
<li>FSB 1333/1066/800 MHz</li>
<li>NVIDIA<sup>®</sup> GeForce 7100/nForce 630i 晶片組</li>
<li>DDR2 DIMM x2, 最高支援 4GB, DDR2 800/667/533 MHz</li>
<li>PCI-e 16x * 1, PCI-e 1x *1, PCI *2</li>
<li>SATA 3G x3, eSATA x1, ATA 133/100/66 x1</li>
<li>IEEE 1394, USB 2.0 *10 (最多)</li>
</ul>
<h3>Apacer DDR-800 2G</h3>
<p>約 $1000</p>
<h3>海韻S12II 330W</h3>
<p>約 $1700</p>
<h3>西華約克夏機殼</h3>
<table style="height: 224px;" border="1" bordercolor="#c0c0c0">
<tbody>
<tr>
<td class="xl22" width="101" height="13"><strong>規格： </strong></td>
<td class="xl23" width="300" height="13">5.25&#8243;*3/3.5&#8243;*3</td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>主機板： </strong></td>
<td class="xl25" width="300" height="13">P4-ATX/Micro-ATX</td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>尺寸： </strong></td>
<td class="xl25" width="300" height="13"><span style="color: #000000;">160*485*355mm </span></td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>外接埠： </strong></td>
<td class="xl25" width="300" height="13">USB*2+AUDIO</td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>前置風扇： </strong></td>
<td class="xl25" width="300" height="13"><span style="color: #ff0000;">可擴充8CM風扇*1(選配) </span></td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>後置風扇： </strong></td>
<td class="xl25" width="300" height="13"><span style="color: #ff0000;">可擴充8CM風扇*2(選配) </span></td>
</tr>
<tr>
<td class="xl24" width="101" height="14"><strong>側板： </strong></td>
<td class="xl26" width="300" height="14">4G一般側板</td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>CPU散熱：</strong></td>
<td class="xl25" width="300" height="13"><span style="color: #000000;">內建12CM風扇*1  針對雙核心處理器散熱</span></td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>SLI散熱：</strong></td>
<td class="xl25" width="300" height="13"><span style="color: #ff0000;">可加裝12CM風扇針對SLI雙顯示卡散熱 (選配)</span></td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>顏色： </strong></td>
<td class="xl25" width="300" height="13">黑白兩色</td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>機殼材質： </strong></td>
<td class="xl25" width="300" height="13">鍍鋅鋼材</td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>其他:</strong></td>
<td class="xl25" width="300" height="13">手提把彩箱</td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>其他:</strong></td>
<td class="xl25" width="300" height="13">小型機殼最佳擴充空間</td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>其他:</strong></td>
<td class="xl25" width="300" height="13">"橫式光碟機安裝"設計</td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>其他:</strong></td>
<td class="xl25" width="300" height="13">網孔面板設計-提升機殼散熱自主性</td>
</tr>
<tr>
<td class="xl24" width="101" height="13"><strong>電源:</strong></td>
<td class="xl25" width="300" height="13"><span style="color: #ff0000;">選購</span></td>
</tr>
</tbody>
</table>
<p><img class="g2image_float_left" title="st-550057-1" src="http://www.sylin.net/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=2491&amp;g2_GALLERYSID=TMP_SESSION_ID_DI_NOISSES_PMT" alt="st-550057-1" /><img class="g2image_float_left" title="st-570424-s200" src="http://www.sylin.net/gallery2/main.php?g2_view=core.DownloadItem&amp;g2_itemId=2497&amp;g2_GALLERYSID=TMP_SESSION_ID_DI_NOISSES_PMT" alt="st-570424-s200" /></p>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2008. |
<a href="http://www.sylin.net/blog/2008/04/20/78">Permalink</a> |
<a href="http://www.sylin.net/blog/2008/04/20/78#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2008/04/20/78&title=新電腦規格">del.icio.us</a>
<br/>
Post tags: <br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2008/04/20/78/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

