<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog &#187; Projects</title>
	<atom:link href="http://blog.cliffano.com/category/projects/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cliffano.com</link>
	<description>Geeking, Living, Travelling</description>
	<lastBuildDate>Thu, 26 Jan 2012 10:18:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Use Jenkins On Firefox By Talking To Your Mac</title>
		<link>http://blog.cliffano.com/2011/11/06/use-jenkins-on-firefox-by-talking-to-your-mac/</link>
		<comments>http://blog.cliffano.com/2011/11/06/use-jenkins-on-firefox-by-talking-to-your-mac/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 00:59:53 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[speech recognition]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1781</guid>
		<description><![CDATA[I was watching I, Robot the other day, and thought how great it would be to use voice to control Jenkins. So last night I did a quick read, and then recorded this video. This used Mac Speech Recognition, so in theory I talked to my Mac, which then opened Jenkins pages on Firefox. Here [...]]]></description>
			<content:encoded><![CDATA[<p>I was watching <a href="http://en.wikipedia.org/wiki/I,_Robot_%28film%29">I, Robot</a> the other day, and thought how great it would be to use voice to control Jenkins.</p>
<p>So last night I did a <a href="http://lifehacker.com/215764/hack-attack-make-your-macs-speech-recognition-work-for-you">quick read</a>, and then recorded this video.<br />
This used Mac Speech Recognition, so in theory I talked to my Mac, which then opened Jenkins pages on Firefox. Here are the commands:</p>
<ol>
<li>&#8216;Open Jenkins&#8217;: opens Jenkins home page (dashboard)</li>
<li>&#8216;Build Bob&#8217;: builds a project called <a href="http://github.com/cliffano/bob">Bob</a></li>
<li>&#8216;Configure system&#8217;: opens Jenkins configuration page</li>
</ol>
<p><strong></strong>I had to repeat each command 2-3 times because I speak Indonesian-accented English.<br />
<strong></strong></p>
<p><strong>Note:</strong> I scrolled the page up and down using the trackpad, it could be voice-controlled too actually.</p>
<p><iframe src="http://www.youtube.com/embed/TCOEIr7Gk84?hl=en&amp;fs=1" frameborder="0" width="425" height="349"></iframe></p>
<p>It&#8217;s easy to add a command:</p>
<ol>
<li>Create a new file in <strong>/Users/&lt;username&gt;/Library/Speech/Speakable Items/Application Speakable Items/firefox</strong> directory containing:
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
&lt;plist version=&quot;1.0&quot;&gt;
&lt;dict&gt;
&lt;key&gt;URL&lt;/key&gt;
&lt;string&gt;http://jenkins-host:8080&lt;/string&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</pre>
<p>This format is <a href="http://en.wikipedia.org/wiki/Property_list#Mac_OS_X">Mac OS X Property List</a>.</li>
<li>Save this file as &lt;command&gt;, e.g. <strong>Open Jenkins</strong> (yes, with the space).</li>
<li>Open <strong>System Preferences</strong> -&gt; <strong>Speech</strong>, and switch <strong>Speakable Items</strong> on.</li>
<li>Configure the <strong>Listening Method</strong>. I set it to <strong>Listen continuously with keyword</strong>, and keyword is <strong>Required before each command</strong>. My keyword is <a href="http://www.youtube.com/watch?v=Np1A4AGpqSo">VIKI</a>, you know, Virtual Interactive Kinetic Intelligence, from the movie.</li>
</ol>
<p>I haven&#8217;t investigated how much programming can be done on the command file, but this opens up the possibility of mapping Jenkins HTTP API to commands, and we will be able to fully interact with Jenkins using voice.</p>
<p>Then the only thing left to do is&#8230; develop an American accent.</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2011%2F11%2F06%2Fuse-jenkins-on-firefox-by-talking-to-your-mac%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2011/11/06/use-jenkins-on-firefox-by-talking-to-your-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nestor &#8211; A Faster And Simpler CLI For Jenkins</title>
		<link>http://blog.cliffano.com/2011/10/22/nestor-a-faster-and-simpler-cli-for-jenkins/</link>
		<comments>http://blog.cliffano.com/2011/10/22/nestor-a-faster-and-simpler-cli-for-jenkins/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 12:20:39 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[nestor]]></category>
		<category><![CDATA[nodejs]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1734</guid>
		<description><![CDATA[It all started because at one point I was using a rather resource-challenged machine running Windows and an Ubuntu VM at the same time, and Firefox froze every so often, rendering Jenkins BuildMonitor and Jenkins web interface useless most of the time. So I looked for an alternative and gave Jenkins CLI a go. Like [...]]]></description>
			<content:encoded><![CDATA[<p>It all started because at one point I was using a rather resource-challenged machine running Windows and an Ubuntu VM at the same time, and Firefox froze every so often, rendering <a href="https://addons.mozilla.org/en-US/firefox/addon/jenkins-build-monitor/">Jenkins BuildMonitor</a> and Jenkins web interface useless most of the time. So I looked for an alternative and gave <a href="https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI">Jenkins CLI</a> a go.</p>
<p>Like most Java applications, Jenkins built-in CLI also suffers from <a href="http://en.wikipedia.org/wiki/Java_performance#Startup_time">slow start up time</a> (flame suit: ON) due to core Java libraries loading (Kohsuke later told me on #jenkins that there&#8217;s also a handshaking process involved). This led me to try <a href="https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API">Jenkins Remote Access API</a> with curl, which performed significantly faster than Jenkins CLI.</p>
<p>So that&#8217;s great, but I have another issue with the fact that Jenkins CLI&#8217;s commands start with &#8220;java -jar jenkins-cli.jar &#8230;&#8221;, that&#8217;s a finger twister right there, and lengthy curl + URL obviously doesn&#8217;t help.</p>
<p>Enter <a href="https://github.com/cliffano/nestor">Nestor</a>, a Jenkins CLI written in Node.js that aims to be a faster and simpler alternative to the existing solutions. The catch? Node.js and npm support on Windows is not there yet, so if you managed to run Nestor on Windows please let me know about it. Nestor has been tested and used daily on OS X and Linux.</p>
<p><strong>Simple setup</strong></p>
<p>Install Nestor using <code>npm install -g nestor</code></p>
<p>Configure the Jenkins instance you want to use using <code>export JENKINS_URL=http://user:pass@host:port/path</code></p>
<p><strong>Simple usage</strong></p>
<p>Nestor commands are simple, it&#8217;s always <code>nestor &lt;action&gt; &lt;param&gt;</code></p>
<p>To trigger a build</p>
<pre>&gt; nestor build studio-bob
Job was started successfully</pre>
<p>To view a job status</p>
<pre>&gt; nestor job studio-bob
Status: OK
No xml report files found for checkstyle
Build stability: 3 out of the last 5 builds failed.</pre>
<p>To list the executors</p>
<pre>&gt; nestor executor
* master
idle
39%	studio-bob</pre>
<p>To view the queue</p>
<pre>&gt; nestor queue
Queue is empty</pre>
<p>To view all jobs status on the dashboard</p>
<pre>&gt; nestor dashboard
WARN	blojsom-bloojm
OK	jenkins-buildmonitor
FAIL	studio-ae86
OK	studio-bob</pre>
<p>Check out Nestor&#8217;s GitHub <a href="https://github.com/cliffano/nestor/blob/master/README.md">README</a> page for more commands available.</p>
<p>Hopefully that&#8217;s simple enough.</p>
<p><strong>Note:</strong> The name Nestor was inspired by <a href="http://en.wikipedia.org/wiki/Nestor_%28Tintin_character%29">Captain Haddock&#8217;s butler at Marlinspike Hall</a>, not <a href="http://en.wikipedia.org/wiki/Nestor_%28mythology%29">the Argonaut one</a>.</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2011%2F10%2F22%2Fnestor-a-faster-and-simpler-cli-for-jenkins%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2011/10/22/nestor-a-faster-and-simpler-cli-for-jenkins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Break Room</title>
		<link>http://blog.cliffano.com/2011/08/15/break-room/</link>
		<comments>http://blog.cliffano.com/2011/08/15/break-room/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 11:42:05 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[studio]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1712</guid>
		<description><![CDATA[On one weekend evening&#8230;]]></description>
			<content:encoded><![CDATA[<p>On one weekend evening&#8230;</p>
<p><img alt="" src="https://lh4.googleusercontent.com/-o5pH1z0eAfk/TkkDLlBYa2I/AAAAAAAAF4I/OaFAmVkcy40/P1190036.JPG" class="alignnone" width="500" height="281" /></p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2011%2F08%2F15%2Fbreak-room%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2011/08/15/break-room/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Node.js To Discover Jenkins On The Network</title>
		<link>http://blog.cliffano.com/2011/08/04/using-nodejs-to-discover-jenkins-on-the-network/</link>
		<comments>http://blog.cliffano.com/2011/08/04/using-nodejs-to-discover-jenkins-on-the-network/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 11:21:28 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[nestor]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[udp]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1687</guid>
		<description><![CDATA[I&#8217;ve just added a new feature to Nestor to discover Jenkins on the network, and as it turned out, it&#8217;s pretty simple to do thanks to Node.js Datagram sockets API (hat tip Paul Querna). Jenkins has a discovery feature as part of its remote access API where it listens on UDP port 33848, and whenever [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just added a new feature to <a href="http://github.com/cliffano/nestor">Nestor</a> to discover <a href="http://jenkins-ci.org">Jenkins</a> on the network, and as it turned out, it&#8217;s pretty simple to do thanks to <a href="http://nodejs.org/docs/v0.4.10/api/dgram.html">Node.js Datagram sockets API</a> (hat tip <a href="http://twitter.com/#!/pquerna">Paul Querna</a>).</p>
<p>Jenkins has a discovery feature as part of its <a href="https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API">remote access API</a> where it listens on UDP port 33848, and whenever it receives a message, Jenkins will respond with an XML containing the instance&#8217;s URL, version number, and slave port information.</p>
<p>So how do you send a UDP message using NodeJS?<br />
Here&#8217;s a sample function adapted from Nestor&#8217;s lib/service.js:</p>
<pre class="brush: jscript; title: ; notranslate">
function sendUdp(message, host, port, cb) {
    var socket = require('dgram').createSocket('udp4'),
        buffer = new Buffer(message);
    socket.on(&quot;error&quot;, function (err) {
        cb(err);
    });
    socket.on(&quot;message&quot;, function (data) {
        cb(null, data);
    });
    socket.send(buffer, 0, buffer.length, port, host, function (err, message) {
        if (err) {
            cb(err);
        }
    });
}
</pre>
<p>For Jenkins discovery purpose, send any message to any hostname on port 33848:</p>
<pre class="brush: jscript; title: ; notranslate">
sendUdp('Long live Jenkins!', 'localhost', 33848, function () { ... });
</pre>
<p>and if there&#8217;s any Jenkins instance running on localhost, it will respond with an XML like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;hudson&gt;
  &lt;version&gt;1.414&lt;/version&gt;
  &lt;url&gt;http://localhost:8080&lt;/url&gt;
  &lt;slave-port&gt;12345&lt;/slave-port&gt;
&lt;/hudson&gt;
</pre>
<p>Simple!</p>
<pre>konan cliffano$ nestor discover
Jenkins 1.414 running at http://localhost:8080/</pre>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2011%2F08%2F04%2Fusing-nodejs-to-discover-jenkins-on-the-network%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2011/08/04/using-nodejs-to-discover-jenkins-on-the-network/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Couchtato Introduction</title>
		<link>http://blog.cliffano.com/2011/07/03/couchtato-introduction/</link>
		<comments>http://blog.cliffano.com/2011/07/03/couchtato-introduction/#comments</comments>
		<pubDate>Sun, 03 Jul 2011 08:37:16 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[couchtato]]></category>
		<category><![CDATA[nodejs]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1580</guid>
		<description><![CDATA[Last Thursday I put up a post at Shine Technologies blog titled Couchtato &#8211; A CouchDB Document Utility Tool Written In Node.js. It&#8217;s a short introduction to Couchtato, a little hobby project I worked on over several evenings and lunch breaks. Do check it out if you are a CouchDB and NodeJS user.]]></description>
			<content:encoded><![CDATA[<p>Last Thursday I put up a post at Shine Technologies blog titled <a href="http://blog.shinetech.com/2011/06/30/couchtato-a-couchdb-document-utility-tool-written-in-nodejs/">Couchtato &#8211; A CouchDB Document Utility Tool Written In Node.js</a>. It&#8217;s a short introduction to <a href="https://github.com/cliffano/couchtato">Couchtato</a>, a little hobby project I worked on over several evenings and lunch breaks.</p>
<p>Do check it out if you are a CouchDB and NodeJS user.</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2011%2F07%2F03%2Fcouchtato-introduction%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2011/07/03/couchtato-introduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>State Of The Blog</title>
		<link>http://blog.cliffano.com/2011/06/23/state-of-the-blog/</link>
		<comments>http://blog.cliffano.com/2011/06/23/state-of-the-blog/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 13:10:12 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[stats]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1578</guid>
		<description><![CDATA[After 5.5 years, 140 posts, 550 comments, and 270 tags… this blog attracts about 7000 monthly visits, and has a Google PageRank of 5. Not too bad for a little blog, eh?]]></description>
			<content:encoded><![CDATA[<p>After 5.5 years, 140 posts, 550 comments, and 270 tags…</p>
<p>this blog attracts about 7000 monthly visits,</p>
<p><img src="https://lh5.googleusercontent.com/-UVbg8Xkm930/Tf3RDpGxx4I/AAAAAAAAF2c/nsPLND_pln0/analytics.png" alt="" /></p>
<p>and has a Google PageRank of 5.</p>
<p><img src="https://lh3.googleusercontent.com/-065pbJbdBu0/Tf3RCq9TTlI/AAAAAAAAF2Y/m0C2D3CgrTQ/pagerank.png" alt="" /></p>
<p>Not too bad for a little blog, eh?</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2011%2F06%2F23%2Fstate-of-the-blog%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2011/06/23/state-of-the-blog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Jenkins BuildMonitor &#8211; 20000 Downloads Later</title>
		<link>http://blog.cliffano.com/2011/05/15/jenkins-buildmonitor-20000-downloads-later/</link>
		<comments>http://blog.cliffano.com/2011/05/15/jenkins-buildmonitor-20000-downloads-later/#comments</comments>
		<pubDate>Sun, 15 May 2011 09:37:39 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[buildmonitor]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[jenkins]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1569</guid>
		<description><![CDATA[Yesterday, Jenkins BuildMonitor Firefox Add-on surpassed 20,000 downloads. I uploaded the first version on June 8th, 2008, so that’s almost 3 years ago, and there have been 26 releases since. On average, there are about 2500-2700 active daily users on weekdays. That became the basis of my release mantra: “Let’s not piss 2500 people off.” [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, <a href="https://addons.mozilla.org/en-us/firefox/addon/jenkins-build-monitor/">Jenkins BuildMonitor</a> Firefox Add-on surpassed 20,000 downloads. I uploaded the first version  on June 8th, 2008, so that’s almost 3 years ago, and there have been 26  releases since.</p>
<p>On average, there are about 2500-2700 active daily users on weekdays.  That became the basis of my release mantra: “Let’s not piss 2500 people  off.”</p>
<p><a href="https://lh4.googleusercontent.com/_fXOvW0MYmrY/Tc-EOoRSSwI/AAAAAAAAF04/Rf5rUFGtx4w/s912/jenkins-stat.jpg"><img src="https://lh4.googleusercontent.com/_fXOvW0MYmrY/Tc-EOoRSSwI/AAAAAAAAF04/Rf5rUFGtx4w/s500/jenkins-stat.jpg" alt="" /></a></p>
<p>The top locales are en-US, de, en-GB, fr, ja, pl. We’ve got en, fr, and ja locales covered <a href="https://github.com/jenkinsci/firefox-extension-buildmonitor/tree/master/src/main/resources/firefox/chrome/locale">https://github.com/jenkinsci/firefox-extension-buildmonitor/tree/master/src/main/resources/firefox/chrome/locale</a>. Any German or Polish translator around? please feel free to submit a pull request.</p>
<p><a href="https://lh3.googleusercontent.com/_fXOvW0MYmrY/Tc-ENoOpHdI/AAAAAAAAF00/tgHDCoYW7o4/s912/jenkins-stat-locale.png"><img src="https://lh3.googleusercontent.com/_fXOvW0MYmrY/Tc-ENoOpHdI/AAAAAAAAF00/tgHDCoYW7o4/s500/jenkins-stat-locale.png" alt="" /></a></p>
<p>While the top operating systems are Windows, Linux, Darwin, Solaris, FreeBSD.</p>
<p><a href="https://lh5.googleusercontent.com/_fXOvW0MYmrY/Tc-EQhvzQUI/AAAAAAAAF08/3lvgauMhbzA/s912/jenkins-stat-os.png"><img src="https://lh5.googleusercontent.com/_fXOvW0MYmrY/Tc-EQhvzQUI/AAAAAAAAF08/3lvgauMhbzA/s500/jenkins-stat-os.png" alt="" /></a></p>
<p>And as you know, this add-on is now named Jenkins BuildMonitor,  though in practice it should still work with both Jenkins and Hudson  just fine. As for the project management, I’m staying with the original  Hudson – now Jenkins – community, source code on GitHub, mailing list on  Google Groups, etc.</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2011%2F05%2F15%2Fjenkins-buildmonitor-20000-downloads-later%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2011/05/15/jenkins-buildmonitor-20000-downloads-later/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do You Find Websites Hard To Read On The iPhone? Try FeedTouch</title>
		<link>http://blog.cliffano.com/2011/02/20/do-you-find-websites-hard-to-read-on-the-iphone-try-feedtouch/</link>
		<comments>http://blog.cliffano.com/2011/02/20/do-you-find-websites-hard-to-read-on-the-iphone-try-feedtouch/#comments</comments>
		<pubDate>Sat, 19 Feb 2011 13:15:37 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[feedtouch]]></category>
		<category><![CDATA[jquerymobile]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[phone]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1496</guid>
		<description><![CDATA[After the first few weeks of using an iPhone, I learned that reading the content of most websites on a mobile phone was such an unpleasant experience. The texts were tiny and hard to read, the ads were distracting, I kept having to zoom in and out, scroll vertically and horizontally. In short, I spent [...]]]></description>
			<content:encoded><![CDATA[<p>After the first few weeks of using an iPhone, I learned that reading the content of most websites on a mobile phone was such an unpleasant experience. The texts were tiny and hard to read, the ads were distracting, I kept having to zoom in and out, scroll vertically and horizontally. In short, I spent most of the time trying to navigate the content instead of reading the content.</p>
<p>I know there are already some solutions out there that somewhat tackle this problem, but none of them is simple enough to my liking. So that&#8217;s why I wrote <a href="http://ft.t00.me">FeedTouch</a>. (Note: even if there&#8217;s a simpler solution that I didn&#8217;t know of, I&#8217;d still write it anyway :p)</p>
<p>To use FeedTouch, all you have to do is add <strong>ft.t00.me</strong> in front of a website URL.<br />
The screen shot below shows a normal website on the left <a href="http://ma.tt">http://ma.tt</a>, and the FeedTouch-ed version on the right <a href="http://ft.t00.me/ma.tt">http://ft.t00.me/ma.tt</a> .</p>
<p><img src="http://lh3.ggpht.com/_fXOvW0MYmrY/TUgYjaQ1a_I/AAAAAAAAFuM/S_HcJnEMEuk/matt0.jpg" alt="" /></p>
<p>FeedTouch automatically discovers an atom or RSS feed on a website (most news sites and blogs have such feeds). But instead of showing the content included in the feed (many feeds only provide excerpts), FeedTouch shows you the full content in a readable format.</p>
<p>I understand that this is not a solution for everyone. FeedTouch is particularly useful for me because I mostly read news sites with fresh daily content  and I mostly do the reading during my daily train commute, which means I only care about reading stuffs, I never run out of reading material, and I&#8217;m not worried about keeping track which articles I have or have not read. And after some time, I ended up with a folder containing a collection of the FeedTouch-ed websites that I read most often, I added those sites to my iPhone home screen.</p>
<p>I know some of you might ask &#8220;What&#8217;s wrong with Google Reader?&#8221; Two things. First is that Google Reader only displays the content included in the feed. I like to read NBA.com and I only get few sentences worth of excerpt on their feed, which means I ended up having to visit the actual web page with the hard to read texts anyway. And second, adding new feeds to Google Reader on iPhone&#8217;s Safari is not simple enough because it involves finding out the feed URL (good luck with that) and copy-pasting it to Google Reader, plus, using a web form on a mobile phone is such a pain.</p>
<p>I would rather simply add <strong>ft.t00.me</strong> in front of a website URL and let FeedTouch discover the feed URL automatically for me. If I like the website content, then I simply add it to the iPhone home screen. Easy!</p>
<p>FeedTouch uses <a href="http://jquerymobile.com/">jQueryMobile</a>, and mashes up <a href="http://code.google.com/apis/feed/">Google Feed</a> with <a href="http://viewtext.org">ViewText</a>.</p>
<p><strong>Update (26/07/2011):</strong> replaced ft.prn.la with ft.t00.me .</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2011%2F02%2F20%2Fdo-you-find-websites-hard-to-read-on-the-iphone-try-feedtouch%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2011/02/20/do-you-find-websites-hard-to-read-on-the-iphone-try-feedtouch/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Childhood Drawings &#8211; T&#8217;Challa And Scorpion</title>
		<link>http://blog.cliffano.com/2010/12/28/childhood-drawings-tchalla-and-scorpion/</link>
		<comments>http://blog.cliffano.com/2010/12/28/childhood-drawings-tchalla-and-scorpion/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 10:30:13 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[childhood]]></category>
		<category><![CDATA[drawings]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1435</guid>
		<description><![CDATA[I found some of my old hand drawings when I visited my parents&#8217; house in Jakarta earlier this year. I used to draw a lot when I was still in elementary and junior high school, nothing awesome, but I guess it wasn&#8217;t too bad for someone at that age. Back then I was really into [...]]]></description>
			<content:encoded><![CDATA[<p>I found some of my old hand drawings when I visited my parents&#8217; house in Jakarta earlier this year. I used to draw a lot when I was still in elementary and junior high school, nothing awesome, but I guess it wasn&#8217;t too bad for someone at that age.</p>
<p>Back then I was really into soccer and basketball, and for a reason I can no longer remember, I often incorporated elements of a soccer ball or a basketball in my drawings.</p>
<p>Here&#8217;s two of them:</p>
<p><img src="http://lh6.ggpht.com/_fXOvW0MYmrY/TRmGWH-wYVI/AAAAAAAAFsk/utsPDSxxXpE/scan0005.jpg" alt="" /><br />
<a href="http://en.wikipedia.org/wiki/Black_Panther_%28comics%29">T&#8217;Challa</a> from Marvel Comics, obviously holding a basketball with adjusted ribs forming the shape of claws.</p>
<p><img src="http://lh6.ggpht.com/_fXOvW0MYmrY/TRmGVk4e8dI/AAAAAAAAFsg/6HfoTqXCAc0/scan0006.jpg" alt="" /><br />
<a href="http://en.wikipedia.org/wiki/Scorpion_%28Mortal_Kombat%29">Scorpion</a> from Mortal Kombat. Notice the basketball ribs at the background of the Mortal Kombat dragon logo?</p>
<p>There&#8217;s one mystery, I&#8217;m not sure what the significance of the numbers, 91 and 4, on those characters was. I&#8217;m guessing 91 was <a href="http://www.nba.com/playerfile/dennis_rodman.html">Dennis Rodman</a>&#8216;s jersey number when he was playing for the Chicago Bulls and 4 was <a href="http://en.wikipedia.org/wiki/List_of_Slam_Dunk_characters#Takenori_Akagi">Takenori Akagi</a>&#8216;s at Shohoku High School, but yea, your guess is as good as mine.</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F12%2F28%2Fchildhood-drawings-tchalla-and-scorpion%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/12/28/childhood-drawings-tchalla-and-scorpion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Studio Sign</title>
		<link>http://blog.cliffano.com/2010/12/07/studio-sign/</link>
		<comments>http://blog.cliffano.com/2010/12/07/studio-sign/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 12:51:13 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[home studio]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1389</guid>
		<description><![CDATA[This sign was bolted on the front wall up to the third letter before some body corporate police appeared out of nowhere and pointed out that it&#8217;s against their rules. So we had to improvise and placed the sign above the door frame for now. Time to start planning to overthrow the current body corporate.]]></description>
			<content:encoded><![CDATA[<p>This sign was bolted on the front wall up to the third letter before some body corporate police appeared out of nowhere and pointed out that it&#8217;s against their rules.</p>
<p><img class="alignnone" src="http://lh5.ggpht.com/_fXOvW0MYmrY/TP4F2HHeeYI/AAAAAAAAFqI/qvbObQYWOLw/studiosign.jpg" alt="" width="478" height="261" /></p>
<p>So we had to improvise and placed the sign above the door frame for now.</p>
<p>Time to start planning to overthrow the current body corporate.</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F12%2F07%2Fstudio-sign%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/12/07/studio-sign/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EC2 Micro Instance Saved Me $120 A Year</title>
		<link>http://blog.cliffano.com/2010/09/26/ec2-micro-instance-saved-me-120-a-year/</link>
		<comments>http://blog.cliffano.com/2010/09/26/ec2-micro-instance-saved-me-120-a-year/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 08:07:52 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[slicehost]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1305</guid>
		<description><![CDATA[Update: Nathan Peel pointed out that I missed the $0.007 hourly usage in my calculation. I originally said that I saved $180 a year, it&#8217;s actually $120. Thanks Nathan for the correction! Please note that what I&#8217;m writing here is more applicable to web sites with low traffic and storage requirement. I&#8217;ve been a happy [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> Nathan Peel pointed out that I missed the $0.007 hourly usage in my calculation. I originally said that I saved $180 a year, it&#8217;s actually $120. Thanks Nathan for the correction!</p>
<p>Please note that what I&#8217;m writing here is more applicable to web sites with low traffic and storage requirement.</p>
<p>I&#8217;ve been a <a href="http://blog.cliffano.com/2008/02/17/slicehosted/">happy</a> <a href="http://slicehost.com">Slicehost</a> user for the past 2.5 years. I used Slicehost for hosting this blog and some other web sites. I used their 256 slice plan at $20 per month, i.e $240 per year which includes 36.5 days bonus. I know there are cheaper hosting plans out there, but none provides the combination of excellent reliability, full root access, easy to use domain management, excellent support and documentation, and competitive price.</p>
<p>That was until two weeks ago when Amazon <a href="http://aws.amazon.com/about-aws/whats-new/2010/09/09/announcing-micro-instances-for-amazon-ec2/">announced</a> their EC2 Micro instance plan of 613Mb for only $54 a year plus $0.007 per hour of usage for a reserved instance. I immediately gave it a few test runs and found plenty of nice things about it. I really like their on-demand instance, I could start and stop the instance any time I want and they only charged me for the total time it was running. I also like having the ability to choose which region the instance is hosted: US West, US East, Asia Pacific, or Europe. And their documentation is very complete if not too much to read through.</p>
<p>The only downside is that EC2 doesn&#8217;t have any domain management service, but luckily <a href="http://godaddy.com">Go Daddy</a>, where I bought my domain names from, has <a href="http://help.godaddy.com/article/666">Total DNS Control</a>. It&#8217;s not as convenient to use as Slicehost&#8217;s domain management but still usable enough, and best of all, it&#8217;s free.</p>
<p>Some numbers from the plans (valid at the time of writing):</p>
<table>
<tbody>
<tr>
<th></th>
<th>Slicehost 256 slice</th>
<th>Slicehost 512 slice</th>
<th>Amazon EC2 Micro Instance</th>
</tr>
<tr>
<td>Memory</td>
<td>256MB</td>
<td>512MB</td>
<td>613MB</td>
</tr>
<tr>
<td>Bandwidth</td>
<td>150GB</td>
<td>300GB</td>
<td>$0.15/GB/month (*)</td>
</tr>
<tr>
<td>Storage</td>
<td>10GB</td>
<td>20GB</td>
<td>$0.10/GB/month (*)</td>
</tr>
<tr>
<td>Pricing</td>
<td>$20 x 12 = $240/year</td>
<td>$38 x 12 = $456/year</td>
<td>$54 + ($0.007 x 24 x 365) = $115.32/year</td>
</tr>
</tbody>
</table>
<p>(*) not included in the yearly cost.</p>
<p>This blog and some other web sites I&#8217;m maintaining only use 2GB/month bandwidth usage and less than 1GB storage. So let&#8217;s count that at $0.15 * 2 * 12 = $3.6/year for bandwidth, and $0.10 * 1 * 12 = $1.2/year for storage, which brings the yearly cost to $115.32 + $3.6 + $1.2 = $120.12. Rounding that to $120 and I&#8217;m saving $120 per year.</p>
<p>In summary, I no longer have any reason to keep using Slicehost. I think the Slicehost crew is amazing, but cost-wise, I simply can&#8217;t ignore Amazon&#8217;s offering.</p>
<p>This blog is now hosted on an Amazon EC2 Micro instance.</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F09%2F26%2Fec2-micro-instance-saved-me-120-a-year%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/09/26/ec2-micro-instance-saved-me-120-a-year/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Node.js Discussion On Teman Macet Podcast</title>
		<link>http://blog.cliffano.com/2010/09/20/nodejs-discussion-on-teman-macet-podcast/</link>
		<comments>http://blog.cliffano.com/2010/09/20/nodejs-discussion-on-teman-macet-podcast/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 14:31:28 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[teman macet]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1291</guid>
		<description><![CDATA[Last May, I recorded a discussion in Indonesian language on Teman Macet podcast with the show&#8217;s host, Ronald Widha, and another guest who was a fellow NodeJS user,  Julius Sirait. The discussion itself was more on NodeJS introduction and sharing what we had learnt thus far. The episode, #51 nodeJS bersama Julius Sirait dan Cliffano [...]]]></description>
			<content:encoded><![CDATA[<p>Last May, I recorded a discussion in Indonesian language on <a href="http://temanmacet.com">Teman Macet</a> podcast with the show&#8217;s host, <a href="http://www.ronaldwidha.net/">Ronald Widha</a>, and another guest who was a fellow NodeJS user,  <a href="http://julius.sirait.net/">Julius Sirait</a>. The discussion itself was more on NodeJS introduction and sharing what we had learnt thus far. The episode, <a href="http://www.temanmacet.com/2010/07/ep-51-nodejs-bersama-julius-sirait-dan-cliffano-subagio/">#51 nodeJS bersama Julius Sirait dan Cliffano Subagio</a>, was available for streaming/download in July.</p>
<p>NodeJS is one piece of technology that I&#8217;m very excited about. For web application development, I think Node, along with its web stack, is a nice middle ground between Ruby/Rails magical &#8216;simplicity&#8217; and Java/JEE layers of complexity. For network-related stuffs, (I&#8217;m quoting Sami Samhuri here) NodeJS is a swiss army knife. Oh, and have I mentioned that NodeJS is fast? like seriously da*n fast? (thanks to <a href="http://code.google.com/p/v8/">V8</a>).</p>
<p>As a side note, Indonesia is currently undergoing a strong growth in mobile Internet penetration, and with 200+ million people in the market, the progress is very exciting to watch. Teman Macet is one of the best podcast shows, technical or not, in  Indonesian language. I personally find it immensely useful at providing  information about Indonesian start ups and technology  practitioners.</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F09%2F20%2Fnodejs-discussion-on-teman-macet-podcast%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/09/20/nodejs-discussion-on-teman-macet-podcast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hudson NodeJS Plugin</title>
		<link>http://blog.cliffano.com/2010/09/19/hudson-nodejs-plugin/</link>
		<comments>http://blog.cliffano.com/2010/09/19/hudson-nodejs-plugin/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 06:40:13 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[nodejs]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1286</guid>
		<description><![CDATA[If you&#8217;re a NodeJS user who happens to use Hudson as a continuous integration server, then perhaps you would be interested to check out NodeJS Plugin which I released about a month ago (yea, I&#8217;m always behind with blogging). This plugin allows you to use NodeJS script on a build step, as an alternative to [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re a <a href="http://nodejs.org">NodeJS</a> user who happens to use <a href="http://hudson-ci.org">Hudson</a> as a continuous integration server, then perhaps you would be interested to check out <a href="http://wiki.hudson-ci.org/display/HUDSON/NodeJS+Plugin">NodeJS Plugin</a> which I released about a month ago (yea, I&#8217;m always behind with blogging).</p>
<p>This plugin allows you to use NodeJS script on a build step, as an alternative to the existing shell script (out of the box) and Ruby script (via a plugin).</p>
<p><img class="alignnone" src="http://lh5.ggpht.com/_fXOvW0MYmrY/TJDUaywZdaI/AAAAAAAAFl0/lXmR0kmgYBc/nodejs_buildstep_menu.png" alt="" width="252" height="145" /></p>
<p><img class="alignnone" src="http://lh6.ggpht.com/_fXOvW0MYmrY/TJDUa44C_7I/AAAAAAAAFl4/-zob946M9Jg/nodejs_buildstep_script.png" alt="" width="430" height="186" /></p>
<p>Call me too optimistic, but I&#8217;m waiting for the day when all standard shell script commands have their NodeJS equivalence.</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F09%2F19%2Fhudson-nodejs-plugin%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/09/19/hudson-nodejs-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Platform Home</title>
		<link>http://blog.cliffano.com/2010/09/18/platform-home/</link>
		<comments>http://blog.cliffano.com/2010/09/18/platform-home/#comments</comments>
		<pubDate>Sat, 18 Sep 2010 03:37:17 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[iphoneography]]></category>
		<category><![CDATA[melbourne]]></category>
		<category><![CDATA[shakeitmelbourne]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1279</guid>
		<description><![CDATA[My first go at iPhoneography, edited using ShakeItPhoto app. This photo was taken at Clayton station platform 2, I was on my way home after work.]]></description>
			<content:encoded><![CDATA[<p>My first go at <a href="http://www.iphoneography.com/journal/2010/7/1/question-what-is-iphoneography.html?currentPage=3">iPhoneography</a>, edited using <a href="http://shakeitphoto.com/">ShakeItPhoto</a> app.</p>
<p>This photo was taken at Clayton station platform 2, I was on my way home after work.</p>
<p><a href="http://farm5.static.flickr.com/4111/4999785701_f1318812a2_b.jpg"><img class="alignnone" src="http://farm5.static.flickr.com/4111/4999785701_f1318812a2.jpg" alt="" width="500" height="488" /></a></p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F09%2F18%2Fplatform-home%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/09/18/platform-home/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSGames Plugin &#8211; Play Mario Kart &amp; Tetris On Hudson</title>
		<link>http://blog.cliffano.com/2010/09/15/jsgames-plugin-play-mario-kart-tetris-on-hudson/</link>
		<comments>http://blog.cliffano.com/2010/09/15/jsgames-plugin-play-mario-kart-tetris-on-hudson/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 13:51:38 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jsgames]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1189</guid>
		<description><![CDATA[Now you can play games on Hudson using JSGames Plugin, albeit only a cutdown version of Mario Kart and Tetris (credit goes to Jacob Seidelin of Nihilogic Games). This plugin is extensible enough, so it&#8217;s pretty easy to add new games. The winners of 10K Apart would be good additions given the right license. I [...]]]></description>
			<content:encoded><![CDATA[<p>Now you can play games on <a href="http://hudson-ci.org">Hudson</a> using <a href="http://wiki.hudson-ci.org/display/HUDSON/JSGames+Plugin">JSGames Plugin</a>, albeit only a cutdown version of Mario Kart and Tetris (credit goes to Jacob Seidelin of <a rel="nofollow" href="http://blog.nihilogic.dk/">Nihilogic Games</a>). This plugin is extensible enough, so it&#8217;s pretty easy to add new games. The winners of <a href="http://10k.aneventapart.com/">10K Apart</a> would be good additions given the right license.</p>
<p><img class="alignnone" src="http://lh5.ggpht.com/_fXOvW0MYmrY/TJC8Z3c5nVI/AAAAAAAAFls/0JNGyrWf2S0/jsgames_menu.png" alt="" width="394" height="337" /></p>
<p>I wrote this plugin as an experiment on using Hudson for non-continuous integration purposes, in this case, a very minimalistic &#8216;games delivery platform&#8217;. Games as plugins, each with a pluggable Hudson UI that automatically adds a game menu / navigation. To push this further, the dashboard can then be modified to look more like Steam or iTunes, but of course I didn&#8217;t do this part.</p>
<p>Hudson is quite flexible, eh?</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F09%2F15%2Fjsgames-plugin-play-mario-kart-tetris-on-hudson%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/09/15/jsgames-plugin-play-mario-kart-tetris-on-hudson/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CouchDB Upgrade From 0.11.0 To 1.0.1</title>
		<link>http://blog.cliffano.com/2010/09/10/couchdb-upgrade-from-0-11-0-to-1-0-1/</link>
		<comments>http://blog.cliffano.com/2010/09/10/couchdb-upgrade-from-0-11-0-to-1-0-1/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 14:42:32 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[couchdb]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1255</guid>
		<description><![CDATA[This post also serves as a note to self when I do another upgrade in the future. It&#8217;s still not clear to me of what&#8217;s the best practice for upgrading a CouchDB installation. From the mailing list, some people suggested backing up the config and database files, uninstalling the old version, then installing the new [...]]]></description>
			<content:encoded><![CDATA[<p>This post also serves as a note to self when I do another upgrade in the future.</p>
<p>It&#8217;s still not clear to me of what&#8217;s the best practice for upgrading a CouchDB installation. From the mailing list, some people suggested backing up the config and database files, uninstalling the old version, then installing the new version. But, really, what&#8217;s involved in uninstalling a CouchDB installation? manually deleting the files from the old installation? I had the same confusion when I tried to do the upgrade on OS X, once from a compile from source, and another from a CouchDBX installation.</p>
<p>So instead of &#8216;the best practice&#8217;, I&#8217;ll just share what worked for me. I simply installed the new version using the same way as when I installed the old version, i.e. compile from source, and the files from 1.0.1 installation overwrote the files from 0.11.0 . Here&#8217;s what I did:</p>
<ol>
<li>I searched for CouchDB config and database files, and found them in /usr/local/etc/couchdb/local.ini and /usr/local/var/lib/couchdb/mydatabase.couch . I then backed up those files.</li>
<li>The fact that I found those files under /usr/local indicated that I must&#8217;ve used &#8211;prefix=/usr/local when I installed 0.11.0 .</li>
<li>I downloaded the source code of CouchDB 1.0.1, then ran the usual:
<pre>./configure --prefix=/usr/local
make
sudo make install</pre>
</li>
<li>Voila, CouchDB 1.0.1 was installed, the config and database files were still intact, everything worked fine.</li>
</ol>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F09%2F10%2Fcouchdb-upgrade-from-0-11-0-to-1-0-1%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/09/10/couchdb-upgrade-from-0-11-0-to-1-0-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My GitHub Cheat Sheet</title>
		<link>http://blog.cliffano.com/2010/09/09/my-github-cheat-sheet/</link>
		<comments>http://blog.cliffano.com/2010/09/09/my-github-cheat-sheet/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 03:52:57 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1239</guid>
		<description><![CDATA[Some git commands that I&#8217;ve been using the most while working with projects on GitHub: Standard stuff: git add file.ext git status git commit -am "Message" git push origin master To create a patch: git clone git://github.com/user/project.git cd project git checkout -b fix_something (fix that something) git commit -a -m "Fix something" git log git [...]]]></description>
			<content:encoded><![CDATA[<p>Some git commands that I&#8217;ve been using the most while working with projects on GitHub:</p>
<p>Standard stuff:</p>
<pre>git add file.ext
git status
git commit -am "Message"
git push origin master</pre>
<p>To create a patch:</p>
<pre>git clone git://github.com/user/project.git
cd project
git checkout -b fix_something
(fix that something)
git commit -a -m "Fix something"
git log
git format-patch master --stdout &gt; fix_something.patch</pre>
<p>To tag:</p>
<pre>git tag -a v1.2.3 -m "Tag v1.2.3"
git push --tags git@github.com:user/project.git</pre>
<p>To merge from another branch:</p>
<pre>git remote add --track master project git://github.com/otheruser/otherproject.git
git remote
git fetch project
git merge project/master
(resolve any conflict)
git commit -a -m "Merge from otheruser/otherproject"
git push git@github.com:youruser/yourproject.git</pre>
<p>To bisect:</p>
<pre>git bisect start
git bisect good a1217cdc2e05dfd5672b
git bisect bad HEAD
git bisect run command.sh</pre>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F09%2F09%2Fmy-github-cheat-sheet%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/09/09/my-github-cheat-sheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx With Gzip On Ubuntu Jaunty</title>
		<link>http://blog.cliffano.com/2010/08/31/nginx-with-gzip-on-ubuntu-jaunty/</link>
		<comments>http://blog.cliffano.com/2010/08/31/nginx-with-gzip-on-ubuntu-jaunty/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 12:58:29 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1223</guid>
		<description><![CDATA[I just noticed that the latest version of Nginx available on Jaunty repositories was [1] the latest legacy version (0.6.x) instead of the latest stable version (0.7.x), and [2] not compiled with gzip compression enabled. To solve both problems, I had to compile Nginx from source with --with-http_gzip_static_module option. By default, Nginx would be installed [...]]]></description>
			<content:encoded><![CDATA[<p>I just noticed that the latest version of Nginx available on Jaunty repositories was [1] the latest legacy version (0.6.x) instead of the latest stable version (0.7.x), and [2] not compiled with gzip compression enabled.</p>
<p>To solve both problems, I had to compile Nginx from source with <code>--with-http_gzip_static_module</code> option. By default, Nginx would be installed at <code>/usr/local</code>. I would rather keep the locations consistent with those used in the precompiled packages from the repositories, so I ended up having to use the following configure options:</p>
<pre class="brush: plain; title: ; notranslate">
./configure \
--prefix=/usr \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--http-log-path=/var/log/nginx/access.log \
--with-http_dav_module \
--http-client-body-temp-path=/var/lib/nginx/body \
--with-http_ssl_module \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--with-http_stub_status_module \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--with-debug \
--with-http_flv_module \
--with-http_gzip_static_module
make
sudo make install
</pre>
<pre class="brush: plain; title: ; notranslate">
nginx path prefix: &quot;/usr&quot;
nginx binary file: &quot;/usr/sbin/nginx&quot;
nginx configuration prefix: &quot;/etc/nginx&quot;
nginx configuration file: &quot;/etc/nginx/nginx.conf&quot;
nginx pid file: &quot;/var/run/nginx.pid&quot;
nginx error log file: &quot;/var/log/nginx/error.log&quot;
nginx http access log file: &quot;/var/log/nginx/access.log&quot;
nginx http client request body temporary files: &quot;/var/lib/nginx/body&quot;
nginx http proxy temporary files: &quot;/var/lib/nginx/proxy&quot;
nginx http fastcgi temporary files: &quot;/var/lib/nginx/fastcgi&quot;
</pre>
<p>And voila.</p>
<pre class="brush: plain; title: ; notranslate">
foo&gt; nginx -v
nginx version: nginx/0.7.67
</pre>
<p>The gzip settings in my nginx.conf:</p>
<pre class="brush: plain; title: ; notranslate">
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_buffers 16 8k;
</pre>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F08%2F31%2Fnginx-with-gzip-on-ubuntu-jaunty%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/08/31/nginx-with-gzip-on-ubuntu-jaunty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Node.js And CouchDB Installation On Ubuntu</title>
		<link>http://blog.cliffano.com/2010/08/07/nodejs-and-couchdb-installation-on-ubuntu/</link>
		<comments>http://blog.cliffano.com/2010/08/07/nodejs-and-couchdb-installation-on-ubuntu/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 09:14:49 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1202</guid>
		<description><![CDATA[Just a quick gist of the script I&#8217;ve been using to install NodeJS and CouchDB on several Ubuntu boxes.]]></description>
			<content:encoded><![CDATA[<p>Just a quick gist of the script I&#8217;ve been using to install NodeJS and CouchDB on several Ubuntu boxes.</p>
<p><script src="http://gist.github.com/512608.js"> </script></p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F08%2F07%2Fnodejs-and-couchdb-installation-on-ubuntu%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/08/07/nodejs-and-couchdb-installation-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Badminton Academy Of Victoria Web Site Relaunch</title>
		<link>http://blog.cliffano.com/2010/07/16/badminton-academy-of-victoria-web-site-relaunch/</link>
		<comments>http://blog.cliffano.com/2010/07/16/badminton-academy-of-victoria-web-site-relaunch/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 14:57:06 +0000</pubDate>
		<dc:creator>Cliffano Subagio</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[bav]]></category>
		<category><![CDATA[posterous]]></category>

		<guid isPermaLink="false">http://blog.cliffano.com/?p=1144</guid>
		<description><![CDATA[Just moved, to the cloud. I&#8217;ve just relaunched Badminton Academy of Victoria web site. v2.0 sports a new look and floats on Posterous platform. The site previously used WordPress(.org) and was hosted at Go Daddy. I decided to migrate it to Posterous to allow the users to spend more time using the site, and less [...]]]></description>
			<content:encoded><![CDATA[<p>Just moved, to the cloud.</p>
<p>I&#8217;ve just relaunched <a href="http://badmintonacademyofvictoria.com.au">Badminton Academy of Victoria</a> web site. v2.0 sports a new look and floats on <a href="http://posterous.com">Posterous</a> platform.</p>
<p><img class="alignnone" src="http://lh3.ggpht.com/_fXOvW0MYmrY/TD2hnYyoHYI/AAAAAAAAFiM/nhAaVH4fwLo/Badminton%20Academy%20of%20Victoria.png" alt="" width="400" height="485" /></p>
<p>The site previously used <a href="http://wordpress.org">WordPress</a>(.org) and was hosted at <a href="http://godaddy.com">Go Daddy</a>. I decided to migrate it to Posterous to allow the users to spend more time using the site, and less time maintaining the site software and infrastructure.</p>
<p>Just like everyone else, I initially considered <a href="http://wordpress.com">WordPress.com</a>, but Posterous has most if not all of the features needed for $0, this includes custom domain name, custom theme, FeedBurner integration, Twitter and Facebook integration, easy Google Maps embedding, easy image gallery, short URL, and post by email. Posterous wins, hands down.</p>
<p>And a bit of a plug for BAV:</p>
<blockquote><p>Badminton Academy of Victoria is specialising in junior coaching. We have outstanding records in winning under 11, 13, 15, 17, and 19 junior tournaments in Victoria and Australia.</p></blockquote>
<p>One of their coaches, Lenny Permana, is an old friend of mine from back in the university days. She was a former world number 11 female badminton player, and (so far) the only friend with a Wikipedia entry. BAV itself has produced several Olympic and Commonwealth Games athletes.</p>
<p><strong>Trivia:</strong> Do you know that badminton is <a href="http://www.badders.com/news/item/700/badminton-fastest-racket-sport.html">the fastest racket sport</a>? The fastest smash was clocked at 332km/h. As a comparison, Andy Roddick&#8217;s world record serve was 249.4km/h.</p>

<p class="FacebookLikeButton"><fb:like href="http%3A%2F%2Fblog.cliffano.com%2F2010%2F07%2F16%2Fbadminton-academy-of-victoria-web-site-relaunch%2F" layout="standard" show_faces="false" width="450" action="like" colorscheme="light"></fb:like></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cliffano.com/2010/07/16/badminton-academy-of-victoria-web-site-relaunch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

