<?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>Muffin Research Labs &#187; Software</title>
	<atom:link href="http://muffinresearch.co.uk/archives/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://muffinresearch.co.uk</link>
	<description>the personal blog of Stuart Colville covering modern web development techniques and best practices</description>
	<lastBuildDate>Thu, 26 Jan 2012 00:14:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Android: Google Navigation App Review</title>
		<link>http://muffinresearch.co.uk/archives/2010/08/19/android-google-navigation-app-review/</link>
		<comments>http://muffinresearch.co.uk/archives/2010/08/19/android-google-navigation-app-review/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 22:44:08 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/?p=963</guid>
		<description><![CDATA[When on holiday recently I made extensive use of the Google Navigation app with my HTC Desire to provide satnav for our journey across France. Before we travelled I&#8217;d been using Navigation in the UK and was really quite impressed with it. The directions were accurate and I&#8217;d found it worked really well. Out of [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mrl.staticfil.es/img/navigation.jpg" alt="Google Navigation App for Android" /></p>
<p>When on holiday recently I made extensive use of the Google Navigation app with my HTC Desire to provide satnav for our journey across France.</p>
<p>Before we travelled I&#8217;d been using Navigation in the UK and was really quite impressed with it. The directions were accurate and I&#8217;d found it worked really well. Out of the box it found the places we wanted to drive to easily and if we went the wrong way, re-routing was quickly calculated. The detail provided for junctions and roundabouts are clear and timely as you get several prompts before and during the manoeuvre.</p>
<p>Google Navigation fetches the route upfront when you tell it the location you want to head to, it doesn&#8217;t currently provide maps to download in advance. The route is cached so it doesn&#8217;t need any data as long as you stay on the route. In the UK as my contract includes unlimited data, it&#8217;s not a problem to request a new destination on the fly or have Navigation re-calculate a new route if you miss a turn. </p>
<p>The interesting thing about trying to use this abroad was I didn&#8217;t want to end up with a massive data bill when roaming. So this required a bit of planning. When setting out on a route, where I had Wi-fi available, I&#8217;d use that to pre-fetch the route so I didn&#8217;t need to use mobile data to get the route. I bought a weeks worth of data for roaming via Text message (It was Â£5 for 50mb for a week). Then I only used the mobile internet when I absolutely needed to. Turning mobile internet on and off can be achieved by pressing and holding down the power button and then selecting it from the menu that appears.</p>
<p>In France the instructions were as accurate as the instructions in the UK and for the odd occasion where we&#8217;d got lost it was very handy to be able to get our location and find our way back to the place we were staying at. It would be nice to have a French accent to the audible instructions when in France, but the english voice was was good enough to know what was happening.</p>
<h3>What could be better</h3>
<p>The main downsides were it would be great to be able to download maps in advance to avoid the faffing with turning data on an off. This would also avoid the reliance on a signal to get directions. If there&#8217;s no data connection available you have to drive until you have one. </p>
<p>Another issue is that currently there&#8217;s no way to route a journey with a specific via point. This would have been useful in the case where we knew there were roadworks making a particular route unusable. The way to get around this was to drive off the chosen route and then have the app  re-route us when we knew it would have to choose the route we wanted to take.</p>
<p>Lastly and probably the most frustrating issue with Navigation was that I found that the app seemed to crash if the phone got hot from being charged up. If the phone wasn&#8217;t being charged or the weather was colder it seemed a lot more stable. Time will tell if this issue will be resolved with Froyo update. </p>
<h3>Verdict</h3>
<p>As Navigation is free, it really is quite stunning how well it works. If you&#8217;ve not yet tried it out and you have an android phone, I&#8217;d highly recommend it.</p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2010/08/19/android-google-navigation-app-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recovering Deleted Photos from an SD card with PhotoRec</title>
		<link>http://muffinresearch.co.uk/archives/2010/08/19/recovering-deleted-photos-from-an-sd-card-with-photorec/</link>
		<comments>http://muffinresearch.co.uk/archives/2010/08/19/recovering-deleted-photos-from-an-sd-card-with-photorec/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 22:10:40 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/?p=948</guid>
		<description><![CDATA[Whilst on holiday recently I was using Shotwell (the rather excellent photo manager for Ubuntu) to import some photos. After importing the photos Shotwell asks if you want to delete the imported photos from the card. Without thinking, I absently-mindedly said yes. What I&#8217;d missed was I&#8217;d not separately imported the videos that were on [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mrl.staticfil.es/img/photorec.png" alt="PhotoRec Screenshot" /></p>
<p>Whilst on holiday recently I was using <a href="http://yorba.org/shotwell/">Shotwell</a> (the rather excellent photo manager for Ubuntu) to import some photos. After importing the photos Shotwell asks if you want to delete the imported photos from the card. Without thinking, I absently-mindedly said yes. What I&#8217;d missed was I&#8217;d not separately imported the videos that were on that SD card, (Shotwell doesn&#8217;t currently cater for video imports though this feature is destined to be added soon.) usually this isn&#8217;t an issue but in this case I&#8217;d inadvertently removed the videos I wanted to keep.</p>
<p>The good news is by realising I&#8217;d removed the files, I could just make sure I didn&#8217;t write anything to that card, because deletion just means that the space those files occupies on the memory card is marked as free. So as long as you don&#8217;t fill that freed space with new writes the files should be recoverable.</p>
<p>So I looked for a suitable utility to recover my files and I came across <a href="http://www.cgsecurity.org/wiki/PhotoRec">PhotoRec</a>. It&#8217;s available for a whole slew of operating systems including Windows, Linux and OSX.</p>
<p>On Ubuntu PhotoRec is available via the package &#8220;testdisk&#8221;:</p>
<pre><code>sudo apt-get install testdisk</code></pre>
<h3>Mass Storage Devices vs Photo Transfer Protocol</h3>
<p>As I was on holiday I wanted to use photorec on the SD card using the camera as a card reader. Depending on which camera you&#8217;re using this may or may not work. In my case I was using an IXUS, it doesn&#8217;t support mounting of the memory card as a mass storage device. On my wife&#8217;s Lumix it&#8217;s configurable. So to be able to recover the files I had to wait till we got home so I could use the card reader in my Lenovo dock.</p>
<h3>File Recovery</h3>
<p>Recovering the files is done on the command line. On Linux you have to use sudo e.g:</p>
<pre><code>sudo photorec</code></pre>
<p>It then displays a list of the available drives you can recover data from. In my case it was /dev/sdc:</p>
<p><img src="http://mrl.staticfil.es/img/photorec/step1.png" alt="Step One: Selecting the device" /></p>
<p>Next you just have to select the partition table type, in my case it was Intel/PC &#8211; PhotoRec highlights the detected partition table type by default. </p>
<p><img src="http://mrl.staticfil.es/img/photorec/step2.png" alt="Step Two: Selecting the partition table type" /></p>
<p>After that you have to choose the partition, here I chose &#8220;Whole disk&#8221;:</p>
<p><img src="http://mrl.staticfil.es/img/photorec/step3.png" alt="Step Three: Selecting the partition" /></p>
<p>After that choose the filesystem type. Once again the default is the auto-detected value. In this case Other because our card is FAT.</p>
<p><img src="http://mrl.staticfil.es/img/photorec/step4.png" alt="Step Four: Selecting the filesystem type" /></p>
<p>Next you decide where to save the files. PhotRec creates directories inside this location itself so Desktop will suffice:</p>
<p><img src="http://mrl.staticfil.es/img/photorec/step5.png" alt="Step Five: Selecting the location to save the recovered files" /></p>
<p>Next the recovery begins.</p>
<p><img src="http://mrl.staticfil.es/img/photorec/step6.png" alt="Step Six: Start the recovery" /></p>
<p>Once complete you should find all your files in a directory named: &#8220;recup_dir.1&#8243;.</p>
<p>This took about 10 mins for a 2GB card on my machine and lo and behold my videos were restored.</p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2010/08/19/recovering-deleted-photos-from-an-sd-card-with-photorec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Bazaar with Rietveld for Code Reviews</title>
		<link>http://muffinresearch.co.uk/archives/2009/02/13/using-bazaar-with-rietveld-for-code-reviews/</link>
		<comments>http://muffinresearch.co.uk/archives/2009/02/13/using-bazaar-with-rietveld-for-code-reviews/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 01:31:29 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/?p=490</guid>
		<description><![CDATA[I&#8217;ve been trying out Rietveld lately as I needed a standalone tool for being able to quickly review code for various apps I&#8217;m collaborating on. Rietveld is a Google appengine application for code reviews written by Guido van Rossum. Rietveld is fairly basic, but for carrying out code reviews I can&#8217;t see that you need [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://codereview.appspot.com/17053/"><img src="http://muffinresearch.co.uk/i/rietveld.png" alt="rietveld" height="328" width="540"/></a></p>
<p>I&#8217;ve been trying out <a href="http://code.google.com/p/rietveld/">Rietveld</a> lately as I needed a standalone tool for being able to quickly review code for various apps I&#8217;m collaborating on. Rietveld is a Google appengine application for code reviews written by Guido van Rossum. Rietveld is fairly basic, but for carrying out code reviews I can&#8217;t see that you need much more than the commenting features it provides.</p>
<p>All you need to create a new review is a diff of some code. Reviewers can then provide comments for each line of the code up for review. Once they have finished their review they then have to submit their comments which are then sent to the reviewee by email and are subsequently made public on the site for everyone to view.</p>
<p>If you&#8217;re using google apps for your domain it&#8217;s also possible to set-up your own instance of rietveld via a cname DNS entry pointing at <code>ghs.google.com.</code> this is a very nice feature in terms of making it very easy to add a code review service to your organisation.</p>
<h3>Getting code into Rietveld</h3>
<p>There&#8217;s several methods for getting code into Rietveld including a form upload, some support for pointing Rietveld at SVN branches.  My favorite method is to use the &#8220;upload.py&#8221; file available on the &#8220;create issue&#8221; page to upload diffs for review. </p>
<p>The current version of upload.py has support for svn, git and mercurial. Separately someone had already written an <a href="http://codereview.appspot.com/14053">integration for bazaar </a>that I found via <a href="http://code.google.com/p/rietveld/issues/detail?id=83">issue #83</a> on the rietveld issue tracker.</p>
<p>I tried out this integration and found that it didn&#8217;t work unless you were at the top of a branch so I&#8217;ve modified it so that it now works from any point in the branch by working out the path based on the output of the bzr root command. I&#8217;ve verified that it works for single files as well as uploading diffs for multiple files. My updated version of upload.py can be found here http://codereview.appspot.com/17053 where I&#8217;ve annotated the main differences between my version and the one belonging to review #14053. </p>
<p>To use upload.py with bazaar support first get hold of an up to date copy of upload.py from the create issue page and patch it with the <a href="http://codereview.appspot.com/download/issue17053_1002_5.diff">following diff</a> e.g:</p>
<pre><code>patch -p0 ~/bin/upload.py issue17053_1002_5.diff</code></pre>
<p>Alternatively, you can grab a working copy of <a href="http://muffinresearch.co.uk/downloads/upload.py.txt">upload.py with bazaar support from here</a>. Though be sure to check that there&#8217;s not already a more up to date copy available from google before doing so.</p>
<h3>Using Upload.py</h3>
<p>To upload a diff for a specific file run:</p>
<pre><code>upload.py --rev=&lt;revno&gt;  &lt;file&gt;</code></pre>
<p>To upload a diff of your entire branch change directory to the branch root and run:</p>
<pre><code>upload.py --rev=&lt;revno&gt;</code></pre>
<p>If you&#8217;ve got your own rietveld instance use the  -s flag to point upload.py at your instance:</p>
<pre><code>upload.py --rev=&lt;revno&gt;  -s codereview.example.com</code></pre>
<p>Note: I hit another issue with upload.py which is recorded here: <a href="http://code.google.com/p/rietveld/issues/detail?id=81">issue #81</a>. The symptoms of this was that uploading fails if you use the upload.py that&#8217;s available from codereview.appspot.com to upload to a hosted instance. </p>
<p>My patch with modifications for bazaar incorporates a fix for this. If you aren&#8217;t using bazaar and want to use upload.py with both codereview.appspot.com and your own hosted version the fix that worked for me can be found here: <a href="http://codereview.appspot.com/17052/show">issue #17052</a></p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2009/02/13/using-bazaar-with-rietveld-for-code-reviews/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Favicon Generator Launched</title>
		<link>http://muffinresearch.co.uk/archives/2009/02/10/favicon-generator-launched/</link>
		<comments>http://muffinresearch.co.uk/archives/2009/02/10/favicon-generator-launched/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 02:00:12 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/?p=483</guid>
		<description><![CDATA[The first of several projects I&#8217;ve been working on with former colleagues Ed Eliot and Cyril Doussin is now live as part of Project Fondue, which is a place where we&#8217;re collaborating on various projects both as online tools and services as well as open source projects. The favicon generator is a simple tool to [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://muffinresearch.co.uk/i/favicon-editor.jpg" alt="favicon editor" height="397" width="540" /></p>
<p>The first of several projects I&#8217;ve been working on with former colleagues <a href="http://ejeliot.com">Ed Eliot</a> and <a href="http://cyril.doussin.name">Cyril Doussin</a> is now live as part of <a href="http://projectfondue.com/">Project Fondue</a>, which is a place where we&#8217;re collaborating on various projects both as online tools and services as well as open source projects.</p>
<p>The <a href="http://favicon-generator.org/">favicon generator</a> is a simple tool to make generating favicons from any graphic a breeze:</p>
<blockquote><p>Although many modern web browsers support favicons saved as GIFs, PNGs or other popular file formats all versions of Internet Explorer still require favicons to be saved as ICO files (a Microsoft icon format). This tool provides an easy way to convert any GIF, PNG or JPEG to ICO which is supported by all modern web browsers. It also enables you to create favicons from scratch via a handy online editor. Additionally the editor lets you manually tweak generated favicons to ensure the best possible result.</p></blockquote>
<p>The main difference with the tool is that we&#8217;ve provided an editor which allows you to tweak the generated icons which is often necessary particularly if you&#8217;re creating a favicon from a much larger graphic.</p>
<p>The Favicon Generator is available at <a href="http://favicon-generator.org/">http://favicon-generator.org/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2009/02/10/favicon-generator-launched/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>De-activating my Facebook profile</title>
		<link>http://muffinresearch.co.uk/archives/2008/06/02/de-activating-my-facebook-profile/</link>
		<comments>http://muffinresearch.co.uk/archives/2008/06/02/de-activating-my-facebook-profile/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 01:49:43 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[social]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/?p=337</guid>
		<description><![CDATA[Facebook got to the point a few months back of being more annoying than useful. Friends had started to use Facebook as a way to contact me instead of using plain old-fashioned email and I was starting to find the time I spent on there never actually achieved anything worthwhile. So I looked for a [...]]]></description>
			<content:encoded><![CDATA[<p>Facebook got to the point a few months back of being more annoying than useful. Friends had started to use Facebook as a way to contact me instead of using plain old-fashioned email and I was starting to find the time I spent on there never actually achieved anything worthwhile. </p>
<p>So I looked for a way to close my account and found the only way to do it was to de-activate my profile. A few months on and I&#8217;ve not missed it one bit. I don&#8217;t feel I&#8217;m missing anything and time can be better spent elsewhere. </p>
<p>This does beg the question is there going to be a tipping point where Facebook&#8217;s audience starts to find it not worth the effort or will they carry on spending lots of time there irrespective of whether it provides any meaningful value?</p>
<p>I&#8217;d interested to here anyone else&#8217;s opinion on the subject; am I missing something about facebook &#8212; if you love Facebook what&#8217;s so awesome about it?</p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2008/06/02/de-activating-my-facebook-profile/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Google App Engine</title>
		<link>http://muffinresearch.co.uk/archives/2008/04/08/google-app-engine/</link>
		<comments>http://muffinresearch.co.uk/archives/2008/04/08/google-app-engine/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 08:25:18 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2008/04/08/google-app-engine/</guid>
		<description><![CDATA[Fancy running a Python app on Google&#8217;s scalable architecture? Now you can. Google App Engine has launched offering developers the ability to run python applications (other languages to follow) using a wsgi compliant framework via a built-in framework called webapp. You also get access to datastore which shows a lot of similarities to Django&#8217;s modelling [...]]]></description>
			<content:encoded><![CDATA[<p>Fancy running a Python app on Google&#8217;s scalable architecture? Now you can. <a href="http://code.google.com/appengine/">Google App Engine</a> has launched offering developers the ability to run python applications (other languages to follow)  using a <a href="http://www.python.org/dev/peps/pep-0333/">wsgi</a> compliant framework via a built-in framework called webapp. You also get access to <a href="http://code.google.com/appengine/docs/gettingstarted/usingdatastore.html">datastore</a><br />
which shows a lot of similarities to Django&#8217;s modelling API. Datastore is an API that allows you access to Google&#8217;s scalable database infrastructure and if you want you can also use GQL which stands for Google Query Language which is essentially a subset of SQL.</p>
<h3>Django Included</h3>
<p>Google have also included <a href="http://djangoproject.com">Django</a> in the box and there are details of <a href="http://code.google.com/appengine/articles/django.html">how to configure Django to work within Google App Engine</a>. This highlights the benefits of a framework comprising of loosely coupled components. The only main difference using Django with Google App Engine is that you use the <a href="http://code.google.com/appengine/docs/datastore/">Datastore AP</a>I instead of the Django data modelling API.</p>
<h3>Usage limitations</h3>
<p>Signing up is free however the following limitations are stipulated:</p>
<blockquote cite="http://code.google.com/appengine/docs/whatisgoogleappengine.html"><p>A free account can use up to 500MB of persistent storage and enough CPU and bandwidth for about 5 million page views a month</p></blockquote>
<h3>Conclusion</h3>
<p>All in all this is a great announcement from Google &#8211; for me it&#8217;s things like this that validate Python as a mature language for use on the web. This also provides an excellent starting-point for anyone who wanted to use Python for a web app but didn&#8217;t have the means to get started. The app framework is well-documented and I for one look forward to trying it out.</p>
<p>via <a href="http://simonwillison.net/2008/Apr/8/google/">Simon Willison</a></p>
<h4>Related Links</h4>
<ul class="ext">
<li><a href="http://www.b-list.org/weblog/2008/apr/08/batteries-sold-separately/">Batteries Sold Separately</a></li>
<li><a href="http://valleywag.com/377603/google-app-engine-page-already-owned-by-hackers">XSS exploit found on launch day</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2008/04/08/google-app-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beautify JavaScript from TextMate or CLI</title>
		<link>http://muffinresearch.co.uk/archives/2008/01/14/beautify-javascript-from-textmate/</link>
		<comments>http://muffinresearch.co.uk/archives/2008/01/14/beautify-javascript-from-textmate/#comments</comments>
		<pubDate>Mon, 14 Jan 2008 10:24:00 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2008/01/14/beautify-javascript-from-textmate/</guid>
		<description><![CDATA[As Einars has pointed out this functionality is part of the built-in JavaScript Bundle under &#8220;Reformat Document&#8221;. I&#8217;ll leave the rest of this post here as it does provide an example of how to set-up a command with an existing PHP script and if you&#8217;re not a TextMate user then this will work as a [...]]]></description>
			<content:encoded><![CDATA[<p class="update">As Einars has pointed out this functionality is part of the built-in JavaScript Bundle under &#8220;Reformat Document&#8221;. I&#8217;ll leave the rest of this post here as it does provide an example of how to set-up a command with an existing PHP script and if you&#8217;re not a TextMate user then this will work as a CLI script too and you can find more info on using <a href="http://muffinresearch.co.uk/archives/2007/03/19/using-php-cli-for-textmate-commands/">PHP for CLI in TextMate here</a></p>
<p>I&#8217;ve just been reviewing some code that&#8217;s minned and I remembered looking at beautifier for JavaScript recently that was designed to convert minned code back to something more readable. The script <a href="http://elfz.laacz.lv/beautify/">I remembered was this one: http://elfz.laacz.lv/beautify/</a>. The beautifier makes it really easy to dive into source to view code without having to resort to getting hold of the un-minned source. This is also especially useful when you don&#8217;t have access to the un-minned source.</p>
<p>By taking the PHP source and converting it to CLI, I was able to add a beautify JS command to TextMate. </p>
<p>Thanks very much to  <a href="http://elfz.laacz.lv/">Einars &quot;elfz&quot; Lielmanis</a> for making this script freely available it made it really easy to add this functionality to TextMate. My additions are highlighted.</p>
<pre><code><strong>#!/usr/bin/env php</strong>
&lt;?php 

<a href="http://muffinresearch.co.uk/code/php/beautifyjs.txt">&hellip;See the main Beautify.js source here&hellip;</a>

<strong>$fstat = fstat(STDIN);
$stdin = fread(STDIN,$fstat['size']);
echo js_beautify($stdin);</strong>

?&gt;</code></pre>
<p>The settings for the command are as follows:</p>
<dl class="tb">
<dt>Save:</dt>
<dd>Nothing</dd>
<dt>Input:</dt>
<dd>Selected Text or Document</dd>
<dt>Output:</dt>
<dd>Create New Document</dd>
</dl>
<p>With the above you can either build your own command or download this one pre-made: <a href="http://muffinresearch.co.uk/downloads/BeautifyJS.zip">BeautifyJS.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2008/01/14/beautify-javascript-from-textmate/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Bazaar 1.0 released</title>
		<link>http://muffinresearch.co.uk/archives/2007/12/17/bazaar-10-released/</link>
		<comments>http://muffinresearch.co.uk/archives/2007/12/17/bazaar-10-released/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 11:10:40 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2007/12/17/bazaar-10-released/</guid>
		<description><![CDATA[Fantastic news that Bazaar has reached version 1.0. This is thanks to a lot of hard work by some very talented people and I&#8217;m pleased to note that it looks like case sensitivity issues have been addressed. Amongst the changes are improved documentation. Docs are something that are often overlooked but the recent improvements to [...]]]></description>
			<content:encoded><![CDATA[<p>Fantastic news that Bazaar has reached version 1.0. This is thanks to a lot of hard work by some very talented people and I&#8217;m pleased to note that it looks like <a href="http://mebentley.blogspot.com/2007/12/bazaar-10-not-just-number.html">case sensitivity issues have been addressed</a>.</p>
<p>Amongst the changes are improved documentation. Docs are something that are often overlooked but the recent improvements to the documentation over the last few months are really noticeable. Pack 0.92 repository format is now the default. This format is safer, more robust and faster. The good news is that existing branches can be easily upgraded to the new format by running a couple of commands. <code>bzr reconcile</code> and then <code>bzr upgrade</code>. <a href="http://doc.bazaar-vcs.org/bzr.1.0/en/release-notes/NEWS.html#bzr-1-0-2007-12-14">See the full release notes for more info</a>.</p>
<p>If you haven&#8217;t looked at Bazaar yet, and are still <del datetime="2007-12-17T10:23:00+00:00">suffering</del> <ins datetime="2007-12-17T10:23:00+00:00">working</ins> with SVN or CVS, be sure to download it from <a href="http://bazaar-vcs.org/">bazaar-vcs.org</a> and and take it for a spin. There&#8217;s no substitute for trying it out firsthand.</p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2007/12/17/bazaar-10-released/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Use Tabs in Textmate for Files Opened Via Transmit</title>
		<link>http://muffinresearch.co.uk/archives/2006/06/13/use-tabs-in-textmate-for-remote-files-opened-by-transmit/</link>
		<comments>http://muffinresearch.co.uk/archives/2006/06/13/use-tabs-in-textmate-for-remote-files-opened-by-transmit/#comments</comments>
		<pubDate>Tue, 13 Jun 2006 08:30:22 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2006/06/13/use-tabs-in-textmate-for-remote-files-opened-by-transmit/</guid>
		<description><![CDATA[UPDATE: For opening tabs in transmit 4 see comment #49 I really love TextMate. Everything about it oozes productivity. The only thing that I could say I didn&#8217;t like was that there was no way to edit remote files in textmate (opened via transmit) using the tabs. That is up until now. Tabs in TextMate [...]]]></description>
			<content:encoded><![CDATA[<p class="update">UPDATE: <a href="#comment-65607">For opening tabs in transmit 4 see comment #49</a></p>
<p><img src="/i/textmate/tmtabs.png" class="floated bord" alt="Screenshot showing tabs in textmate" /></p>
<p>I really love <a href="http://macromates.com/">TextMate</a>. Everything about it oozes productivity. The only thing that I could say I didn&#8217;t like was that there was no way to edit remote files in textmate (opened via transmit) using the tabs. That is up until now. </p>
<p>Tabs in TextMate are only available when you are using the projects feature. Opening a file with textmate by default opens in a single window. Thus if you use Transmit and set Textmate as your default editor every file you open via transmit will open in a separate window. This is fine but if you are working on a large project switching back and forth between windows fast becomes a pain.</p>
<p>I went onto the textmate IRC channel today and I was asking to see if there was any way round this problem. Someone very kindly pointed me in the direction of this thread on the textmate discussion board: <a href="http://lists.macromates.com/pipermail/textmate/2006-February/008636.html">[TxMt] sweet textMate FTP project window goodness!</a></p>
<p>This thread was posted by <a href="http://subtlegradient.com/">Thomas Aylott</a> and details how to open the temporary files in tabs when using CyberDuck and Textmate. Here&#8217;s how to carry out the same method with Transmit. Allan Odgaard, the author of TextMate, helped me sort this out so thanks go to Thomas and Allan for making all this possible, I am purely documenting this so that if anyone is looking for how to do this is should be easily found.</p>
<h3>The How-to</h3>
<p>First off transmit doesn&#8217;t use one directory for it&#8217;s temporary files so you need to watch the parent folder. You will find this here:</p>
<pre><code>~/Library/Caches/TemporaryItems/Transmit/

aka:

/Users/&lt;your_username&gt;/Library/Caches/TemporaryItems/Transmit/</code></pre>
<ol>
<li>In Transmit set textmate up as the default editor. <a href="/i/textmate/transmit.png">See screenshot</a></li>
<li>In TextMate open a new project.</li>
<li>Click on the cog icon in the project drawer and selet &#8220;add existing files&#8221;. <a href="/i/textmate/addexisting.png">See screenshot</a> </li>
<li>Then find your way to the &#8216;/Users/&lt;your_username&gt;/Library/Caches/TemporaryItems/Transmit/&#8217; directory as detailed above. Set this as the directory and click &#8216;open&#8217;. <a href="/i/textmate/nav2transmitfolder.png">See screenshot</a></li>
<li>Next select the transmit directory that&#8217;s visible in the project drawer and click the info button (i) at the bottom right of the project drawer. <a href="/i/textmate/info.png">See screenshot</a></li>
<li>Delete everything shown in the &#8216;folder pattern&#8217; field and close the window. <a href="/i/textmate/folderinfo.png">See screenshot</a></li>
<li>Close the project drawer. You can leave it open if you wish this is a personal preference.</li>
<li><strong>Save the project file!</strong> Give a useful name like &#8216;transmit&#8217;. If you don&#8217;t save it then this special config will be lost and you will need to repeat these steps.</li>
<li>Lastly open a file directly from transmit and you should see the file open in a tab. <a href="/i/textmate/finish.png">See screenshot</a></li>
</ol>
<p>There you have it. Next time you want to use this simply open the transmit project file (you did save it right?) and start opening files from transmit and they will be opened straight into tabs. </p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2006/06/13/use-tabs-in-textmate-for-remote-files-opened-by-transmit/feed/</wfw:commentRss>
		<slash:comments>61</slash:comments>
		</item>
		<item>
		<title>Closest equivalent to NetNewsWire on Windows</title>
		<link>http://muffinresearch.co.uk/archives/2006/05/09/closest-equivalent-to-netnewswire-on-windows/</link>
		<comments>http://muffinresearch.co.uk/archives/2006/05/09/closest-equivalent-to-netnewswire-on-windows/#comments</comments>
		<pubDate>Tue, 09 May 2006 11:56:52 +0000</pubDate>
		<dc:creator>Stuart Colville</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://muffinresearch.co.uk/archives/2006/05/09/closest-equivalent-to-netnewswire-on-windows/</guid>
		<description><![CDATA[I have been looking for an equivalent for the mac only Feed reader software NetNewsWire on Windows and I think I have found something that comes the closest yet. FeedReader is a free RSS reader for Windows written by Toomas Toots. I have tried other readers such as RSSOwl, Feed Demon but none of them [...]]]></description>
			<content:encoded><![CDATA[<p>I have been looking for an equivalent for the mac only Feed reader software <a href="http://ranchero.com/netnewswire/">NetNewsWire</a> on Windows and I think I have found something that comes the closest yet.</p>
<p><a href="http://www.feedreader.com/">FeedReader</a> is a free RSS reader for Windows written by Toomas Toots. </p>
<p>I have tried other readers such as <a href="http://www.rssowl.org/">RSSOwl</a>, <a href="http://www.newsgator.com/NGOLProduct.aspx?ProdID=FeedDemon">Feed Demon</a> but none of them come close to NetNewsWire for being as easy to use and having the feature set that  I have been looking for. Up until now I have mainly been using Thunderbird on Windows as this more closely matched what I am looking for.</p>
<p>I have tried FeedReader in the past but I recently decided to download it and try it again having noticed that it is now on version 3.0.*.</p>
<h2>What I like</h2>
<ol>
<li>FeedReader has the same simplicity that I&#8217;m used to in NetNewsWire</li>
<li>The ability to look at the data for all feeds in a folder by just clicking on the containing folder. This is something that Thunderbird frustratingly doesn&#8217;t have. </li>
<li>Matching NetNewsWire you can mark everything as read really easily,  on an item, feed folder or global level. This again is one step above Thunderbird as it only has marking items or individual feeds as read.</li>
<li>The support for the feed:// protocol. This make it possible to load feeds in from FireFox via the <a href="http://projects.koziarski.net/fyr/">Feed Your Reader extension</a>. This is just fantastic as adding feeds to Thunderbird was a real chore. This matches the functionality to load feeds in to NetNewsWire on the mac.</li>
</ol>
<h2>What I don&#8217;t like</h2>
<ol>
<li>The lack of favicons though this is likely to be added in the future (favicons were present in v2.9)</li>
<li>That it&#8217;s difficult to set a manual update interval. The auto-update feature is novel but not what I want and to change it I would have to manually update each feed.</li>
<li>There&#8217;s no means to sync up NetNewsWire and FeedReader though that&#8217;s hardly surprising. It would be nice if this was a possibility though.</li>
</ol>
<p>I would heartily recommend to anyone needing a feed reader on Windows that is the nearest equivalent to NetNewsWire to give <a href="http://www.feedreader.com/">FeedReader</a> a spin. If nothing else you can&#8217;t complain about the price.</p>
]]></content:encoded>
			<wfw:commentRss>http://muffinresearch.co.uk/archives/2006/05/09/closest-equivalent-to-netnewswire-on-windows/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

