<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
 
 <title>Luke Redpath</title>
 
 <link href="http://lukeredpath.co.uk/" />
 <updated>2009-11-05T13:02:20+00:00</updated>
 <id>http://lukeredpath.co.uk/</id>
 <author>
   <name>Luke Redpath</name>
   <email>luke@lukeredpath.co.uk</email>
 </author>

 
 <link rel="self" href="http://feeds.feedburner.com/LukeRedpath" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
   <title>Is your MP on Twitter?</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/9S_CCqxM_ko/is-your-mp-on-twitter.html" />
   <updated>2009-11-05T00:00:00+00:00</updated>
   <id>http://lukeredpath.co.uk/blog/is-your-mp-on-twitter</id>
   <content type="html">&lt;p&gt;One of my former &lt;a href="http://reevoo.com"&gt;Reevoo&lt;/a&gt; colleagues, Ben Griffiths, posted &lt;a href="http://www.techbelly.com/2009/11/04/list-of-uk-mps-on-twitter/"&gt;an article on his blog&lt;/a&gt; the other day announcing that he had compiled a list of UK MPs and their Twitter usernames (if available). Whilst websites like &lt;a href="http://tweetminster.co.uk/"&gt;tweetminster&lt;/a&gt; publish this information, Ben&amp;#8217;s list is open and &lt;a href="http://spreadsheets.google.com/ccc?key=0AjWA_TWMI4t_dFI5MWRWZkRWbFJ6MVhHQzVmVndrZnc&amp;amp;hl=en_GB"&gt;available to all on Google Docs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I thought it would be fun to hack together a little application that makes use of this data, something quick and simple. The result is &lt;a href="http://mpsontwitter.co.uk/"&gt;mpsontwitter&lt;/a&gt; which simply requests your postcode and finds the name of your MP (using the &lt;span class="caps"&gt;API&lt;/span&gt; for &lt;a href="http://www.theyworkforyou.com/"&gt;TheyWorkForYou.com&lt;/a&gt;) and compares them against the list.&lt;/p&gt;
&lt;p&gt;Before I had finished hacking it together, I realised that tweetminster already does something similar but as I had already purchased the domain and was keen to kick the tyres of &lt;a href="http://heroku.com/"&gt;Heroku&lt;/a&gt;, I deployed it anyway. I do think there is some value in having a small focussed app like this running on a fairly catch domain. Either way, it only took a couple of hours.&lt;/p&gt;
&lt;p&gt;Incidentally, my Heroku experience was pretty seamless and I&amp;#8217;ll be sure to use it for small little apps like this in the future.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve also configured Heroku to run a cron job each night that pulls the latest data from Google docs so if Ben is able to keep the list maintained, the service should remain relatively up-to-date.&lt;/p&gt;
&lt;p&gt;There isn&amp;#8217;t much to the code &amp;#8211; it&amp;#8217;s a basic Sinatra app with a thin (and untested) wrapper around the &lt;span class="caps"&gt;API&lt;/span&gt; &amp;#8211; it&amp;#8217;s far from elegant but it does the job. The code is &lt;a href="http://github.com/lukeredpath/mpsontwitter.co.uk"&gt;available on Github&lt;/a&gt; if anybody is interested.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=9S_CCqxM_ko:78P509b-pcY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=9S_CCqxM_ko:78P509b-pcY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=9S_CCqxM_ko:78P509b-pcY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=9S_CCqxM_ko:78P509b-pcY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=9S_CCqxM_ko:78P509b-pcY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/9S_CCqxM_ko" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/is-your-mp-on-twitter.html</feedburner:origLink></entry>
 
 <entry>
   <title>Orange takes the shine off the iPhone</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/xjL8QibP7Ig/orange-takes-the-shine-off-the-iphone.html" />
   <updated>2009-11-02T00:00:00+00:00</updated>
   <id>http://lukeredpath.co.uk/blog/orange-takes-the-shine-off-the-iphone</id>
   <content type="html">&lt;p&gt;Orange lifted the lid on &lt;a href="http://www.orange.co.uk/iphone"&gt;their iPhone tariffs&lt;/a&gt; earlier today and anybody hoping for an injection of competition into the iPhone market is no doubt going to be disappointed with what they have to offer.&lt;/p&gt;
