<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>interfacelab</title>
	
	<link>http://interfacelab.com</link>
	<description />
	<lastBuildDate>Wed, 03 Feb 2010 23:45:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Interfacelab" /><feedburner:info uri="interfacelab" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>Interfacelab</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Blippy Clone in 2 Seconds and 3 Lines of PHP</title>
		<link>http://feedproxy.google.com/~r/Interfacelab/~3/OjG05vpSEc0/</link>
		<comments>http://interfacelab.com/blippy-clone-in-2-seconds-and-4-lines-of-php/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 23:45:08 +0000</pubDate>
		<dc:creator>Jon Gilkison</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://interfacelab.com/?p=87</guid>
		<description><![CDATA[Since LoC wanking seems to be the rage this week, I decided to take a stab at cloning the hottest new thing to hit the internets since twitter: Blippy!
Yes, believe it!  You can now twitter your soul crushing acts of consumerism to your uninterested friends so that they too can be involved in the [...]]]></description>
			<content:encoded><![CDATA[<p>Since LoC wanking seems to be the rage this week, I decided to take a stab at cloning the hottest new thing to hit the internets since twitter: <a href="http://blippy.com/">Blippy!</a></p>
<p>Yes, believe it!  You can now twitter your soul crushing acts of consumerism to your uninterested friends so that they too can be involved in the banal minutiae of your life!  The IRS is going to love this one.</p>
<pre class="brush: php;">
&lt;?
// what a stupid f'ing idea
?&gt;
</pre>
<p>And there you have it.  All the functionality in way less code.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Finterfacelab.com%2Fblippy-clone-in-2-seconds-and-4-lines-of-php%2F&amp;title=Blippy+Clone+in+2+Seconds+and+3+Lines+of+PHP" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Finterfacelab.com%2Fblippy-clone-in-2-seconds-and-4-lines-of-php%2F&amp;title=Blippy+Clone+in+2+Seconds+and+3+Lines+of+PHP" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Finterfacelab.com%2Fblippy-clone-in-2-seconds-and-4-lines-of-php%2F&amp;title=Blippy+Clone+in+2+Seconds+and+3+Lines+of+PHP" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Finterfacelab.com%2Fblippy-clone-in-2-seconds-and-4-lines-of-php%2F&amp;title=Blippy+Clone+in+2+Seconds+and+3+Lines+of+PHP" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Finterfacelab.com%2Fblippy-clone-in-2-seconds-and-4-lines-of-php%2F&amp;title=Blippy+Clone+in+2+Seconds+and+3+Lines+of+PHP', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://del.icio.us/favicon.ico" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Finterfacelab.com%2Fblippy-clone-in-2-seconds-and-4-lines-of-php%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Finterfacelab.com%2Fblippy-clone-in-2-seconds-and-4-lines-of-php%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Finterfacelab.com%2Fblippy-clone-in-2-seconds-and-4-lines-of-php%2F&amp;title=Blippy+Clone+in+2+Seconds+and+3+Lines+of+PHP" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Finterfacelab.com%2Fblippy-clone-in-2-seconds-and-4-lines-of-php%2F&amp;title=Blippy+Clone+in+2+Seconds+and+3+Lines+of+PHP" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Interfacelab?a=OjG05vpSEc0:ivXHoezved8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=OjG05vpSEc0:ivXHoezved8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=OjG05vpSEc0:ivXHoezved8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=OjG05vpSEc0:ivXHoezved8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=OjG05vpSEc0:ivXHoezved8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=OjG05vpSEc0:ivXHoezved8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=OjG05vpSEc0:ivXHoezved8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=OjG05vpSEc0:ivXHoezved8:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=OjG05vpSEc0:ivXHoezved8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=OjG05vpSEc0:ivXHoezved8:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Interfacelab/~4/OjG05vpSEc0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://interfacelab.com/blippy-clone-in-2-seconds-and-4-lines-of-php/feed/</wfw:commentRss>
		<slash:comments>-1</slash:comments>
		<feedburner:origLink>http://interfacelab.com/blippy-clone-in-2-seconds-and-4-lines-of-php/</feedburner:origLink></item>
		<item>
		<title>My Mom is Going to Love the iPad</title>
		<link>http://feedproxy.google.com/~r/Interfacelab/~3/B1t9uOKoV3s/</link>
		<comments>http://interfacelab.com/my-mom-is-going-to-love-the-ipad/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 08:24:18 +0000</pubDate>
		<dc:creator>Jon Gilkison</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://interfacelab.com/?p=83</guid>
		<description><![CDATA[My mom is totally going to love the shit out of this thing.  Off the top of my head:

She can read her books in the dark.
She can use it in the kitchen to look up recipes and watch cooking videos.
She can use the GPS to help my dad drive their RV around the country.
She can [...]]]></description>
			<content:encoded><![CDATA[<p>My mom is totally going to love the shit out of this thing.  Off the top of my head:</p>
<ul>
<li>She can read her books in the dark.</li>
<li>She can use it in the kitchen to look up recipes and watch cooking videos.</li>
<li>She can use the GPS to help my dad drive their RV around the country.</li>
<li>She can be better connected to her iPhone wielding grandchildren.</li>
<li>She can play Words with Friends on a bigger screen.</li>
<li>She can  browse the web on a readable screen.  While in the RV.</li>
<li>Watch all of her NFL games while sitting on the porch.</li>
</ul>
<p>And that&#8217;s just to start.  Later down the road, maybe after revision 2, she&#8217;ll also be able to:</p>
<ul>
<li>Draw her knitting patterns and sync it with her knitting machine via Bonjour over WiFi.</li>
<li>Have video chats with the kids.</li>
<li>Augmented reality tour guides for the new places they travel to.</li>
<li>Telemedical (god forbid) monitoring to save trips to the doctor.</li>
<li>Control surface for manipulating certain controls of the RV.</li>
</ul>
<p>The best part?  I won&#8217;t have to show her how to do those things, not most of them anyway.  So to do 80% of what she uses her laptop for, she can do all of those things without having to lug the thing out, plug it in, hook up the mouse, etc.  She&#8217;ll be able to take the information she is looking for to the place where she needs it to be: the kitchen, the sewing room, the co-pilot&#8217;s seat.</p>
<p>So thinking about my mother using it, and loving it, I started to think how I would use it.  My list is almost equally as long.</p>
<ul>
<li>Control Boxee.</li>
<li>Use it as a control surface for Final Cut or Ableton Live or Traktor via Bluetooth or WiFi.</li>
<li>Home automation.</li>
<li>The ultimate universal remote (extra hardware required)</li>
<li>Pornography</li>
<li>Better in-flight DVD viewing experience</li>
</ul>
<p>There are so many more integration points the iPad can make with day to day living and day to day information needs.  The key aspect of it all is mobility and portability, having the information you need not only when you need it, but <strong>where </strong>you need it.</p>
<p>I understand the let down from the perspective of people who were wishing for a multi-touch Mac Book.  But I think they are thinking about it wrong.  People are thinking about it as if it&#8217;s a computer, but it isn&#8217;t just a computer, it&#8217;s a whole new category of device, a whole new definition of what a computer is.</p>
<p>I also agree with most that the lock down to the App Store is a let down, though you don&#8217;t have to think too hard about it to understand it&#8217;s a necessary evil.  It reduces any potential confusion on how to make the thing do something new.  My Mom and I were playing Words with Friends without me having to walk her through how to install it and get it running.  Now compare that with what it was like to show her how to do something similar on her Windows laptop &#8230; yeah no thanks, I&#8217;ll take the App Store.  Not to mention not having to run that crappy antivirus and anti-spyware junk &#8211; the stuff that sucks the performance out of her laptop and yields endless complaints about how slow everything is.  Perhaps it&#8217;s a false sense of security, but I can live with that.</p>
<p>Some of the complaints about usability and related things are complete nonsense and even defy logic.  I&#8217;m pretty sure Apple did some usability testing on this thing &#8230; but maybe that&#8217;s just wild speculation on my part.</p>
<p>I think Apple is definitely onto something, maybe it&#8217;s not quite there yet, but they&#8217;ve definitely accomplished more than bringing an oversized iPhone to market.  But only time will tell.</p>
<p>And, yes, she does kick my ass in Words with Friends.  She hit me with two 70+ pointers yesterday.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Finterfacelab.com%2Fmy-mom-is-going-to-love-the-ipad%2F&amp;title=My+Mom+is+Going+to+Love+the+iPad" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Finterfacelab.com%2Fmy-mom-is-going-to-love-the-ipad%2F&amp;title=My+Mom+is+Going+to+Love+the+iPad" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Finterfacelab.com%2Fmy-mom-is-going-to-love-the-ipad%2F&amp;title=My+Mom+is+Going+to+Love+the+iPad" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Finterfacelab.com%2Fmy-mom-is-going-to-love-the-ipad%2F&amp;title=My+Mom+is+Going+to+Love+the+iPad" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Finterfacelab.com%2Fmy-mom-is-going-to-love-the-ipad%2F&amp;title=My+Mom+is+Going+to+Love+the+iPad', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://del.icio.us/favicon.ico" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Finterfacelab.com%2Fmy-mom-is-going-to-love-the-ipad%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Finterfacelab.com%2Fmy-mom-is-going-to-love-the-ipad%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Finterfacelab.com%2Fmy-mom-is-going-to-love-the-ipad%2F&amp;title=My+Mom+is+Going+to+Love+the+iPad" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Finterfacelab.com%2Fmy-mom-is-going-to-love-the-ipad%2F&amp;title=My+Mom+is+Going+to+Love+the+iPad" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Interfacelab?a=B1t9uOKoV3s:_-IBHCcufrc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=B1t9uOKoV3s:_-IBHCcufrc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=B1t9uOKoV3s:_-IBHCcufrc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=B1t9uOKoV3s:_-IBHCcufrc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=B1t9uOKoV3s:_-IBHCcufrc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=B1t9uOKoV3s:_-IBHCcufrc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=B1t9uOKoV3s:_-IBHCcufrc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=B1t9uOKoV3s:_-IBHCcufrc:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=B1t9uOKoV3s:_-IBHCcufrc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=B1t9uOKoV3s:_-IBHCcufrc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Interfacelab/~4/B1t9uOKoV3s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://interfacelab.com/my-mom-is-going-to-love-the-ipad/feed/</wfw:commentRss>
		<slash:comments>-1</slash:comments>
		<feedburner:origLink>http://interfacelab.com/my-mom-is-going-to-love-the-ipad/</feedburner:origLink></item>
		<item>
		<title>Patch for HD plugin for JW Player</title>
		<link>http://feedproxy.google.com/~r/Interfacelab/~3/KLvVab9mpSs/</link>
		<comments>http://interfacelab.com/patch-for-hd-plugin-for-jw-player/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 08:24:28 +0000</pubDate>
		<dc:creator>Jon Gilkison</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[JW Player]]></category>
		<category><![CDATA[Repo]]></category>

		<guid isPermaLink="false">http://interfacelab.com/?p=75</guid>
		<description><![CDATA[If you are using JW Player and the HD plugin, you&#8217;ll notice the latest version of the plugin does bandwidth detection and automatically flips to the HD version of the file if the player has detected the user&#8217;s bandwidth can support it.
This is undesirable for a bunch of different reasons.  Here&#8217;s a patch to [...]]]></description>
			<content:encoded><![CDATA[<p>If you are using <a href="http://www.longtailvideo.com/">JW Player</a> and the <a href="http://www.longtailvideo.com/addons/plugins/65/HD?q=">HD plugin</a>, you&#8217;ll notice the latest version of the plugin does bandwidth detection and automatically flips to the HD version of the file if the player has detected the user&#8217;s bandwidth can support it.</p>
<p>This is undesirable for a bunch of different reasons.  Here&#8217;s a patch to solve the problem, while still keeping that functionality should you need it.</p>
<p><span id="more-75"></span></p>
<p>You can grab the patched version from my github repo:</p>
<p><code>git clone git://github.com/jawngee/JW-Player-HD-Plugin.git</code></p>
<p>Drop the hd.swf in with your player and you can load it like so:</p>
<pre class="brush: html;">
&lt;div id=&quot;video&quot; class=&quot;player&quot;&gt;
	&lt;p&gt;Please &lt;a href=&quot;http://get.adobe.com/flashplayer/&quot; target=&quot;_blank&quot;&gt;Upgrade your Flash Player&lt;/a&gt; to view this content&lt;/p&gt;
&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
	var s1 = new SWFObject(&quot;/swf/jw/player.swf&quot;,&quot;ply&quot;,&quot;640&quot;,&quot;480&quot;,&quot;9&quot;,&quot;#000000&quot;);
	s1.addParam(&quot;allowfullscreen&quot;,&quot;true&quot;);
	s1.addParam(&quot;allowscriptaccess&quot;,&quot;always&quot;);
	s1.addVariable(&quot;plugins&quot;,&quot;/swf/jw/hd.swf&quot;);
	s1.addVariable(&quot;hd.state&quot;,false);
	s1.addVariable(&quot;hd.autoswitch&quot;,false);
	s1.addVariable(&quot;hd.bandwidth&quot;,3200);
	s1.addVariable(&quot;hd.file&quot;,&quot;http://video.com/hd.flv&quot;);
	s1.addVariable(&quot;file&quot;,&quot;http://video.com/flv.flv&quot;);
	s1.write(&quot;video&quot;);
&lt;/script&gt;
</pre>
<p>This patch adds two new config options:</p>
<p><b>hd.autoswitch</b> &#8211; true/false, determines if the hd plugin should switch based on user&#8217;s bandwidth, default is true.<br />
<b>hd.bandwidth</b> &#8211; The bandwidth threshold for performing the switch, default is 1500.</p>
<p>Enjoy.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Interfacelab?a=KLvVab9mpSs:nkB_MQZyoLc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=KLvVab9mpSs:nkB_MQZyoLc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=KLvVab9mpSs:nkB_MQZyoLc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=KLvVab9mpSs:nkB_MQZyoLc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=KLvVab9mpSs:nkB_MQZyoLc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=KLvVab9mpSs:nkB_MQZyoLc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=KLvVab9mpSs:nkB_MQZyoLc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=KLvVab9mpSs:nkB_MQZyoLc:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=KLvVab9mpSs:nkB_MQZyoLc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=KLvVab9mpSs:nkB_MQZyoLc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Interfacelab/~4/KLvVab9mpSs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://interfacelab.com/patch-for-hd-plugin-for-jw-player/feed/</wfw:commentRss>
		<slash:comments>-1</slash:comments>
		<feedburner:origLink>http://interfacelab.com/patch-for-hd-plugin-for-jw-player/</feedburner:origLink></item>
		<item>
		<title>Slicehost API Notes for the Non-Rails Posse</title>
		<link>http://feedproxy.google.com/~r/Interfacelab/~3/GR54RykOjQw/</link>
		<comments>http://interfacelab.com/slicehost-api-notes-for-the-non-rails-posse/#comments</comments>
		<pubDate>Sat, 09 May 2009 06:38:23 +0000</pubDate>
		<dc:creator>Jon Gilkison</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://interfacelab.com/?p=66</guid>
		<description><![CDATA[I just want to start out by stating that I, in fact, am a big fan of Slicehost and constantly recommend them to friends setting up anything more serious than blogs.  They have a truly great offering and their customer service has only been rivaled, in my experience, by the support team from DataPipe [...]]]></description>
			<content:encoded><![CDATA[<p>I just want to start out by stating that I, in fact, am a big fan of <a href="http://slicehost.com" target="_blank">Slicehost</a> and constantly recommend them to friends setting up anything more serious than blogs.  They have a truly great offering and their customer service has only been rivaled, in my experience, by the support team from <a href="http://datapipe.net">DataPipe</a> &#8211; whom I whole heartedly recommend for any colo or managed hosting.</p>
<p>One thing that is truly great about Slicehost is that they offer an awesome API that allows you to do most everything you can do in their management console, but instead through web services.  You can create new slices, reboot them, change and add DNS, as well as rebuild or destroy slices.</p>
<p>The only problem is that the API follows a “standard ActiveResource pattern” that comes straight from the bowels of Rails and is way too convoluted for something this simple.  </p>
<p><span id="more-66"></span></p>
<p>My biggest complaint is that instead of POSTing standard post variables, you POST XML, but none of the data being posted approaches any kind of structural complexity that warrants it’s usage.  It just a layer of crap that doesn’t need to be there.  Every modern language has some sort of HTTP request mechanism that handles all this stuff without some arbitrary object model forced on top of it.</p>
<p>Curiously, there appears to be another way where you can POST regular form data, but the variable names are in the form “resource[field]” which, again, seems completely unnecessary.  I also couldn’t get it to work reliably.</p>
<p>As a point of reference, I was able to implement S3, EC2 and SQS API’s from amazon in just under 6 hours.  It took me two days to figure out the Slicehost API.  The ActiveResource pattern is a failure in my estimation.</p>
<p>The following are my notes on implementing the slicehost API.  Hope you find it useful.</p>
<p>NOTE:  This post doesn’t cover their DNS API as I don’t have a particular need for it.  I will be posting the PHP library I wrote for the Slicehost API to github over the weekend.  Perhaps someone can build on top of that&#8230;</p>
<h3>Authentication</h3>
<p>I actually had a bit of a bitch with this.  The docs and ruby samples specify that you put your API key in the url, like this:</p>
<p><a href="https://APIKEY@api.slicehost.com">https://APIKEY@api.slicehost.com</a></p>
<p>Problem is that I just could not get it to work.  Even the ruby samples in their docs didn’t run without authentication errors.  Copying and pasting the URLs into Safari didn’t work either (simply pasting your API key into the user input when the Basic Authentication popup shows does work though).</p>
<p>So, make sure you always set the USER part of Basic Auth with your API key.  In PHP it looks like this (using PEAR’s HTTP_Request object):</p>
<pre class="precode">$request-&gt;basic_auth(YOUR_API_KEY,’’);</pre>
<p>&nbsp;</p>
<h2>Dealing With Slices</h2>
<p>This is the part that drove me nuts.  I ended up having to debug their ruby examples through Charles, after patching activeresource.rb to support proxies.  And even then, their examples didn’t work due to a typo and another error I couldn’t sort out.</p>
<h3>Listing Slices</h3>
<p>This is easy as pie.  Simply make a GET request to:</p>
<p><a href="https://api.slicehost.com/slices">https://api.slicehost.com/slices.xml</a></p>
<p>You will get back an XML document as a response:</p>
<pre class="precode">
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;slices type="array"&gt;
	&lt;slice&gt;
		&lt;name&gt;slicename&lt;/name&gt;
		&lt;status&gt;active&lt;/status&gt;
		&lt;addresses type="array"&gt;
			&lt;address&gt;XXX.XXX.XXX.XXX&lt;/address&gt;
			&lt;address&gt;XXX.XXX.XXX.XXX&lt;/address&gt;
		&lt;/addresses&gt;
		&lt;id type="integer"&gt;666&lt;/id&gt;
		&lt;progress type="integer"&gt;100&lt;/progress&gt;
		&lt;bw-out type="float"&gt;0.0&lt;/bw-out&gt;
		&lt;bw-in type="float"&gt;0.0&lt;/bw-in&gt;
		&lt;image-id type="integer"&gt;10&lt;/image-id&gt;
		&lt;ip-address&gt;XXX.XXX.XXX.XXX&lt;/ip-address&gt;
		&lt;flavor-id type="integer"&gt;2&lt;/flavor-id&gt;
	&lt;/slice&gt;
&lt;/slices&gt;
</pre>
<p>The one issue I have with this is that the &lt;address&gt; element doesn’t specify if the address is internal or external.  Right now, you can only make the assumption that the first address is external and the second one is internal.  Not a big deal though.</p>
<p>Also, note the .xml extension.  I believe this is arbitrary, but it would be dope if you could specify .json or .yaml or some other format.  Again, not a big deal.</p>
<h3>Getting Slice Info</h3>
<p>This is equally as simple:</p>
<p><a href="https://api.slicehost.com/slices/666.xml">https://api.slicehost.com/slices/666.xml</a></p>
<p>Where 666 is the ID of the slice you want to get info about.  You get another XML document in return containing a &lt;slice&gt; element as above.</p>
<h3>Creating a Slice From an Image</h3>
<p>This is relatively simple, but there are a couple of steps to it.</p>
<p>First you need a list of the images that Slicehost offers.  Easy enough.  GET request to :</p>
<p><a href="https://api.slicehost.com/images">https://api.slicehost.com/images</a></p>
<p>Will return an XML document that looks like this:</p>
<pre class="precode">
&lt;images type="array"&gt;
	&lt;image&gt;
		&lt;name&gt;CentOS 5.2&lt;/name&gt;
		&lt;id type="integer"&gt;2&lt;/id&gt;
	&lt;/image&gt;
	&lt;image&gt;
		&lt;name&gt;Gentoo 2008.0&lt;/name&gt;
		&lt;id type="integer"&gt;3&lt;/id&gt;
	&lt;/image&gt;
	&lt;image&gt;
		&lt;name&gt;Debian 5.0 (lenny)&lt;/name&gt;
		&lt;id type="integer"&gt;4&lt;/id&gt;
	&lt;/image&gt;
	{ .. and so on .. }
&lt;/images&gt;
</pre>
<p>Once you have this list, you’ll have need to figure out what flavors of slices you can create.  Do this by sending another GET request to:</p>
<p><a href="https://api.slicehost.com/flavors">https://api.slicehost.com/flavors</a></p>
<p>Again, you’ll get another list that looks like this:</p>
<pre class="precode">
&lt;flavors type="array"&gt;
	&lt;flavor&gt;
		&lt;id type="integer"&gt;1&lt;/id&gt;
		&lt;name&gt;256 slice&lt;/name&gt;
		&lt;price type="integer"&gt;2000&lt;/price&gt;
		&lt;ram type="integer"&gt;256&lt;/ram&gt;
	&lt;/flavor&gt;
	&lt;flavor&gt;
		&lt;id type="integer"&gt;2&lt;/id&gt;
		&lt;name&gt;512 slice&lt;/name&gt;
		&lt;price type="integer"&gt;3800&lt;/price&gt;
		&lt;ram type="integer"&gt;512&lt;/ram&gt;
	&lt;/flavor&gt;
	&lt;flavor&gt;
		&lt;id type="integer"&gt;3&lt;/id&gt;
		&lt;name&gt;1GB slice&lt;/name&gt;
		&lt;price type="integer"&gt;7000&lt;/price&gt;
		&lt;ram type="integer"&gt;1024&lt;/ram&gt;
	&lt;/flavor&gt;
	{ ... and so on ... }
&lt;/flavors&gt;
</pre>
<p>So now we know the ID for the image and the ID for flavor of slice.  Let’s keep going!</p>
<p>This next bit took me awhile to get going.  When I tried to go through the method of posting good old post data, I would get back really obscure errors.  So debugging the HTTP traffic of the ruby examples, I unearthed the secret sauce.</p>
<p>To create the slice with the image of your choosing, POST an XML document to:</p>
<p><a href="https://api.slicehost.com/slices/">https://api.slicehost.com/slices/</a></p>
<p>But, make absolutely sure that you have set the “Content-Type” of your request to “text/xml” otherwise it no worky.  Your XML document will look like:</p>
<pre class="precode">
&lt;slice&gt;
	&lt;name&gt;NAME OF YOUR SLICE&lt;/name&gt;
	&lt;flavor-id type="integer"&gt;1&lt;/flavor-id&gt;
	&lt;image-id type="integer"&gt;2&lt;/image-id&gt;
&lt;/slice&gt;
</pre>
<p>The &lt;image-id&gt; must be a valid ID from the list above, of course.    Their API docs have a typo where the sample code to create a slice uses an ID of 1, which doesn’t exist.  A little hair pulling on that one, even though the bug was so obvious.  The same thing goes for the &lt;flavor-id&gt;.</p>
<p>The response you receive will be information about you slice, including the root password.  You only get this root password once, so make sure you take note of it.  The response looks like:</p>
<pre class="precode">
&lt;slice&gt;
	&lt;status&gt;build&lt;/status&gt;
	&lt;name&gt;SLICE NAME&lt;/name&gt;
	&lt;addresses type="array"&gt;
		&lt;address&gt;XXX.XXX.XXX.XXX&lt;/address&gt;
		&lt;address&gt;XXX.XXX.XXX.XXX&lt;/address&gt;
	&lt;/addresses&gt;
	&lt;id type="integer"&gt;666&lt;/id&gt;
	&lt;root-password&gt;ROOT PASSWORD&lt;/root-password&gt;
	&lt;progress type="integer"&gt;0&lt;/progress&gt;
	&lt;bw-out type="float"&gt;0.0&lt;/bw-out&gt;
	&lt;bw-in type="float"&gt;0.0&lt;/bw-in&gt;
	&lt;image-id type="integer"&gt;2&lt;/image-id&gt;
	&lt;ip-address&gt;XXX.XXX.XXX.XXX&lt;/ip-address&gt;
	&lt;flavor-id type="integer"&gt;1&lt;/flavor-id&gt;
&lt;/slice&gt;
</pre>
<p>And that’s it, you’ve created your slice!</p>
<h3>Creating a Slice From a Backup</h3>
<p>This is nearly the same as creating from an image, but this time we’ll need a list of available backups.  Backups are things you create through the Slicehost management interface.  What I like to do is build a base system and then take a snapshot.  With that snapshot I can create new slices based on it.</p>
<p>To grab a list of backups, send a GET request to:</p>
<p><a href="https://api.slicehost.com/backups">https://api.slicehost.com/backups</a></p>
<p>You will receive a list (if you have any backups):</p>
<pre class="precode">
&lt;backups type="array"&gt;
	&lt;backup&gt;
		&lt;id&gt;3-666&lt;/id&gt;
		&lt;slice_id&gt;666&lt;/slice_id&gt;
		&lt;name&gt;daily&lt;/name&gt;
		&lt;date&gt;Sat May 09 04:15:05 UTC 2009&lt;/date&gt;
	&lt;/backup&gt;
	&lt;backup&gt;
		&lt;id&gt;3-667&lt;/id&gt;
		&lt;slice_id&gt;666&lt;/slice_id&gt;
		&lt;name&gt;webserver_snapshot&lt;/name&gt;
		&lt;date&gt;Sat May 09 04:15:05 UTC 2009&lt;/date&gt;
	&lt;/backup&gt;
&lt;/backups&gt;
</pre>
<p>And, then, in the XML document you POST:</p>
<pre class="precode">
&lt;slice&gt;
	&lt;name&gt;NAME OF YOUR SLICE&lt;/name&gt;
	&lt;flavor-id type="integer"&gt;1&lt;/flavor-id&gt;
	&lt;backup-id type="integer"&gt;3-666&lt;/backup-id&gt;
&lt;/slice&gt;
</pre>
<p>Everything else is the same as creating a slice from an image.</p>
<h3>Updating a Slice</h3>
<p>The only thing you can update with your slice is it’s name.  This is accomplished by PUTing an XML document to:</p>
<p><a href="https://api.slicehost.com/slices">https://api.slicehost.com/slices</a></p>
<p>The XML doc looks like:</p>
<pre class="precode">
&lt;slice&gt;
	&lt;id type="integer"&gt;666&lt;/id&gt;
	&lt;name&gt;NAME OF YOUR SLICE&lt;/name&gt;
&lt;/slice&gt;
</pre>
<p>All you need is the ID of the slice and it’s new name.  The response will be an XML document with a &lt;slice&gt; node.</p>
<h3>Deleting a Slice</h3>
<p>Delete a slice by sending an XML document using the DELETE HTTP verb:</p>
<pre class="precode">
&lt;slice&gt;
	&lt;id type="integer"&gt;666&lt;/id&gt;
&lt;/slice&gt;
</pre>
<p>NOTE: You will have to have this option enabled in the API settings on your account.  You can edit those settings at:  <a href="https://manage.slicehost.com/api/">https://manage.slicehost.com/api/</a></p>
<h3>Rebooting Your Slices</h3>
<p>To reboot your slice with a hard reset, send a PUT request to:</p>
<p><a href="https://api.slicehost.com/slices/666/hard_reboot.xml">https://api.slicehost.com/slices/YOUR SLICE ID/hard_reboot.xml</a></p>
<p>To do a soft reboot, a PUT request to:</p>
<p><a href="https://api.slicehost.com/slices/666/reboot.xml">https://api.slicehost.com/slices/YOUR SLICE ID/reboot.xml</a></p>
<h3>Rebuilding Your Slices</h3>
<p>To rebuild your slice, you’ll need to use an image ID or a backup ID.  Once you’ve picked one, send a PUT request to:</p>
<p><a href="https://api.slicehost.com/slices/666/rebuild.xml?image_id=X">https://api.slicehost.com/slices/YOUR SLICE ID/rebuild.xml?image_id=X</a></p>
<p>or:</p>
<p><a href="https://api.slicehost.com/slices/666/rebuild.xml?backup_id=X">https://api.slicehost.com/slices/YOUR SLICE ID/rebuild.xml?backup_id=X</a></p>
<h2>Conclusion</h2>
<p>So that’s all I know.  As you can see the API is pretty simple, but not as simple as it could be, nor are the documents even remotely near as useful as they should be.  But, it’s awesome they have this API in the first place so I’ll stop bitching now!</p>
<p>Again, thanks to Slicehost for making awesome.  The world sure does need it.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Interfacelab?a=GR54RykOjQw:uu_bJdeC42I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=GR54RykOjQw:uu_bJdeC42I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=GR54RykOjQw:uu_bJdeC42I:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=GR54RykOjQw:uu_bJdeC42I:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=GR54RykOjQw:uu_bJdeC42I:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=GR54RykOjQw:uu_bJdeC42I:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=GR54RykOjQw:uu_bJdeC42I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=GR54RykOjQw:uu_bJdeC42I:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=GR54RykOjQw:uu_bJdeC42I:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=GR54RykOjQw:uu_bJdeC42I:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Interfacelab/~4/GR54RykOjQw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://interfacelab.com/slicehost-api-notes-for-the-non-rails-posse/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://interfacelab.com/slicehost-api-notes-for-the-non-rails-posse/</feedburner:origLink></item>
		<item>
		<title>Bootstrapping Technology For Eight Bucks a Day</title>
		<link>http://feedproxy.google.com/~r/Interfacelab/~3/rgy-pccRXXI/</link>
		<comments>http://interfacelab.com/bootstrapping-technology-for-eight-bucks-a-day/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 03:50:51 +0000</pubDate>
		<dc:creator>Jon Gilkison</dc:creator>
				<category><![CDATA[37signals]]></category>
		<category><![CDATA[Massify]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[pragmatism gone wild]]></category>

		<guid isPermaLink="false">http://interfacelab.com/?p=53</guid>
		<description><![CDATA[In the following article, I&#8217;m going to attempt to describe how one might bootstrap the technical components of their startup as cheaply as humanly possible, while still giving you room to easily scale.  A lot of this is based on what I&#8217;ve learned in the last 2+ years as the CTO of massify.com, an [...]]]></description>
			<content:encoded><![CDATA[<p>In the following article, I&#8217;m going to attempt to describe how one <em>might</em> bootstrap the technical components of their startup as cheaply as humanly possible, while still giving you room to easily scale.  A lot of this is based on what I&#8217;ve learned in the last 2+ years as the CTO of <a href="http://massify.com">massify.com</a>, an online networking site for film makers.  Your mileage may vary, of course, and I&#8217;m sure there are a variety of alternatives to some of the things I&#8217;ll be recommending.  I welcome all commenters to pitch in with their own experiences in hopes that we can grow this post into a useful resource for up and coming entrepreneurs.</p>
<p><span id="more-53"></span></p>
<p>There are some caveats.  You will need to be mildly technical to pull this off, but Google is there to hold your hand through some of the tough stuff which, honestly, isn&#8217;t that tough.  And while some of the concepts might fit Microsoft developers, this article is Linux/BSD/Unix focused.  I will tell you, though, from years of being a .NET consultant, trying to bootstrap a Microsoft centric solution is futile if you&#8217;re trying to sell your ideas as cheaply as possible.  I&#8217;m not trying to start a flame war, I&#8217;m just sayin&#8217;.</p>
<h2>Register Your Domain</h2>
<p>Let&#8217;s start at the top.  You&#8217;ve got a great idea for a website.  You&#8217;ve done the leg work, written up your business plan and are eager to get going on actually building out the product and the supporting internals for the company. The first thing we&#8217;re going to need to do is register a domain.</p>
<p>You have a variety of options here, and depending on the domain and it&#8217;s TLD, you&#8217;ll have various pricing levels to work with.  For the sake of the argument, let&#8217;s assume you are going to register a .COM instead of the more expensive .TV, .ME, .JOBS and others.  Any one of these is a fine registrar:</p>
<ul>
<li><a href="http://namecheap.com " target="_blank">namecheap.com </a>- $9.68</li>
<li><a href="http://godaddy.com" target="_blank">godaddy.com</a> &#8211; $9.99</li>
<li><a href="http://powerpipe.com" target="_blank">powerpipe.com</a> &#8211; $10</li>
</ul>
<p>I also prefer to do private domain registration, which can add $15 to the purchase.  This is entirely optional but it&#8217;s a good way to protect your private information.  If you are registering a .US domain, though, you can&#8217;t do private registrations.  Also, some places protect the privacy of your registration differently, so do some research if this is important to you.  Namecheap has free private domain registration.  Godaddy charges extra and I&#8217;m not sure about PowerPipe.  <strong></strong></p>
<p><strong>Startup cost: $10</strong></p>
<p><strong><br />
</strong></p>
<h2>DNS Made Easier</h2>
<p>This part is entirely optional, but after the register.com fiasco, it&#8217;s worth the peace of mind to run your DNS through a third party.  I love <a href="http://dnsmadeeasy.com" target="_blank">DNSMadeEasy</a> for a variety of reasons, chiefly DNS changes are live nearly instantly, but they also scale incredibly well, providing options for doing round robin DNS to balance DNS requests between load balancers, as well as fail over monitoring.  They also have an API which you can use in your applications for all kinds of neat stuff.</p>
<p>Best part?  Cheap.  <strong></strong></p>
<p><strong>Run Rate: $0.08 a day</strong></p>
<p><strong><br />
</strong></p>
<h2>The Nuts and Bolts</h2>
<p>So we have a domain now.  The next thing we&#8217;ll need to do is setup some infrastructure so our team can communicate and collaborate as we start building this mother out.</p>
<p>I will confess that I made a very dumb move when we were getting Massify going.  Having spent the prior 7 years as a .NET consultant, all I really knew was Windows and the host of enterprisey things you find on Windows.  Having done some SharePoint consulting, I decided SharePoint was the way to go.  An avid Outlook and Blackberry user, the only option I could see through my rose tinted glasses was Microsoft Exchange.  So we hooked up Microsoft Exchange with BES for my blackberry addiction and off we went to focus on bigger and better things.  Fast forward a year and a half and the company has grown to 14+ people and our monthly hosted Exchange bill was close to $450 a month.  The worst part?  Massify is an entirely Apple OS X shop.  The only Windows machines we own are the ones we run in virtualization software.  So while we were running Exchange (and have all moved on from Blackberries to iPhones) we were not reaping any of its benefits.  No calendaring, contact sharing, none of that.  Had we been on Exchange 2007, we might have been able to capitalize on some of those basic things, but we were stuck on Exchange 2003 which doesn&#8217;t work with any OS X productivity apps without some spendy third party utilities that only sometimes work.</p>
<p>So, yeah, dumb move Gilkison!</p>
<p>Well I am here to tell you that you can get NEARLY all the benefits of Exchange for FREE.  Yes, you read right:  FREE.  My friends, I would like to introduce you to <a href="http://www.google.com/apps/intl/en/business/index.html" target="_blank">Google Apps for Business</a>.</p>
<p>Shared calendaring?  Check.  Contact syncing?  Check.  Kick ass web interface for reading/writing mail?  Check.  IMAP support for desktop and handheld clients?  Check.  Push email?  Negative.</p>
<p>I did say NEARLY.</p>
<p>And the best part, beyond the awesome price tag?  I don&#8217;t have to install/maintain shit.  I&#8217;ve been test driving Google Apps for Business for awhile for my personal stuff, to make sure that it has legs, and I couldn&#8217;t be happier.  So we transitioned off Exchange and we are all now much happier individuals.</p>
<p><strong>Run Rate: FREE</strong></p>
<p><strong><br />
</strong></p>
<h2>Working Together</h2>
<p>There are a ton of collaborative apps out there and they&#8217;re all like gloves.  Each has their own utility and fits its wearers in different ways.</p>
<p>The most popular, of course, is <a href="http://basecamphq.com" target="_blank">BaseCamp</a> from 37Signals.  I won&#8217;t get into what I think of 37Signals, but suffice to say a lot of people have a huge app crush on BaseCamp.  I personally, and this is just my opinion, don&#8217;t particularly care for it.  Everything starts out well, but once you get into the thick of big projects it becomes a bit of a mess.  But, like I said, different strokes for different folks.  Nothing I&#8217;m preaching here is gospel, so find out what works best for you.</p>
<p>Now you get a variety of collaborative tools with the Google thing, in addition to the email.  Google docs is great for document sharing, but the other apps we&#8217;re not so keen on.  We&#8217;ve found a nice balance between <a href="http://pivotaltracker.com" target="_blank">PivotalTracker</a> and <a href="http://pbwiki.com" target="_blank">PBWiki</a>.  Both apps cost money and there are a lot of free, open source alternatives.  In fact, we use Deki Wiki from <a href="http://www.mindtouch.com/" target="_blank">Mindtouch</a> for our development wiki.  For agile development, there are quite a few free backlog management apps, but Pivotal is easy enough for everyone to use, so that&#8217;s what we went with.</p>
<p>However, the goal of this article is to do things cheaply, but functionally.  There is no open source equivalent of BaseCamp, so let&#8217;s price with BaseCamp in mind.</p>
<p><strong>Run Rate: $0.78</strong></p>
<p><strong><br />
</strong></p>
<h2>Let&#8217;s Talk Hosting</h2>
<p>The following is based on the assumption that you&#8217;re planning to build a web app based on today&#8217;s standards.  This means you&#8217;ll be using some kind of framework like Rails, or a language like PHP, with a database backend like PostgreSQL.  Yeah I could have said MySQL, but why when PostgreSQL exists?</p>
<p>I imagine this will be the most &#8220;controversial&#8221; aspect of this article because every techie has their own vision of the right way of setting things up.  I also want to talk to you about planning for scale.</p>
<p>&#8220;Premature optimization is the root of all evil&#8221; is a phrase people like to bandy about when people approach the topic of planning for scale before the need for it.  Well, first things first, the phrase is often taken way out of the context in which it was used.  Obviously you don&#8217;t need to unroll your loops in PHP, because listen, you&#8217;re using PHP and optimizing it&#8217;s performance doesn&#8217;t have a substantial effort/reward ratio.  Same goes with Rails/Ruby and Django/Python.  But, it doesn&#8217;t mean that you can&#8217;t plan to be successful and get things in the right position for when you do need to scale.  There are some easy things you can do to make sure when the need comes at you full bore, you&#8217;ll be ready for it.</p>
<p>So let&#8217;s talk about hosting.  The Web 1.0 way was to colocate racks of metal in a datacenter somewhere or to pay for managed hosting through someone like RackSpace.  But that is a crazy thing to do now, it only makes sense when your site hits a certain threshold of scale.  If you&#8217;re at that scale now, what are you doing reading this article?</p>
<p>We&#8217;re working under the pretense that your business idea has to prove itself in the marketplace and that you need to get it into the marketplace as cheaply as possible.  So what options do we have?  You can sign up for a VPS like dreamhost, but you&#8217;ll be cursing yourself when your site hits the front page of Digg or Reddit and the social news monkeys are kicking the shit out of your application.  A day is forever in internet time, so what are you going to do when you need to take your site down for a couple of days to migrate it to something else?</p>
<p>The next step up, then, is this &#8220;cloud&#8221; thing everyone is talking about.  And it&#8217;s the right step.  However, a number of people instantly assume we are talking about Amazon&#8217;s EC2 offering, and that is the wrong way to go.  Bandwidth on Amazon is not the cheapest thing around and I&#8217;m of the fundamental belief that EC2&#8217;s best purpose is for bursts of additional computing resources.  For instance, on Massify, we use EC2 to do parallel processing of media.  We can scale it up and down at will, taking it entirely off-line if we need to.  Having priced out hosting our site on EC2, the end costs were not that far off of managed hosting.  So where does that leave us?  I heartily recommend SliceHost.  And I recommend the following starting setup:</p>
<p style="text-align: center;"><img class="size-full wp-image-57 aligncenter" title="starting" src="http://interfacelab.com/wp-content/uploads/2009/04/starting.png" alt="starting" width="400" height="250" /></p>
<p>Obviously, this isn&#8217;t the absolute cheapest way to start out, but it prepares you for growth.  If you develop with a <strong>share nothing</strong> architecture, you can easily slot in more application servers as needed, and take them down as needed, until such a point as your database becomes a bottleneck.  But that shouldn&#8217;t happen for awhile and the total cost for this rig on Slicehost?  $160 a month.  If you were to stuff it all into a single slice, you&#8217;d go for their 4GB or 8GB slices which run $250 and $450 respectively.  <strong></strong></p>
<p><strong>Run Rate: $5.20</strong></p>
<p><strong><br />
</strong></p>
<h2>Spread The Love Around</h2>
<p>Like the DNS management, this step is entirely optional, but if you&#8217;re serving a ton of static content or media, I can&#8217;t imagine going without for very long.  The advantage of serving all your static content (this includes static html pages, javascript, css, images, media) is that it&#8217;s way cheaper than serving off even Slicehost and it takes a ton of load off.</p>
<p>Good news for you is that CDN&#8217;s are getting cheaper and cheaper.  We use <a href="http://pantherexpress.net" target="_blank">Panther Express</a> at Massify and our monthly bill is amazingly low.  I can&#8217;t really publish those numbers, so let&#8217;s talk about Amazon&#8217;s <a href="http://aws.amazon.com/s3/" target="_blank">S3</a> and <a href="http://aws.amazon.com/cloudfront/" target="_blank">CloudFront</a> pricing to get a rough number.  The basic way this works is that all of your static content gets pushed to S3 and then served up to your users via CloudFront.  CloudFront has a lot of nice features, though if you&#8217;re planning on doing video through it, you might look elsewhere as they don&#8217;t support HTTP chunking &#8211; which is the poor man&#8217;s way of doing video streaming and seeking.  Panther Express does support this, though <a href="http://www.bitgravity.com/" target="_blank">BitGravity</a> has some awesome looking capability as well.</p>
<p>Anyways, assuming we&#8217;re going to transfer 250 GB of data via our CDN, the numbers will surprise you:</p>
<p>S3 Storage and Transfer: <strong>$37.50 for 250GB</strong></p>
<p>CloudFront delivery: <strong>$42.50 for 250GB</strong></p>
<p>Combined, you would be paying roughly $80 a month for 250GB of data transfer.  For most sites that&#8217;s overestimating, but if you&#8217;re doing a user content generated site, you should probably aim higher.  I&#8217;m not at liberty to divulge how much we transfer per month, but it&#8217;s significant.  And despite that our CDN bills are shockingly low.</p>
<p><strong>Run Rate:  $2.63</strong></p>
<p><strong><br />
</strong></p>
<h2>Total It Up</h2>
<p>So we&#8217;ve covered everything from domain registration to company infrastructure to hosting and content distribution.  Here&#8217;s how the costs breakdown:</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><span>DNS</span></td>
<td valign="top"><span>$0.08</span></td>
</tr>
<tr>
<td valign="top"><span>Email</span></td>
<td valign="top"><span>$0.00</span></td>
</tr>
<tr>
<td valign="top"><span>Collaboration </span></td>
<td valign="top"><span>$0.78</span></td>
</tr>
<tr>
<td valign="top"><span>Hosting</span></td>
<td valign="top"><span>$5.20</span></td>
</tr>
<tr>
<td valign="top"><span>CDN</span></td>
<td valign="top"><span>$2.63</span></td>
</tr>
</tbody>
</table>
<p>For a grand total of: <strong>$8.69 a day.</strong> Not too shabby.</p>
<p>So those are my tips based on my experience for the last two plus years.  Would love to hear comments and tips from others!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Interfacelab?a=rgy-pccRXXI:y5Dk-b6wneY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=rgy-pccRXXI:y5Dk-b6wneY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=rgy-pccRXXI:y5Dk-b6wneY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=rgy-pccRXXI:y5Dk-b6wneY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=rgy-pccRXXI:y5Dk-b6wneY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=rgy-pccRXXI:y5Dk-b6wneY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=rgy-pccRXXI:y5Dk-b6wneY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=rgy-pccRXXI:y5Dk-b6wneY:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=rgy-pccRXXI:y5Dk-b6wneY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=rgy-pccRXXI:y5Dk-b6wneY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Interfacelab/~4/rgy-pccRXXI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://interfacelab.com/bootstrapping-technology-for-eight-bucks-a-day/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://interfacelab.com/bootstrapping-technology-for-eight-bucks-a-day/</feedburner:origLink></item>
		<item>
		<title>NGINX + PHP-FPM + APC = Awesome</title>
		<link>http://feedproxy.google.com/~r/Interfacelab/~3/MU-Ky7p0q3w/</link>
		<comments>http://interfacelab.com/nginx-php-fpm-apc-awesome/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 04:42:15 +0000</pubDate>
		<dc:creator>Jon Gilkison</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php-fpm]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://interfacelab.com/?p=29</guid>
		<description><![CDATA[The following guide will walk you through setting up possibly the fastest way to serve PHP known to man.  If there is a faster way, I've not yet found it climbing through zillions of blog posts out there on the subject.  In this article, we'll be installing nginx http server, PHP with the PHP-FPM patches, as well as APC.  The end result?  Pure awesome.]]></description>
			<content:encoded><![CDATA[<p>The following guide will walk you through setting up possibly the fastest way to serve PHP known to man.  If there is a faster way, I&#8217;ve not yet found it climbing through zillions of blog posts out there on the subject.  In this article, we&#8217;ll be installing nginx http server, PHP with the PHP-FPM patches, as well as APC.  The end result?  Pure awesome.<br />
<span id="more-29"></span></p>
<h3>Some Background</h3>
<p>For the last 2+ years, we&#8217;ve been running Apache with mod_php at <a href="http://massify.com/" target="_blank">Massify</a>.  And, for the most part, it&#8217;s been painless and hassle free.  But as traffic increases, we&#8217;ve noticed Apache struggling to keep up.  It chews up memory like crazy and don&#8217;t even get me started about CPU.  Add in the fact that we are currently moving the site from co-located metal to hosting on the cloud, we&#8217;ve needed to find a faster way to serve up these pages on machines that are a quarter of the spec we had with the metal.</p>
<p>It&#8217;s a pretty well know fact by now that <a href="http://nginx.net/" target="_blank">Nginx</a> (pronounced engine-x, though I call it n-jinx) in typical scenarios outpaces Apache on all kinds of fronts: i/o, cpu, memory, reqs/sec.  Feel free to <a href="http://www.google.com/search?q=nginx+vs+apache" target="_blank">google</a> around for more comparitive information.  I can tell you from my own informal load testing on both setups of Massify that I&#8217;ve seen a pronounced difference between the two, specifically in the configuration I&#8217;ll be writing about in this post.  I won&#8217;t be posting numbers, because my testing wasn&#8217;t scientific and it&#8217;s not really the focus of this article, but I am more than confident that we&#8217;ll be getting a level of performance a few steps above Apache.  (Please don&#8217;t write me telling me I can recompile and reconfigure Apache to approach Nginx&#8217;s performance.  I&#8217;m certain you are correct, but I don&#8217;t really care at this point.)</p>
<h3>PHP-FPM?</h3>
<p>The typical nginx configuration involves using <em>spawn-fcgi</em> from the LightTPD project to get nginx serving up PHP.  There are a few issues with spawn-fcgi that are covered on more in-depth posts across the interwebs, so I won&#8217;t rehash them here.  Suffice to say, it can lead to major headaches, so we want to do what we can to avoid those headaches.</p>
<p>Enter <a href="http://php-fpm.anight.org/" target="_blank">PHP-FPM</a>, which stands for PHP FastCGI Process Manager.  It is actually a set of patches for the PHP source that bake in FastCGI process management into your PHP binaries.</p>
<p>Note: Even if you are sticking with Apache, there are a variety of reasons to skip mod_php and go straight for PHP via FastCGI.  For starters, with mod_php, each request that Apache handles loads PHP &#8211; and all of it&#8217;s libraries.  That&#8217;s an epic shit ton of overhead.  With FastCGI, PHP acts more akin to an application server.  PHP-FPM, as well as spawn-fcgi, manage this; loading and killing PHP instances as needed.  This has a lot of benefits, not the least of which is reduced memory overhead.</p>
<h3>Let&#8217;s Get Rocking</h3>
<p>We&#8217;re using a fresh install of Ubuntu 8.10 Intrepid.  With a little tooling, this can work equally well on other linux distros.  I&#8217;ve deployed this on CentOS, with minor changes, just fine.</p>
<p>First things first, we&#8217;re going to have to install all the dependencies for building everything:</p>
<pre class="brush: bash; light: true;">
sudo apt-get install make bison flex gcc patch autoconf subversion locate
sudo apt-get install libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-dev
</pre>
<p>Now that we have everything we need, now it&#8217;s time to &#8230;</p>
<h3>Compile PHP</h3>
<p>We&#8217;re going to download the source for PHP 5.2.8, as well as the matching patches for PHP-FPM.  We&#8217;ll then apply the patches and get compling.</p>
<pre class="brush: bash;">
cd /usr/local/src/
sudo wget http://us.php.net/get/php-5.2.8.tar.gz/from/this/mirror
sudo tar zvxf php-5.2.8.tar.gz
sudo wget http://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz
sudo gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | sudo patch -d php-5.2.8 -p1
cd php-5.2.8
sudo ./configure --enable-fastcgi --enable-fpm --with-mcrypt --with-zlib --enable-mbstring --disable-pdo --with-pgsql --with-curl --disable-debug --enable-pic --disable-rpath --enable-inline-optimization --with-bz2 --with-xml --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-xslt --enable-memcache --enable-zip --with-pcre-regex
sudo  make all install
sudo  strip /usr/local/bin/php-cgi
</pre>
<p>The above should have been completely auto-pilot.  If you run into any errors, more than likely you don&#8217;t have some of the dependencies installed.  <strong>Note</strong>: Make sure you enable and disable whatever PHP configuration options you need for your particular setup.  The above are what we use at Massify, more or less.  (We actually apply a couple of other custom patches, but that&#8217;s another post for another day).</p>
<p>While we are at it, let&#8217;s install some of the modules we&#8217;re going to need via PECL:</p>
<pre class="brush: bash; light: true;">
sudo pecl install memcache
sudo pecl install apc
sudo pecl install syck-beta
</pre>
<p>Now, when you build the APC extension, make sure you turn off the option to compile for apache.  It will prompt you to make this change.</p>
<p>Let&#8217;s copy the stock php.ini:</p>
<pre class="brush: bash; light: true;">
sudo cp /usr/local/src/php-5.2.8/php.ini-recommended /usr/local/lib/php.ini
</pre>
<p>Finally, let&#8217;s setup symbolic links to make things easier to find:</p>
<pre class="brush: bash; light: true;">
sudo mkdir /etc/php/
sudo ln -s /usr/local/lib/php.ini /etc/php/php.ini
sudo ln -s /usr/local/etc/php-fpm.conf /etc/php/php-fpm.conf
</pre>
<p>That&#8217;s it for compiling PHP.  The only thing we have left to do is change some setting in the php-fpm conf.  Open up <strong>/etc/php/php-fpm.conf</strong> in your editor of choice.  Do some searching and change the users who own the processes to www-data.  The file is too big to post in here, but the values we want to change are on lines 51, 52, 63 and 66.  Should look something like:</p>
<pre class="brush: xml; light: true;">
&lt;value name=&quot;owner&quot;&gt;www-data&lt;/value&gt;
&lt;value name=&quot;group&quot;&gt;www-data&lt;/value&gt;
&lt;value name=&quot;user&quot;&gt;www-data&lt;/value&gt;
&lt;value name=&quot;group&quot;&gt;www-data&lt;/value&gt;
</pre>
<p>Done!</p>
<h3>NGINX</h3>
<p>This is just as easy as compiling PHP was:</p>
<pre class="brush: bash;">
cd ..
sudo wget http://sysoev.ru/nginx/nginx-0.6.35.tar.gz
sudo tar zxvf nginx-0.6.35.tar.gz
sudo rm -f nginx-0.6.35.tar.gz
cd nginx-0.6.35
sudo ./configure --sbin-path=/usr/local/sbin --with-http_ssl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_stub_status_module
sudo make &amp;&amp; sudo make install
</pre>
<p>Let&#8217;s set up some links:</p>
<pre class="brush: bash; light: true;">
sudo ln -s /usr/local/nginx/conf /etc/nginx
</pre>
<p>Now the next step is optional, but this is what I&#8217;ve been using so far.  Let&#8217;s open up <strong>/etc/nginx/nginx.conf</strong> in our editor and go to town.  Salt and pepper to taste:</p>
<pre class="brush: javascript;">
user  www-data;
worker_processes  6;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  10 10;

    gzip  on;
    gzip_comp_level 1;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        log_format main '$remote_addr - $remote_user [$time_local] '
                  '&quot;$request&quot; $status  $body_bytes_sent &quot;$http_referer&quot; '
                  '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;';

        access_log  /var/log/nginx_access.log  main;

        error_log  /var/log/nginx_error.log debug;

        include /usr/local/nginx/sites-enabled/*;
}
</pre>
<p>We&#8217;re also going to have to set up some FastCGI parameters so that PHP doesn&#8217;t choke and you&#8217;ll avoid random 503 errors from nginx.  Open up <strong>/etc/nginx/fastcgi_params</strong> and add the following:</p>
<pre class="brush: bash;">
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
</pre>
<p>Finally, let&#8217;s create a SystemV style init script and store it in <strong>/etc/init.d/nginx</strong>.  This script was lifted from <a href="http://articles.slicehost.com/2007/10/17/ubuntu-lts-adding-an-nginx-init-script">here</a>.</p>
<pre class="brush: bash;">
#! /bin/sh

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi

set -e

case &quot;$1&quot; in
  start)
        echo -n &quot;Starting $DESC: &quot;
        start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON -- $DAEMON_OPTS
        echo &quot;$NAME.&quot;
        ;;
  stop)
        echo -n &quot;Stopping $DESC: &quot;
        start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON
        echo &quot;$NAME.&quot;
        ;;
  restart|force-reload)
        echo -n &quot;Restarting $DESC: &quot;
        start-stop-daemon --stop --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
        echo &quot;$NAME.&quot;
        ;;
  reload)
      echo -n &quot;Reloading $DESC configuration: &quot;
      start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
          --exec $DAEMON
      echo &quot;$NAME.&quot;
      ;;
  *)
        N=/etc/init.d/$NAME
        echo &quot;Usage: $N {start|stop|restart|force-reload}&quot; &gt;&amp;2
        exit 1
        ;;
esac

exit 0
</pre>
<p>Don&#8217;t forget to set executable permissions on it!</p>
<h3>Set Up Your Site</h3>
<p>This part you&#8217;ll have to tool yourself, but here&#8217;s a rough guide.</p>
<p>First we&#8217;ll have to create a directory to store our site(s) conf files:</p>
<pre class="brush: bash; light: true;">
sudo mkdir /usr/local/nginx/sites-enabled
sudo ln -s /usr/local/nginx/sites-enabled /etc/sites
</pre>
<p>And now let&#8217;s add a conf file for our default site at <strong>/etc/sites/default.conf</strong>.  The contents:</p>
<pre class="brush: javascript;">
server {
        listen *:80;

        location / {
                root   /var/www/default/pub;
                index index.php;

                # if file exists return it right away
                if (-f $request_filename) {
                        break;
                }

                # otherwise rewrite the fucker
                if (!-e $request_filename) {
                        rewrite ^(.+)$ /index.php$1 last;
                        break;
                }

        }

        # if the request starts with our frontcontroller, pass it on to fastcgi
        location ~ ^/index.php
        {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME /var/www/default/pub$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_script_name;
                include /usr/local/nginx/conf/fastcgi_params;
        }
}</pre>
<p>The conf file above is for front controller style sites, which include wordpress, cake, etc.  It also takes care of serving up static content without going through FastCGI.  Note:  You will need to change <strong>/var/www/default</strong> to wherever the files for your site reside.</p>
<h3>Start It Up</h3>
<p>Now all we have to do to get it rocking:</p>
<pre class="brush: bash;">
sudo php-fm start
sudo /etc/init.d/nginx start
</pre>
<p>You should be able to test your site out and see it working.  Any questions, feel free to ask.</p>
<h3>Reference</h3>
<ul>
<li><a href="http://nginx.net/">Nginx</a></li>
<li><a href="http://www.joeandmotorboat.com/2008/02/28/apache-vs-nginx-web-server-performance-deathmatch/">Nginx vs Apache Death Match</a></li>
<li><a href="http://blog.webfaction.com/a-little-holiday-present">10,000 req/s with Nginx</a></li>
<li><a href="http://bethesignal.org/blog/2009/04/06/replacing-apache-with-nginx-for-static-file-serving/">Replacing Apache With Nginx For Static File Serving</a></li>
<li><a href="http://php-fpm.anight.org/">PHP-FPM</a></li>
<li><a href="http://www.softwareprojects.com/resources/programming/t-how-to-install-php-fpm-spawn-fcgi-replacement-1602.html">How to Install PHP-FPM</a></li>
<li><a href="http://www.igorclark.net/2008/07/14/php-fpm-a-smoother-php-fastcgi-process-manager.html">PHP-FPM, A Smoother PHP FastCGI Process Manager</a>
</li>
</ul>
<p>&#8230;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Interfacelab?a=MU-Ky7p0q3w:LyKo4EBicC4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=MU-Ky7p0q3w:LyKo4EBicC4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=MU-Ky7p0q3w:LyKo4EBicC4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=MU-Ky7p0q3w:LyKo4EBicC4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=MU-Ky7p0q3w:LyKo4EBicC4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=MU-Ky7p0q3w:LyKo4EBicC4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=MU-Ky7p0q3w:LyKo4EBicC4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=MU-Ky7p0q3w:LyKo4EBicC4:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=MU-Ky7p0q3w:LyKo4EBicC4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=MU-Ky7p0q3w:LyKo4EBicC4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Interfacelab/~4/MU-Ky7p0q3w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://interfacelab.com/nginx-php-fpm-apc-awesome/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://interfacelab.com/nginx-php-fpm-apc-awesome/</feedburner:origLink></item>
		<item>
		<title>Filmmakers Finding New Action Online</title>
		<link>http://feedproxy.google.com/~r/Interfacelab/~3/nG70x47AUAQ/</link>
		<comments>http://interfacelab.com/filmmakers-finding-new-action-online/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 18:04:39 +0000</pubDate>
		<dc:creator>Jon Gilkison</dc:creator>
				<category><![CDATA[Massify]]></category>

		<guid isPermaLink="false">http://interfacelab.com/?p=28</guid>
		<description><![CDATA[Filmmakers finding new action online &#124; Web Scout &#124; Los Angeles Times
Got great coverage about Massify in the LA times.  Go Massify!










]]></description>
			<content:encoded><![CDATA[<p><a href="http://latimesblogs.latimes.com/webscout/2008/07/massifyfilmakaj.html">Filmmakers finding new action online | Web Scout | Los Angeles Times</a></p>
<p>Got great coverage about Massify in the LA times.  Go Massify!</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Finterfacelab.com%2Ffilmmakers-finding-new-action-online%2F&amp;title=Filmmakers+Finding+New+Action+Online" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Finterfacelab.com%2Ffilmmakers-finding-new-action-online%2F&amp;title=Filmmakers+Finding+New+Action+Online" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Finterfacelab.com%2Ffilmmakers-finding-new-action-online%2F&amp;title=Filmmakers+Finding+New+Action+Online" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Finterfacelab.com%2Ffilmmakers-finding-new-action-online%2F&amp;title=Filmmakers+Finding+New+Action+Online" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Finterfacelab.com%2Ffilmmakers-finding-new-action-online%2F&amp;title=Filmmakers+Finding+New+Action+Online', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://del.icio.us/favicon.ico" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Finterfacelab.com%2Ffilmmakers-finding-new-action-online%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Finterfacelab.com%2Ffilmmakers-finding-new-action-online%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Finterfacelab.com%2Ffilmmakers-finding-new-action-online%2F&amp;title=Filmmakers+Finding+New+Action+Online" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Finterfacelab.com%2Ffilmmakers-finding-new-action-online%2F&amp;title=Filmmakers+Finding+New+Action+Online" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Interfacelab?a=nG70x47AUAQ:CdHFFzkYhpg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=nG70x47AUAQ:CdHFFzkYhpg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=nG70x47AUAQ:CdHFFzkYhpg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=nG70x47AUAQ:CdHFFzkYhpg:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=nG70x47AUAQ:CdHFFzkYhpg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=nG70x47AUAQ:CdHFFzkYhpg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=nG70x47AUAQ:CdHFFzkYhpg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=nG70x47AUAQ:CdHFFzkYhpg:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=nG70x47AUAQ:CdHFFzkYhpg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=nG70x47AUAQ:CdHFFzkYhpg:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Interfacelab/~4/nG70x47AUAQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://interfacelab.com/filmmakers-finding-new-action-online/feed/</wfw:commentRss>
		<slash:comments>-1</slash:comments>
		<feedburner:origLink>http://interfacelab.com/filmmakers-finding-new-action-online/</feedburner:origLink></item>
		<item>
		<title>Wordle</title>
		<link>http://feedproxy.google.com/~r/Interfacelab/~3/J5IdeaK6_Gk/</link>
		<comments>http://interfacelab.com/wordle/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 17:31:19 +0000</pubDate>
		<dc:creator>Jon Gilkison</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://interfacelab.com/?p=26</guid>
		<description><![CDATA[Found this awesome toy today.











]]></description>
			<content:encoded><![CDATA[<p>Found this awesome toy today.</p>
<p><a title="Wordle: Awesome" href="http://wordle.net/gallery/wrdl/13019/Awesome"><img style="padding:4px;border:1px solid #ddd" src="http://wordle.net/thumb/wrdl/13019/Awesome" alt="" /></a></p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Finterfacelab.com%2Fwordle%2F&amp;title=Wordle" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Finterfacelab.com%2Fwordle%2F&amp;title=Wordle" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Finterfacelab.com%2Fwordle%2F&amp;title=Wordle" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Finterfacelab.com%2Fwordle%2F&amp;title=Wordle" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Finterfacelab.com%2Fwordle%2F&amp;title=Wordle', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://del.icio.us/favicon.ico" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Finterfacelab.com%2Fwordle%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Finterfacelab.com%2Fwordle%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Finterfacelab.com%2Fwordle%2F&amp;title=Wordle" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Finterfacelab.com%2Fwordle%2F&amp;title=Wordle" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Interfacelab?a=J5IdeaK6_Gk:8EXU1zOU_xc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=J5IdeaK6_Gk:8EXU1zOU_xc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=J5IdeaK6_Gk:8EXU1zOU_xc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=J5IdeaK6_Gk:8EXU1zOU_xc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=J5IdeaK6_Gk:8EXU1zOU_xc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=J5IdeaK6_Gk:8EXU1zOU_xc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=J5IdeaK6_Gk:8EXU1zOU_xc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=J5IdeaK6_Gk:8EXU1zOU_xc:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=J5IdeaK6_Gk:8EXU1zOU_xc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=J5IdeaK6_Gk:8EXU1zOU_xc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Interfacelab/~4/J5IdeaK6_Gk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://interfacelab.com/wordle/feed/</wfw:commentRss>
		<slash:comments>-1</slash:comments>
		<feedburner:origLink>http://interfacelab.com/wordle/</feedburner:origLink></item>
		<item>
		<title>Ciarán Walsh’s Blog » TextMate Tip – Using PHP for Commands</title>
		<link>http://feedproxy.google.com/~r/Interfacelab/~3/_xBky-HI42c/</link>
		<comments>http://interfacelab.com/tip-php-for-commands-textmate/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 17:29:18 +0000</pubDate>
		<dc:creator>Jon Gilkison</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://interfacelab.com/?p=25</guid>
		<description><![CDATA[Ciarán Walsh’s Blog » TextMate Tip – Using PHP for Commands
A must read for anyone doing php development with TextMate.  I&#8217;m about 50/50 between TM and Eclipse, trying to wean myself over slowly.










]]></description>
			<content:encoded><![CDATA[<p><a href="http://ciaranwal.sh/2008/04/04/textmate-tip-using-php-for-commands">Ciarán Walsh’s Blog » TextMate Tip – Using PHP for Commands</a></p>
<p>A must read for anyone doing php development with TextMate.  I&#8217;m about 50/50 between TM and Eclipse, trying to wean myself over slowly.</p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Finterfacelab.com%2Ftip-php-for-commands-textmate%2F&amp;title=Ciar%C3%A1n+Walsh%E2%80%99s+Blog+%C2%BB+TextMate+Tip+%E2%80%93+Using+PHP+for+Commands" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Finterfacelab.com%2Ftip-php-for-commands-textmate%2F&amp;title=Ciar%C3%A1n+Walsh%E2%80%99s+Blog+%C2%BB+TextMate+Tip+%E2%80%93+Using+PHP+for+Commands" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Finterfacelab.com%2Ftip-php-for-commands-textmate%2F&amp;title=Ciar%C3%A1n+Walsh%E2%80%99s+Blog+%C2%BB+TextMate+Tip+%E2%80%93+Using+PHP+for+Commands" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Finterfacelab.com%2Ftip-php-for-commands-textmate%2F&amp;title=Ciar%C3%A1n+Walsh%E2%80%99s+Blog+%C2%BB+TextMate+Tip+%E2%80%93+Using+PHP+for+Commands" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Finterfacelab.com%2Ftip-php-for-commands-textmate%2F&amp;title=Ciar%C3%A1n+Walsh%E2%80%99s+Blog+%C2%BB+TextMate+Tip+%E2%80%93+Using+PHP+for+Commands', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://del.icio.us/favicon.ico" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Finterfacelab.com%2Ftip-php-for-commands-textmate%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Finterfacelab.com%2Ftip-php-for-commands-textmate%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Finterfacelab.com%2Ftip-php-for-commands-textmate%2F&amp;title=Ciar%C3%A1n+Walsh%E2%80%99s+Blog+%C2%BB+TextMate+Tip+%E2%80%93+Using+PHP+for+Commands" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Finterfacelab.com%2Ftip-php-for-commands-textmate%2F&amp;title=Ciar%C3%A1n+Walsh%E2%80%99s+Blog+%C2%BB+TextMate+Tip+%E2%80%93+Using+PHP+for+Commands" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Interfacelab?a=_xBky-HI42c:0J6GbnjkfZI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=_xBky-HI42c:0J6GbnjkfZI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=_xBky-HI42c:0J6GbnjkfZI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=_xBky-HI42c:0J6GbnjkfZI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=_xBky-HI42c:0J6GbnjkfZI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=_xBky-HI42c:0J6GbnjkfZI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=_xBky-HI42c:0J6GbnjkfZI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=_xBky-HI42c:0J6GbnjkfZI:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=_xBky-HI42c:0J6GbnjkfZI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=_xBky-HI42c:0J6GbnjkfZI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Interfacelab/~4/_xBky-HI42c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://interfacelab.com/tip-php-for-commands-textmate/feed/</wfw:commentRss>
		<slash:comments>-1</slash:comments>
		<feedburner:origLink>http://interfacelab.com/tip-php-for-commands-textmate/</feedburner:origLink></item>
		<item>
		<title>Feedburner WP Plugin Category Fix</title>
		<link>http://feedproxy.google.com/~r/Interfacelab/~3/fynsat_R9xY/</link>
		<comments>http://interfacelab.com/feedburner-wp-plugin-fix/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 07:07:30 +0000</pubDate>
		<dc:creator>Jon Gilkison</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://interfacelab.com/?p=23</guid>
		<description><![CDATA[I&#8217;ve patched the current Feedburner 2.3 plugin to support feedburner feeds for categories.
When you install the plugin and activate it, navigate to Settings -> Feedburner.
You should now see options for adding in URL&#8217;s for all of your category rss feeds.
Download here.
Note: The url for your feeds by category should be by name, eg:
http://interfacelab.com/feed?category_name=php










]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve patched the current Feedburner 2.3 plugin to support feedburner feeds for categories.</p>
<p>When you install the plugin and activate it, navigate to Settings -> Feedburner.</p>
<p>You should now see options for adding in URL&#8217;s for all of your category rss feeds.</p>
<p><a href="http://interfacelab.com/code/feedburner2.3.catfix.zip">Download here</a>.</p>
<p>Note: The url for your feeds by category should be by name, eg:</p>
<p><a href="http://interfacelab.com/feed?category_name=php">http://interfacelab.com/feed?category_name=php</a></p>

<span class="slashdigglicious">
<a href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Finterfacelab.com%2Ffeedburner-wp-plugin-fix%2F&amp;title=Feedburner+WP+Plugin+Category+Fix" title="Slashdot It!"><img src="http://slashdot.org/favicon.ico" height="16" width="16" alt="[Slashdot]" /></a>
<a href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Finterfacelab.com%2Ffeedburner-wp-plugin-fix%2F&amp;title=Feedburner+WP+Plugin+Category+Fix" title="Digg This Story"><img src="http://digg.com/favicon.ico" width="16" height="16" alt="[Digg]" /></a>
<a href="http://reddit.com/submit?url=http%3A%2F%2Finterfacelab.com%2Ffeedburner-wp-plugin-fix%2F&amp;title=Feedburner+WP+Plugin+Category+Fix" title="Reddit"><img src="http://reddit.com/favicon.ico" width="16" height="16" alt="[Reddit]" /></a>
<a href="http://del.icio.us/post?url=http%3A%2F%2Finterfacelab.com%2Ffeedburner-wp-plugin-fix%2F&amp;title=Feedburner+WP+Plugin+Category+Fix" title="Save to del.icio.us" onclick="window.open('http://del.icio.us/post?v=4&amp;noui&amp;jump=close&amp;url=http%3A%2F%2Finterfacelab.com%2Ffeedburner-wp-plugin-fix%2F&amp;title=Feedburner+WP+Plugin+Category+Fix', 'delicious', 'toolbar=no,width=700,height=400'); return false;"><img src="http://del.icio.us/favicon.ico" width="16" height="16" alt="[del.icio.us]" /></a>
<a href="http://www.facebook.com/share.php?u=http%3A%2F%2Finterfacelab.com%2Ffeedburner-wp-plugin-fix%2F" title="Share on Facebook"><img src="http://www.facebook.com/favicon.ico" width="16" height="16" alt="[Facebook]" /></a>
<a href="http://technorati.com/faves?add=http%3A%2F%2Finterfacelab.com%2Ffeedburner-wp-plugin-fix%2F" title="Add to my Technorati Favorites"><img src="http://technorati.com/favicon.ico" width="16" height="16" alt="[Technorati]" /></a>
<a href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Finterfacelab.com%2Ffeedburner-wp-plugin-fix%2F&amp;title=Feedburner+WP+Plugin+Category+Fix" title="Save to Google Bookmarks"><img src="http://www.google.com/favicon.ico" width="16" height="16" alt="[Google]" /></a>
<a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Finterfacelab.com%2Ffeedburner-wp-plugin-fix%2F&amp;title=Feedburner+WP+Plugin+Category+Fix" title="Stumble it!"><img src="http://www.stumbleupon.com/favicon.ico" width="16" height="16" alt="[StumbleUpon]" /></a>
</span><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Interfacelab?a=fynsat_R9xY:vwVxrD_sIZ0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=fynsat_R9xY:vwVxrD_sIZ0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=fynsat_R9xY:vwVxrD_sIZ0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=fynsat_R9xY:vwVxrD_sIZ0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=fynsat_R9xY:vwVxrD_sIZ0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=fynsat_R9xY:vwVxrD_sIZ0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=fynsat_R9xY:vwVxrD_sIZ0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=fynsat_R9xY:vwVxrD_sIZ0:l6gmwiTKsz0"><img src="http://feeds.feedburner.com/~ff/Interfacelab?d=l6gmwiTKsz0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Interfacelab?a=fynsat_R9xY:vwVxrD_sIZ0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Interfacelab?i=fynsat_R9xY:vwVxrD_sIZ0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Interfacelab/~4/fynsat_R9xY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://interfacelab.com/feedburner-wp-plugin-fix/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://interfacelab.com/feedburner-wp-plugin-fix/</feedburner:origLink></item>
	</channel>
</rss>
