<?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>Rob Searles &#187; Opinion</title>
	<atom:link href="http://www.robsearles.com/category/opinion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.robsearles.com</link>
	<description>Musing on the business of and development for "The Web"</description>
	<lastBuildDate>Mon, 31 May 2010 15:44:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>First Steps with Node.js: exciting stuff</title>
		<link>http://www.robsearles.com/2009/11/29/first-steps-with-node-js-exciting-stuff/</link>
		<comments>http://www.robsearles.com/2009/11/29/first-steps-with-node-js-exciting-stuff/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 12:28:02 +0000</pubDate>
		<dc:creator>Rob Searles</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[nodejs]]></category>

		<guid isPermaLink="false">http://www.robsearles.com/?p=231</guid>
		<description><![CDATA[Ryan Dahl's Node.js is very exciting stuff, with lots of potential. Something to keep close track of. ]]></description>
			<content:encoded><![CDATA[<div style="background: #FFFEEB; margin: 10px 0 0 0; padding: 5px 10px; border: 1px solid #ccc;">
If you are looking for a <a href="http://www.robsearles.com/2010/05/28/nodejs-tutorial-with-couchdb-and-haml-erdnodeflips/">NodeJS tutorial</a>, visit this post: <a href="http://www.robsearles.com/2010/05/28/nodejs-tutorial-with-couchdb-and-haml-erdnodeflips/">NodeJS Tutorial with CouchDB and Haml</a>.</div>
<p>During my <a href="http://www.robsearles.com/2009/11/28/3-days-without-the-interwebs/">Saturday morning reading yesterday</a> I fell over something called <a href="http://nodejs.org/">Node.js</a>.  According to the website</p>
<blockquote><p>Node&#8217;s goal is to provide an easy way to build scalable network         programs.</p></blockquote>
<p>which is kind of exciting, but not mind blowing, however, Ryan Dahl&#8217;s <a href="http://github.com/ry/node">GitHub page</a> describes it as</p>
<blockquote><p><span id="repository_description">evented I/O for v8 javascript</span></p></blockquote>
<p><span>Which is slightly more exciting. However, it is when you start to play around with it that things begin to get very exciting indeed.</span></p>
<p><span><span id="more-231"></span></span></p>
<p><a href="http://simonwillison.net/2009/Nov/23/node/ ">Simon Willison&#8217;s latest blog post</a> was the first I&#8217;d heard of Node and he offers a very good introduction and tutorial, bringing in a Djanjo slant. Towards the end of the post he mentions database connectivity and when I think about the possibilities with <a href="http://couchdb.apache.org/">CouchDB</a> my mind explodes with possibilities!</p>
<p>Over at Naked Javascript, there is <a href="http://www.nakedjavascript.com/going-evented-with-nodejs">another great post</a>, offering a more detailed tutorial, including a client that gets a Twitter search. Again, this article is very enthused about Node and its future direction.</p>
<p>Ryan Dahl&#8217;s presentation on Node is hugely compelling, and provides excellent insights into the philosophy behind Node: <a href="http://s3.amazonaws.com/four.livejournal/20091117/jsconf.pdf">PDF download</a>.</p>
<p>With all this excitement in the air, I thought I better download me a copy and see what all the fuss is about.</p>
<p>Downloading and installing both <a href="http://code.google.com/apis/v8/.">Google&#8217;s V8 JavaScript Engine</a> (which Node is built upon) and Node was effortless. I won&#8217;t go into the details of installation here as it is covered in both the articles above and the Node homepage, needless to say that and I had them up and running on a clean Debian <a href="http://www.virtualbox.org/">VirtualBox</a> install in about 5 &#8211; 10 minutes.</p>
<p>I copied and pasted the &#8220;Hello World&#8221; example from Simon Willison&#8217;s article, ran it and I was away.</p>
<p>The code used is extremely simple, as you can see</p>

<div class="wp_syntax"><div class="code"><pre class="javascript javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> sys <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'sys'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>   http <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'http'</span><span style="color: #009900;">&#41;</span>;
&nbsp;
http.<span style="color: #660066;">createServer</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>req<span style="color: #339933;">,</span> res<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 res.<span style="color: #660066;">sendHeader</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">200</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span><span style="color: #3366CC;">'Content-Type'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'text/plain'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>;
 res.<span style="color: #660066;">sendBody</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Hello World'</span><span style="color: #009900;">&#41;</span>;
 res.<span style="color: #660066;">finish</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">listen</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">8000</span><span style="color: #009900;">&#41;</span>;
&nbsp;
sys.<span style="color: #660066;">puts</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Server running at http://127.0.0.1:8000/'</span><span style="color: #009900;">&#41;</span>;</pre></div></div>

<p>To run I simply ran</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ node hello.js
Server running at http:<span style="color: #000000; font-weight: bold;">//</span>127.0.0.1:<span style="color: #000000;">8000</span><span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>and then navigated to the page in my browser where I was greeted with a rather plain but not boring &#8220;Hello World&#8221;</p>
<p>The res.finish() call tells the client that the server has finished and it should consider the message complete.</p>
<p>This started me thinking, it would be possible to complete all the stuff that needs to be sent to the client, finish the conversation with the client, but then still carry on, without losing any efficiency. So I hacked apart the &#8220;hello world&#8221; app to see what happened if you did stuff after the send. The new code looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> sys <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'sys'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>   http <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'http'</span><span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> test_func <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 setTimeout<span style="color: #009900;">&#40;</span>
 <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 sys.<span style="color: #660066;">puts</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Called func'</span><span style="color: #009900;">&#41;</span>;
 <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5000</span><span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span>
&nbsp;
http.<span style="color: #660066;">createServer</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>req<span style="color: #339933;">,</span> res<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 res.<span style="color: #660066;">sendHeader</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">200</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span><span style="color: #3366CC;">'Content-Type'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'text/plain'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>;
 res.<span style="color: #660066;">sendBody</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Hello World'</span><span style="color: #009900;">&#41;</span>;
 res.<span style="color: #660066;">finish</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
 test_func<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">listen</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">8000</span><span style="color: #009900;">&#41;</span>;
&nbsp;
sys.<span style="color: #660066;">puts</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Server running at http://127.0.0.1:8000/'</span><span style="color: #009900;">&#41;</span>;</pre></div></div>

<p>I added the timeout to represent time needed to execute other processes, such as connecting to a  database etc. It is heavily exaggerated but it should give me an idea what&#8217;s going on. Running the program now starts off as before:</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">$ node hello.js
Server running at http:<span style="color: #000000; font-weight: bold;">//</span>127.0.0.1:<span style="color: #000000;">8000</span><span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>But then when navigating to the page, 5 seconds later the command line reported:</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">Called func</pre></div></div>

<p>So it is clearly completing the conversation with the client first, then executing the function.</p>
<p>I have played around with <a href="http://httpd.apache.org/docs/2.0/programs/ab.html">Apache Benchmarking</a> to see how this handles large requests, and it seems to hold up, but obviously more stringent tests are required before including this technology into a production environment.</p>
<p>However, this is still very exciting. It opens up the possibility of having an HTTP server that waits for requests, getting the key information and saying &#8220;bye&#8221; before processing the request. Something like a queue server, but very fast and very efficient. And when coupled with CouchDB or similar, well, things start to get very interesting.</p>
<p>So I am going to spend the rest of this weekend hacking around with Node, I want to know everything about it, and you should too.</p>
<p>Node is definitely something to keep an eye on.</p>
<p><strong>Update</strong>: Just found another <a href="http://britg.com/2009/07/01/server-side-javascript-continued-node-js-plus-example/">good blog post</a>, this time with an example for Long Polling.</p>
<p><strong>Update:</strong> If you are looking for a <a href="../2010/05/28/nodejs-tutorial-with-couchdb-and-haml-erdnodeflips/">NodeJS  tutorial</a>, visit this post: <a href="../2010/05/28/nodejs-tutorial-with-couchdb-and-haml-erdnodeflips/">NodeJS  Tutorial with CouchDB and Haml</a>.</p>
<img src="http://www.robsearles.com/?ak_action=api_record_view&id=231&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.robsearles.com/2009/11/29/first-steps-with-node-js-exciting-stuff/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sony PRS-300 Pocket eReader Review</title>
		<link>http://www.robsearles.com/2009/11/18/sony-prs-300-pocket-ereader-review/</link>
		<comments>http://www.robsearles.com/2009/11/18/sony-prs-300-pocket-ereader-review/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 15:13:22 +0000</pubDate>
		<dc:creator>Rob Searles</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://www.robsearles.com/?p=218</guid>
		<description><![CDATA[You may have noticed I haven&#8217;t posted in a while. One of the reasons is because I have been immersed in the world of digital books. In my previous post I mentioned that I purchased myself a new toy, namely the Sony PRS-300 Pocket eReader. Now I&#8217;ve had it almost 3 weeks so I feel [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-214" title="Sony Pocket Reader PRS-300" src="http://www.robsearles.com/wp-content/uploads/2009/10/729001.jpeg" alt="Sony Pocket Reader PRS-300" width="136" height="193" />You may have noticed I haven&#8217;t posted in a while. One of the reasons is because I have been immersed in the world of digital books. In my previous post I mentioned that I purchased myself a new toy, namely the <a href="http://www.sony.co.uk/product/rd-reader-ebook/prs-300" target="_blank">Sony PRS-300 Pocket eReader</a>. Now I&#8217;ve had it almost 3 weeks so I feel I&#8217;m in a position to write a fairly accurate review and not one based solely on first impressions.</p>
<p>I&#8217;ll start with all the fluff that don&#8217;t relate to actually reading a book, then I&#8217;ll move on to what it is actually like to read.</p>
<p>I bought my Pocket Reader <a href="http://www.whsmith.co.uk/CatalogAndSearch/ProductDetails-Sony+Pocket+Reader++Silver-34170731.html" target="_blank">online from WHSmiths</a> for a very reasonable £159. I had weighed up getting the more expensive PRS-600, but decided against it as I don&#8217;t need my book to play me music, and whilst it can hold 8000 books compared to &#8220;only&#8221; 350 of the PRS-300 I&#8217;ll be impressed if I read 350 books a year!</p>
<p><span id="more-218"></span></p>
<p>Without actually ever seeing or using the larger PRS-600 I can still say that I made the right choice. The size is ideal, weight is about as much as a DVD in it&#8217;s case and it is comfortable to touch. I doesn&#8217;t have a touch screen, but this is not needed as the navigation system is very simple.</p>
<p>One other thing, the Sony PRS-300 is a beautifully designed bit of kit. I find it a joy to read because it is quite stunning to look at. They have clearly put a lot of time and effort into making a solid, attractive product.</p>
<p>When it first arrived I had to plug it in and charge it up for at least 40 minutes. It doesn&#8217;t come with a power cable (which is optional) but it uses the small USB socket similar to the HTC and Motorola mobile phones, so I simply used that charger. Once charged I connected it to my laptop running Vista (boo hiss) as it is not compatible with Linux. It didn&#8217;t come with any CDs, instead the software is on the Reader itself. Once I connected it asked me if I wanted to install it, which naturally I did, and it proceeded to download the installation files to my computer. This took a surprisingly long amount of time, probably 15-20 minutes.</p>
<p>First fail, the installation process crashed in Vista. After much searching around on the internet using the error code I managed to sort it out, but I had to re-download the installation files two or three times more. Overall it took me about an hour to get Sony&#8217;s software on to Vista.</p>
<p>At this point I was starting to think &#8220;Oh dear&#8221;!</p>
<p>It turns out that this software is actually only needed to really connect to Sony&#8217;s store. When I connected the eReader to my Ubuntu laptop it came up as an external hard drive (two external hard drives actually: Launcher and Reader). After some digging around I located where it stores it books and could copy them over no problem at all.</p>
<p>So as far as Linux users go, all is not lost!</p>
<p>Battery life appears good. The Reader is almost 3 weeks old, but it is still on 3 out of 4 bars since my first full charge the night it arrived. I have obviously had it connected to my laptop a few times to transfer books, but I am impressed with it&#8217;s endurance.</p>
<p>The navigation around your books is simple, and it has a couple of neat tricks. Firstly it remembers where you were up to for every book you are currently reading, so you can jump straight to it. Secondly you can &#8220;bookmark&#8221; pages &#8211; it quite literally &#8220;folds&#8221; the corner of the page over so you know you&#8217;ve book marked it.</p>
<p>Now, onto the meat &#8211; reading.</p>
<p>The size of the screen is good &#8211; not huge, but it is a good compromise between size of screen and size of the actual unit. The screen itself is crystal clear. There is a tiny issue that text on the far right hand side fads out slightly, but I don&#8217;t know if this is for all Sony Pocket eReaders or if it is just this one. However, it isn&#8217;t an issue I just thought I&#8217;d mention it in case anyone else has experienced this.</p>
<p>A lot of people have mentioned about the speed of changing the page. On most pages, especially plain text and ePub files, this is not normally a problem. You have to press the &#8220;turn page&#8221; button when you are on the penultimate line of the screen, but this is much the same as getting read to turn the page with a normal book.</p>
<p>However, some pages take ages to turn. I don&#8217;t know why this is. It mostly happens with PDFs, and it doesn&#8217;t seem to have anything to do with the amount of text or images on the page. I think it is something to do with the layout, being restructured. One of the worst examples I&#8217;ve seen is in the <a href="http://catb.org/esr/writings/taoup/html/graphics/taoup.pdf" target="_blank">PDF</a> of  <a href="http://catb.org/esr/writings/taoup/" target="_blank">The Art of Unix Programming.</a> The normal content pages are fine, it is the content pages that take ages, sometimes up to about 30 seconds to &#8220;turn&#8221;. There is a good trick I found out about after I managed to plough my way through every contents page of the book, and that is if you press the numbers down the right hand side, you can enter a page number to jump to.</p>
<p>That is handy!</p>
<p>Another slight irritation is that it doesn&#8217;t handle PDFs too well. I can understand why it does this, but more often than not it doesn&#8217;t format the carriage returns well enough so you could be halfway though a line and then it jumps to the next one. Also, there are quite a few times it has only one or two lines on a page.</p>
<p>Apart from the minor irritants the reading itself is fabulous! I love it. It is clear, crisp, and easy to read. The lighter your environment, the easier it is to read. It is just like a book. And the best thing of all is that it doesn&#8217;t hurt your eyes.</p>
<p>There are 3 levels of zoom, and so far I have never not been able to read anything as long as I have selected the correct zoom level for the size of the text.</p>
<p>I am so pleased I purchased the Sony PRS-300 Pocket eReader, it has revolutionised the way I am reading. It has saved my eyes from squinting at PDF on my laptop. It is very attractive, a good size and has it&#8217;s now little protective case. And possibly the single best thing with the Sony is that I finally feel that I am in the 21st Century, (and apparently I am being very smug about it!)</p>
<p>If you like reading, get this eReader.</p>
<p>Here are some other reviews:</p>
<ul>
<li><a href="http://www.the-ebook-reader.com/sony-prs-300.html" target="_blank">The-eBook-Reader.com</a></li>
<li><a href="http://kamigoroshi.net/commentary/sony-prs-300-ebook-reader-review" target="_blank">Footsteps in the Mirror</a></li>
<li><a href="http://www.teleread.org/2009/09/19/a-readers-review-of-the-sony-prs-300/" target="_blank">TeleRead: Bringing eBooks Home</a></li>
<li><a href="http://www.mobileread.com/forums/showthread.php?t=54727" target="_blank">Mobile Read: Forum</a></li>
</ul>
<img src="http://www.robsearles.com/?ak_action=api_record_view&id=218&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.robsearles.com/2009/11/18/sony-prs-300-pocket-ereader-review/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Getting a Windows Refund</title>
		<link>http://www.robsearles.com/2009/10/18/getting-a-windows-refund/</link>
		<comments>http://www.robsearles.com/2009/10/18/getting-a-windows-refund/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 10:29:30 +0000</pubDate>
		<dc:creator>Rob Searles</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://www.robsearles.com/?p=184</guid>
		<description><![CDATA[If you don't want Windows, but can't buy a laptop without it pre-installed then claim a refund.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just read quite an interesting article on the <a href="http://www.linuxmint.com/blog/?p=1073" target="_blank">Linux Mint blog</a> courtesy of <a href="http://www.linuxtoday.com/infrastructure/2009101700335OSMSLL" target="_blank">Linux Today</a>. It describes how Clem, a Linux Mint user, managed to get a refund on Windows that was pre-installed on a Dell laptop they purchased, and then donated the money to Linux Mint!</p>
<p>One of the comments tries to argue that Clem shouldn&#8217;t have been entitled to a refund as they knew what they were buying. I don&#8217;t hold with this argument as last time I tried to purchase any laptop that wasn&#8217;t a netbook I found it <strong>impossible</strong> to buy one without Windows pre-installed &#8211; and to make it worse they were pretty much all <a href="http://digital-lifestyles.info/2007/11/22/vista-is-rubbish-comic-video/" target="_blank">Vista</a>!</p>
<p>With people like Clem engaging in this kind of action, and with Ubuntu trying to make <a href="http://www.nytimes.com/2009/01/11/technology/11iht-ubuntu.1.19248024.html" target="_blank">Linux more accessible</a> to the average user, hopefully one day I&#8217;ll be able to purchase a laptop and have a choice of what I put on it.</p>
<img src="http://www.robsearles.com/?ak_action=api_record_view&id=184&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.robsearles.com/2009/10/18/getting-a-windows-refund/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thinking About Database Revision Control</title>
		<link>http://www.robsearles.com/2009/10/11/thinking-about-database-revision-control/</link>
		<comments>http://www.robsearles.com/2009/10/11/thinking-about-database-revision-control/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 17:24:19 +0000</pubDate>
		<dc:creator>Rob Searles</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://www.robsearles.com/?p=180</guid>
		<description><![CDATA[In a current database driven project that has multiple developers the single biggest issue we have is version control for the database.
For us at ibrow, the number one practise that we engage in is Version Control/Revision Control. I personally use version control for almost everything and not using it when having multiple developers working on [...]]]></description>
			<content:encoded><![CDATA[<p>In a current database driven project that has multiple developers the single biggest issue we have is version control for the database.</p>
<p>For us at <a href="http://www.ibrow.com">ibrow</a>, the number one practise that we engage in is <a href="http://en.wikipedia.org/wiki/Revision_control" target="_blank">Version Control/Revision Control</a>. I personally use version control for almost everything and not using it when having multiple developers working on a project sends shivers down my spine.We currently use <a href="http://subversion.tigris.org/" target="_blank">Subversion</a>, however I&#8217;m thinking of moving over to <a href="http://git-scm.com/" target="_blank">Git</a>, but there is also <a href="http://bazaar-vcs.org/en/" target="_blank">Bazaar</a> and <a href="http://mercurial.selenic.com/wiki/" target="_blank">Mercurial</a> plus <a href="http://en.wikipedia.org/wiki/List_of_revision_control_software" target="_blank">many, many others</a>.</p>
<p>Whilst there is this vast array of version control system for code, there doesn&#8217;t seem to be the focus on version control for database schemes. Jeff Atwood has a <a href="http://www.codinghorror.com/blog/archives/001050.html" target="_blank">couple</a> of <a href="http://www.codinghorror.com/blog/archives/000743.html" target="_blank">posts</a> espousing the virtues of version control for databases. There is <a href="http://guides.rubyonrails.org/migrations.html" target="_blank">Rail&#8217;s Migrations</a> which seems to be the most advanced version control for databases to date and there is a project to make a <a href="http://code.google.com/p/mysql-php-migrations/" target="_blank">PHP version of Migrations</a>. However, Migrations still has it&#8217;s flaws, which are discussed in <a href="http://adamblog.heroku.com/past/2009/3/2/database_versioning/" target="_blank">Adam Wiggins&#8217;s blog post about this very subject</a>. Adam offers some good insights into the problem and has a brain storm about possible solutions. But I think I&#8217;m coming to the problem from a slightly different angle to him.</p>
<p>As most of our projects are in constant development we do not, as such, have versions, but instead <strong>revisions</strong>. This is a key difference here. If we check in a database change to the version control, we don&#8217;t yet know it&#8217;s revision, especially if we have multiple developers working on the same project and possibly changing the scheme of the database at the same time.</p>
<p>The ideal solution would use the following steps:</p>
<ol>
<li>Developer finishes their chunk of code with any database changes, and are ready to commit. The database changes include UP and DOWN changes.</li>
<li>Developer commits their code changes, a revision number is assigned</li>
<li>Based on this revision number, the database changes are committed.</li>
</ol>
<p>Obviously the developer should update their working copy before committing, just to see if there are any conflicts and to make sure they have the latest copy of the code.</p>
<p>On the updating side, the following steps should occur when the developer updates their  code:</p>
<ol>
<li>The update process makes a note of their current revision number</li>
<li>Downloads all code changes via the SVN update command</li>
<li>Downloads all the database changes since their last revision</li>
<li>Update process applies all database changes to developer&#8217;s local database</li>
</ol>
<p>This process can be reversed for reverting or merging backwards.</p>
<p>Currently I can&#8217;t find anything out there that does this &#8211; which probably means one of 2 things:</p>
<ol>
<li>My Google-fu isn&#8217;t up to scratch</li>
<li>It is actually a lot harder than I think!</li>
</ol>
<p>I really need to get this right, as this is possibly the most important thing to get right for us at the moment. It would be great to hear any possible solutions or existing implementations out there.</p>
<p>Maybe this will be an interesting sub project for me over the next few weeks?</p>
<p><em>(And obviously I haven&#8217;t even considered trying to keep the data up to date &#8211; but I guess that will be for another day.)</em></p>
<img src="http://www.robsearles.com/?ak_action=api_record_view&id=180&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.robsearles.com/2009/10/11/thinking-about-database-revision-control/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>It&#8217;s been 40 years: why can&#8217;t I visit the moon?</title>
		<link>http://www.robsearles.com/2009/07/20/its-been-40-years-why-cant-i-visit-the-moon/</link>
		<comments>http://www.robsearles.com/2009/07/20/its-been-40-years-why-cant-i-visit-the-moon/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 10:23:14 +0000</pubDate>
		<dc:creator>Rob Searles</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://www.robsearles.com/?p=152</guid>
		<description><![CDATA[One small step for man, one giant wait for mankind. Well, it was something like that. Today marks the 40th anniversary since man first landed on the moon, and I have one question: why can't I visit the moon?]]></description>
			<content:encoded><![CDATA[<p>One small step for man, one giant wait for mankind.</p>
<p>Well, it was something like that. Today marks the 40th anniversary since man first landed on the moon. 40 years. Forty years. Four decades. Fourteen thousand, six hundred and ten days. And I have one question:</p>
<p><strong>Why can&#8217;t I visit the moon?<br />
</strong><br />
On September 12, 1962 President <a href="http://www.nscblog.com/?p=419" target="_blank">Kennedy proclaimed</a> that man will go to the moon, as a challenge, a challenge that &#8220;is one that we are willing to accept, one we are unwilling to postpone, and one which we intend to win&#8221;. And they did. America went to the moon. America travelled 238,857 miles and into the future. And we are now further away from the future then ever.</p>
<p>In the past forty (40!) years mankind has acheived the most amazing things. We have <a href="http://en.wikipedia.org/wiki/Human_Genome_Project" target="_blank">mapped the human genome</a>, we have developed an <a href="http://en.wikipedia.org/wiki/World_Wide_Web" target="_blank">entirely new method of instant, collaborative communication</a>, we have <a href="http://en.wikipedia.org/wiki/Dolly_(sheep)" target="_blank">cloned a life</a>, we have <a href="http://en.wikipedia.org/wiki/Artificial_heart" target="_blank"></a><a href="http://en.wikipedia.org/wiki/CAT_scan" target="_blank">accomplished </a>medical <a href="http://en.wikipedia.org/wiki/Ultrasound_scan" target="_blank">advances </a>that would astound people from 40 years ago, we have invented <a href="http://en.wikipedia.org/wiki/Concord" target="_blank">travel at twice the speed of sound </a>(and then decommissioned it), for the love of god, we have invented the <a href="http://en.wikipedia.org/wiki/Nike_timeline" target="_blank">waffle-sole running shoe</a>!!</p>
<p>So, why can&#8217;t I fly to the moon?</p>
<p>Because we have lost the will. We have lost the will because we are focusing on the now. We are fighting amongst ourselves instead of realising we are more alike than we want to admit. We are squabbling over who has the most vengeful invisible friend whilst ignoring the glorious beauty of the universe we live in. We are blaming each other for making the planet slightly warmer instead of doing something about it. We have been sucked into worldly problems of survival instead of lifting our heads above the grass to look at the amazing view. We are waiting to see what happens. We are looking to the past, we are looking behind us to admire what we&#8217;ve done.</p>
<p>The human race is living out of it&#8217;s inbox and we are all missing the bigger picture.</p>
<p>I think the words of Kennedy summed it up best: &#8220;the United States was not built by those who waited and rested and wished to look behind them. This country was conquered by those who moved forward–and so will space.&#8221;</p>
<p>So this is a plea from a citizen of a fallen empire: Come on America. Stop waiting. Stop looking to the past. Stop reminiscing about previous greatness. You are the only country that can possibly accomplish the unaccomplishable You are the only country that has the will, the drive, the energy to do this.</p>
<p>America, <strong>fly me to the moon.</strong></p>
<img src="http://www.robsearles.com/?ak_action=api_record_view&id=152&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.robsearles.com/2009/07/20/its-been-40-years-why-cant-i-visit-the-moon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The impending death of IE6. Or is it?</title>
		<link>http://www.robsearles.com/2009/07/16/the-impending-death-of-ie6-or-is-it/</link>
		<comments>http://www.robsearles.com/2009/07/16/the-impending-death-of-ie6-or-is-it/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 14:15:59 +0000</pubDate>
		<dc:creator>Rob Searles</dc:creator>
				<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://www.robsearles.com/?p=156</guid>
		<description><![CDATA[The revolution has begun! Major sites are starting to reject IE6. Yet I can't believe we will see that back of that hellish peice of software any time soon.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.robsearles.com/wp-content/uploads/2009/07/ie_6.gif"><img class="alignright size-medium wp-image-160" title="IE 6" src="http://www.robsearles.com/wp-content/uploads/2009/07/ie_6-300x262.gif" alt="" width="300" height="262" /></a>At last, at long, <strong>long</strong> last, there appears to be a groundswell of opposition to supporting IE6. The revolution has begun! First Twitter began hinting to its users to <a href="http://www.techcrunch.com/2009/07/08/twitter-gets-in-your-face-about-upgrading-to-firefox/" target="_blank">upgrade to Firefox 3.5</a> (oddly, even if you were using Firefox 3.5 apparently). Next Digg announced that they might be &#8220;<a href="http://www.techcrunch.com/2009/07/10/can-you-digg-it-maybe-not-if-youre-stuck-on-ie6/" target="_blank">cutting back on development time</a>&#8221; for IE6. And now it appears that YouTube will be <a href="http://www.techcrunch.com/2009/07/14/youtube-will-be-next-to-kiss-ie6-support-goodbye/" target="_blank">phasing out support for IE6</a>.</p>
<p>IE6 is the bane of most developers&#8217; lives (including yours truly). A lot of people are getting very excited about the prospect of <a href="http://alexshapovalov.com/2009/07/judgement-day-for-ie6-is-near/" target="_blank">no</a> <a href="http://shortformblog.com/tech/major-web-sites-like-youtube-and-digg-are-dropping-ie6-support" target="_blank">more</a> <a href="http://2wtx.com/itsbroken/archives/21-If-you-are-still-using-IE6,-why.html" target="_blank">IE6</a>. I would be one of the first to crack open a bottle of bubbly when the final installation if IE6 was wiped from this world. But is this tactic of &#8220;phasing out&#8221; going to work?<span id="more-156"></span></p>
<p>Granted, Twitter, Digg and YouTube are not insignificant sites, but are their &#8220;gentle persuasions&#8221; going to be effective? According to a <a href="http://mashable.com/2009/05/13/rip-internet-explorer/" target="_blank">recent article on Mashable</a> Internet Explorer is losing ground to Firefox, Chrome, Safari etc in a surprisingly linear fashion. However, this is taking into account IE as a whole. If you look at <a href="http://farm4.static.flickr.com/3603/3526193381_de726ac2b6_o.png" target="_blank">the graph</a> (originally posted on <a href="http://weblogs.mozillazine.org/asa/archives/2009/05/longterm_browse.html" target="_blank">Mozillazine.org</a>) more carefully, you&#8217;ll see that IE6 has lost a significant share. Yet this loss, after the initial drop post IE7, has shallowed out. In other words, the market share IE6 is losing is now only in a slow decline Indeed, IE6 and Firefox have roughly the same amount of market share.</p>
<p>The simple reason for this slow decline is, in my opinion, the failure of Microsoft to encourage users to upgrade. If you look at Digg&#8217;s <a href="http://blog.digg.com/?p=878" target="_blank">original blog post</a>, you will see that most people who are using IE6 don&#8217;t have any other choice. This is either because the cost of upgrading to IE7 or IE8 is too expensive for companies to do, in time, compatibility etc. <a href="http://www.theinquirer.net/inquirer/news/1007806/microsoft-admits-vista-failure" target="_blank">Vista&#8217;s failure</a> also exacerbated the problem. Replacing Windows XP with Vista was supposed to replace IE6, but it didn&#8217;t happen.</p>
<p>So what is the outcome? Whilst it is good news that there now seems to be a consensus to rid the internet of IE6, I simply cannot believe that we will see the last of the hellish browser any time soon. People can&#8217;t or won&#8217;t replace their browser. A load of people don&#8217;t even know <a href="http://www.robsearles.com/2009/06/17/do-you-know-what-a-browser-is/" target="_blank">what a browser is</a>, let alone what version they are running. As developers we have to build sites for our users. If only 1% of Digg users are using IE6 then it makes economical sense for they to phase it out. However, internet wide, IE6 still has roughly 20% of the market. Would you like to alienate 20% of your market, just because you don&#8217;t like what browser they are using? It would be like a restaurant refusing entry to every 5th person, and in these credit crunched times, it simply doesn&#8217;t make economic sense.</p>
<p>Too bad, I <strong>hate</strong> IE!</p>
<img src="http://www.robsearles.com/?ak_action=api_record_view&id=156&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.robsearles.com/2009/07/16/the-impending-death-of-ie6-or-is-it/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Twitter is bollocks</title>
		<link>http://www.robsearles.com/2009/07/15/twitter-is-bollocks/</link>
		<comments>http://www.robsearles.com/2009/07/15/twitter-is-bollocks/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 08:28:55 +0000</pubDate>
		<dc:creator>Rob Searles</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.robsearles.com/?p=150</guid>
		<description><![CDATA[I've been using Twitter for over two years now and I find it is a valuable source of news, opinion and comment. However, the more I think about it, I can't help but conclude that Twitter is bollocks.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.robsearles.com/wp-content/uploads/2009/07/twitter_fail_whalejpg.png"><img class="alignright size-medium wp-image-154" title="Fail Whale" src="http://www.robsearles.com/wp-content/uploads/2009/07/twitter_fail_whalejpg-300x225.png" alt="" width="300" height="225" /></a>I&#8217;ll let you into a little secret: I&#8217;m a huge <a href="http://www.twitter.com" target="_blank">Twitter</a> fan. <a href="http://www.twitter.com/ibrow" target="_blank">I&#8217;ve</a> been using Twitter for over two years now (excluding a month&#8217;s break to get some actual work done) and I find it is a valuable source of news, opinion and comment. However, the more I think about it, I can&#8217;t help but conclude that <strong>Twitter is bollocks.</strong></p>
<p>&#8220;But how can that be?!&#8221; I hear you cry, &#8220;surely Twitter is a the archetypal example of a Kuhnian paradigm shift: exponentially changing the way humans communicate with each other forever more. Gad zooks! just look at how it is redefining collective interaction, stripping out the once hierarchical monoliths of a bygone age, and helping to rebuild in their wake the conversations of meritocratic individualism, whilst simultaneously aiding us in our quest to navigate the choppy waters of &#8220;<a href="http://en.wikipedia.org/wiki/The_Long_Tail" target="_blank">the long-tail</a>&#8220;. For Christsakes man! what about the democratic ideal it is helping to instigate &#8211; just look at Iran!&#8221;</p>
<p>Well, yes, that is all true. But Twitter is still bollocks.</p>
<p>And it is bollocks for 3 reasons:<br />
<span id="more-150"></span><strong></strong></p>
<p><strong>1. &#8220;The Others&#8221;</strong></p>
<p>In the heady day of Twitter BSF (Before <a href="http://twitter.com/stephenfry" target="_blank">Stephen Fry</a>), it was a little known place. A place where you could forge meaningful relationships with people you didn&#8217;t know nor would ever meet. There were only a few of us in this citadel of the tweet, and we all shared something in common: we all knew about Twitter and other people didn&#8217;t. This was a place where most of the people that populated this utopian rose-tinted dream were more or less into what I was into &#8211; the internet, programming and exciting developments happening on the web. It was a great place to discover new things, read thought provoking links and smugly share the secret of &#8220;all your base are belong to us&#8221;.</p>
<p>But then tragedy struck.</p>
<p>In <a href="http://www.gladwell.com/tippingpoint/" target="_blank">Gladwellian</a> (un)certainty, the tipping point came, and &#8220;The Others&#8221; found out!</p>
<p>Now Twitter is awash with things I&#8217;m not very interested in. Personal life stories of people I don&#8217;t know, living in cities I&#8217;ve never heard of, discussing things I don&#8217;t care about.</p>
<p>These &#8220;Others&#8221; discovered that some others of them had been on the front cover of <a href="http://www.heatworld.com/" target="_blank">Heat magazine</a>, so they wanted to be their friend. Now these others not only discuss these things I don&#8217;t care about, but somehow assume authority because thousands more of them think that by being their friend, some of their alleged celebrity will rub-off on them too, resulting in some kind of horrible quasi-celeb tryst that can only bring misery and suffering to those that don&#8217;t really care about such things.</p>
<p>Where o where are the decent tweets? Where have the interesting posts about the latest obscure javascript references gone? Alas, they are now replaced by <a href="http://twitter.com/xxandip/status/2619255562" target="_blank">pointlessly uninteresting debate by people that used to be on the Telly</a>.</p>
<p><strong>2. &#8220;The Experts&#8221;<br />
</strong><br />
Along with the influx of &#8220;The Others&#8221; came an even more horrifying phenomenon. That of the &#8220;Twitter Expert&#8221;. Now, claiming to be a &#8220;Twitter Expert&#8221; is roughly the same as claiming that you&#8217;re an expert at saying &#8220;hello&#8221;. Well done you. I wouldn&#8217;t mind them so much, except these experts don&#8217;t do anything except use Twitter to talk about Twitter. It is a sort of hideous nightmare micro-realisation of <a href="http://www.codinghorror.com/blog/archives/001282.html" target="_blank">Jeff Atwood&#8217;s Meta-blogging</a>.</p>
<p><em>And yes, I do spot the irony that I have posted on Twitter a link to a blog post that is talking about Twitter, in which I poke fun at those that post things on Twitter that talk about Twitter.<br />
</em> <strong><br />
3. &#8220;The Bots&#8221;</strong></p>
<p>Last, but not least are the bots! These are heavily related to &#8220;The Others&#8221; and &#8220;The Experts&#8221; in that they didn&#8217;t appear in &#8220;Twitter BSF&#8221;. The bots are a heinous invention that scrape the blackboard of Twitter with the nails of annoyance, searching for anyone that mentions anything  with one of their &#8220;catch words&#8221;. Why, only today I was talking about mobile phones, when lo and behold some <a href="http://www.twitter.com/windowsphonemix" target="_blank">bot </a> followed me because I had mentioned &#8220;phones&#8221;. Why on earth would I want to follow them back? I do not require mobile phone news daily and neither do I want to engage in conversation with them.</p>
<p>Please piss off you grubby little shister.</p>
<p>Even more absurd is when <a href="http://twitter.com/countersquare/status/2566848773" target="_blank">bots get confused with spelling</a>.<br />
So, these three things, in my opinion, go towards helping make Twitter bollocks.</p>
<p>However, I don&#8217;t mind so much.</p>
<p>I use Twitter for a <a href="http://www.robsearles.com/2009/01/08/400-tweets-later-what-have-i-learned/">very specific purpose</a>. I use it to follow thought-provoking people that are writing about subjects I find interesting and don&#8217;t continually flood my feed with crap. Which means there is one final thing to consider:</p>
<p><strong>4. Bonus rant<br />
</strong><br />
If you are following 1,987 people, have 3 people following you and have provided only 1 update, please don&#8217;t bother following me as I won&#8217;t follow you, you are spam &#8211; even if you are a real person, you are spam.</p>
<img src="http://www.robsearles.com/?ak_action=api_record_view&id=150&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.robsearles.com/2009/07/15/twitter-is-bollocks/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