&lt;p&gt;The plans are nearly identical to O2&amp;#8217;s with only minor differences. More significantly, the so-called &amp;#8220;unlimited&amp;#8221; data access package bundled with all tariffs has a frankly ridiculous 750MB fair usage cap.&lt;/p&gt;
&lt;h3&gt;When unlimited isn&amp;#8217;t limited&lt;/h3&gt;
&lt;p&gt;When the iPhone was originally announced, O2&amp;#8217;s plans also carried a cap (an even more pathetic 200MB). Fortunately O2 saw sense and &lt;a href="http://www.tuaw.com/2007/11/04/o2-removes-200mb-fair-use-policy-for-uk-iphone/"&gt;the cap was lifted&lt;/a&gt; before it even went on sale so I&amp;#8217;m surprised Orange trying to pull the same stunt.&lt;/p&gt;
&lt;p&gt;You may question whether you would even come close to going over that limit on your iPhone but with apps like &lt;a href="http://www.spotify.com/en/mobile/overview/"&gt;Spotify&lt;/a&gt; and other streaming radio apps becoming popular it may not be long before you are infringing on the &lt;span class="caps"&gt;FUP&lt;/span&gt; (or will it? see below).&lt;/p&gt;
&lt;p&gt;The practice of having limited &amp;#8220;unlimited&amp;#8221; plans has been going on for a while now with the &lt;span class="caps"&gt;ISP&lt;/span&gt; market and it&amp;#8217;s about time networks stopped trying to pull this crap. Either make your plan truly unlimited or just be up-front and honest about the limits of your plan. Fortunately, not all ISPs are like this (my own &lt;span class="caps"&gt;ISP&lt;/span&gt;, &lt;a href="http://bethere.co.uk"&gt;Be&lt;/a&gt;, for example, offers a truly unlimited service).&lt;/p&gt;
&lt;h3&gt;This isn&amp;#8217;t the &amp;#8220;mobile&amp;#8221; internet, it&amp;#8217;s the &amp;#8220;Orange&amp;#8221; internet&lt;/h3&gt;
&lt;p&gt;All this talk of uncompetitive pricing and limited data plans might not be of surprise to some people but even more amusing is the following gem, found in &lt;a href="http://shop.orange.co.uk/shop/terms"&gt;Orange&amp;#8217;s terms and conditions for their iPhone tariffs&lt;/a&gt;. Apple like to promote the iPhone as a device that gives you full, no-compromise access to the internet and the ever-growing app store plays a big part in that. But it seems that Orange isn&amp;#8217;t that interested in no-compromise access:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[Mobile internet browsing] may not to be used for other activities (e.g. using your handset as a modem, non-Orange internet based streaming services, voice or video over the internet, instant messaging, peer to peer file sharing, non-Orange internet based video).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Restrictions on using the phone as a modem are to be expected; there will no doubt be a pricey bundle for that. But &amp;#8220;non-Orange internet based streaming services&amp;#8221;? Say good by to Spotify, Last.fm or internet radio. &amp;#8220;Voice or video&amp;#8221;? Don&amp;#8217;t bother with Skype. Even instant messaging (of which there are many clients on the app store) is out of question. And don&amp;#8217;t forget &amp;#8220;non-Orange internet based video&amp;#8221;. Better have a Wi-Fi connection handy when you want to check out that &lt;a href="http://www.youtube.com/watch?v=Yu_moia-oVI"&gt;hillarious video&lt;/a&gt; on YouTube using the built-in YouTube app.&lt;/p&gt;
&lt;p&gt;Of course, Orange may say that these terms are there to prevent abuse but since when did using a device in the way in which it was intended constitute abuse? I can only assume Orange are worried about an influx of iPhone users overloading their network. Given much of the above, I&amp;#8217;d be surprised if there is such an influx.&lt;/p&gt;
&lt;h3&gt;Over to you Vodafone&lt;/h3&gt;
&lt;p&gt;With Orange utterly failing to take advantage of their position as the first network besides O2 to offer the iPhone and offer some truly competitive deals to lure away existing O2 customers, this leaves Vodafone in an interesting position.&lt;/p&gt;
&lt;p&gt;Will they capitalise on this and announce some great deals? We won&amp;#8217;t know until January, but with my O2 contract coming up for renewal around that time, I shall still be interested to see what they have to offer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (5 Nov 2009)&lt;/strong&gt;: &lt;span class="caps"&gt;BBC&lt;/span&gt; tech pundit Rory Cellan-Jones has posted &lt;a href="http://www.bbc.co.uk/blogs/technology/2009/11/oranges_unlimited_iphone.html"&gt;a similar article&lt;/a&gt; over on his &lt;span class="caps"&gt;BBC&lt;/span&gt; dot.life blog in which he claims that having spoken to Orange, they will not be enforcing their ridiculous T&amp;amp;Cs for iPhone users, which begs the question, why was it even there in the first place?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=xjL8QibP7Ig:G3pK_J16AOs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=xjL8QibP7Ig:G3pK_J16AOs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=xjL8QibP7Ig:G3pK_J16AOs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=xjL8QibP7Ig:G3pK_J16AOs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=xjL8QibP7Ig:G3pK_J16AOs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/xjL8QibP7Ig" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/orange-takes-the-shine-off-the-iphone.html</feedburner:origLink></entry>
 
 <entry>
   <title>Postcodes for the public good, not for profit</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/h-Sm_yu6BkM/postcodes-for-the-public-good-not-for-profit.html" />
   <updated>2009-10-29T00:00:00+00:00</updated>
   <id>http://lukeredpath.co.uk/blog/postcodes-for-the-public-good-not-for-profit</id>
   <content type="html">&lt;p&gt;At the beginning of October, &lt;a href="http://ernestmarples.com"&gt;ErnestMarples.com&lt;/a&gt;, the free postcode lookup web service that powered websites such as &lt;a href="http://planningalerts.com"&gt;PlanningAlerts.com&lt;/a&gt; and &lt;a href="http://jobcentreproplus.com/"&gt;JobCentre ProPlus&lt;/a&gt; (which was developed at the Guardian Hack Day that I attended earlier this year), was taken offline following &lt;a href="http://ernestmarples.com/blog/2009/10/ernest-marples-postcodes-has-been-threatened-by-the-royal-mail/"&gt;legal threats from Royal Mail&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For those who aren&amp;#8217;t aware, unlike in the US where postcode lookup data is &lt;a href="http://geocoder.us/"&gt;freely available&lt;/a&gt; (with relatively low cost for high-volume usage), in the UK the copyright on this data is owned by Royal Mail, who charge &lt;a href="http://www.guardian.co.uk/technology/2009/oct/07/newly-asked-question-royal-mail-postzon"&gt;approximately £4000 per year&lt;/a&gt; for the right to use the data. Whilst this may be a viable option for some businesses, it is prohibitively expensive to many not-for-profit services.&lt;/p&gt;
&lt;p&gt;There is also the ethical issue as to whether or not Royal Mail should be able to make a profit from this data. On one hand, Royal Mail justify the high cost because they have to collate and maintain the postcode database. I would argue that as out government is the primary shareholder of Royal Mail, that this factual data should belong to the public.&lt;/p&gt;
&lt;h3&gt;A response from my David Burrowes MP&lt;/h3&gt;
&lt;p&gt;In response to the threats towards ErnestMarples.com, Tom Watson MP &lt;a href="http://www.tom-watson.co.uk/2009/10/postcodes-adam-crozier-letter/"&gt;wrote to Royal Mail Chief Executive Adam Crozier&lt;/a&gt; regarding the situation. He also raised an &lt;a href="http://edmi.parliament.uk/EDMi/EDMDetails.aspx?EDMID=39229&amp;amp;SESSION=899"&gt;Early Day Motion&lt;/a&gt;. I wrote to my local Tory MP &lt;a href="http://davidburrowes.com/"&gt;David Burrowes&lt;/a&gt; asking him to support the &lt;span class="caps"&gt;EDM&lt;/span&gt;. Yesterday, I received a disappointing response from Mr Burrowes explaining that he would not be able to support the &lt;span class="caps"&gt;EDM&lt;/span&gt; &amp;#8211; essentially, he felt unable to support any movement to place restrictions on Royal Mail&amp;#8217;s business activity given their current crisis:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;I am wary of proposals that would see the Government place additional restrictions on the use of such wholly owned assets by Royal Mail, particularly given the precarious financial state of the company&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He continues:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;For these reasons, I feel unable to sign the Motion at this time. Nevertheless, I certainly share your sentiments about the importance of charity and not-for-profit organisations&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His full response is &lt;a href="http://dl.getdropbox.com/u/570528/david-burrowes-postcodes-letter.jpg"&gt;available for download&lt;/a&gt;. I find the idea that freeing up the postcode data would be of some kind of severe detriment to Royal Mail to be somewhat sidestepping the real issue of whether Royal Mail should be allowed to keep this information under lock and key but given everything that is happening with Royal Mail right now the response is not entirely unexpected.&lt;/p&gt;
&lt;p&gt;In the meantime, the campaign continues. If you haven&amp;#8217;t written your local MP yet, why not take 10 minutes to &lt;a href="http://www.writetothem.com/"&gt;drop them an email&lt;/a&gt;. You can also get the latest news directly from the &lt;a href="http://ernestmarples.com/blog/"&gt;Ernest Marples blog&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=h-Sm_yu6BkM:Oba7vvo5Bmo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=h-Sm_yu6BkM:Oba7vvo5Bmo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=h-Sm_yu6BkM:Oba7vvo5Bmo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=h-Sm_yu6BkM:Oba7vvo5Bmo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=h-Sm_yu6BkM:Oba7vvo5Bmo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/h-Sm_yu6BkM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/postcodes-for-the-public-good-not-for-profit.html</feedburner:origLink></entry>
 
 <entry>
   <title>Comments are back, for now</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/DVikhjBS9Sw/comments-are-back-for-now.html" />
   <updated>2009-10-16T00:00:00+01:00</updated>
   <id>http://lukeredpath.co.uk/blog/comments-are-back-for-now</id>
   <content type="html">&lt;p&gt;I have decided to add comments back to the site for the time being. I&amp;#8217;m now using &lt;a href="http://intensedebate.com"&gt;Intense Debate&lt;/a&gt; instead of &lt;a href="http://disqus.com"&gt;Disqus&lt;/a&gt; with the former seeming to so far have a far nicer admin interface than the latter.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m also reasonably pleased with how I&amp;#8217;ve been able to customise the look and feel to integrate it into the blog as seamlessly as possible.&lt;/p&gt;
