<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>dev.poga.tw</title>
	<atom:link href="http://devpoga.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://devpoga.wordpress.com</link>
	<description>Programming, Life</description>
	<lastBuildDate>Sat, 14 Jan 2012 14:37:45 +0000</lastBuildDate>
	<language>zh-tw</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='devpoga.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/fc4b1b49625372be1598183258af86da?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>dev.poga.tw</title>
		<link>http://devpoga.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://devpoga.wordpress.com/osd.xml" title="dev.poga.tw" />
	<atom:link rel='hub' href='http://devpoga.wordpress.com/?pushpress=hub'/>
		<item>
		<title>提昇軟體品質的閱讀順序</title>
		<link>http://devpoga.wordpress.com/2011/11/04/oftware_quality_reading/</link>
		<comments>http://devpoga.wordpress.com/2011/11/04/oftware_quality_reading/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 03:18:24 +0000</pubDate>
		<dc:creator>poga</dc:creator>
				<category><![CDATA[心得]]></category>
		<category><![CDATA[Reading]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://devpoga.wordpress.com/?p=362</guid>
		<description><![CDATA[最近常常被問到要如何提高自己的程式品質&#8230; 除了大量的經驗之外，正確的閱讀順序我想也是很重要的 以下是我自己的心得：（圖片版權都屬原作者，這些書也跟我一點關係都沒有） 首先我認為一定要看看的是這本Code Complete。雖然外觀看起來很厚，這本書的內容是由許許多多的經驗、統計等等的短篇文章所組成的，並不需要什麼專業知識就能看懂。由於是短篇性質，翻閱起來相當的輕鬆，許多內容也很簡單明瞭，翻過之後對於軟體的品質應該會有很直接的理解。另外還有幾本類似的書，像是編程創藝。 接下來就是第一個技能的分歧點了（？），在看這些書之前，還是建議先了解一點基礎的物件導向會比較好 Refactoring與Head First OOAD這兩本書，我認為是分別從不一樣的角度去教你「怎麼寫出好程式。」Refactoring是從一般常見的問題（bad smell）開始，告訴你為什麼那些情況是個問題，要如何去修改。Head First OOAD則是從規劃開始，告訴你怎樣規劃出一個好的架構，印象中也有稍微提到一些Design Pattern。 兩本都看完後，實戰上應該會有一些新的體會。接下來可以把Design Pattern當做廁所書翻翻，也就是沒事蹲廁所的時候翻他幾頁就好了。這本書不需要一口氣看完，所以可以慢慢當閒書看就好，有看有加分。 最後，你可以看看Refactoring to Pattern，讓你知道怎麼把重構與Design Pattern這兩個從不同方向的作法結合起來。 當然，我看過的書並不是很多，如果你有其他喜歡的書，也許可以讓這棵技能樹長得更豐富。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=362&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>最近常常被問到要如何提高自己的程式品質&#8230; 除了大量的經驗之外，正確的閱讀順序我想也是很重要的</p>
<p>以下是我自己的心得：（圖片版權都屬原作者，這些書也跟我一點關係都沒有）</p>
<p><a href="http://devpoga.files.wordpress.com/2011/11/untitled1.png"><img class="alignnone size-full wp-image-365" title="SoftwareReadingQuality" src="http://devpoga.files.wordpress.com/2011/11/untitled1.png?w=630" alt=""   /></a></p>
<p>首先我認為一定要看看的是這本Code Complete。雖然外觀看起來很厚，這本書的內容是由許許多多的經驗、統計等等的短篇文章所組成的，並不需要什麼專業知識就能看懂。由於是短篇性質，翻閱起來相當的輕鬆，許多內容也很簡單明瞭，翻過之後對於軟體的品質應該會有很直接的理解。另外還有幾本類似的書，像是<a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010453033">編程創藝</a>。</p>
<p>接下來就是第一個技能的分歧點了（？），在看這些書之前，還是建議先了解一點基礎的物件導向會比較好</p>
<p>Refactoring與Head First OOAD這兩本書，我認為是分別從不一樣的角度去教你「怎麼寫出好程式。」Refactoring是從一般常見的問題（bad smell）開始，告訴你為什麼那些情況是個問題，要如何去修改。Head First OOAD則是從規劃開始，告訴你怎樣規劃出一個好的架構，印象中也有稍微提到一些Design Pattern。</p>
<p>兩本都看完後，實戰上應該會有一些新的體會。接下來可以把Design Pattern當做廁所書翻翻，也就是沒事蹲廁所的時候翻他幾頁就好了。這本書不需要一口氣看完，所以可以慢慢當閒書看就好，有看有加分。</p>
<p>最後，你可以看看Refactoring to Pattern，讓你知道怎麼把重構與Design Pattern這兩個從不同方向的作法結合起來。</p>
<p>當然，我看過的書並不是很多，如果你有其他喜歡的書，也許可以讓這棵技能樹長得更豐富。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/devpoga.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/devpoga.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/devpoga.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/devpoga.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/devpoga.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/devpoga.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/devpoga.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/devpoga.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/devpoga.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/devpoga.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/devpoga.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/devpoga.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/devpoga.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/devpoga.wordpress.com/362/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=362&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devpoga.wordpress.com/2011/11/04/oftware_quality_reading/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94575b73a05d48e567423d7d6ca8273c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">poga</media:title>
		</media:content>

		<media:content url="http://devpoga.files.wordpress.com/2011/11/untitled1.png" medium="image">
			<media:title type="html">SoftwareReadingQuality</media:title>
		</media:content>
	</item>
		<item>
		<title>Background Worker: Beanstalkd, Amazon SQS, Resque</title>
		<link>http://devpoga.wordpress.com/2011/10/07/background-worker-beanstalkd-amazon-sqs-resque/</link>
		<comments>http://devpoga.wordpress.com/2011/10/07/background-worker-beanstalkd-amazon-sqs-resque/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 13:42:01 +0000</pubDate>
		<dc:creator>poga</dc:creator>
				<category><![CDATA[程設]]></category>
		<category><![CDATA[心得]]></category>
		<category><![CDATA[amazon sqs]]></category>
		<category><![CDATA[background job]]></category>
		<category><![CDATA[beanstalkd]]></category>
		<category><![CDATA[resque]]></category>

		<guid isPermaLink="false">http://devpoga.wordpress.com/?p=357</guid>
		<description><![CDATA[今天準備要把手上的東西從Amazon SQS完全的換到Resque了 最早的時候，這東西的queue是用beanstalkd做的（我還寫了篇Beanstalkd的介紹。）剛開始一切都很順利，速度相當快。一直到production負載越來越高，beanstalkd開始不斷的吃光CPU。在始終找不到解決辦法的情況下把整個系統用Amazon SQS重寫 Amazon SQS算是相當的簡單易用，但是提供的功能也相當少，沒有retry，沒有delayed，只有一個很難用的visibility設定。SQS也替我們稱了相當久的時間，不過最後還是因為一些因素讓我開始考慮其他的解決辦法了： 1. 速度不快：將job push進queue的latency就從10ms ~ 500ms不等，在一個只有50ms左右的API request中實在顯得太慢了。而且不只是push進去慢，worker pull job的速度也不高。 2. 費用高：當job的量越來越大的時候，worker數量也越來越多。SQS的worker是採用不停去poll SQS的方式來取得job的。可是SQS每一個request都是要錢的！每次小小的費用累積起來也是相當的可觀 3. 難以管理：在使用的過程中，不管是要監控queue的job count，檢查worker status等等都非常的困難。在實務上常常會產生許多的麻煩。雖然在我寫文章的這時，看到amazon終於提供了基本的管理介面&#8230; 綜合以上理由，最後我還是決定把整個job queue搬到Resque上。Resque速度非常快，管理介面也相當好用，本身對job queue與worker的操作能力就不錯，加上各式各樣的plugin（目前用了resque-retry, resque-scheduler, resque-status），目前而言還算是相當滿意<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=357&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>今天準備要把手上的東西從Amazon SQS完全的換到Resque了</p>
<p>最早的時候，這東西的queue是用beanstalkd做的（我還寫了篇Beanstalkd的介紹。）剛開始一切都很順利，速度相當快。一直到production負載越來越高，beanstalkd開始不斷的吃光CPU。在始終找不到解決辦法的情況下把整個系統用Amazon SQS重寫</p>
<p>Amazon SQS算是相當的簡單易用，但是提供的功能也相當少，沒有retry，沒有delayed，只有一個很難用的visibility設定。SQS也替我們稱了相當久的時間，不過最後還是因為一些因素讓我開始考慮其他的解決辦法了：</p>
<p>1. 速度不快：將job push進queue的latency就從10ms ~ 500ms不等，在一個只有50ms左右的API request中實在顯得太慢了。而且不只是push進去慢，worker pull job的速度也不高。</p>
<p>2. 費用高：當job的量越來越大的時候，worker數量也越來越多。SQS的worker是採用不停去poll SQS的方式來取得job的。可是SQS<strong>每一個request都是要錢</strong>的！每次小小的費用累積起來也是相當的可觀</p>
<p>3. 難以管理：在使用的過程中，不管是要監控queue的job count，檢查worker status等等都非常的困難。在實務上常常會產生許多的麻煩。雖然在我寫文章的這時，看到amazon終於提供了<a href="http://aws.typepad.com/aws/2011/10/aws-management-console-now-supports-the-simple-queue-service-sqs.html">基本的管理介面</a>&#8230;</p>
<p>綜合以上理由，最後我還是決定把整個job queue搬到Resque上。Resque速度非常快，管理介面也相當好用，本身對job queue與worker的操作能力就不錯，加上各式各樣的plugin（目前用了resque-retry, resque-scheduler, resque-status），目前而言還算是相當滿意</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/devpoga.wordpress.com/357/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/devpoga.wordpress.com/357/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/devpoga.wordpress.com/357/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/devpoga.wordpress.com/357/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/devpoga.wordpress.com/357/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/devpoga.wordpress.com/357/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/devpoga.wordpress.com/357/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/devpoga.wordpress.com/357/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/devpoga.wordpress.com/357/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/devpoga.wordpress.com/357/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/devpoga.wordpress.com/357/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/devpoga.wordpress.com/357/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/devpoga.wordpress.com/357/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/devpoga.wordpress.com/357/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=357&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devpoga.wordpress.com/2011/10/07/background-worker-beanstalkd-amazon-sqs-resque/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94575b73a05d48e567423d7d6ca8273c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">poga</media:title>
		</media:content>
	</item>
		<item>
		<title>Internal DSL, Configuration and System Administration</title>
		<link>http://devpoga.wordpress.com/2011/10/03/internal-dsl-configuration-and-system-administration/</link>
		<comments>http://devpoga.wordpress.com/2011/10/03/internal-dsl-configuration-and-system-administration/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 13:37:46 +0000</pubDate>
		<dc:creator>poga</dc:creator>
				<category><![CDATA[程設]]></category>
		<category><![CDATA[心得]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://devpoga.wordpress.com/?p=353</guid>
		<description><![CDATA[很久以前就想寫這段文字了，剛好最近看到這篇，就順便寫一下吧。 許多大量使用Internal DSL的程式都會有一個特點，看起來非常像在寫configuration，程式碼中幾乎沒有邏輯運算的存在，只有許多的設定，像是最近手上的某個code： 而整個軟體開發中，最常面對config的人是誰？是System Admin。 也自然這些用Ruby以及大量Internal DSL的管理套件會受System Admin歡迎了。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=353&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>很久以前就想寫這段文字了，剛好最近看到<a href="http://devopsanywhere.blogspot.com/2011/09/how-ruby-is-beating-python-in-battle.html">這篇</a>，就順便寫一下吧。</p>
<p>許多大量使用Internal DSL的程式都會有一個特點，看起來非常像在寫configuration，程式碼中幾乎沒有邏輯運算的存在，只有許多的設定，像是最近手上的某個code：</p>
<p><pre class="brush: ruby;">
  track :watch, :as =&gt; &quot;impressions&quot;
  track :click, :as =&gt; &quot;clicks&quot;
</pre></p>
<p>而整個軟體開發中，最常面對config的人是誰？是System Admin。</p>
<p>也自然這些用Ruby以及大量Internal DSL的管理套件會受System Admin歡迎了。</p>
<h3></h3>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/devpoga.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/devpoga.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/devpoga.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/devpoga.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/devpoga.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/devpoga.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/devpoga.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/devpoga.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/devpoga.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/devpoga.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/devpoga.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/devpoga.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/devpoga.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/devpoga.wordpress.com/353/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=353&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devpoga.wordpress.com/2011/10/03/internal-dsl-configuration-and-system-administration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94575b73a05d48e567423d7d6ca8273c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">poga</media:title>
		</media:content>
	</item>
		<item>
		<title>直接把Redis加入你的stack中吧，你不需要取代什麼東西</title>
		<link>http://devpoga.wordpress.com/2011/06/29/%e7%9b%b4%e6%8e%a5%e6%8a%8aredis%e5%8a%a0%e5%85%a5%e4%bd%a0%e7%9a%84stack%e4%b8%ad%e5%90%a7%ef%bc%8c%e4%bd%a0%e4%b8%8d%e9%9c%80%e8%a6%81%e5%8f%96%e4%bb%a3%e4%bb%80%e9%ba%bc%e6%9d%b1%e8%a5%bf/</link>
		<comments>http://devpoga.wordpress.com/2011/06/29/%e7%9b%b4%e6%8e%a5%e6%8a%8aredis%e5%8a%a0%e5%85%a5%e4%bd%a0%e7%9a%84stack%e4%b8%ad%e5%90%a7%ef%bc%8c%e4%bd%a0%e4%b8%8d%e9%9c%80%e8%a6%81%e5%8f%96%e4%bb%a3%e4%bb%80%e9%ba%bc%e6%9d%b1%e8%a5%bf/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 16:49:58 +0000</pubDate>
		<dc:creator>poga</dc:creator>
				<category><![CDATA[程設]]></category>
		<category><![CDATA[redis]]></category>

		<guid isPermaLink="false">http://devpoga.wordpress.com/?p=349</guid>
		<description><![CDATA[忙的要死所以沒辦法寫啥長文&#8230; 之前寫過這篇對Redis的心得 今天看到antirez寫的這篇 How to take advantage of Redis just add it to your stack。 我只是想說，看吧，人家引人入門的說法跟我一樣 XDD &#160; &#160; element Font font-family font-size font-style font-variant font-weight letter-spacing line-height text-decoration text-align text-indent text-transform white-space word-spacing color Background bg-attachment bg-color bg-image bg-position bg-repeat Box width height border-top border-right border-bottom border-left margin padding max-height min-height max-width min-width outline-color [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=349&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>忙的要死所以沒辦法寫啥長文&#8230;</p>
<p>之前寫過<a href="http://devpoga.wordpress.com/2011/06/07/redis-your-utility-belt-just-like-batman/">這篇對Redis的心得</a></p>
<p>今天看到antirez寫的這篇 <a href="http://antirez.com/post/take-advantage-of-redis-adding-it-to-your-stack.html">How to take advantage of Redis just add it to your stack</a>。</p>
<p>我只是想說，看吧，人家引人入門的說法跟我一樣 XDD</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div id="csscan-wrapper" style="display:none;">
<h2 id="csscan-header">element</h2>
<table id="csscan-table">
<tbody>
<tr>
<th class="csscan-header" colspan="2">Font</th>
</tr>
<tr>
<td class="csscan-property">font-family</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">font-size</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">font-style</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">font-variant</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">font-weight</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">letter-spacing</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">line-height</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">text-decoration</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">text-align</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">text-indent</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">text-transform</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">white-space</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">word-spacing</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">color</td>
<td class="csscan-value"></td>
</tr>
<tr>
<th class="csscan-header" colspan="2">Background</th>
</tr>
<tr>
<td class="csscan-property">bg-attachment</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">bg-color</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">bg-image</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">bg-position</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">bg-repeat</td>
<td class="csscan-value"></td>
</tr>
<tr>
<th class="csscan-header" colspan="2">Box</th>
</tr>
<tr>
<td class="csscan-property">width</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">height</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">border-top</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">border-right</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">border-bottom</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">border-left</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">margin</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">padding</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">max-height</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">min-height</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">max-width</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">min-width</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">outline-color</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">outline-style</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">outline-width</td>
<td class="csscan-value"></td>
</tr>
<tr>
<th class="csscan-header" colspan="2">Positioning</th>
</tr>
<tr>
<td class="csscan-property">position</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">top</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">bottom</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">right</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">left</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">float</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">display</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">clear</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">z-index</td>
<td class="csscan-value"></td>
</tr>
<tr>
<th class="csscan-header" colspan="2">List</th>
</tr>
<tr>
<td class="csscan-property">list-style-image</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">list-style-type</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">list-style-position</td>
<td class="csscan-value"></td>
</tr>
<tr>
<th class="csscan-header" colspan="2">Table</th>
</tr>
<tr>
<td class="csscan-property">vertical-align</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">border-collapse</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">border-spacing</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">caption-side</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">empty-cells</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">table-layout</td>
<td class="csscan-value"></td>
</tr>
<tr>
<th class="csscan-header" colspan="2">Effects</th>
</tr>
<tr>
<td class="csscan-property">text-shadow</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">-webkit-box-shadow</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">border-radius</td>
<td class="csscan-value"></td>
</tr>
<tr>
<th class="csscan-header" colspan="2">Other</th>
</tr>
<tr>
<td class="csscan-property">overflow</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">cursor</td>
<td class="csscan-value"></td>
</tr>
<tr>
<td class="csscan-property">visibility</td>
<td class="csscan-value"></td>
</tr>
</tbody>
</table>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/devpoga.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/devpoga.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/devpoga.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/devpoga.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/devpoga.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/devpoga.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/devpoga.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/devpoga.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/devpoga.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/devpoga.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/devpoga.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/devpoga.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/devpoga.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/devpoga.wordpress.com/349/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=349&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devpoga.wordpress.com/2011/06/29/%e7%9b%b4%e6%8e%a5%e6%8a%8aredis%e5%8a%a0%e5%85%a5%e4%bd%a0%e7%9a%84stack%e4%b8%ad%e5%90%a7%ef%bc%8c%e4%bd%a0%e4%b8%8d%e9%9c%80%e8%a6%81%e5%8f%96%e4%bb%a3%e4%bb%80%e9%ba%bc%e6%9d%b1%e8%a5%bf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94575b73a05d48e567423d7d6ca8273c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">poga</media:title>
		</media:content>
	</item>
		<item>
		<title>Redis: Your utility belt, just like batman!</title>
		<link>http://devpoga.wordpress.com/2011/06/07/redis-your-utility-belt-just-like-batman/</link>
		<comments>http://devpoga.wordpress.com/2011/06/07/redis-your-utility-belt-just-like-batman/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 23:38:10 +0000</pubDate>
		<dc:creator>poga</dc:creator>
				<category><![CDATA[程設]]></category>
		<category><![CDATA[redis]]></category>

		<guid isPermaLink="false">http://devpoga.wordpress.com/?p=335</guid>
		<description><![CDATA[標題代表著最近幾次玩弄Redis的感想 Redis在最近當紅的NoSQL database中算是一個異類（事實上，許多人根本不把它當作一個database來看待），資料完全存在記憶體中，沒有auto sharding，沒有relation，甚至連處理persistent的機制都相當單純。缺少這麼多東西，Redis吸引人的到底是什麼？ 超高的效能：100000 sets/second，80000 gets/second(source)。就算在我的爛macbook上也是輕鬆做到每秒數萬次寫入。 各式資料結構：任何有基礎程式設計能力的人，都知道選擇一個適合的資料結構的重要性。Redis給你現成的List, Set, Hash, SortedSet&#8230;等等，讓Redis用起來就像你的程式中的一個簡單的物件一樣。Ruby裡面你有現成的hash, array, set可以用，Redis用起來也差不多。這些資料結構要如何互相支援，對程式設計師來說也是早就有著相當的理解。因此你不需要另外學一套處理資料的思考模式，只要你有基本的資料結構知識，使用Redis應該是幾乎沒有門檻可言。網路上有相當多利用Redis這些資料結構的例子，我就不多提了。 Atomic Operation：Redis提供了豐富的操作指令，從基本的incr到複雜的ZREVRANGEBYINDEX都有，而且這些操作都是Atomic Operation。由於實際上你常常會把Redis當做是shared memory來使用，atomic就成為了相當重要的特性。 簡單：compile redis甚至不需要configure，光這點就讓我眼睛亮了一下 XD。make下去你就有redis-server的執行檔可用了，沒有複雜的系統配置。 最近的心得是，Redis帶著強烈的Law of the Instrument（如果你手上有著搥子，在你眼中什麼都看起來像釘子。）在寫Web的東西的時候，常常會需要存一些資料，像是log，即時的數據，Preference&#8230;等等。這些資料沒有複雜到需要分析一下ER model，存到MySQL裡面也有點麻煩。Redis在這種時候就非常的好用。也很適合拿來搭建各種系統，像是Resque。 實際使用時，Redis就像是你在一堆process與server實體機器之間有一塊shared memory。不僅高效能、也有實用的資料結構。有許多人寫下了實戰的心得：Rubygems.org，Plurk等等。 總之，目前我並不認為Redis是可以完全取代Database用途的東西。但是Redis絕對是一個相當實用的東西，切中了原本Web development缺少的一塊。Redis本身也還有許多有趣的發展，像是最令人期待的Redis Cluster。作者做的許多嘗試也相當有趣，Redis有個branch甚至提供了lua scripting！想知道Redis背後的精神的話，可以看看這篇Redis Manifesto。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=335&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>標題代表著最近幾次玩弄Redis的感想</p>
<p><a href="http://redis.io">Redis</a>在最近當紅的NoSQL database中算是一個異類（事實上，許多人根本不把它當作一個database來看待），資料完全存在記憶體中，沒有auto sharding，沒有relation，甚至連處理persistent的機制都相當單純。缺少這麼多東西，Redis吸引人的到底是什麼？</p>
<ol>
<li><span style="color:#3366ff;">超高的效能</span>：100000 sets/second，80000 gets/second(<a href="http://amix.dk/blog/post/19593">source</a>)。就算在我的爛macbook上也是輕鬆做到每秒數萬次寫入。</li>
<li><span style="color:#3366ff;">各式資料結構</span>：任何有基礎程式設計能力的人，都知道選擇一個適合的資料結構的重要性。Redis給你現成的List, Set, Hash, SortedSet&#8230;等等，讓Redis用起來就像你的程式中的一個簡單的物件一樣。Ruby裡面你有現成的hash, array, set可以用，Redis用起來也差不多。這些資料結構要如何互相支援，對程式設計師來說也是早就有著相當的理解。因此你不需要另外學一套處理資料的思考模式，只要你有基本的資料結構知識，使用Redis應該是幾乎沒有門檻可言。網路上有相當多利用Redis這些資料結構的例子，我就不多提了。</li>
<li><span style="color:#3366ff;">Atomic Operation</span>：Redis提供了<a href="http://redis.io/commands">豐富</a>的操作指令，從基本的incr到複雜的ZREVRANGEBYINDEX都有，而且這些操作都是Atomic Operation。由於實際上你常常會把Redis當做是shared memory來使用，atomic就成為了相當重要的特性。</li>
<li><span style="color:#3366ff;">簡單</span>：compile redis甚至不需要configure，光這點就讓我眼睛亮了一下 XD。make下去你就有redis-server的執行檔可用了，沒有複雜的系統配置。</li>
</ol>
<p>最近的心得是，Redis帶著強烈的<a href="http://en.wikipedia.org/wiki/Law_of_the_instrument">Law of the Instrument</a>（如果你手上有著搥子，在你眼中什麼都看起來像釘子。）在寫Web的東西的時候，常常會需要存一些資料，像是log，即時的數據，Preference&#8230;等等。這些資料沒有複雜到需要分析一下ER model，存到MySQL裡面也有點麻煩。Redis在這種時候就非常的好用。也很適合拿來搭建各種系統，像是<a href="https://github.com/defunkt/resque">Resque</a>。</p>
<p>實際使用時，Redis就像是你在一堆process與server實體機器之間有一塊shared memory。不僅高效能、也有實用的資料結構。有許多人寫下了實戰的心得：<a href="http://www.scribd.com/doc/34269414/Redis-Persistence-Power">Rubygems.org</a>，<a href="http://amix.dk/blog/post/19593">Plurk</a>等等。</p>
<p>總之，目前我並不認為Redis是可以完全取代Database用途的東西。但是Redis絕對是一個相當實用的東西，切中了原本Web development缺少的一塊。Redis本身也還有許多有趣的發展，像是最令人期待的Redis Cluster。作者做的許多嘗試也相當有趣，Redis有個branch甚至提供了lua scripting！想知道Redis背後的精神的話，可以看看這篇<a href="http://antirez.com/post/redis-manifesto.html">Redis Manifesto</a>。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/devpoga.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/devpoga.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/devpoga.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/devpoga.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/devpoga.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/devpoga.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/devpoga.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/devpoga.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/devpoga.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/devpoga.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/devpoga.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/devpoga.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/devpoga.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/devpoga.wordpress.com/335/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=335&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devpoga.wordpress.com/2011/06/07/redis-your-utility-belt-just-like-batman/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94575b73a05d48e567423d7d6ca8273c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">poga</media:title>
		</media:content>
	</item>
		<item>
		<title>Facebook如何發佈新程式碼</title>
		<link>http://devpoga.wordpress.com/2011/05/30/facebook%e5%a6%82%e4%bd%95%e7%99%bc%e4%bd%88%e6%96%b0%e7%a8%8b%e5%bc%8f%e7%a2%bc/</link>
		<comments>http://devpoga.wordpress.com/2011/05/30/facebook%e5%a6%82%e4%bd%95%e7%99%bc%e4%bd%88%e6%96%b0%e7%a8%8b%e5%bc%8f%e7%a2%bc/#comments</comments>
		<pubDate>Sun, 29 May 2011 17:24:17 +0000</pubDate>
		<dc:creator>poga</dc:creator>
				<category><![CDATA[程設]]></category>
		<category><![CDATA[Scale]]></category>

		<guid isPermaLink="false">http://devpoga.wordpress.com/?p=320</guid>
		<description><![CDATA[來源影片 所有程式唯一不變的原則就是不停改變。 你有兩種方法可以面對改變：逃避、或是習慣它。 Facebook選擇了後者，每天都在Push新code 什麼東西能幫助你免除每次上production那戰戰兢兢的惡夢？文化 Facebook擴展的速度跟網站的規模應該是世上數一數二快的，一般小型網站處理Deployment的問題就常常讓人頭痛了，看他們怎麼解決這問題便是相當有趣。也許你會期待Facebook是不是又開發了什麼獨門技術解決這個難題。很可惜的是，影片一開始就告訴你，能解決這問題的是開發者的文化，而不是工具。 什麼樣的文化？貫穿影片的核心主軸就是 你為你的code負責，沒有別人會幫你 Facebook本身用了大量的工具來幫忙檢查程式碼品質： IRC Bots：在你的code上production之前，你必須要先告訴IRC Bots你正在待命，否則你的code會被略過 大量測試、自動測試：Unit Test, Selenium, Watir&#8230;大家都很熟，就不細講了 分隔環境：除了基本的latest, sandbox&#8230;等等，Facebook有著GateKeeper的機制，可以直接控制要讓員工、特定地區、特定來源、特定比例的使用者看到特定的改變，從小修改到新功能都可以這樣設定 Push Karma：追蹤所有人搞砸的記錄 PerfLab：非常有趣的系統，記錄Production與Trunk的各種Metric，可以從圖表中輕易比較Trunk跟Production的差異，是否該Push了？Trunk是不是有問題？兩邊效能是否一致？都可以輕易目測 BT：用BT來同步Hiphop編譯出來的binary 從上面的列表可以看到，這些工具並不是非常的具有革命性。那Facebook跟一般人的差別在哪裡？答案是環境，與直達開發者的責任。 影片中提到，Facebook真正管理所有Deployment的團隊其實只有幾個人，他們怎麼管理數百人的開發者團隊？ 一是前面提到的工具，讓他們能很快抓出問題的來源。 二是整個環境的責任制度，各團隊有專人on-call，出問題就是找他，他再找出製造這問題的人，便可很快處理問題。 開發者就是程式的主宰<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=320&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.facebook.com/video/video.php?v=10100259101684977&amp;oid=9445547199&amp;comments">來源影片</a></p>
<p>所有程式唯一不變的原則就是不停改變。</p>
<p>你有兩種方法可以面對改變：逃避、或是習慣它。</p>
<p>Facebook選擇了後者，每天都在Push新code</p>
<p>什麼東西能幫助你免除每次上production那戰戰兢兢的惡夢？<span style="color:#339966;"><strong>文化</strong></span></p>
<p>Facebook擴展的速度跟網站的規模應該是世上數一數二快的，一般小型網站處理Deployment的問題就常常讓人頭痛了，看他們怎麼解決這問題便是相當有趣。也許你會期待Facebook是不是又開發了什麼獨門技術解決這個難題。很可惜的是，影片一開始就告訴你，能解決這問題的是開發者的文化，而不是工具。</p>
<p>什麼樣的文化？貫穿影片的核心主軸就是</p>
<h2><span style="color:#000000;">你為你的code負責，沒有別人會幫你</span></h2>
<p>Facebook本身用了大量的工具來幫忙檢查程式碼品質：</p>
<ol>
<li><span style="color:#0000ff;">IRC Bots</span>：在你的code上production之前，你必須要先告訴IRC Bots你正在待命，否則你的code會被略過</li>
<li><span style="color:#0000ff;">大量測試、自動測試</span>：Unit Test, Selenium, Watir&#8230;大家都很熟，就不細講了</li>
<li><span style="color:#0000ff;">分隔環境</span>：除了基本的latest, sandbox&#8230;等等，Facebook有著GateKeeper的機制，可以直接控制要讓員工、特定地區、特定來源、特定比例的使用者看到特定的改變，從小修改到新功能都可以這樣設定</li>
<li><span style="color:#0000ff;">Push Karma</span>：追蹤所有人搞砸的記錄</li>
<li><span style="color:#0000ff;">PerfLab</span>：非常有趣的系統，記錄Production與Trunk的各種Metric，可以從圖表中輕易比較Trunk跟Production的差異，是否該Push了？Trunk是不是有問題？兩邊效能是否一致？都可以輕易目測</li>
<li><span style="color:#0000ff;">BT</span>：用BT來同步Hiphop編譯出來的binary</li>
</ol>
<p>從上面的列表可以看到，這些工具並不是非常的具有革命性。那Facebook跟一般人的差別在哪裡？<span style="color:#008000;">答案是環境，與直達開發者的責任。</span></p>
<p>影片中提到，Facebook真正管理所有Deployment的團隊其實只有幾個人，他們怎麼管理數百人的開發者團隊？</p>
<p>一是前面提到的工具，讓他們能很快抓出問題的來源。</p>
<p>二是整個環境的責任制度，各團隊有專人on-call，出問題就是找他，他再找出製造這問題的人，便可很快處理問題。</p>
<p><span style="color:#008000;"><strong>開發者就是程式的主宰</strong></span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/devpoga.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/devpoga.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/devpoga.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/devpoga.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/devpoga.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/devpoga.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/devpoga.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/devpoga.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/devpoga.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/devpoga.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/devpoga.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/devpoga.wordpress.com/320/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/devpoga.wordpress.com/320/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/devpoga.wordpress.com/320/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=320&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devpoga.wordpress.com/2011/05/30/facebook%e5%a6%82%e4%bd%95%e7%99%bc%e4%bd%88%e6%96%b0%e7%a8%8b%e5%bc%8f%e7%a2%bc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94575b73a05d48e567423d7d6ca8273c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">poga</media:title>
		</media:content>
	</item>
		<item>
		<title>Sleep Sort</title>
		<link>http://devpoga.wordpress.com/2011/05/22/sleep-sort/</link>
		<comments>http://devpoga.wordpress.com/2011/05/22/sleep-sort/#comments</comments>
		<pubDate>Sun, 22 May 2011 15:25:47 +0000</pubDate>
		<dc:creator>poga</dc:creator>
				<category><![CDATA[程設]]></category>

		<guid isPermaLink="false">http://devpoga.wordpress.com/?p=313</guid>
		<description><![CDATA[4chan上面有人發明了新的sorting方法： 簡單的說，替每個input的數字建立一個thread，thread中就sleep該數字的秒數後，印出該數字。這真的太天才了 XDD 出處：http://dis.4chan.org/read/prog/1295544154 原討論串也是充滿各式各樣笑點，強烈推薦閱讀 忙碌中看到這個讓我笑到翻掉阿 XDD<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=313&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>4chan上面有人發明了新的sorting方法：<br />
<pre class="brush: ruby;">
#!/bin/bash
function f() {
  sleep &quot;$1&quot;
  echo &quot;$1&quot;
}
while [ -n &quot;$1&quot; ]
  do
    f &quot;$1&quot; &amp;amp;
    shift
  done
wait

example usage:
./sleepsort.bash 5 3 6 3 6 3 1 4 7
</pre></p>
<p>簡單的說，替每個input的數字建立一個thread，thread中就sleep該數字的秒數後，印出該數字。這真的太天才了 XDD</p>
<p>出處：<a href="http://dis.4chan.org/read/prog/1295544154">http://dis.4chan.org/read/prog/1295544154</a></p>
<p>原討論串也是充滿各式各樣笑點，強烈推薦閱讀</p>
<p>忙碌中看到這個讓我笑到翻掉阿 XDD</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/devpoga.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/devpoga.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/devpoga.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/devpoga.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/devpoga.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/devpoga.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/devpoga.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/devpoga.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/devpoga.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/devpoga.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/devpoga.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/devpoga.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/devpoga.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/devpoga.wordpress.com/313/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=313&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devpoga.wordpress.com/2011/05/22/sleep-sort/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94575b73a05d48e567423d7d6ca8273c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">poga</media:title>
		</media:content>
	</item>
		<item>
		<title>編程即命名</title>
		<link>http://devpoga.wordpress.com/2011/05/21/%e7%b7%a8%e7%a8%8b%e5%8d%b3%e5%91%bd%e5%90%8d/</link>
		<comments>http://devpoga.wordpress.com/2011/05/21/%e7%b7%a8%e7%a8%8b%e5%8d%b3%e5%91%bd%e5%90%8d/#comments</comments>
		<pubDate>Fri, 20 May 2011 17:40:41 +0000</pubDate>
		<dc:creator>poga</dc:creator>
				<category><![CDATA[心得]]></category>

		<guid isPermaLink="false">http://devpoga.wordpress.com/?p=305</guid>
		<description><![CDATA[Programming is Naming. 為事物命名這件事，背後的意義通常有兩種 你對這件事物有足夠的了解，因此可以替它取一個適當的名字 你對這件事物有所期許，因此取了一個代表你的期許的名字 編程不就是如此嗎？若是程式架構中的一個物件、一個函式你可以輕易的取個正確的名字，通常代表著你對這個命名對象在架構中的定位有著足夠的了解。通常也代表你的設計正確且清楚。若是你沒辦法替這個東西想個名字，很可能你的程式架構出現了問題。（當然，也有可能只是單字量不夠。） 命名不只是給自己看的。取名的同時，也將你對這個東西的期許傳承給了下一個閱讀這段程式碼的人。你將一個東西叫做Adapter，下一個看到的人就會期待它是個按照Adapter pattern做出來的東西，或是單純的轉接了什麼protocol。 如同在為你的孩子取名一樣，一個名字決定了他將來的外號，可能決定了他交到什麼樣的朋友，甚至影響了他的自尊心。替變數命名也許不用這麼謹慎，但也不是可以輕忽的一件事。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=305&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Programming is Naming.</p>
<p>為事物命名這件事，背後的意義通常有兩種</p>
<ol>
<li>你對這件事物有足夠的了解，因此可以替它取一個適當的名字</li>
<li>你對這件事物有所期許，因此取了一個代表你的期許的名字</li>
</ol>
<p>編程不就是如此嗎？若是程式架構中的一個物件、一個函式你可以輕易的取個正確的名字，通常代表著你對這個命名對象在架構中的定位有著足夠的了解。通常也代表你的設計正確且清楚。若是你沒辦法替這個東西想個名字，很可能你的程式架構出現了問題。（當然，也有可能只是單字量不夠。）</p>
<p>命名不只是給自己看的。取名的同時，也將你對這個東西的期許傳承給了下一個閱讀這段程式碼的人。你將一個東西叫做Adapter，下一個看到的人就會期待它是個按照Adapter pattern做出來的東西，或是單純的轉接了什麼protocol。</p>
<p>如同在為你的孩子取名一樣，一個名字決定了他將來的外號，可能決定了他交到什麼樣的朋友，甚至影響了他的自尊心。替變數命名也許不用這麼謹慎，但也不是可以輕忽的一件事。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/devpoga.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/devpoga.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/devpoga.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/devpoga.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/devpoga.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/devpoga.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/devpoga.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/devpoga.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/devpoga.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/devpoga.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/devpoga.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/devpoga.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/devpoga.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/devpoga.wordpress.com/305/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=305&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devpoga.wordpress.com/2011/05/21/%e7%b7%a8%e7%a8%8b%e5%8d%b3%e5%91%bd%e5%90%8d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94575b73a05d48e567423d7d6ca8273c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">poga</media:title>
		</media:content>
	</item>
		<item>
		<title>RESTful Rails 續 &#8211; HATEOS</title>
		<link>http://devpoga.wordpress.com/2011/03/01/restful-rails-%e7%ba%8c-hateos/</link>
		<comments>http://devpoga.wordpress.com/2011/03/01/restful-rails-%e7%ba%8c-hateos/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 01:49:50 +0000</pubDate>
		<dc:creator>poga</dc:creator>
				<category><![CDATA[程設]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://devpoga.wordpress.com/?p=294</guid>
		<description><![CDATA[以前曾經寫過一篇RESTful Rails 簡單心得，最近讀到一篇解釋RESTful的文章還不錯，就來補充一下吧 首先，根據Richardson Maturity Model，在完全的REST之前可以分成四種程度： The swamp of POX：單純的把HTTP當成RPC來用，沒有Resource的概念。譬如你要訂閱一份報紙，就會變成 POST /subscribe_news?id=1234?type=free 之類的東西。 此時每一個HTTP request都是單獨的action。 Resource：顧名思義，API的設計開始以Resource為中心。同樣的訂閱報紙會變成： POST /news 先取得報紙列表，然後 POST /subscription 建立「subscription」的resource 此時，每個HTTP request都是針對某個Resource在操作，而不是一個複雜的動作 HTTP verb：此時，你開始善用HTTP提供的get/post/put/delete，讓同樣的URL結合不同的HTTP verb來完成不同的動作。就如同舊文中Rails內建的resource一樣，不重複解釋。 Hypermedia Control： 或是你可以叫做HATEOAS ( Hypertext As The Engine Of Application State )。 還記得REST的全文：Representational State Transfer嗎？HATEOAS講的就是「Transfer」 大多數的RESTful API，每個request都是對某種Resource獨立的操作。你要怎麼知道取得news id之後要建立 subscription來訂閱新聞？大多數的情況是：看文件。 而Hypermedia Control的重點就是：你回傳的Resource中，必須要包含接下來可以做的事情的資訊。 當你回傳一個news resource的時候，你還要附上訂閱該news所要使用的URL，顯示該news內容所需要的URL&#8230;等等。例如回傳的news可能會變成： 好處是什麼？好處是client只要取得news resource之後，就能清楚知道下一步所要用到的resource是什麼，而且這個「下一步」是可以隨著Server API變動而跟著改的，因此Client不需要寫死下一步的HTTP request該發什麼。也就是所謂的「Discoverability of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=294&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>以前曾經寫過一篇<a href="http://devpoga.wordpress.com/2008/02/17/restful-rails-%E7%B0%A1%E5%96%AE%E5%BF%83%E5%BE%97/">RESTful Rails 簡單心得</a>，最近讀到<a href="http://timelessrepo.com/haters-gonna-hateoas">一篇解釋RESTful的文章</a>還不錯，就來補充一下吧</p>
<p>首先，根據<a href="http://martinfowler.com/articles/richardsonMaturityModel.html">Richardson Maturity Model</a>，在完全的REST之前可以分成四種程度：</p>
<ol>
<li><strong>The swamp of POX</strong>：單純的把HTTP當成RPC來用，沒有Resource的概念。譬如你要訂閱一份報紙，就會變成<br />
POST /subscribe_news?id=1234?type=free 之類的東西。</p>
<p>此時每一個HTTP request都是單獨的action。</li>
<li><strong>Resource</strong>：顧名思義，API的設計開始以Resource為中心。同樣的訂閱報紙會變成：<br />
POST /news 先取得報紙列表，然後<br />
POST /subscription 建立「subscription」的resource</p>
<p>此時，每個HTTP request都是針對某個Resource在操作，而不是一個複雜的動作</li>
<li><strong>HTTP verb</strong>：此時，你開始善用HTTP提供的get/post/put/delete，讓同樣的URL結合不同的HTTP verb來完成不同的動作。就如同<a href="http://devpoga.wordpress.com/2008/02/17/restful-rails-%E7%B0%A1%E5%96%AE%E5%BF%83%E5%BE%97/">舊文</a>中Rails內建的resource一樣，不重複解釋。</li>
<li><strong>Hypermedia Control</strong>： 或是你可以叫做HATEOAS ( Hypertext As The Engine Of Application State )。<br />
還記得REST的全文：Representational State Transfer嗎？HATEOAS講的就是「Transfer」</p>
<p>大多數的RESTful API，每個request都是對某種Resource獨立的操作。你要怎麼知道取得news id之後要建立 subscription來訂閱新聞？大多數的情況是：看文件。</p>
<p><strong>而Hypermedia Control的重點就是：你回傳的Resource中，必須要包含接下來可以做的事情的資訊。</strong><br />
當你回傳一個news resource的時候，你還要附上訂閱該news所要使用的URL，顯示該news內容所需要的URL&#8230;等等。例如回傳的news可能會變成：<br />
<pre class="brush: ruby;">
{ :title =&amp;amp;gt; &amp;amp;quot;World War III!&amp;amp;quot;, :date =&amp;amp;gt; &amp;amp;quot;2011/12/25&amp;amp;quot;, :subscribe =&amp;amp;gt; &amp;amp;quot;/subscription&amp;amp;quot;, :show =&amp;amp;gt; &amp;amp;quot;/news/123&amp;amp;quot; }
</pre><br />
好處是什麼？好處是client只要取得news resource之後，就能清楚知道下一步所要用到的resource是什麼，而且這個「下一步」是可以隨著Server API變動而跟著改的，因此Client不需要寫死下一步的HTTP request該發什麼。也就是所謂的「Discoverability of Actions on a Resource」</li>
</ol>
<p>至於為什麼很少人做到第四階段的REST？有人認為因為目前的工具並沒有方便的支援Hypermedia Control。或著也可以說，大多數人連POST跟GET都分不清楚了，搞的懂REST的也沒幾個，還有很長一段路要走呢&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/devpoga.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/devpoga.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/devpoga.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/devpoga.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/devpoga.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/devpoga.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/devpoga.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/devpoga.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/devpoga.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/devpoga.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/devpoga.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/devpoga.wordpress.com/294/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/devpoga.wordpress.com/294/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/devpoga.wordpress.com/294/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=294&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devpoga.wordpress.com/2011/03/01/restful-rails-%e7%ba%8c-hateos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94575b73a05d48e567423d7d6ca8273c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">poga</media:title>
		</media:content>
	</item>
		<item>
		<title>Apple Push Notification for Ruby</title>
		<link>http://devpoga.wordpress.com/2010/12/02/apple-push-notification-for-ruby/</link>
		<comments>http://devpoga.wordpress.com/2010/12/02/apple-push-notification-for-ruby/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 03:27:04 +0000</pubDate>
		<dc:creator>poga</dc:creator>
				<category><![CDATA[程設]]></category>
		<category><![CDATA[apple push notification service]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://devpoga.wordpress.com/?p=286</guid>
		<description><![CDATA[最近需要用到apple的push notification service 以前是用apns for Rails，不過這東西已經不支援Rails 3了 （再度證明，這種應該以library方式存在的東西沒事搞成plugin根本是自找麻煩） 搜尋了一下找到apns4r，不過裡面的code有點亂，也會撞到Ruby 1.9沒有把&#8217;.'放進load path的問題。 稍微修了一些Syntax Error（&#8230;）跟改用require_relative之後看起來是能用了， 暫時先丟在https://github.com/poga/Apns4r<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=286&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>最近需要用到apple的push notification service</p>
<p>以前是用apns for Rails，不過這東西已經不支援Rails 3了<br />
（再度證明，這種應該以library方式存在的東西沒事搞成plugin根本是自找麻煩）</p>
<p>搜尋了一下找到<a href="https://github.com/thegeekbird/Apns4r">apns4r</a>，不過裡面的code有點亂，也會撞到Ruby 1.9沒有把&#8217;.'放進load path的問題。</p>
<p>稍微修了一些Syntax Error（&#8230;）跟改用require_relative之後看起來是能用了，<br />
暫時先丟在<a href="https://github.com/poga/Apns4r">https://github.com/poga/Apns4r</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/devpoga.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/devpoga.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/devpoga.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/devpoga.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/devpoga.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/devpoga.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/devpoga.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/devpoga.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/devpoga.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/devpoga.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/devpoga.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/devpoga.wordpress.com/286/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/devpoga.wordpress.com/286/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/devpoga.wordpress.com/286/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=devpoga.wordpress.com&amp;blog=186690&amp;post=286&amp;subd=devpoga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://devpoga.wordpress.com/2010/12/02/apple-push-notification-for-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/94575b73a05d48e567423d7d6ca8273c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">poga</media:title>
		</media:content>
	</item>
	</channel>
</rss>