&lt;p&gt;Hopefully Intense Debate&amp;#8217;s spam filtering will hold up to scrutiny however if moderating comments becomes too much of a chore, I may disable them again.&lt;/p&gt;
&lt;p&gt;I still encourage you to send me feedback on Twitter but in the meantime, happy commenting.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=DVikhjBS9Sw:Ug7-hd2ZCV4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=DVikhjBS9Sw:Ug7-hd2ZCV4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=DVikhjBS9Sw:Ug7-hd2ZCV4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=DVikhjBS9Sw:Ug7-hd2ZCV4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=DVikhjBS9Sw:Ug7-hd2ZCV4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/DVikhjBS9Sw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/comments-are-back-for-now.html</feedburner:origLink></entry>
 
 <entry>
   <title>Going Live</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/WK7szwvKkkc/going-live.html" />
   <updated>2009-10-15T00:00:00+01:00</updated>
   <id>http://lukeredpath.co.uk/blog/going-live</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve been procrastinating when it comes to pushing out the new design for my blog so I figured the best way to force me into finishing it off is to just go live anyway!&lt;/p&gt;
&lt;p&gt;Everything should be mostly working and URLs for old posts should be the same although not all posts have been migrated to the new design.&lt;/p&gt;
&lt;p&gt;In the meantime, you may have missed some of my new blog entries so here are some links just in case:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="/blog/spring-cleaning.html"&gt;Spring Cleaning&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="/blog/the-tyranny-of-free-software.html"&gt;The tyranny of free software&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="/blog/using-fakefs-with-cucumber-features.html"&gt;Using FakeFS with Cucumber features&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You may also the site currently has no commenting functionality. I&amp;#8217;m still undecided on whether or not to add comments back again. However, if you ever want to leave me feedback or get in touch, the easiest way is &lt;a href="http://twitter.com/lukeredpath"&gt;via twitter&lt;/a&gt; or use the &amp;#8220;contact me&amp;#8221; link on the right.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=WK7szwvKkkc:So6HC0obig8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=WK7szwvKkkc:So6HC0obig8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=WK7szwvKkkc:So6HC0obig8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=WK7szwvKkkc:So6HC0obig8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=WK7szwvKkkc:So6HC0obig8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/WK7szwvKkkc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/going-live.html</feedburner:origLink></entry>
 
 <entry>
   <title>Using FakeFS with Cucumber features</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/3c6w1GGKe2s/using-fakefs-with-cucumber-features.html" />
   <updated>2009-10-06T00:00:00+01:00</updated>
   <id>http://lukeredpath.co.uk/blog/using-fakefs-with-cucumber-features</id>
   <content type="html">&lt;p&gt;For a little Ruby library I&amp;#8217;m currently working on, I decided to use &lt;a href="http://cukes.info"&gt;Cucumber&lt;/a&gt; to spec out the library features.&lt;/p&gt;
&lt;p&gt;The library itself interacts heavily with the file system which has traditionally been a pain to test, requiring stubbing in various places that would inevitably lead to tight coupling between tests and implementation.&lt;/p&gt;
&lt;p&gt;Enter &lt;a href="http://github.com/defunkt/fakefs"&gt;FakeFS&lt;/a&gt;, a great little gem that makes testing the file system a breeze. It essentially acts as a drop-in in-memory file system for your tests but more than that, Ruby&amp;#8217;s built-in libraries (File, FileUtils, Dir etc.) just work as you would expect them to, except they interact with FileFS instead of the actual file system. See the &lt;span class="caps"&gt;README&lt;/span&gt; for more information.&lt;/p&gt;
&lt;p&gt;To use this with Cucumber, you need to be aware that you cannot just require the fakefs gem in your Cucumber env.rb &amp;#8211; doing so would break Cucumber as it would be unable to find your step definitions and other files as I quickly found out.&lt;/p&gt;
&lt;p&gt;Neither can you just require it in the step definition files as the fake file system would not be cleaned up between scenarios leading to unpredictable results.&lt;/p&gt;
&lt;p&gt;What you need to do instead is use the &lt;a href="http://wiki.github.com/aslakhellesoy/cucumber/hooks"&gt;built-in Cucumber hooks&lt;/a&gt; and take advantage of the FakeFS &amp;#8220;safe mode&amp;#8221; to enable and disable FakeFS between scenarios. In addition, you&amp;#8217;ll want to clear the fake file system as simply disabling FakeFS does not do this automatically.&lt;/p&gt;
&lt;p&gt;Simply add the following code to your &lt;code&gt;features/support/env.rb&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;fakefs/safe&amp;#39;&lt;/span&gt;

&lt;span class="no"&gt;Before&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="no"&gt;FakeFS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;activate!&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="no"&gt;After&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="no"&gt;FakeFS&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;FileSystem&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;
  &lt;span class="no"&gt;FakeFS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deactivate!&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;And that&amp;#8217;s it &amp;#8211; you are now good to go with your Cucumber features. Write steps that interact with the file system without leaving a single trace on your physical file system.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=3c6w1GGKe2s:s90NhzyFZAo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=3c6w1GGKe2s:s90NhzyFZAo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=3c6w1GGKe2s:s90NhzyFZAo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=3c6w1GGKe2s:s90NhzyFZAo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=3c6w1GGKe2s:s90NhzyFZAo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/3c6w1GGKe2s" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/using-fakefs-with-cucumber-features.html</feedburner:origLink></entry>
 
 <entry>
   <title>The tyranny of free software</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/jiO9l-dWfAQ/the-tyranny-of-free-software.html" />
   <updated>2009-09-28T00:00:00+01:00</updated>
   <id>http://lukeredpath.co.uk/blog/the-tyranny-of-free-software</id>
   <content type="html">&lt;p&gt;A couple of weeks ago, Spotify launched their long-awaited native iPhone client. In doing so, they made the bold decision to make it available for premium subscribers only.&lt;/p&gt;
&lt;p&gt;Having built up what I can only guess is a strong user-base through it&amp;#8217;s free ad-supported desktop counter-part, Spotify faced a pretty hard sell to get users to upgrade to their £10 a month premium service. No adverts and higher quality are all well and good but I&amp;#8217;d imagine that the majority of their users were content with the free service.&lt;/p&gt;
&lt;p&gt;With the new iPhone (and Android) client (and clients for other platforms in development), it&amp;#8217;s fair to say that Spotify had a killer feature that could be used to incentivise premium uptake. It&amp;#8217;s hard to see the move as anything but a smart business decision. After all, Spotify &amp;#8211; a business &amp;#8211; has to make money somehow.&lt;/p&gt;
&lt;p&gt;The problem is this: give people something for free on one platform and they&amp;#8217;ll expect it to be free on any platform. I have no idea where this deluded sense of entitlement comes from but you only have to look at the reviews in the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=324684580&amp;amp;mt=8"&gt;iTunes App Store&lt;/a&gt; to realise that a lot of people are not impressed with the iPhone app being premium-only.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s not the people complaining about the price that annoy me &amp;#8211; to some people £10 a month &lt;strong&gt;is&lt;/strong&gt; too expensive &amp;#8211; but the majority of reviewers seem to have this sense of entitlement that seems to have come from nowhere &amp;#8211; it&amp;#8217;s like they expect, nay &lt;strong&gt;demand&lt;/strong&gt; that Spotify&amp;#8217;s service should be free and that to even suggest that they pay for it means they are being ripped off.&lt;/p&gt;
&lt;h3&gt;And then there was Tweetie&amp;hellip;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.atebits.com/tweetie-iphone/"&gt;Tweetie&lt;/a&gt; has been my iPhone Twitter client of choice for a while now but it appeared to have been neglected of late. iPhone 3.0 has come and gone and there has not been an update to be seen.&lt;/p&gt;
&lt;p&gt;Then, earlier today, Tweetie author &lt;a href="http://twitter.com/atebits"&gt;Loren Brichter&lt;/a&gt; posted &lt;a href="http://news.atebits.com/post/199400544/bigbird-redux"&gt;an entry on his blog&lt;/a&gt; detailing what he&amp;#8217;s been up to for the past 4 months. As it turns out, he&amp;#8217;s been working hard on a brand new version of Tweetie for both iPhone and Mac.&lt;/p&gt;
&lt;p&gt;From reading his post it&amp;#8217;s clear that Tweetie 2.0 represents a significant upgrade and many months of hard work and as such he has decided to release it as a brand new app meaning it will &lt;strong&gt;not&lt;/strong&gt; be a free upgrade to existing Tweetie owners.&lt;/p&gt;
&lt;p&gt;This is hardly a new practice &amp;#8211; software developers have been charging for major releases since forever, often with discounts for existing users. Tweetie 2.0 has no such discount (Apple&amp;#8217;s distribution platform simply has no way of doing this) but at only $3 (£1.79) is hardly going to break the bank. However, as soon as I read this I knew immediately the whiners would be out in force. And a &lt;a href="http://search.twitter.com/search?max_id=4453700146&amp;amp;page=2&amp;amp;q=tweetie+pay"&gt;cursory search&lt;/a&gt; on Twitter shows that I was right.&lt;/p&gt;
&lt;h3&gt;You aren&amp;#8217;t owed &lt;span class="caps"&gt;ANYTHING&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Now I can sympathise with those who have bought Tweetie in the last month but at the end of the day, developers, like anyone else, need to earn a living. Tweetie 2.0 represents a significant amount of hard work by an independent software developer who has to pay bills and put a roof over his head. It&amp;#8217;s great that he&amp;#8217;s managed to get into a position where he can support himself doing what he loves full-time &amp;#8211; many developers don&amp;#8217;t get this chance &amp;#8211; but to begrudge a paltry $3 for his hard work is nothing short of a mean and miserly dick thing to do.&lt;/p&gt;
&lt;p&gt;But even if you don&amp;#8217;t want to pay for the upgrade, stop trying to make out as if you&amp;#8217;re somehow entitled to it for nothing. All you&amp;#8217;re doing is coming across as a spoilt child who can&amp;#8217;t get what you want. Would you work for free? No, didn&amp;#8217;t think so, so don&amp;#8217;t expect software developers to either.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Jeff LaMarche has also posted &lt;a href="http://iphonedevelopment.blogspot.com/2009/09/sense-of-entitlement-tweetie-2.html"&gt;an excellent rant&lt;/a&gt; on this subject.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=jiO9l-dWfAQ:bVT_P0nPj58:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=jiO9l-dWfAQ:bVT_P0nPj58:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=jiO9l-dWfAQ:bVT_P0nPj58:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=jiO9l-dWfAQ:bVT_P0nPj58:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=jiO9l-dWfAQ:bVT_P0nPj58:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/jiO9l-dWfAQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/the-tyranny-of-free-software.html</feedburner:origLink></entry>
 
 <entry>
   <title>Spring cleaning</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/3Nr8AA9eBNI/spring-cleaning.html" />
   <updated>2009-09-28T00:00:00+01:00</updated>
   <id>http://lukeredpath.co.uk/blog/spring-cleaning</id>
   <content type="html">&lt;p&gt;I haven&amp;#8217;t blogged for a while, what with being incredibly busy over the last 9 months, so to give myself a kick up the backside and encourage myself to post more often, I&amp;#8217;ve decided to &lt;a href="http://www.alistapart.com/articles/redesignrealign"&gt;re-align&lt;/a&gt; my blog&amp;#8217;s design. The overall layout with cleaner spacing and improved typography. I&amp;#8217;m also using the &lt;a href="http://960.gs/"&gt;960.gs&lt;/a&gt; grid system for layout.&lt;/p&gt;
&lt;p&gt;The site is now powered by &lt;a href="http://github.com/mojombo/jekyll"&gt;Jekyll&lt;/a&gt; rather than &lt;a href="http://github.com/karmi/marley"&gt;Marley&lt;/a&gt; (more on this another time) and rather than spending ages copying all of my old posts over and tweaking them, I&amp;#8217;ll import them gradually over time. I just wanted to get this up and running quickly so I could start blogging again. All of the old articles are still available at their old URLs and shall remain so until they are migrated.&lt;/p&gt;
&lt;p&gt;There is also no commenting solution. Disqus hasn&amp;#8217;t really worked for me and I&amp;#8217;m contemplating &lt;a href="http://interblah.net/on-commenting"&gt;not having any comments at all&lt;/a&gt; &amp;#8211; I haven&amp;#8217;t really decided yet. If you want to leave some feedback on a blog post, just &lt;a href="http://twitter.com/lukeredpath"&gt;tweet me your comments&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=3Nr8AA9eBNI:gOLiGygJXy8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=3Nr8AA9eBNI:gOLiGygJXy8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=3Nr8AA9eBNI:gOLiGygJXy8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=3Nr8AA9eBNI:gOLiGygJXy8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=3Nr8AA9eBNI:gOLiGygJXy8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/3Nr8AA9eBNI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/spring-cleaning.html</feedburner:origLink></entry>
 
 <entry>
   <title>Online accounting for freelancers</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/VZAJtYNddW8/online-accounting-for-freelancers.html" />
   <updated>2009-03-16T00:00:00+00:00</updated>
   <id>http://lukeredpath.co.uk/blog/online-accounting-for-freelancers</id>
   <content type="html">&lt;p&gt;When I decided to go freelance, I spent a lot of time researching &lt;a href="http://www.contractoruk.com/managed_service_companies/"&gt;the different options available&lt;/a&gt; when it comes to running my own business. The simplest route is to register as a sole trader but this increases your liability and isn&amp;#8217;t the most tax-efficient route (all profit is treated as taxable income). I briefly considered operating through an &lt;a href="http://www.contractoruk.com/managed_service_companies/umbcos.html"&gt;umbrella company&lt;/a&gt; but after some troubles getting up and running with one I decided to bite the bullet and form my own limited company.&lt;/p&gt;
&lt;p&gt;Of course, with this option comes a whole host of administration and responsibilities; you&amp;#8217;re going to need an accountant. You can either find a good accountant and pay them for advice and preparing your end of year returns as and when you need them to or you can pay for a monthly service and have them take care of almost everything for you. Whichever option you choose, it is well worth learning some basic accounting principles and even if you&amp;#8217;re accountants are doing everything for you, I highly recommend keeping your own books too because ultimately as the company director you are liable for any mistakes.&lt;/p&gt;
&lt;h3&gt;Accounting software, the options&lt;/h3&gt;
&lt;p&gt;If you&amp;#8217;re going to do your own books, you&amp;#8217;re probably going to need some kind of software to keep track of everything. You could use a spreadsheet but there are slicker options available. There are a variety of desktop software packages but there isn&amp;#8217;t much available for the Mac (and don&amp;#8217;t want to boot up Windows in a virtual machine just to do my accounts). After some research I came across two online services that cater for the UK: &lt;a href="http://www.freeagentcentral.com/"&gt;FreeAgent&lt;/a&gt; and &lt;a href="http://www.xero.com/"&gt;Xero&lt;/a&gt;. I have used Xero for the past couple of months and have now moved over to FreeAgent for reasons I&amp;#8217;ll outline towards the end of this article.&lt;/p&gt;
&lt;h3&gt;Xero, &amp;#8220;the worlds easiest accounting system&amp;#8221;&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="http://dl.getdropbox.com/u/570528/xero.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Xero was the first service I came across; a New Zealand-based company who have recently branched out into the UK. They offer a full accounting solution for £19 + &lt;span class="caps"&gt;VAT&lt;/span&gt; per month.&lt;/p&gt;
&lt;p&gt;Xero has an attractive and intuitive interface and it presents an overview of your company finances in a clear and concise manner. It will allow you to set up your various bank accounts (including any credit card or Paypal accounts) and import statements directly from your bank (it supports the standard &lt;span class="caps"&gt;OFX&lt;/span&gt; and &lt;span class="caps"&gt;QIF&lt;/span&gt; formats). It will generate attractive looking invoices for you and makes it really simple to track and manage your outstanding debtors including the ability to generate &lt;span class="caps"&gt;PDF&lt;/span&gt; statements and email reminders.&lt;/p&gt;
&lt;p&gt;Dealing with expense claims can be a bit convoluted if you&amp;#8217;re a one-man company. Xero&amp;#8217;s expense claims features seem to be aimed more at larger companies that deal with multiple claims from multiple employees, requiring each claim to be itemized and approved which makes the process a bit long-winded.&lt;/p&gt;
&lt;p&gt;Xero&amp;#8217;s killer feature is it&amp;#8217;s transaction reconciliation interface. Xero maintains a strict separation between your &amp;#8220;Xero balance&amp;#8221; and your various bank account balances, which are reconciled when you import a statement. This is all done using a combination of clever transaction matching and an intuitive interface that makes bank reconciliation a piece of cake.&lt;/p&gt;
&lt;h3&gt;FreeAgent, &amp;#8220;online accounting nirvana&amp;#8221;&lt;/h3&gt;
&lt;p style="float:right;"&gt;&lt;img src="http://dl.getdropbox.com/u/570528/freeagent.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;FreeAgent offers an online accountancy solution for a range of different setups, starting from £15 + &lt;span class="caps"&gt;VAT&lt;/span&gt; per month for sole traders up to £25 + &lt;span class="caps"&gt;VAT&lt;/span&gt; per month for limited companies. They also offer a great referral scheme where you receive a permanent 10% discount for each person you refer (and who signs up to a paying account) meaning you can actually get the service for nothing if you refer 10 people. Each person you refer also receives a 10% discount on the monthly subscription.&lt;/p&gt;
&lt;p&gt;FreeAgent is aimed squarely at freelancers and small businesses. Whilst Xero can be a bit intimidating for a newcomer to the world of accountancy, FreeAgent keeps things simple; instead of Accounts Receivable and Accounts Payable, you simply deal with Invoices and Bills. Reports are accessible and clear and concise and like Xero, the user dashboard prevents a great overview of your accounts. It even has an iCal feed of important dates (such as when &lt;span class="caps"&gt;PAYE&lt;/span&gt;, &lt;span class="caps"&gt;VAT&lt;/span&gt; and company returns are due).&lt;/p&gt;
&lt;p&gt;FreeAgent&amp;#8217;s focus on freelancers who operate their own limited companies is one of its strongest selling points; out-of-pocket expenses are dealt with easily, it has basic project management and time-tracking functionality and it does basic payroll for company directors. It even does the calculations for your personal self-assessment tax return.&lt;/p&gt;
&lt;h3&gt;Xero vs FreeAgent, a conclusion&lt;/h3&gt;
&lt;p&gt;Having used Xero for a few months (and finding it a pleasure to use), I ultimately decided to move to FreeAgent for several reasons.&lt;/p&gt;
&lt;p&gt;Firstly, and most importantly, was it&amp;#8217;s support for the flat-rate &lt;span class="caps"&gt;VAT&lt;/span&gt; scheme which Xero doesn&amp;#8217;t currently support. This effectively made Xero&amp;#8217;s reporting functionality useless to me as it wasn&amp;#8217;t able to deal with my &lt;span class="caps"&gt;VAT&lt;/span&gt; and turnover figures correctly. FreeAgent deals with this perfectly, even remembering to exclude revenue outside of the scope of &lt;span class="caps"&gt;VAT&lt;/span&gt; (i.e. for US-based clients).&lt;/p&gt;
&lt;p&gt;Secondly, the features aimed at small, one-man companies such as mine like the directors payroll, self-assessment calculations and simplified expense tracking means my life is made all the more easier, to the point where I&amp;#8217;m actually considering canceling my monthly accountancy service and getting advice on an ad-hoc basis instead (at around a third of the cost).&lt;/p&gt;
&lt;p&gt;One thing missing from both Xero and FreeAgent is multi-currency support although both of them are apparently working on this. However, its not impossible to manage your foreign-currency invoices in either system although it requires doing the currency conversion and handling of exchange rate fluctuations manually.&lt;/p&gt;
&lt;p&gt;Despite having moved away from Xero, my overall experience with it was positive and they were very receptive to my feedback (several members of the Xero team can be found on Twitter). To get the most out of Xero it can be useful to learn about double-entry bookkeeping and some basic accountancy terminology but this isn&amp;#8217;t necessarily a bad thing; in fact I&amp;#8217;d recommend doing this whichever system you use.&lt;/p&gt;
&lt;p&gt;Both offer free 30-day trials and neither lock you into contracts so if you&amp;#8217;re looking for a great, intuitive online accountancy system I&amp;#8217;d recommend giving them both a try. Overall I feel that right now, FreeAgent offers the best combination of features and simplicity for freelancers. If you want to grab that 10% discount, you&amp;#8217;re welcome to &lt;a href="http://www.freeagentcentral.com/?referrer=31ccxhcm"&gt;use my referral code&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=VZAJtYNddW8:CPhGWxfuqmU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=VZAJtYNddW8:CPhGWxfuqmU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=VZAJtYNddW8:CPhGWxfuqmU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=VZAJtYNddW8:CPhGWxfuqmU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=VZAJtYNddW8:CPhGWxfuqmU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/VZAJtYNddW8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/online-accounting-for-freelancers.html</feedburner:origLink></entry>
 
 <entry>
   <title>Automating iPhone releases with Rake</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/kVZGhk72Mlg/automating-iphone-releases-with-rake.html" />
   <updated>2009-03-03T00:00:00+00:00</updated>
   <id>http://lukeredpath.co.uk/blog/automating-iphone-releases-with-rake</id>
   <content type="html">&lt;p&gt;So far for me the release process for &lt;a href="http://lukeredpath.co.uk/squeemote"&gt;Squeemote&lt;/a&gt; has been fairly manual. After checking the final release several times using a development build, then an ad-hoc build, the time would come to create a distribution build. I&amp;#8217;ve done this several times now and each time I&amp;#8217;ve gone through the same tedious steps so I thought it&amp;#8217;s time I wrote myself a &lt;a href="http://rake.rubyforge.org"&gt;Rake&lt;/a&gt; task to automate the process somewhat.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re a Ruby/Rails developer you will no doubt have Rake installed. Otherwise, with Ruby installed (which you should have as it ships with Leopard) then you can install the latest version of Rake using the command &lt;code&gt;gem install rake&lt;/code&gt;. If you&amp;#8217;re not familiar with Rake, to use this task, create a file named &lt;code&gt;Rakefile&lt;/code&gt; in the root of your project and add the code below. To run it, simply execute &lt;code&gt;rake release&lt;/code&gt; from a Terminal.&lt;/p&gt;
&lt;p&gt;The Rake task is still in it&amp;#8217;s infancy but I will continue to update the &lt;a href="http://gist.github.com"&gt;gist&lt;/a&gt; as I make further improvements. It performs the following steps:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Bumps the build number using &lt;a href="http://is.gd/llGp"&gt;agvtool&lt;/a&gt; (see &lt;a href="http://chanson.livejournal.com/125568.html"&gt;this article on using agvtool&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;Builds the release using my main target and by default the Development distribution&lt;/li&gt;
	&lt;li&gt;Creates a folder in my saved releases folder and copies the built package (and the dsym file) to the release folder.&lt;/li&gt;
	&lt;li&gt;Compresses the package into a zip file ready for uploading to Apple.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="no"&gt;RELEASE_OUTPUT_PATH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;~/Projects/releases/Squeemote&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="no"&gt;TARGET_NAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Squeemote&amp;quot;&lt;/span&gt;
&lt;span class="no"&gt;CONFIGURATION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;CONFIGURATION&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Distribution&amp;quot;&lt;/span&gt;
&lt;span class="no"&gt;SDK_VERSION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;SDK&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;iphoneos2.2&amp;#39;&lt;/span&gt;
 
&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:release&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;* Bumping build version.&amp;quot;&lt;/span&gt;
    &lt;span class="sb"&gt;`agvtool bump -all`&lt;/span&gt;
    
  &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;* Building &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;CONFIGURATION&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; release.&amp;quot;&lt;/span&gt;
    &lt;span class="sb"&gt;`xcodebuild -target &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;TARGET_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt; \&lt;/span&gt;
&lt;span class="sb"&gt;      -configuration &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;CONFIGURATION&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt; -sdk &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;SDK_VERSION&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
    &lt;span class="n"&gt;build_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;build&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;CONFIGURATION&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-iphoneos&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    
  &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;* Creating &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;CONFIGURATION&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; package&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;output_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;RELEASE_OUTPUT_PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="sb"&gt;`agvtool mvers -terse1`&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;-&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;CONFIGURATION&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;downcase&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="sb"&gt;`rm -Rf &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;output_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exist?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="sb"&gt;`mkdir &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;output_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt; &amp;amp;&amp;amp; \&lt;/span&gt;
&lt;span class="sb"&gt;     mv &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;build_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt; &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;output_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
    
  &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;* Compressing.&amp;quot;&lt;/span&gt;
    &lt;span class="sb"&gt;`cd &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;output_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt; &amp;amp;&amp;amp; zip -ry \&lt;/span&gt;
&lt;span class="sb"&gt;      &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;TARGET_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;.zip &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;TARGET_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;.app`&lt;/span&gt;
  
  &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;* Done.&amp;quot;&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Feel free to modify this to your needs; I encourage you to &lt;a href="http://gist.github.com/72511"&gt;fork the gist&lt;/a&gt; and make your changes available for everybody else.&lt;/p&gt;
&lt;h3&gt;Overriding default behaviour&lt;/h3&gt;
&lt;p&gt;The configuration and &lt;span class="caps"&gt;SDK&lt;/span&gt; can be overridden using environment variables so its possible to use this task to build ad-hoc releases too. The main feature currently missing is checking whether or not the build was successful or not before continuing, something I&amp;#8217;ll fix shortly. It also doesn&amp;#8217;t set the agvtool &amp;#8220;marketing version&amp;#8221; (e.g. 1.2), which I generally do manually on my repository master branch when starting work on the next version of my app.&lt;/p&gt;
&lt;p&gt;If anybody else has any nice tips for automating their iPhone development workflow, I&amp;#8217;d like to hear them.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=kVZGhk72Mlg:cnjYTcpgrro:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=kVZGhk72Mlg:cnjYTcpgrro:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=kVZGhk72Mlg:cnjYTcpgrro:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=kVZGhk72Mlg:cnjYTcpgrro:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=kVZGhk72Mlg:cnjYTcpgrro:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/kVZGhk72Mlg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/automating-iphone-releases-with-rake.html</feedburner:origLink></entry>
 
 <entry>
   <title>Remote pair-programming using iChat</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/asF89e9GN0A/remote-pair-programming-with-ichat.html" />
   <updated>2009-02-03T00:00:00+00:00</updated>
   <id>http://lukeredpath.co.uk/blog/remote-pair-programming-with-ichat</id>
   <content type="html">&lt;p&gt;When I worked at &lt;a href="http://www.reevoo.com"&gt;Reevoo&lt;/a&gt; we tried to live by a mantra of &amp;#8220;pair on all production code&amp;#8221;. Sometimes this wasn&amp;#8217;t practical (there would often be times when there was an odd number of us available) but its a rule we tried to stick to wherever possible.&lt;/p&gt;
&lt;p&gt;Obviously, now I have gone freelance, pairing isn&amp;#8217;t always a luxury I&amp;#8217;ll have &amp;#8211; that&amp;#8217;s fine, I&amp;#8217;m comfortable working on my own &amp;#8211; but I&amp;#8217;ve always felt that some of the best code I&amp;#8217;ve ever written has been code that I have written in a pair. Fortunately, for my latest client, I am able to work with my former Reevoo colleague &lt;a href="http://interblah.net"&gt;James Adam&lt;/a&gt; who some of you may know as the author of the &lt;a href="http://rails-engines.org/"&gt;Rails Engines&lt;/a&gt; plugin and one of the co-organisers of the &lt;a href="http://lrug.org"&gt;London Ruby User Group&lt;/a&gt; and the awesome &lt;a href="http://rubymanor.org/"&gt;RubyManor conference&lt;/a&gt; (don&amp;#8217;t forget to &lt;a href="http://rubymanor.org/videos/"&gt;check out some of the videos&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;Coding remotely&lt;/h3&gt;
&lt;p&gt;From the outset, we were both agreed that we would prefer to pair on as much code as possible. The problem would be that we wouldn&amp;#8217;t always be in the same location. We&amp;#8217;ve both taken up membership at &lt;a href="http://the-hub.net/"&gt;The Hub&lt;/a&gt; which gives us a shared space to work once a week or so but the rest of the time we would both be working from home.&lt;/p&gt;
&lt;p&gt;This isn&amp;#8217;t a new problem; in fact it was one that &lt;a href="http://www.floehopper.org/"&gt;some&lt;/a&gt; &lt;a href="http://chrisroos.co.uk/"&gt;of us&lt;/a&gt; at Reevoo &lt;a href="http://blog.floehopper.org/articles/2008/03/13/remote-pair-programming"&gt;have experience with&lt;/a&gt; using a combination of &lt;a href="http://en.wikipedia.org/wiki/GNU_Screen"&gt;screen&lt;/a&gt; and &lt;a href="http://www.vim.org/"&gt;vim&lt;/a&gt;. However, vim isn&amp;#8217;t really my bag and I&amp;#8217;m far more productive using my editor of choice, &lt;a href="http://macromates.org"&gt;Textmate&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.realvnc.com/"&gt;&lt;span class="caps"&gt;VNC&lt;/span&gt;&lt;/a&gt; was an obvious solution but if you&amp;#8217;re both Mac users,  &lt;a href="http://www.apple.com/macosx/features/ichat.html"&gt;iChat&lt;/a&gt; offers a far more integrated solution, offering instant-messaging, voice chat and most importantly, seamless screen-sharing. iChat&amp;#8217;s built-in screen-sharing solution is fast enough to work on one person&amp;#8217;s machine whilst making it easy to switch back to your own machine when necessary. Even better is if you have a dual-screen setup (I run my MacBook connected to a Dell 20&amp;quot; monitor). Using this setup, I can run James&amp;#8217; screen on my Dell, leaving my MacBook free for background tasks like email, twitter etc. It&amp;#8217;s not perfect, there are a few technical niggles; but it has worked well for us so far.&lt;/p&gt;
&lt;h3&gt;Remote pairing tips&lt;/h3&gt;
&lt;p&gt;What has surprised me the most is just how effective this approach has been. I feel like we have been working just as effectively as if we had been sat in the same room together. We get from all of the usual benefits of pairing; the ability to bounce ideas off each-other, catch minor mistakes that the other person has missed, discuss alternative approaches to a problem and tempering another person&amp;#8217;s enthusiasm with some caution (e.g. &amp;#8220;maybe we could do [some cool idea]&amp;#8230;yes that would be good but do we really need to do it now?&amp;#8221;). If I would offer some tips when using this approach, they would be:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Make sure&lt;/strong&gt; you&amp;#8217;re both ready to start before you get going. Nobody likes to feel like they are being pressured into doing something. Pair-programming all day can be really draining so make sure you&amp;#8217;re both happy to begin.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Don&amp;#8217;t hesitate&lt;/strong&gt; to suggest to your pair that it&amp;#8217;s time for a break. It can be good to stop for 5 minutes every now and again to make a cup of tea, catch up on some emails.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Try to avoid&lt;/strong&gt; unnecessary distractions whilst in full-flow. Try to turn off other IM clients or at least set your status so people know you shouldn&amp;#8217;t be disturbed. Disable growl notifications or other annoying popups (e.g. Twitter clients). There will always be a few minutes downtime here and there which you can use to check these. Trying to do it whilst in the middle of pairing may lead to errors or missing important information and its unfair on your pair if you&amp;#8217;re not paying attention.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Agree on who&lt;/strong&gt; is driving at any given time, and take it in turns, swapping periodically. James and I tend to work using the &amp;#8220;driver writes a test, pair implements test&amp;#8221; approach. We&amp;#8217;ll swap roles frequently but its important to know who is the main driver so you aren&amp;#8217;t always trying to type at the same time or grabbing the mouse when somebody is trying to move in the other direction. This is probably more of an issue with remote pairing than normal pairing (unless you&amp;#8217;re using multiple keyboards/mice!).&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Don&amp;#8217;t forget&lt;/strong&gt; that when you are connected to your pair&amp;#8217;s machine (and it&amp;#8217;s in the foreground), all of your keystrokes will be sent to the remote machine. &lt;code&gt;def my_methodhello mum&lt;/code&gt; probably won&amp;#8217;t pass any tests.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Bonus Tip&lt;/strong&gt;: Quicksilver can be useful for leaving the equivalent of little notes to eachother whilst the other person is away; if you&amp;#8217;re pair has gone to make a tea/popped to the toilet and you need to leave too, just leave them a nice big message on their screen &amp;#8211; bring up Quicksilver, hit Cmd+Period to enter text mode, write your message then hit tab and select &amp;#8220;Large Type&amp;#8221;. They can&amp;#8217;t miss it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;#8217;ve never paired before, or have been put off of pairing because you work remotely, give it a try; you may find you write better code than you ever did before. Does anybody else pair remotely? If so, I&amp;#8217;d love to hear your tips.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=asF89e9GN0A:9_awEGbKCyU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=asF89e9GN0A:9_awEGbKCyU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=asF89e9GN0A:9_awEGbKCyU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=asF89e9GN0A:9_awEGbKCyU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=asF89e9GN0A:9_awEGbKCyU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/asF89e9GN0A" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/remote-pair-programming-with-ichat.html</feedburner:origLink></entry>
 
 <entry>
   <title>Squeemote 1.1 now available</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/Pp1Y1WSIshI/squeemote-1-1-update.html" />
   <updated>2009-01-23T00:00:00+00:00</updated>
   <id>http://lukeredpath.co.uk/blog/squeemote-1-1-update</id>
   <content type="html">&lt;p&gt;Squeemote 1.1 was finally approved by Apple this morning and is now &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=298005260&amp;mt=8"&gt;available in the iTunes store&lt;/a&gt;. This is quite a hefty update with a number of new features, improvements to existing ones and numerous bug and performance fixes.&lt;/p&gt;
&lt;h3&gt;Changes in this release&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Added support for browsing Music Services and Internet Radio stations.&lt;/li&gt;
	&lt;li&gt;Improved handling of music service and internet radio streams on the now playing screen, including displaying the correct artist/album/title/artwork for music service tracks.&lt;/li&gt;
	&lt;li&gt;Squeemote will now automatically discover your server.&lt;/li&gt;
	&lt;li&gt;Added support for server authentication and improved the layout of the initial setup screen.&lt;/li&gt;
	&lt;li&gt;Reduced initial startup time.&lt;/li&gt;
	&lt;li&gt;Improved display of album tracks when browsing music library.&lt;/li&gt;
	&lt;li&gt;Artists list now respects &amp;#8220;ignored articles&amp;#8221; server setting when sorting.&lt;/li&gt;
	&lt;li&gt;Added &amp;#8220;clear playlist&amp;#8221; button to current playlist screen.&lt;/li&gt;
	&lt;li&gt;Improved responsiveness of volume slider control.&lt;/li&gt;
	&lt;li&gt;Added &amp;#8220;disable auto-lock&amp;#8221; setting to prevent device from going into standby.&lt;/li&gt;
	&lt;li&gt;Numerous bug-fixes and performance/reliability improvements.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are a few outstanding known issues mainly relating to Squeemote no longer picking up changes from the server after coming out of standby. These will be resolved in 1.2 which is progressing nicely and will hopefully be submitted to Apple in the next week or so.&lt;/p&gt;
&lt;h3&gt;New Squeemote website&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;m also pleased to announce that Squeemote now has &lt;a href="http://lukeredpath.co.uk/squeemote"&gt;it&amp;#8217;s own website&lt;/a&gt;. It&amp;#8217;s not quite finished yet but I believe in releasing as soon as possible. Look out for a Help/&lt;span class="caps"&gt;FAQ&lt;/span&gt; page over the weekend.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=Pp1Y1WSIshI:yyQBLXuHm3Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=Pp1Y1WSIshI:yyQBLXuHm3Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=Pp1Y1WSIshI:yyQBLXuHm3Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=Pp1Y1WSIshI:yyQBLXuHm3Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=Pp1Y1WSIshI:yyQBLXuHm3Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/Pp1Y1WSIshI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/squeemote-1-1-update.html</feedburner:origLink></entry>
 
 <entry>
   <title>Squeemote, the Squeezebox iPhone remote, ready for sale</title>
   <link href="http://feedproxy.google.com/~r/LukeRedpath/~3/33BhSjQvI-8/squeemote-for-iphone-ready-for-sale.html" />
   <updated>2008-12-19T00:00:00+00:00</updated>
   <id>http://lukeredpath.co.uk/blog/squeemote-for-iphone-ready-for-sale</id>
   <content type="html">&lt;div class="notice"&gt;&lt;strong&gt;Update&lt;/strong&gt;: Find out more information about Squeemote on &lt;a href="http://lukeredpath.co.uk/squeemote"&gt;the official website&lt;/a&gt;.&lt;/div&gt;
&lt;p&gt;After some wrangling back and forth, I&amp;#8217;m happy to announce that my first iPhone application, Squeemote (formerly iSqueeze) is now &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=298005260&amp;amp;mt=8"&gt;available on the iTunes application store&lt;/a&gt;.&lt;/p&gt;
&lt;p style="float:right;"&gt;&lt;img src="http://farm4.static.flickr.com/3193/3120384208_d0211a396c.jpg?v=0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Squeemote for iPhone and iPod Touch is a remote control application for the &lt;a href="http://slimdevices.com"&gt;SlimDevices Squeezebox&amp;trade;&lt;/a&gt; and similar devices such as the Duet and Boom. This first release is aimed at people who mainly use their own music library rather than streaming services (support of which is currently limited). I intend to add browsing support for streaming services in a later release but my main focus for this initial release was on quality over quantity: I didn&amp;#8217;t (and do not) want to cram it with features. I focussed on making this the best possible experience for browsing your SqueezeCentre library and controlling your device.&lt;/p&gt;
&lt;h3&gt;Future plans&lt;/h3&gt;
&lt;p&gt;I already have some ideas on further improving the user experience for music browsing and playlist management that will appear in a future release. Another area which is currently quite basic is device management; Squeemote supports multiple devices and allows you to choose which device to use and set a default device but there is currently no support for grouping devices for synchronous playback. This, plus browsing support for streaming services will be my priority in the next major release.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s been an interesting experience writing my first ever iPhone (or Cocoa) application and getting it submitted to the iTunes store but I&amp;#8217;ll save the technical notes for a separate post.&lt;/p&gt;
&lt;p&gt;If you have any questions or problems, feel free to leave a comment or drop me an email. I have also set up a &lt;a href="http://getsatisfaction.com/lukeredpath/products/lukeredpath_squeemote"&gt;support page on GetSatisfaction&lt;/a&gt;.&lt;/p&gt;
&lt;div class="download_link"&gt;&lt;a href=":http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=298005260&amp;amp;mt=8"&gt;Download Squeemote from the iTunes App Store&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=33BhSjQvI-8:jibGRr7OsOA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=33BhSjQvI-8:jibGRr7OsOA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=33BhSjQvI-8:jibGRr7OsOA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/LukeRedpath?a=33BhSjQvI-8:jibGRr7OsOA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/LukeRedpath?i=33BhSjQvI-8:jibGRr7OsOA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LukeRedpath/~4/33BhSjQvI-8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://lukeredpath.co.uk/blog/squeemote-for-iphone-ready-for-sale.html</feedburner:origLink></entry>
 
 
</feed>
