<?xml version="1.0"?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007">
   <channel>
      <title>360</title>
      <description>Pipes Output</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=8vLND2N03BGbhg_g1vC6Jw</link>
      <pubDate>Tue, 24 Nov 2009 00:26:02 -0800</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <item>
         <title>twitter: the highest advert ever filmed aka armchair in space: http://is.gd/4Y4T7</title>
         <link>http://twitter.com/robb1e/statuses/5830483167</link>
         <description>robb1e: the highest advert ever filmed aka armchair in space: http://is.gd/4Y4T7</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5830483167</guid>
         <pubDate>Wed, 18 Nov 2009 08:35:36 -0800</pubDate>
      </item>
      <item>
         <title>twitter: mapumental.com looks pretty good for anyone looking to buy a home whilst thinking of the commute, thanks to @wireduk for the insight</title>
         <link>http://twitter.com/robb1e/statuses/5821823447</link>
         <description>robb1e: mapumental.com looks pretty good for anyone looking to buy a home whilst thinking of the commute, thanks to @wireduk for the insight</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5821823447</guid>
         <pubDate>Wed, 18 Nov 2009 00:50:42 -0800</pubDate>
      </item>
      <item>
         <title>twitter: @BTCare I can't connect to pop server mail.btinternet.com error '-ERR popgate unknown command', Port: 110, Secure(SSL): help!</title>
         <link>http://twitter.com/robb1e/statuses/5807274319</link>
         <description>robb1e: @BTCare I can't connect to pop server mail.btinternet.com error '-ERR popgate unknown command', Port: 110, Secure(SSL): help!</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5807274319</guid>
         <pubDate>Tue, 17 Nov 2009 13:45:30 -0800</pubDate>
      </item>
      <item>
         <title>ZW3W0127</title>
         <link>http://www.flickr.com/photos/robbies/4110637492/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4110637492/&quot; title=&quot;ZW3W0127&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2634/4110637492_988c9bd78e_m.jpg&quot; width=&quot;159&quot; height=&quot;240&quot; alt=&quot;ZW3W0127&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4110637492</guid>
         <pubDate>Mon, 16 Nov 2009 14:18:07 -0800</pubDate>
         <media:content width="2855" url="http://farm3.static.flickr.com/2634/4110637492_2c40f23fe7_o.png" type="image/jpeg" height="4314"/>
         <media:title>ZW3W0127</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2634/4110637492_988c9bd78e_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>ZW3W0119</title>
         <link>http://www.flickr.com/photos/robbies/4110630508/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4110630508/&quot; title=&quot;ZW3W0119&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2737/4110630508_4670d0a63d_m.jpg&quot; width=&quot;160&quot; height=&quot;240&quot; alt=&quot;ZW3W0119&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4110630508</guid>
         <pubDate>Mon, 16 Nov 2009 14:15:33 -0800</pubDate>
         <media:content width="3320" url="http://farm3.static.flickr.com/2737/4110630508_4b72023c0f_o.png" type="image/jpeg" height="4992"/>
         <media:title>ZW3W0119</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2737/4110630508_4670d0a63d_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>ZW3W0111</title>
         <link>http://www.flickr.com/photos/robbies/4109854157/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4109854157/&quot; title=&quot;ZW3W0111&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2749/4109854157_686be69199_m.jpg&quot; width=&quot;160&quot; height=&quot;240&quot; alt=&quot;ZW3W0111&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4109854157</guid>
         <pubDate>Mon, 16 Nov 2009 14:10:59 -0800</pubDate>
         <media:content width="2985" url="http://farm3.static.flickr.com/2749/4109854157_46700db007_o.png" type="image/jpeg" height="4470"/>
         <media:title>ZW3W0111</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2749/4109854157_686be69199_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>ZW3W0101</title>
         <link>http://www.flickr.com/photos/robbies/4110611394/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4110611394/&quot; title=&quot;ZW3W0101&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2509/4110611394_61dec2065c_m.jpg&quot; width=&quot;240&quot; height=&quot;240&quot; alt=&quot;ZW3W0101&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4110611394</guid>
         <pubDate>Mon, 16 Nov 2009 14:08:44 -0800</pubDate>
         <media:content width="3320" url="http://farm3.static.flickr.com/2509/4110611394_f4931529e0_o.png" type="image/jpeg" height="3320"/>
         <media:title>ZW3W0101</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2509/4110611394_61dec2065c_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>ZW3W0079</title>
         <link>http://www.flickr.com/photos/robbies/4110606334/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4110606334/&quot; title=&quot;ZW3W0079&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2513/4110606334_c17ab05100_m.jpg&quot; width=&quot;240&quot; height=&quot;240&quot; alt=&quot;ZW3W0079&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4110606334</guid>
         <pubDate>Mon, 16 Nov 2009 14:06:49 -0800</pubDate>
         <media:content width="2048" url="http://farm3.static.flickr.com/2513/4110606334_276c6a1816_o.png" type="image/jpeg" height="2048"/>
         <media:title>ZW3W0079</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2513/4110606334_c17ab05100_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>ZW3W0056</title>
         <link>http://www.flickr.com/photos/robbies/4110595758/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4110595758/&quot; title=&quot;ZW3W0056&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2561/4110595758_78268118f2_m.jpg&quot; width=&quot;102&quot; height=&quot;240&quot; alt=&quot;ZW3W0056&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4110595758</guid>
         <pubDate>Mon, 16 Nov 2009 14:03:00 -0800</pubDate>
         <media:content width="2123" url="http://farm3.static.flickr.com/2561/4110595758_59e2d1bcc1_o.png" type="image/jpeg" height="4992"/>
         <media:title>ZW3W0056</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2561/4110595758_78268118f2_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>ZW3W0026</title>
         <link>http://www.flickr.com/photos/robbies/4110584166/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4110584166/&quot; title=&quot;ZW3W0026&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2583/4110584166_2368a51b3e_m.jpg&quot; width=&quot;160&quot; height=&quot;240&quot; alt=&quot;ZW3W0026&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4110584166</guid>
         <pubDate>Mon, 16 Nov 2009 13:58:43 -0800</pubDate>
         <media:content width="3320" url="http://farm3.static.flickr.com/2583/4110584166_f68b61c20b_o.png" type="image/jpeg" height="4992"/>
         <media:title>ZW3W0026</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2583/4110584166_2368a51b3e_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>ZW3W0024</title>
         <link>http://www.flickr.com/photos/robbies/4110572060/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4110572060/&quot; title=&quot;ZW3W0024&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2507/4110572060_b63df3b9e8_m.jpg&quot; width=&quot;160&quot; height=&quot;240&quot; alt=&quot;ZW3W0024&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4110572060</guid>
         <pubDate>Mon, 16 Nov 2009 13:54:30 -0800</pubDate>
         <media:content width="3320" url="http://farm3.static.flickr.com/2507/4110572060_0b1ba4063d_o.png" type="image/jpeg" height="4992"/>
         <media:title>ZW3W0024</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2507/4110572060_b63df3b9e8_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>ZW3W0004</title>
         <link>http://www.flickr.com/photos/robbies/4109793757/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4109793757/&quot; title=&quot;ZW3W0004&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2607/4109793757_bff3716eed_m.jpg&quot; width=&quot;240&quot; height=&quot;160&quot; alt=&quot;ZW3W0004&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4109793757</guid>
         <pubDate>Mon, 16 Nov 2009 13:49:22 -0800</pubDate>
         <media:content width="4992" url="http://farm3.static.flickr.com/2607/4109793757_4ba7f608b8_o.png" type="image/jpeg" height="3320"/>
         <media:title>ZW3W0004</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2607/4109793757_bff3716eed_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>ZW3W0014</title>
         <link>http://www.flickr.com/photos/robbies/4109654541/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4109654541/&quot; title=&quot;ZW3W0014&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2585/4109654541_a769496c67_m.jpg&quot; width=&quot;177&quot; height=&quot;240&quot; alt=&quot;ZW3W0014&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4109654541</guid>
         <pubDate>Mon, 16 Nov 2009 12:59:16 -0800</pubDate>
         <media:content width="2110" url="http://farm3.static.flickr.com/2585/4109654541_a439031143_o.jpg" type="image/jpeg" height="2856"/>
         <media:title>ZW3W0014</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2585/4109654541_a769496c67_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>twitter: @labete must be a Sunday thing, also lots of ironing but I'm watching Predator 2</title>
         <link>http://twitter.com/robb1e/statuses/5736763657</link>
         <description>robb1e: @labete must be a Sunday thing, also lots of ironing but I'm watching Predator 2</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5736763657</guid>
         <pubDate>Sun, 15 Nov 2009 06:12:55 -0800</pubDate>
      </item>
      <item>
         <title>twitter: Is it just me or is that Baynard House in Decembers @wireduk?</title>
         <link>http://twitter.com/robb1e/statuses/5688560181</link>
         <description>robb1e: Is it just me or is that Baynard House in Decembers @wireduk?</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5688560181</guid>
         <pubDate>Fri, 13 Nov 2009 11:33:42 -0800</pubDate>
      </item>
      <item>
         <title>P1000535</title>
         <link>http://www.flickr.com/photos/robbies/4089371673/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4089371673/&quot; title=&quot;P1000535&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2719/4089371673_2b1be211dc_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;P1000535&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4089371673</guid>
         <pubDate>Mon, 09 Nov 2009 08:28:15 -0800</pubDate>
         <media:content width="3648" url="http://farm3.static.flickr.com/2719/4089371673_9de2ec96c2_o.jpg" type="image/jpeg" height="2736"/>
         <media:title>P1000535</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2719/4089371673_2b1be211dc_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>P1000534</title>
         <link>http://www.flickr.com/photos/robbies/4090133014/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4090133014/&quot; title=&quot;P1000534&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2704/4090133014_0a2a1d94fb_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;P1000534&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4090133014</guid>
         <pubDate>Mon, 09 Nov 2009 08:28:09 -0800</pubDate>
         <media:content width="3648" url="http://farm3.static.flickr.com/2704/4090133014_bacb699240_o.jpg" type="image/jpeg" height="2736"/>
         <media:title>P1000534</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2704/4090133014_0a2a1d94fb_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>P1000533</title>
         <link>http://www.flickr.com/photos/robbies/4090132288/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4090132288/&quot; title=&quot;P1000533&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2703/4090132288_b34da121e4_m.jpg&quot; width=&quot;180&quot; height=&quot;240&quot; alt=&quot;P1000533&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4090132288</guid>
         <pubDate>Mon, 09 Nov 2009 08:27:55 -0800</pubDate>
         <media:content width="3648" url="http://farm3.static.flickr.com/2703/4090132288_31cbda2ebf_o.jpg" type="image/jpeg" height="2736"/>
         <media:title>P1000533</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2703/4090132288_b34da121e4_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>P1000532</title>
         <link>http://www.flickr.com/photos/robbies/4089370501/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4089370501/&quot; title=&quot;P1000532&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2485/4089370501_507fdbe3a9_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;P1000532&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4089370501</guid>
         <pubDate>Mon, 09 Nov 2009 08:27:51 -0800</pubDate>
         <media:content width="3648" url="http://farm3.static.flickr.com/2485/4089370501_cdbcccfeb4_o.jpg" type="image/jpeg" height="2736"/>
         <media:title>P1000532</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2485/4089370501_507fdbe3a9_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>P1000531</title>
         <link>http://www.flickr.com/photos/robbies/4089370059/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4089370059/&quot; title=&quot;P1000531&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2582/4089370059_fc94a50480_m.jpg&quot; width=&quot;180&quot; height=&quot;240&quot; alt=&quot;P1000531&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4089370059</guid>
         <pubDate>Mon, 09 Nov 2009 08:27:42 -0800</pubDate>
         <media:content width="3648" url="http://farm3.static.flickr.com/2582/4089370059_942165637f_o.jpg" type="image/jpeg" height="2736"/>
         <media:title>P1000531</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2582/4089370059_fc94a50480_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>P1000530</title>
         <link>http://www.flickr.com/photos/robbies/4090130938/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4090130938/&quot; title=&quot;P1000530&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2446/4090130938_92374a2077_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;P1000530&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4090130938</guid>
         <pubDate>Mon, 09 Nov 2009 08:27:29 -0800</pubDate>
         <media:content width="3648" url="http://farm3.static.flickr.com/2446/4090130938_3e3299f74b_o.jpg" type="image/jpeg" height="2736"/>
         <media:title>P1000530</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2446/4090130938_92374a2077_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>P1000529</title>
         <link>http://www.flickr.com/photos/robbies/4090129736/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4090129736/&quot; title=&quot;P1000529&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2502/4090129736_f91d8439d4_m.jpg&quot; width=&quot;180&quot; height=&quot;240&quot; alt=&quot;P1000529&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4090129736</guid>
         <pubDate>Mon, 09 Nov 2009 08:27:03 -0800</pubDate>
         <media:content width="3648" url="http://farm3.static.flickr.com/2502/4090129736_39c97c391d_o.jpg" type="image/jpeg" height="2736"/>
         <media:title>P1000529</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2502/4090129736_f91d8439d4_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>P1000528</title>
         <link>http://www.flickr.com/photos/robbies/4090129274/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4090129274/&quot; title=&quot;P1000528&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2803/4090129274_0b08e0f90a_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;P1000528&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4090129274</guid>
         <pubDate>Mon, 09 Nov 2009 08:26:53 -0800</pubDate>
         <media:content width="3648" url="http://farm3.static.flickr.com/2803/4090129274_92e074f0c9_o.jpg" type="image/jpeg" height="2736"/>
         <media:title>P1000528</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2803/4090129274_0b08e0f90a_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>P1000527</title>
         <link>http://www.flickr.com/photos/robbies/4090128454/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4090128454/&quot; title=&quot;P1000527&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2684/4090128454_d8537efcff_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;P1000527&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4090128454</guid>
         <pubDate>Mon, 09 Nov 2009 08:26:36 -0800</pubDate>
         <media:content width="3648" url="http://farm3.static.flickr.com/2684/4090128454_8ee5a6dc57_o.jpg" type="image/jpeg" height="2736"/>
         <media:title>P1000527</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2684/4090128454_d8537efcff_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>P1000526</title>
         <link>http://www.flickr.com/photos/robbies/4090128140/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/people/robbies/&quot;&gt;Robb1e&lt;/a&gt; posted a photo:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.flickr.com/photos/robbies/4090128140/&quot; title=&quot;P1000526&quot;&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2695/4090128140_1119899107_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;P1000526&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>nobody@flickr.com (Robb1e)</author>
         <guid isPermaLink="false">tag:flickr.com,2004:/photo/4090128140</guid>
         <pubDate>Mon, 09 Nov 2009 08:26:28 -0800</pubDate>
         <media:content width="3648" url="http://farm3.static.flickr.com/2695/4090128140_92ef4c7415_o.jpg" type="image/jpeg" height="2736"/>
         <media:title>P1000526</media:title>
         <media:thumbnail width="75" url="http://farm3.static.flickr.com/2695/4090128140_1119899107_s.jpg" height="75"/>
         <media:credit>Robb1e</media:credit>
      </item>
      <item>
         <title>twitter: @san1t1 I passed through your semi-rural location over the weekend, stayed in a small village with no mobile signal. Lovely.</title>
         <link>http://twitter.com/robb1e/statuses/5554541887</link>
         <description>robb1e: @san1t1 I passed through your semi-rural location over the weekend, stayed in a small village with no mobile signal. Lovely.</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5554541887</guid>
         <pubDate>Mon, 09 Nov 2009 00:50:15 -0800</pubDate>
      </item>
      <item>
         <title>twitter: @mwiththeat ah TechEd, good memories - not of sausages though, but you are in Germany this time, warmer in Barcelona I suspect</title>
         <link>http://twitter.com/robb1e/statuses/5554503572</link>
         <description>robb1e: @mwiththeat ah TechEd, good memories - not of sausages though, but you are in Germany this time, warmer in Barcelona I suspect</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5554503572</guid>
         <pubDate>Mon, 09 Nov 2009 00:46:43 -0800</pubDate>
      </item>
      <item>
         <title>twitter: @psychemedia @superdeluxesam I'm sorry, just back from a long weekend, what was the question? iPhone dev related I assume?</title>
         <link>http://twitter.com/robb1e/statuses/5537989911</link>
         <description>robb1e: @psychemedia @superdeluxesam I'm sorry, just back from a long weekend, what was the question? iPhone dev related I assume?</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5537989911</guid>
         <pubDate>Sun, 08 Nov 2009 10:59:51 -0800</pubDate>
      </item>
      <item>
         <title>twitter: anyone know where the 'Live Text' link and data went from the BBC football pages?</title>
         <link>http://twitter.com/robb1e/statuses/5202728287</link>
         <description>robb1e: anyone know where the 'Live Text' link and data went from the BBC football pages?</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5202728287</guid>
         <pubDate>Tue, 27 Oct 2009 08:15:41 -0700</pubDate>
      </item>
      <item>
         <title>twitter: listening to Hendrix on @tuberadiofm, sweet!</title>
         <link>http://twitter.com/robb1e/statuses/5197968190</link>
         <description>robb1e: listening to Hendrix on @tuberadiofm, sweet!</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5197968190</guid>
         <pubDate>Tue, 27 Oct 2009 04:02:44 -0700</pubDate>
      </item>
      <item>
         <title>twitter: My namesake estate agent sells very expensive property, wonder if I can a discount, or better still a cut!</title>
         <link>http://twitter.com/robb1e/statuses/5065731175</link>
         <description>robb1e: My namesake estate agent sells very expensive property, wonder if I can a discount, or better still a cut!</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5065731175</guid>
         <pubDate>Thu, 22 Oct 2009 02:44:39 -0700</pubDate>
      </item>
      <item>
         <title>twitter: this one is for @philhawksworth who didn't believe we were getting a shipping container of servers delivered http://tinyurl.com/yfeqx9n</title>
         <link>http://twitter.com/robb1e/statuses/5001016523</link>
         <description>robb1e: this one is for @philhawksworth who didn't believe we were getting a shipping container of servers delivered http://tinyurl.com/yfeqx9n</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/5001016523</guid>
         <pubDate>Mon, 19 Oct 2009 14:28:28 -0700</pubDate>
      </item>
      <item>
         <title>twitter: Guy asks someone obviously doing gas works in the street for a light. Really?</title>
         <link>http://twitter.com/robb1e/statuses/4911727431</link>
         <description>robb1e: Guy asks someone obviously doing gas works in the street for a light. Really?</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/4911727431</guid>
         <pubDate>Fri, 16 Oct 2009 01:54:15 -0700</pubDate>
      </item>
      <item>
         <title>twitter: Why doesn't the ITV Netplayer seem to have shows I want to watch, like the PIxar episode of the South Bank Show?</title>
         <link>http://twitter.com/robb1e/statuses/4894360115</link>
         <description>robb1e: Why doesn't the ITV Netplayer seem to have shows I want to watch, like the PIxar episode of the South Bank Show?</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/4894360115</guid>
         <pubDate>Thu, 15 Oct 2009 10:55:59 -0700</pubDate>
      </item>
      <item>
         <title>twitter: Wondering if I can get a discount on a wedding stuff if I rebuild a website, so many sites are just terrible... maybe I'm just a techo snob</title>
         <link>http://twitter.com/robb1e/statuses/4845301954</link>
         <description>robb1e: Wondering if I can get a discount on a wedding stuff if I rebuild a website, so many sites are just terrible... maybe I'm just a techo snob</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/4845301954</guid>
         <pubDate>Tue, 13 Oct 2009 14:40:06 -0700</pubDate>
      </item>
      <item>
         <title>twitter: #ipodpoetry put your iPod on shuffle and get the names of the first five songs, that's your ipodpoem thanks to Iain Camfield on @xfm</title>
         <link>http://twitter.com/robb1e/statuses/4729692588</link>
         <description>robb1e: #ipodpoetry put your iPod on shuffle and get the names of the first five songs, that's your ipodpoem thanks to Iain Camfield on @xfm</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/4729692588</guid>
         <pubDate>Fri, 09 Oct 2009 00:53:10 -0700</pubDate>
      </item>
      <item>
         <title>twitter: Dani California, Substitute, All the young dudes, When you were young, Alright. #ipodpoetry</title>
         <link>http://twitter.com/robb1e/statuses/4729667535</link>
         <description>robb1e: Dani California, Substitute, All the young dudes, When you were young, Alright. #ipodpoetry</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/4729667535</guid>
         <pubDate>Fri, 09 Oct 2009 00:50:53 -0700</pubDate>
      </item>
      <item>
         <title>twitter: @kerryb did you get a discount for creating a free promotional video? http://www.vimeo.com/6966920</title>
         <link>http://twitter.com/robb1e/statuses/4715762855</link>
         <description>robb1e: @kerryb did you get a discount for creating a free promotional video? http://www.vimeo.com/6966920</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/4715762855</guid>
         <pubDate>Thu, 08 Oct 2009 13:09:50 -0700</pubDate>
      </item>
      <item>
         <title>twitter: Two central line trains cancelled in a row, how annoying! Now it's going to get packed. Tube woe!</title>
         <link>http://twitter.com/robb1e/statuses/4623599829</link>
         <description>robb1e: Two central line trains cancelled in a row, how annoying! Now it's going to get packed. Tube woe!</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/4623599829</guid>
         <pubDate>Mon, 05 Oct 2009 00:59:04 -0700</pubDate>
      </item>
      <item>
         <title>twitter: @Eastmad @nicferrier @labete @superdeluxesam thanks for recommending Excalibur, was rather quite good, especially Merlin</title>
         <link>http://twitter.com/robb1e/statuses/4401500618</link>
         <description>robb1e: @Eastmad @nicferrier @labete @superdeluxesam thanks for recommending Excalibur, was rather quite good, especially Merlin</description>
         <author>Robbie Clutton</author>
         <guid isPermaLink="false">tag:twitter.com,2007:http://twitter.com/robb1e/statuses/4401500618</guid>
         <pubDate>Sat, 26 Sep 2009 13:41:11 -0700</pubDate>
      </item>
      <item>
         <title>iPhone development using standard web technologies</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/ddrv2BKwwmM/iphone-development-using-standard-web.html</link>
         <description>Fresh after giving my talk from BarCampBright4, I wanted to get my notes down from my session on iPhone development using standard web technologies. This all started when I wanted to do an iPhone application for my &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://code.google.com/p/latestscorestwitter/&quot;&gt;Latest Scores&lt;/a&gt; Twitter app. So I bought a book and made my way through it slowly, trying to decode Objective C before coming across the part I was really after, the UIWebView class. &lt;br /&gt;&lt;br /&gt;What I ended up arriving at was the ability to load and render a HTML file with it's own resources imported such as CSS, Javascript and images. The real magic in Objective C is this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;NSURL *url = [NSURL fileURLWithPath:[ [ NSBundle mainBundle ] pathForResource: @&quot;index&quot; ofType:@&quot;html&quot; ]];&lt;br /&gt;NSURLRequest *request = [NSURLRequest requestWithURL:url];&lt;br /&gt;[webView loadRequest:request];&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;What this is doing is creating a URL with a resource on the path called 'index' with the file extension 'html'. Build a request from this URL and pass the request into the instance of UIWebView. &lt;br /&gt;&lt;br /&gt;From that point, as long as all of the resources that the index page requires are bundled into the project, you can load the page and have that actually &lt;i&gt;be&lt;/i&gt; the application. &lt;br /&gt;&lt;br /&gt;So that's all nice if you have a certain type of application which doesn't require any device interaction. For example, if you had a blog/news site and wanted to make it into an application, you could just get the content and display. You can also change a few settings in a file called &lt;i&gt;info.plist&lt;/i&gt; to set the icon image and application name. &lt;br /&gt;&lt;br /&gt;That template project is available on GitHub, http://github.com/robb1e/iWeb&lt;br /&gt;&lt;br /&gt;However, if you want device interaction you'll need a richer framework, and that's where something like &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.phonegap.com&quot;&gt;PhoneGap.com&lt;/a&gt; comes in. With the abstracted Javascript file that works for iPhone, Blackberry and Android, functions are available to get access to the contact list, audio playback and other device features. &lt;br /&gt;&lt;br /&gt;To play an embedded audio resource for example, you can write the following Javascript, provided you've included the PhoneGap.js file.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;new Media('beep.wav').play(); &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;With both of these projects there is one caveat with Xcode in that it wants to compile Javascript files. You have to make sure you set those files as resources to copy, not to compile. This can be done in the target list on the left hand side.&lt;br /&gt;&lt;br /&gt;To extend the idea of using standard web technologies whilst not building web sites, this next example uses &lt;a rel=&quot;nofollow&quot;&gt;Adobe's AIR&lt;/a&gt; run time and the HTML, CSS, Javascript and image from the first example. This is also available on GitHub: http://github.com/robb1e/AirWeb&lt;br /&gt;&lt;br /&gt;By creating the application.xml file, you can tell Air to launch a file as the initial content and that will be rendered using it's &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://webkit.org/&quot;&gt;WebKit&lt;/a&gt; engine.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;content&amp;gt;www/index.html&amp;lt;/content&amp;gt;&lt;br /&gt;&lt;/code&gt; &lt;br /&gt;&lt;br /&gt;To run the desktop app, install the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.adobe.com/products/air/tools/sdk/&quot;&gt;Adobe AIR SDK&lt;/a&gt; then run the command:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;adl application.xml&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This launches the application in debug mode. To create an Air file, you need to compile using ADT. &lt;br /&gt;&lt;br /&gt;This has shown that using the same technologies and languages you'd use to build a web page can be used for both mobile devices with and without device interaction and client applications that are installed on a computer.&lt;br /&gt;&lt;br /&gt;There are other ways of achieving the same result using &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html&quot;&gt;Apple's web namespace tags&lt;/a&gt; in the markup with HTML5 tricks like &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3.org/TR/offline-webapps/&quot;&gt;offline storage&lt;/a&gt;. There's also other libraries like &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.jqtouch.com/&quot;&gt;jQTouch&lt;/a&gt;, so check out what else is around too.&lt;br /&gt;&lt;br /&gt;The &quot;write once, run anywhere&quot; idea may just be coming into reality .&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-5025255071025124781?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-5025255071025124781</guid>
         <pubDate>Sat, 05 Sep 2009 05:39:00 -0700</pubDate>
      </item>
      <item>
         <title>POKE - London DIgital Design Agency</title>
         <link>http://www.pokelondon.com/</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_2d61a1316b0d66fc8b72936501757e06</guid>
         <pubDate>Mon, 13 Jul 2009 09:47:38 -0700</pubDate>
      </item>
      <item>
         <title>Unix Station: chmod File Permissions</title>
         <link>http://www.december.com/unix/ref/chmod.html</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_d1632d45540a275111c81a706f7d2f73</guid>
         <pubDate>Mon, 01 Jun 2009 13:41:02 -0700</pubDate>
      </item>
      <item>
         <title>Metadata Cloud Gaming</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/ClKeBz5c4oo/metadata-cloud-gaming.html</link>
         <description>So, what the hell am I talking about? Let me give you a concrete example, and a personal wish list of mine for many a long year. &lt;br /&gt;&lt;br /&gt;When I was growing up, one of the most capturing games was Championship Manager. This allowed the player to experience running a club, from transfers, tactics, training and more. However, the thing it always missed was being able to actually play the game. In terms of actually playing the game, when I was younger, the &lt;span class=&quot;blsp-spelling-error&quot; id=&quot;SPELLING_ERROR_0&quot;&gt;FIFA&lt;/span&gt;/EA Sports combo was hard to beat, although now I prefer the &lt;span class=&quot;blsp-spelling-error&quot; id=&quot;SPELLING_ERROR_1&quot;&gt;Konami&lt;/span&gt; Pro Evolution Soccer range.&lt;br /&gt;&lt;br /&gt;I've always though that it'd be amazing to merge these two together, and I think now with Web2.0/Mashups/Cloud Computing and Web &lt;span class=&quot;blsp-spelling-error&quot; id=&quot;SPELLING_ERROR_2&quot;&gt;APIs&lt;/span&gt; this really should be possible. I could easily see a situation where as a gamer I could mash two of these together. For the tactical, and running of the game, I could use &lt;span class=&quot;blsp-spelling-corrected&quot; id=&quot;SPELLING_ERROR_3&quot;&gt;Championship&lt;/span&gt; Manager, and as a simulator for the actually games, I could use my game of choice. In this instance it really comes down to player stats. If I could load the game from &lt;span class=&quot;blsp-spelling-corrected&quot; id=&quot;SPELLING_ERROR_4&quot;&gt;Championship&lt;/span&gt; Manager, with the teams, players and 'stats' to boot, I could play out the game in my simulator and then upload the result along with &lt;span class=&quot;blsp-spelling-corrected&quot; id=&quot;SPELLING_ERROR_5&quot;&gt;accommodating&lt;/span&gt; stats into the cloud where my '&lt;span class=&quot;blsp-spelling-corrected&quot; id=&quot;SPELLING_ERROR_6&quot;&gt;managerial&lt;/span&gt;' game could pick them up from, and vice &lt;span class=&quot;blsp-spelling-error&quot; id=&quot;SPELLING_ERROR_7&quot;&gt;versa&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;blsp-spelling-corrected&quot; id=&quot;SPELLING_ERROR_8&quot;&gt;Really&lt;/span&gt;, this is ripe for the picking.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-7865437125241608793?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-7865437125241608793</guid>
         <pubDate>Sat, 16 May 2009 17:47:00 -0700</pubDate>
      </item>
      <item>
         <title>CouchDB - Getting Started</title>
         <link>http://books.couchdb.org/relax/getting-started</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_7aad690e9fa70b39ff0c744f23dd1d70</guid>
         <pubDate>Thu, 07 May 2009 07:16:23 -0700</pubDate>
      </item>
      <item>
         <title>BBQ.co.uk - great ideas for barbecuers</title>
         <link>http://www.bbq.co.uk/</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_9802fb9fe9d18b65b295910ac23bb7d4</guid>
         <pubDate>Tue, 05 May 2009 00:48:37 -0700</pubDate>
      </item>
      <item>
         <title>Twitter multi account manager &amp; brand monitor | Splitweet</title>
         <link>http://splitweet.com/</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_8e60b15da2b9de68ed61806d523337f7</guid>
         <pubDate>Thu, 30 Apr 2009 00:19:14 -0700</pubDate>
      </item>
      <item>
         <title>The Great Twitter Camera Migration</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/aRJqR0U45Ek/great-twitter-camera-migration.html</link>
         <description>I've just started a fun little side project called the 'Great Twitter Camera Migration', check it out: http://cameramigration.blogspot.com&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-7208635218636596709?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-7208635218636596709</guid>
         <pubDate>Sun, 26 Apr 2009 09:05:00 -0700</pubDate>
      </item>
      <item>
         <title>Pattie Maes demos the Sixth Sense | Video on TED.com</title>
         <link>http://www.ted.com/index.php/talks/pattie_maes_demos_the_sixth_sense.html</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_1c86965174389f8959294a625e2fc90d</guid>
         <pubDate>Tue, 24 Mar 2009 07:52:49 -0700</pubDate>
      </item>
      <item>
         <title>json-framework - Google Code</title>
         <link>http://code.google.com/p/json-framework/</link>
         <description>Objective C library for JSON parsing for use on the iPhone</description>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_5fb61a859785668e82899c9ec3bfd05f</guid>
         <pubDate>Mon, 23 Mar 2009 01:06:30 -0700</pubDate>
      </item>
      <item>
         <title>JSON on the iPhone</title>
         <link>http://www.mobileorchard.com/tutorial-json-over-http-on-the-iphone/</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_43eb233b5eb9b66bd6aba883fbe58877</guid>
         <pubDate>Sun, 22 Mar 2009 16:05:20 -0700</pubDate>
      </item>
      <item>
         <title>iPhone SDK Tutorial: Build a Simple RSS reader for the iPhone</title>
         <link>http://theappleblog.com/2008/08/04/tutorial-build-a-simple-rss-reader-for-iphone/</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_593658048f21144176c6b4ef68fcb1b8</guid>
         <pubDate>Sun, 22 Mar 2009 16:00:15 -0700</pubDate>
      </item>
      <item>
         <title>Command-line Fu &amp;lt; The best UNIX commands on the web</title>
         <link>http://www.commandlinefu.com/commands/browse</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_6084e3f34870e2432aba112ea691a6c8</guid>
         <pubDate>Mon, 09 Mar 2009 03:16:31 -0700</pubDate>
      </item>
      <item>
         <title>HOWTO: Install and use the latest FFmpeg and x264 - Ubuntu Forums</title>
         <link>http://ubuntuforums.org/showthread.php?t=786095</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_ffeabdb0a10f5b54196657530bd81302</guid>
         <pubDate>Sun, 08 Mar 2009 08:45:19 -0700</pubDate>
      </item>
      <item>
         <title>Linux Shell Scripting Tutorial</title>
         <link>http://www.freeos.com/guides/lsst</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_14b4385b3f4db79b411caf342cda856b</guid>
         <pubDate>Fri, 06 Mar 2009 03:42:02 -0800</pubDate>
      </item>
      <item>
         <title>XFM Bot</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/wQJ3FUzL0hQ/xfm-bot.html</link>
         <description>Just put together an XFM bot to scrobble the xfm.co.uk radio station recently played tracks and push that into Last.FM. &lt;br /&gt;&lt;br /&gt;How compatible are you?&lt;br /&gt;&lt;br /&gt;http://last.fm/user/xfmbot&lt;br /&gt;&lt;br /&gt;Source code is here: http://github.com/robb1e/xfmscrobbler/tree/master&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-257114131168393192?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-257114131168393192</guid>
         <pubDate>Thu, 26 Feb 2009 08:09:00 -0800</pubDate>
      </item>
      <item>
         <title>Rubular: a Ruby regular expression editor and tester</title>
         <link>http://rubular.com/</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_8c4cc43caf1af96e9d4e9f0b175a20c9</guid>
         <pubDate>Tue, 24 Feb 2009 09:28:39 -0800</pubDate>
      </item>
      <item>
         <title>Vendor Driven Architecture</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/HshGAiGgy1E/vendor-driven-architecture.html</link>
         <description>So, you have your off the shelf application driving some important business process, maybe it doesn't quite do everything you need so you think about altering the application through plugins, changing source code or otherwise. Some of these changes may drive you further away from that off the shelf's product road map, making upgrading later difficult and expensive. Perhaps you don't intend to alter the code, but you may think that later on there may be a better off the shelf product that suites the needs of the business and that changing solutions is the best thing to do.&lt;br /&gt;&lt;br /&gt;Depending on how these tools are used really drives the way these tools should be deployed and designed into a business process. If you only have one client talking to this application, you probably don't need to think too hard about how to solve this problem. However, if you have multiple clients wanting to talk to this application, you may want to give it some thought. If you have multiple clients, accessing the application in multiple different ways, then you definitely want to think about this problem.&lt;br /&gt;&lt;br /&gt;I'm not an advocate of big design up front, but what I'm proposing isn't that exactly. What I'm suggesting is capturing the data model and contract of interactions early and use this as a way of driving an abstraction layer between the off the shelf product and the clients using that product. By doing this, you've isolated the application, meaning you can upgrade easier even if there are breaking changes, and you can introduce additional application logic all behind the safely of a contract and data model. After you've done this, anyone who uses your abstraction layer, need not know what you're using underneath. The way it should be really. This also defines a contract for working against, meaning that applications who talk to the abstraction layer can be tested easier against known behaviours. &lt;br /&gt;&lt;br /&gt;We can start to push the boat out a little here and start thinking about roles and policy for access. There maybe different types of clients and users who wish to use the abstraction layer, and they may have different permissions and access to different resources, so how can you control access and protect your resources? You may be able to control that at the application layer, but what if you've added plug ins or additional application logic layers? And what if you change the application which manages permissions, and how do you bind them to the resources at the abstraction layer? It may be better to think in terms of the abstraction layer and data model rather than what's behind the lines of the abstraction. This way, binding to resources will be easier to control. While we're dealing with authorisation, authenticaion doesn't stray far, you'll want a way to authenticate the clients and users attempting to use the abstraction layer, and you may want that authentication to come from multiple sources, say a database user store, or an internal directory service. This will make it easier for those users to gain access to the systems, and easier to administer access through roles and policies of clients and users.&lt;br /&gt;&lt;br /&gt;What we now have is a platform. An off the shelf application with or without additional application logic, wrapped with an abstracted and understood data model which must be accessed via an authenticaion and authorisation mechanism. Put a bow on it, you're done.&lt;br /&gt;&lt;br /&gt;Depending on your network security preferences, you could now expand this in two ways. For every off the shelf product you employ for different business processes, you could put an abstraction layer on it with an understood data model and give access to that abstraction via the same authentication and authorisation layer you've created for the first platform, or you could replicate the authenticaion and authorisation layer and have lots of self contained, secured platforms. It doesn't particularly matter which is employed, but what should fall out of this is a common data model across several platforms, with a uniform authentication and authorisation layer.&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://4.bp.blogspot.com/_Pg4v3Lep7Dc/SYgjO1xugtI/AAAAAAAAATY/B5rkSe7xgyg/s1600-h/vendordrivenarchitecture.png&quot;&gt;&lt;img style=&quot;margin:0pt 10px 10px 0pt;float:left;cursor:pointer;width:320px;height:253px;&quot; src=&quot;http://4.bp.blogspot.com/_Pg4v3Lep7Dc/SYgjO1xugtI/AAAAAAAAATY/B5rkSe7xgyg/s320/vendordrivenarchitecture.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5298523699462177490&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;br /&gt;It does raise the question of why you'd want to be doing this in the first place, you are after all creating more work than strictly necessary. There is a temptation to say &quot;if we're building this abstraction layer, we may as well replace the off the shelf component itself&quot;. Well, let's not get ahead of ourselves. We have to remember where the business value comes from, and that's generally in products and services, not business support and operational support systems themselves. However, by abstracting the applications used and exposing the data, the cost of integration, migration and maintenance is lowered. This model can be applied to internal exposures and for exposing data on the web.&lt;br /&gt;&lt;br /&gt;I just want to close with what I believe is the most important aspect here, and this is the business case. There is a business case for abstraction, but it does come at a cost. What it brings is contractual interactions and can lead to common, agreed upon resource based exposure.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-7006987936274026324?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-7006987936274026324</guid>
         <pubDate>Fri, 30 Jan 2009 08:55:00 -0800</pubDate>
         <media:thumbnail width="72" url="http://4.bp.blogspot.com/_Pg4v3Lep7Dc/SYgjO1xugtI/AAAAAAAAATY/B5rkSe7xgyg/s72-c/vendordrivenarchitecture.png" height="72" xmlns:media="http://search.yahoo.com/mrss/"/>
      </item>
      <item>
         <title>The fall of &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot;&amp;hellip;</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/zTBNu-VApV8/fall-of-zavvi-along-with-several-other.html</link>
         <description>The fall of &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://news.bbc.co.uk/1/hi/business/7798973.stm&quot;&gt;Zavvi&lt;/a&gt; along with several other soon to be notable high street absentees and the troubles the banking system has been going through has got me thinking. &lt;br /&gt;&lt;br /&gt;First I want to tackle failure of business processes. Zavvi's main reason for going out of business, according to the press was a domino affect from Woolworth's going into administration. Zavvi relied heavily on Woolworth's wholesale as a source of DVDs and CDs. From the outside in, it seems Zavvi operated with wholesale distributors of goods rather than dealing directly with manufactures. There's nothing wrong with that of course, however, if you deal with a middle man who goes out of business than you're left scrambling looking for a replacement at the same costs. No doubt, if you have one middle man, you've probably aligned prices closely (albeit probably a given percentage above) the distributor. &lt;br /&gt;&lt;br /&gt;Why wasn't this adequately highlighted as a risk? Why only have one supplier? If you must have one supplier, at least have a good idea of alternatives at the drop of a hat if that risk is realised. &lt;br /&gt;&lt;br /&gt;This comes nicely into my second point, it almost seems that Zavvi have suffered a misapplication of the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Toyota_Production_System&quot;&gt;Toyota Production System&lt;/a&gt; in that they pulled stock into their store as to minimise inventory, and therefore waste. Keeping the time between ordering from the wholesaler to getting into the customers hands is a worthy goal to aim for. After all, unsold stock is not money in the bank. But again, this raises the risk of only having one core supplier.&lt;br /&gt;&lt;br /&gt;Moving onto Woolworth's itself, I find myself asking what Woolworth's actually sells and the only answer I can fathom is that it's a general store. They never specialised in anything, meaning that they never had the buying power to lower their prices and pass the savings onto their customers leaving them with a breadth of stock. In my opinion that stock wasn't a breadth of high end stock, it was a breadth of medium to low end goods, odds and ends and overly priced electrical/entertainment goods. If I needed a new set of tea towels, brilliant, but for the floorspace they wouldn't be able to justify just selling bits and bobs like that. &lt;br /&gt;&lt;br /&gt;This leaves me asking, who are your customers, and what differentiates you from your competitors? &lt;br /&gt;&lt;br /&gt;Finally, how can you expect to survive charging the prices both Zavvi and Woolworth's seemed happy to charge? In both stores I could find a product, say a DVD, from a fairly well known internet only business, play.com, cheaper that wasn't even on sale than on the highsteet in post Christmas/liquidation sales. Play.com does advertise nationally on TV, radio and in print, and although I won't argue the brand awareness between Woolworths and Play.com, it's not like people couldn't find Play.com. &lt;br /&gt;&lt;br /&gt;I guess after all is said and done, as a business you need to know your customers, know your competitors, know your business processes and understand your risks and how to mitigate those risks. On top of that, I'd like to add you should always be asking these questions, always looking for improvements and changes.&lt;br /&gt;&lt;br /&gt;Just look at Tesco, boy have they changed! They seem to know what their customers want, and are constantly changing, adding new product lines in store and online.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-5437584561839451817?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-5437584561839451817</guid>
         <pubDate>Sat, 27 Dec 2008 09:41:00 -0800</pubDate>
      </item>
      <item>
         <title>Doing the Right thing vs Doing it right</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/KsvuDS1zYtE/doing-right-thing-vs-doing-it-right.html</link>
         <description>There was one lightening talk at XPDay that has stuck in my head, and I want to try to reproduce the discussion here. I'm sure I'll get some details wrong, but you'll just have to bare with me. The talk was on doing the right thing verses doing it right.&lt;br /&gt;&lt;br /&gt;If you look at the image below, you'll see an XY graph, along the Y axis is doing the right thing, i.e. building the right solution. Along the X axis is doing it right, i.e. building the solution well. There was some studies into these metrics, but I don't know what it is, so I'm just going to use pseudo numbers.&lt;br /&gt;&lt;br /&gt;In the lower left quadrant, you'll see doing the wrong thing, and doing it badly. The cost of the project is greater than the average IT project, and the revenue is lower than expected. In the upper left quadrant your doing the right thing, but you're doing it wrong. Your costs are still larger than average but you are making more revenue as you're building the required product. In the bottom right you're doing the wrong thing, but you're doing it well so your costs are lower than average, but your revenue isn't as good as expected. In the top right, you're doing the right thing and you're doing it well. Your costs are lower than average, and your revenue is higher than expected.&lt;br /&gt;&lt;br /&gt;Now, of course, this is abstract and to be taken with a large pinch of salt, but there are some interesting deductions to be made. Firstly, we were told that according to the study, it's near impossible to go from building the right thing badly to building the right thing well. Looking at the rest, it seems intuitive that if you were doing the wrong thing badly, you'd want to do the right thing badly before doing the right thing well, but in actual fact, it's less costly and more efficient to do the wrong thing well and progress to building the right thing well. &lt;br /&gt;&lt;br /&gt;So, where's your project on the quadrant, where do you want to be and how to you want to get there?&lt;br /&gt;&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://farm4.static.flickr.com/3027/3121959307_915d70ee02.jpg?v=1229781706&quot;&gt;&lt;img style=&quot;cursor:pointer;width:500px;height:375px;&quot; src=&quot;http://farm4.static.flickr.com/3027/3121959307_915d70ee02.jpg?v=1229781706&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-2269977139242527117?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-2269977139242527117</guid>
         <pubDate>Sat, 20 Dec 2008 05:49:00 -0800</pubDate>
      </item>
      <item>
         <title>Software Development: By Way</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/I5OqJO-ce_4/software-development-by-way.html</link>
         <description>I tend to think the way libraries and frameworks are made could easily be applied to teams and projects. When building an application, generally you focus on solving the business problem with the best tools available. When you move onto the next problem, you might have that eureka moment where you find that there are sub parts of the new problem which overlaps with the previous problem. The fact that you've already solved this problem, means you'd be silly not to reuse that. Thus, you have identified a common functionality, and if you extract that into a new library, you have reusable code across more than one project. Brilliant. &lt;br /&gt;&lt;br /&gt;The other way that you'd come across common functionality is through conversation. In true water cooler mannerisms, this will often be coincidental, but again, if you can identify commonality and extract that, you are deriving business value. Not only are you reusing something, meaning time can be saved and all teams benefit from faster delivery, but with more eyes on the same code, the chances of that becoming more robust grow. &lt;br /&gt;&lt;br /&gt;So far we mentioned code, but this could just as easily be process and tools, like build scripts, deployment practices, server provisioning and lots more too. The key is to make discovery, and sharing easy. I think the key here is relationships and communication. &lt;br /&gt;&lt;br /&gt;I think this model can be applied to projects too, where new projects are spawned to develop/manage commonality, this team doesn't necessarily have to consist of full time staff, it could be part time or ad-hoc, but there should always be a project owner/lead even if the project is sleeping. Anyone should feel they can contribute to the project, for the benefit of all the teams, even if there are full timers on the project.&lt;br /&gt;&lt;br /&gt;I think, over time, this will form a network of loosely joined teams surrounding a handful of core projects, almost like atoms around a nucleus. I see these core projects being things like:&lt;br /&gt;&lt;br /&gt;* build scripts, including testing tools and reporting&lt;br /&gt;* logging and monitoring scripts&lt;br /&gt;* deployment processes&lt;br /&gt;* network and hardware management and provisioning&lt;br /&gt;* data access layers (especially if all projects share common relations like customers) &lt;br /&gt;* service access layers, for accessing hosted services&lt;br /&gt;* user interface asset management &lt;br /&gt;* hosted tools support, e.g. source control, software repositories, wikis, mailing lists, story tracking, continuous integration boxes etc&lt;br /&gt;&lt;br /&gt;There's probably a bunch more too. But as I mentioned earlier, relationships are probably the most important aspect here. Establishing a community between the project leads and another for the wider developer group across all the projects will help, but you have to support the community, let it flourish. The more the community collaborates and communicates the more they'll drive towards commonality and reuse. Of course, people will have different ideas and prefer different tools, and that should be supported as long as the principle of spinning out or contributing to projects carries on.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-8551927070500982591?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-8551927070500982591</guid>
         <pubDate>Sat, 20 Dec 2008 04:34:00 -0800</pubDate>
      </item>
      <item>
         <title>XPDay Review</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/B3y3HpGalqs/xpday-review.html</link>
         <description>On Thursday and Friday of last week I showed up at XPDay, and attended some cool sessions including:&lt;br /&gt;&lt;br /&gt;Nat Pryce on TDD of async code: http://www.natpryce.com/articles/000755.html&lt;br /&gt;&lt;br /&gt;Matt Wynne on Lean Engineering: http://blog.mattwynne.net/2008/12/14/slides-from-xp-day-talk/&lt;br /&gt;&lt;br /&gt;Had some interesting discussions with some cool people including:&lt;br /&gt;&lt;br /&gt;http://gojko.net/tag/xpday08/&lt;br /&gt;&lt;br /&gt;So, I was interested in Gojko Anzic's open space session on the new Fitnesse SLIM implemenation. It looks like it's much, much easier to wrap domain objects instead of creating fixture classes for testing. It's not quite ready yet, but I'm looking forward to a stable release. &lt;br /&gt;&lt;br /&gt;There was also an interesting keynote from Marc Baker of LeanUK.org (http://www.leanuk.org/pages/about_team_marc_baker.htm) on his experiences of introducing lean principles into the NHS.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-1806689591028462825?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-1806689591028462825</guid>
         <pubDate>Mon, 15 Dec 2008 08:16:00 -0800</pubDate>
      </item>
      <item>
         <title>La PhotoFactory</title>
         <link>http://www.photofactory.fr/uk/</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_2e8cc24827ff4d7a6d5d410ec567da12</guid>
         <pubDate>Mon, 15 Dec 2008 00:21:01 -0800</pubDate>
      </item>
      <item>
         <title>Lean Software Engineering</title>
         <link>http://leansoftwareengineering.com/</link>
         <guid isPermaLink="false">8vLND2N03BGbhg_g1vC6Jw_c3898dc8e58f6462423603d5a2127454</guid>
         <pubDate>Fri, 12 Dec 2008 03:11:56 -0800</pubDate>
      </item>
      <item>
         <title>XP Day 2008</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/GMOvo9saxzo/xp-day-2008.html</link>
         <description>If you're attending, I'm presenting with &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://ragstorooks.wordpress.com/&quot;&gt;Rags&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://smartrics.blogspot.com&quot;&gt;Fabs&lt;/a&gt; on Friday morning. Hope to see you there.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-7707697793753609791?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-7707697793753609791</guid>
         <pubDate>Tue, 09 Dec 2008 10:12:00 -0800</pubDate>
      </item>
      <item>
         <title>Why I'm begining to dislike frameworks</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/Y5BKR_uVbGg/why-im-begining-to-dislike-frameworks.html</link>
         <description>I've been having discussions with &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://twitter.com/ddunwoody&quot;&gt;David&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://twitter.com/drpep&quot;&gt;Dr Pep&lt;/a&gt; over the last few days about the pros and cons of development frameworks. This is probably a measure a my increasing level of cynisium but I found myself looking at a framework that &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://twitter.com/n0gg1n/status/1020742263&quot;&gt;T4&lt;/a&gt; was looking at and thought to myself &quot;what is this framework going to stop me doing?&quot;&lt;br /&gt;&lt;br /&gt;David raises the point of the productivity curve; in most cases when picking up a new library or framework doing the 'hello world' stuff is easy and your productivity is high. As you come across issues or want to solve more complicated puzzles your productivity drops as you struggle with the design choices of others.&lt;br /&gt;&lt;br /&gt;I think one way in which these frameworks can be assessed is asking how much will it cost you to remove it? We're currently using &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.symfony-project.org&quot;&gt;Symfony&lt;/a&gt;, a PHP MVC framework, and it follows this pattern exactly. It's easy to get started, and doing easy things is easy, but when we want to stray off the beaten path, we get beaten ourselves. The documentation is sparce, and if we decided to use something other that Symfony, we might as well re-write our project.&lt;br /&gt;&lt;br /&gt;Now, I'm not trying to start a Symfony bashing dialog, I'm just using it as an example. In fact, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://twitter.com/milan/status/1023253328&quot;&gt;Milan&lt;/a&gt; makes the point that this particular framework is Open Source, and if we have problems, we should commit something back to the project. Which is the right way to view this.&lt;br /&gt;&lt;br /&gt;It still doesn't stop me from having second thoughts about using a framework again. Give me swapable libraries everytime.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-635609262485287803?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-635609262485287803</guid>
         <pubDate>Fri, 28 Nov 2008 08:21:00 -0800</pubDate>
      </item>
      <item>
         <title>How Sainsburys are Coming into the 21st Century</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/AE7ySkkHLps/how-sainsburys-are-coming-into-21st.html</link>
         <description>I was in my local Sainsburys the other day, doing my shopping (what else?). As I was at the checkout I noticed a few things.&lt;br /&gt;&lt;br /&gt;First, you've probably noticed at the checkout gift cards for iTunes, or something similar, however what I'd noticed this time was what I want to call a &quot;student food card&quot;. This is a two part card, one for topping up the account, one for using credit from the account. This is plainly aimed at the concerned parent who wants to make sure their kids are eating properly whilst at university. Those parents who do not want to put money into their kids account so they can spend it on nights out and pot noddles for dinner (though the flaw here being that Sainsburys sell booze too, but we'll brush over that). I did think though that this could be used the other way round too, what about someone with an aging parent or perhaps a lowly paid sibling. Wouldn't you want to make sure they were eating properly too?&lt;br /&gt;&lt;br /&gt;So, I thought that was cool, but there was a little more to come.&lt;br /&gt;&lt;br /&gt;Second, there were no bags at the checkout, I told the cashier who told me they'd stopped putting bags out. She pointed me to a sign which I'd ignored as an 'out of bags' sign, saying as much. Sainsburys in environmental awareness are trying to get their customers to reuse their bags, so you now have to ask for carrier bags. They've given store points away for ages for reusing bags but obviously isn't having the desired affect. &lt;br /&gt;&lt;br /&gt;One of the things they're doing to help their customers is providing a free SMS reminder service. You send a message saying when you usually go shopping and it sends you a reminder a few hours before, saying not to forget your bags. &lt;br /&gt;&lt;br /&gt;This could be a tentative first step, but I can see much more here. They're only providing this until the end of the year, but how about linking this to my store points card and instead of charging me for SMS, remove some of those points. Also, by combining your mobile to your store card just think of the data mining possibilities. You wouldn't have to tell them when you go shopping they have that data. Also, what better direct marketing would you like? Sainsburys have about ten years data on me, they have a pretty good idea what I buy and when and could send me special offers just for me, with some kind of code that a cashier could enter.&lt;br /&gt;&lt;br /&gt;We'll see what happens. It's an odd combination of convenience and scariness.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-595271967057476537?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-595271967057476537</guid>
         <pubDate>Thu, 13 Nov 2008 00:42:00 -0800</pubDate>
      </item>
      <item>
         <title>Agile Software Development and Black Swans</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/jz7gWwaiOx4/agile-software-development-and-black.html</link>
         <description>Throughout reading the excellent book, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.amazon.co.uk/Black-Swan-Impact-Highly-Improbable/dp/0141034599/ref=sr_1_6?ie=UTF8&amp;s=books&amp;qid=1225237972&amp;sr=8-6&quot;&gt;Black Swan, by Nassim Nicolas Taleb&lt;/a&gt;, I was trying to think of scenarios and examples I that I've seen that I could apply to what Taleb was talking about. Although I don't really follow economics, I did find myself thinking about agile software development.&lt;br /&gt;&lt;br /&gt;I don't want to go into what Black Swans are, other than to say they represent a highly improbable event, if you want to know more, pick up a copy of the book. Essentially, Taleb says that when a Black Swan occurs the affects can be disastrous because they are often ignored when calculating risks. Of course, many Black Swans are unknown unknowns, so how can you measure something like that? Well, you can't, but as the saying goes, &quot;it's better to be broadly right then precisely wrong&quot;.&lt;br /&gt;&lt;br /&gt;So, how does this apply to agile? Well, the way I've practiced it, it's about drilling out uncertainty by planning a prioritised work stack for a limited scope (generally 3 months). This minimises risk by only addressing immediate and near term issues, allowing a project to be flexible (think broadly right rather than precisely wrong). The daily stand ups, acceptance demos and retrospectives are all forums for identifying risk early in the hope of lowering the overall risk to a project delivery. Finally, and above all, agile and it's practices of test driven design, continuous integration and burn down charts display empirical evidence of delivery, rather than anecdotal.&lt;br /&gt;&lt;br /&gt;In todays software world where it's acceptable to delivery functional, if not complete, applications into service, why wouldn't you want to work with a limited prioritised stack with empirical evidence to demonstrate readiness?&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-4897996184030740101?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-4897996184030740101</guid>
         <pubDate>Tue, 28 Oct 2008 16:36:00 -0700</pubDate>
      </item>
      <item>
         <title>Re-Developing an Application using TDD against an Establised API</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/NugRcD7fZrQ/re-developing-application-using-tdd.html</link>
         <description>The last few months have provided an interesting experiment to test our application testing. For several reasons that I won't go into, we decided to rebuild one of our web services, and we made the decision to try and keep as many of the tests we had as possible. We found out quite quickly that moving unit tests to a new project when you're redesigning a system just isn't feasible. Our unit tests were too tightly tied to the design (well, that's the point of test driven design right?). However, our acceptance tests which tests our API as a black box was a perfect candidate to measure our progress.&lt;br /&gt;&lt;br /&gt;It turned out to be more useful then we'd realised. When you have working black box tests, you can do whatever you want to the internals of the application as you already have appropriate tests to validate the application. This is exactly what we did. &lt;br /&gt;&lt;br /&gt;We could happily start turning on our acceptance tests as and when we felt a feature was implemented. By insisting that we should not change these tests, it gives a an excellent benchmark for completeness. Of course, this is quite a rare occurrence, but it goes to show that if you test at different layers of your application and regard APIs or interfaces as unchangeable, you can re-implement to your hearts content.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-3795256152756329687?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-3795256152756329687</guid>
         <pubDate>Tue, 16 Sep 2008 03:32:00 -0700</pubDate>
      </item>
      <item>
         <title>Convergence, Divergence, Convience and Quality</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/EAzDi2rxlyQ/convergence-divergence-convience-and.html</link>
         <description>When I got my first job, I was really keen to get a great stereo. At the time the thinking was that to get quality music playback, hi-fi separates ware the way forward. Each component was stand alone, loosely joined by standard interconnects (phono, coaxial or fibre optics), and was easily replaced, upgraded or repaired without affecting the rest of the product. This was opposed to a hi-fi that when, say the CD player breaks, you need to replace the whole damm thing. &lt;br /&gt;&lt;br /&gt;Now the trend is convergence, as &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://twitter.com/DrPep/statuses/916349355&quot;&gt;Dr. Pep mentions&lt;/a&gt;, I have been tempting him, and myself, into buying an iPhone. The obvious comparison is the iPhone is convergence personified. It's a mobile phone, a 3G device, it's wifi enabled, a MP3 player, a GPS receiver and a pseudo computer that fits in your pocket.&lt;br /&gt;&lt;br /&gt;What happens if one of those features breaks, or you need to change the battery? Well, it seems your in trouble. But that's the price for convenience. The alternative is a mobile phone (with or without 3G access), a laptop with wifi and a 3G dongle, a MP3 player and a GPS receiver. You can of course get other devices than the iPhone that do many of these things, but let's face it, they not an iPhone.&lt;br /&gt;&lt;br /&gt;So here's the dilemma, I want to upgrade/get new features like GPS and 3G access. But I already have an iPod, a mobile phone and a wifi enabled laptop. If I were to buy the iPhone, do I throw this all away? If so, it becomes an expensive upgrade.&lt;br /&gt;&lt;br /&gt;Does it follow that, more convergence means less devices, means more time on a single device, means wearing that divice out sooner, means expensive upgrades more often? How does having one be and end all device affect my battery life, I don't want to be have to plug something in every four hours.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-1085629091071246744?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-1085629091071246744</guid>
         <pubDate>Wed, 10 Sep 2008 02:58:00 -0700</pubDate>
      </item>
      <item>
         <title>Pushing the Boundaries of Testing and Continuous Integration</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/NWpAtf1-w6Q/pushing-boundaries-of-testing-and.html</link>
         <description>At Agile2008, I had the opportunity to present an experience report with two colleague's &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://ragstorooks.wordpress.com/&quot;&gt;Raghav&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://smartrics.blogspot.com/&quot;&gt;Fabrizio&lt;/a&gt; about bringing robustness and performance testing into your development cycle and continuous build. Below is the video, along with the slides. Enjoy.&lt;br /&gt;&lt;br /&gt;The submission can also be &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://submissions.agile2008.org/node/1929&quot;&gt;read here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;    &lt;iframe class=&quot;embeddedvideo&quot; src=&quot;http://www.vimeo.com/moogaloop.swf?clip_id=1518047&amp;amp;server=www.vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;400&quot; height=&quot;300&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.vimeo.com/1518047?pg=embed&amp;amp;sec=1518047&quot;&gt;Pushing the Boundaries of Testing and Continuous Integration&lt;/a&gt; from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.vimeo.com/user483528?pg=embed&amp;amp;sec=1518047&quot;&gt;Robbie Clutton&lt;/a&gt; on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://vimeo.com?pg=embed&amp;amp;sec=1518047&quot;&gt;Vimeo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;width:425px;text-align:left;&quot; id=&quot;__ss_551374&quot;&gt;&lt;a rel=&quot;nofollow&quot; style=&quot;font:14px Helvetica, Arial, Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;&quot; target=&quot;_blank&quot; href=&quot;http://www.slideshare.net/robb1e/pushing-the-boundaries-of-continuous-integration?src=embed&quot; title=&quot;Pushing The Boundaries Of Continuous Integration&quot;&gt;Pushing The Boundaries Of Continuous Integration&lt;/a&gt;&lt;iframe class=&quot;embeddedvideo&quot; src=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=pushingtheboundariesofcontinuousintegrati-1218524763192354-9&amp;stripped_title=pushing-the-boundaries-of-continuous-integration&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/iframe&gt;&lt;div style=&quot;font-size:11px;font-family:tahoma, arial;height:26px;padding-top:2px;&quot;&gt;View SlideShare &lt;a rel=&quot;nofollow&quot; style=&quot;text-decoration:underline;&quot; target=&quot;_blank&quot; href=&quot;http://www.slideshare.net/robb1e/pushing-the-boundaries-of-continuous-integration?src=embed&quot; title=&quot;View Pushing The Boundaries Of Continuous Integration on SlideShare&quot;&gt;presentation&lt;/a&gt; (tags: &lt;a rel=&quot;nofollow&quot; style=&quot;text-decoration:underline;&quot; target=&quot;_blank&quot; href=&quot;http://slideshare.net/tag/agile&quot;&gt;agile&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; style=&quot;text-decoration:underline;&quot; target=&quot;_blank&quot; href=&quot;http://slideshare.net/tag/agile2008&quot;&gt;agile2008&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; style=&quot;text-decoration:underline;&quot; target=&quot;_blank&quot; href=&quot;http://slideshare.net/tag/testing&quot;&gt;testing&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; style=&quot;text-decoration:underline;&quot; target=&quot;_blank&quot; href=&quot;http://slideshare.net/tag/performance&quot;&gt;performance&lt;/a&gt;)&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-5462721421118194341?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-5462721421118194341</guid>
         <pubDate>Wed, 13 Aug 2008 02:20:00 -0700</pubDate>
      </item>
      <item>
         <title>Enterprise Agile vs Start Up Agile</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/nZoDuW7BVXE/enterprise-agile-vs-start-up-agile.html</link>
         <description>Discussions in the office typically bring interesting conversation, and as I head to Agile2008 (I sit on the flight whilst writing this), I wanted to ask what's the difference between enterprise agile and start up agile, and how does that difference affect not just the maintainability of the products build, but also the innovation of the respective engineering group?&lt;br /&gt;&lt;br /&gt;There is always the classic trade off between feature delivery and quality, but is it really the case that startups are generally exempt from these quality metrics? If this is the case, what other practices can be put in place instead of code metrics? &lt;br /&gt;&lt;br /&gt;One of my memorably quotes from high school was my physics teacher, Mr Shave. He said to the class 'you can never prove anything, you can only disprove something'. This applies here with quality metrics. Code coverage, convention and duplication don't prove quality in code, even intergration testing or robustness and performance testing do not prove anything, they only dis-prove that your system doesn't fail under certain conditions. However, all of these steps do increase confidence in a product, and that is an integral part of any product development (confidence that is). &lt;br /&gt;&lt;br /&gt;You can still not do any of this and be agile right? These practices are generally incoraged, but agile is about customer engagement and acceptance and if you're customer knows what they're getting and they accept your stories then it's OK right? What is enterprise agile anyway? Do enterprise developers build a product, deliver it into an in-life team and then move on? Does that require higher confidence as you're handing over? Is a start up developer likely to support that product in-life and as such be more likely to stick around, fix issues and add functionality?&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-3630035013664165705?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-3630035013664165705</guid>
         <pubDate>Sat, 02 Aug 2008 21:31:00 -0700</pubDate>
      </item>
      <item>
         <title>GMail Log4J Appender</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/agnZTHpQ9FI/gmail-log4j-appender.html</link>
         <description>Application logging is vital for diagnostics on a server product, but there can be so much, how can you tell what to watch or follow? Through tools like Log4J, you can have separate logs for different levels (typically debug, info, error and fatal). In Log4J, these are called log appenders, they can be anything from console or file based, or custom log appenders. One of the custom appenders I've been playing with recently is email logging. Our team has some excellent scripts written by Senor DB which scan log files for patterns and send email reports based on it's findings. I wanted to see if I could add application logging directly into the application. I wanted an email based appender and here's how I got that.&lt;br /&gt;&lt;br /&gt;Now, there is an SMTPAppender in the Log4J package, but I wanted to use GMail, and the Log4J appender doesn't quite set up properly for GMail. I used Spring implementation of JavaMail for sending emails and extended the SMTPAppender in the log4J package. The method you'll be most interested in overriding is 'append', this gets called when your log is called into action depending on the settings in your log4j configuration.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; public GmailAppender() {&lt;br /&gt; super();&lt;br /&gt; notifier = new JavaMailSenderImpl();&lt;br /&gt; notifier.setHost(&quot;smtp.gmail.com&quot;);&lt;br /&gt; notifier.setPort(587);&lt;br /&gt; notifier.setUsername(yourGmailEmailAddress);&lt;br /&gt; notifier.setPassword(yourGmailEmailPassword);&lt;br /&gt; Properties props = new Properties();&lt;br /&gt; props.setProperty(&quot;mail.smtp.auth&quot;, &quot;true&quot;);&lt;br /&gt; props.setProperty(&quot;mail.smtp.starttls.enable&quot;, &quot;true&quot;);&lt;br /&gt; notifier.setJavaMailProperties(props); &lt;br /&gt; &lt;br /&gt; try {&lt;br /&gt; InetAddress addr = InetAddress.getLocalHost();&lt;br /&gt; hostname = addr.getHostName();&lt;br /&gt; } catch (UnknownHostException e) {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For brevity, I've used the constructor to build the notifier (JavaMailSenderImpl from Spring) with desired properties, you can just as easily use properties in the log4j config, and I'll do just that for the host name (which for me means which IP address the application is running on). You can see above we've set the STMP host for Gmail with the port, email address and password for the email to be sent from. The little extra bit of magic is the properties 'mail.smtp.auth' and 'mail.smpt.starttls.enable'. The last is to get the default machine name.&lt;br /&gt;&lt;pre&gt; &lt;br /&gt; @Override&lt;br /&gt; public void append(LoggingEvent event) {&lt;br /&gt; &lt;br /&gt; super.append(event);&lt;br /&gt; SimpleMailMessage message = new SimpleMailMessage();&lt;br /&gt; StringBuilder builder = new StringBuilder();&lt;br /&gt; builder.append(getLayout().format(event));&lt;br /&gt; String[] stackTrace = event.getThrowableInformation().getThrowableStrRep();&lt;br /&gt; for(int i = 0; i &amp;lt; stackTrace.length; i++)&lt;br /&gt; builder.append(stackTrace[i] + &quot;&amp;#92;n&quot;);&lt;br /&gt; message.setText(builder.toString());&lt;br /&gt; message.setTo(emailAddress);&lt;br /&gt; message.setSubject(event.getLevel().toString() + &quot; on host &quot; + hostname);&lt;br /&gt; try{&lt;br /&gt; notifier.send(message);&lt;br /&gt; } catch (MailException ex){&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;Using the SimpleMailMessage (again from Spring), we add the text, the address and subject. The parts to grasp here are the layout and the stack trace. The layout is derived from your configuration, this is where you'd typically set the log message/heading including timestamp, thread name and other supporting information. Passing the event to the 'getLayout().format(event)' method returns this nicely formatted string. Then to get the stack trace we grab the array (each element being a line in the stack trace) from the event throwable information method. Someone thought that a method name indicating that your getting a string should pass back that array instead of adding new line characters, so we have to fix that before setting the text as the message body. Finally, we construct a useful subject containing the log level and host/IP address.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;log4j.appender.mail=com.iclutton.GmailAppender&lt;br /&gt;log4j.appender.mail.Threshold=ERROR&lt;br /&gt;log4j.appender.mail.layout=org.apache.log4j.PatternLayout&lt;br /&gt;log4j.appender.mail.layout.ConversionPattern=%d{ISO8601} [%t] %-5p [%C{1}.%M() %L] - %m%n&lt;br /&gt;log4j.appender.mail.hostname=important-live-server&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I've mentioned the configuration a few times, and here is the basic one comprising the full path to the class, the threshold (meaning the lowest level to log at, I don't want an email for every debug log entry after all). There's the pattern I mentioned before, this pattern includes the date, threadname, level name, class, method and line number, then the message and a new line. Finally there's the host name. Each instance of my application has a different name to identify it, typically something development, staging, production. To enable that property in the class, simply add a Spring like named setter:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; public void setHostname(String hostname){&lt;br /&gt; this.hostname = hostname;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;Properties like this can be set if you want to have the username/password of your GMail account configurable or anything else for that matter, just don't forget to set it on the JavaMailSenderImpl object before sending the email in the append method.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-7443027049443101507?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-7443027049443101507</guid>
         <pubDate>Sat, 02 Aug 2008 17:27:00 -0700</pubDate>
      </item>
      <item>
         <title>Some Guiding Principles for Supporting Production Apps</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/emWNRo9goqs/some-guiding-principles-for-supporting.html</link>
         <description>I just finished a two week rotation supporting our production web services and wanted to jot down some thoughts. This coincided with being sent a link to a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselman.com/blog/SomeGuidingPrinciplesForSoftwareDevelopment.aspx&quot;&gt;Scott Hanselman blog post&lt;/a&gt; about guiding principles of software development which really enjoyed reading. I thought I'd extend a few of those now I've come out of my support rotation an enlightened developer (I hope).&lt;br /&gt;&lt;br /&gt;Although Scott's blog is for Windows/.NET development, there's lots of goodies in there which can be applied to any language or ported to any language. I'd like to narrow in on the support based principles: tracing (logging) and error handling. &lt;br /&gt;&lt;br /&gt;Scott mentions that for critical/error/warn logging, your audience is not a developer. Well in this case, I am, however, I may not know the application, so I need as much information as I can get. This leads me onto my first extension; transaction IDs.&lt;br /&gt;&lt;br /&gt;Now, there's two kinds of transaction IDs really, especially when dealing with a service based application. One is every invocation of your service should be given a unique ID and that should be passed around the code (and logged against) until the path returns to the client. Depending on your application, this could get really noisy, but a multi-threaded application could benefit from such information. Second is a resource/task based ID, if a service does something (let's call it A), but the execution path returns to the client before A is complete, the ID for A should be returned to the client and this ID should live through the execution of A and stored or achieved accordingly. In terms of logging, when ever you come across this ID, use it. This generally follows for all IDs, if you have an ID, use it when logging.&lt;br /&gt;&lt;br /&gt;With error handling, it's accepted that catching a generic exception is bad, although permissible if at the boundary of your application. If you must catch 'Exception' or 'RuntimeException', log it and use at least a error condition. It's a generic exception for a reason and that reason is you don't know what happened.&lt;br /&gt;&lt;br /&gt;AOP is a great technique for logging, don't be frightened (and this goes with all logging) to use it everywhere. &lt;br /&gt;&lt;br /&gt;Moving onto a topic glanced upon, but not thoroughly explored; configuration. If building a server product, config is your friend. When things go bad and you need to re-wire your application, not having to do a code change is a massive benefit. If the config is dynamically read, that's even better as it won't require a restart to the server. &lt;br /&gt;&lt;br /&gt;Lastly, think about your archive mechanism and think about what data you'll need to preserve and for how long. Ideally, from that data, execution paths should be interpretable, at least at a high level. &lt;br /&gt;&lt;br /&gt;Oh, and please be kind to your support team, make it easy for them to gather information about your application. If an application is one of many, consider implementing a common health/management (and provisioning if you can) interface.&lt;br /&gt;&lt;br /&gt;I think putting together a list of principles like this is a great idea, each engineering group should think about the ways they work and how to drive commonality across products. Teams shouldn't be scared of thinking about support throughout the development process either, although they've been hearing the same thing about security for years ;)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-8923273698691928213?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-8923273698691928213</guid>
         <pubDate>Mon, 14 Jul 2008 15:33:00 -0700</pubDate>
      </item>
      <item>
         <title>Scott Hansleman podcast with the Poppendieck's</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/nzm6GxdwX6w/scott-hansleman-podcast-with.html</link>
         <description>A great podcast which deserves it's own post to comment on it. Mary Poppendieck really came out with some cracking soundbites including:&lt;br /&gt;&lt;br /&gt;* product teams should be driven by profit and loss, not by on-time, on-budget, in-scope, customer satisfaction and quality.&lt;br /&gt;* engineering and business - it's not them and us, it should be all of us&lt;br /&gt;* no excuse for IT people to be separate (organisational) from the business if IT&lt;br /&gt;* If IT it routine (email etc), outsourcing is fine, how innovate can your email be? If building core competencies, outsourcing is generally a bad idea&lt;br /&gt;* leverage workers intelligence to deliver, management should be leaders, not micro managers&lt;br /&gt;&lt;br /&gt;loads of good stuff, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.hanselminutes.com/default.aspx?showID=136&quot;&gt;check it out!&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-8502968267731627602?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-8502968267731627602</guid>
         <pubDate>Tue, 08 Jul 2008 13:13:00 -0700</pubDate>
      </item>
      <item>
         <title>A Day at OpenTech</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/AgcpF7ru6c8/day-at-opentech.html</link>
         <description>I spent my Saturday at the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ukuug.org/events/opentech2008&quot;&gt;OpenTech&lt;/a&gt; conference in London and it was a day well spent. I do have to learn to go and listen to new things though, although talks from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://tommorris.org/&quot;&gt;Tom Morris &lt;/a&gt;(who I later met for the first time), &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://simonwillison.net/&quot;&gt;Simon Willison&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://gavinbell.com/&quot;&gt;Gavin Bell&lt;/a&gt; were interesting, those were subjects I already knew about or were aware about to a fair degree. What did strike me however were some of the last sessions by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.tomski.com/&quot;&gt;Tom Loosemore&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://adrideo.com/&quot;&gt;Chris Jackson&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Between them they told stories which included building a peer-to-peer TV network for persisted content, and a project to become 'the DNS for media'. I've always had an interest in home entertainment, and these talks made my eyes light up. I'm really pleased to see that Tom has posted his &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.tomski.com/2008/07/opentech_2008_presentation.shtml&quot;&gt;presentation.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tom's 'impossibox' was capable of storing 1TBs worth of media data, roughly a months worth. If that were to be networked in a P2P fashion, you could have months of recorded TV, redundantly stored in every house on your street. I think this plays into the networks hands here as well. This isn't real time data and can be sync'd, or you can download a program or series at the networks leisure without breaking net neutrality. Throw in, if there were 100 such networked boxes with a mile's radius, chances are you could take care of the P2P sharing at the local exchange so you wouldn't even need to push large amounts of data all over the place.&lt;br /&gt;&lt;br /&gt;Although this future is a 'slightly bonkers' version, it sparks the imagination. Just think of the social networking benefits of being able to capture this data, see friends recommendations, read comments, video mashups, trailers, directors (or other users) commentaries. So much potential.&lt;br /&gt;&lt;br /&gt;Great talk.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-1375609412286705854?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-1375609412286705854</guid>
         <pubDate>Mon, 07 Jul 2008 12:00:00 -0700</pubDate>
      </item>
      <item>
         <title>Data, Data all around</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/mfR0UIO_zYk/data-data-all-around.html</link>
         <description>I attended &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://2gether08.com/&quot;&gt;2gether08&lt;/a&gt; today for the afternoon and walked into a very interesting discussion on making data public. Now following the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.freeourdata.org.uk/&quot;&gt;Free Our Data&lt;/a&gt; campaign from the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.guardian.co.uk/theguardian/technologyguardian/technology&quot;&gt;Guardian&lt;/a&gt; I've had a keen interest on the subject. Many points were discussed from innovating on this newly available data, to cost savings for doing so through to privacy issues surrounding private data (such as medical records) and data which people seem to give away freely through social sites such as Facebook and finally data which people give away to serve a better experience (think supermarket club card, or Google search).&lt;br /&gt;&lt;br /&gt;One of the interesting points raised was about who the public tend to put their trust in, and maybe not so surprisingly, it's not the government. There is a trend that people are giving or putting more data into corporate entities, be they your favoured supermarket, accountant or bank. An interesting point was raised by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.whatfettle.com/&quot;&gt;Paul Downey&lt;/a&gt; that although he does online banking, he doesn't have the same trust in Yahoo! to mashup his banking data through Pipes or some other such technology, this is mainly due to banks be regulated authorities.&lt;br /&gt;&lt;br /&gt;The conversation moved on and touched upon escrow like accounts for personal data and this got me thinking about identity. As we move towards tools like OpenID and OAuth, the thought occurred to me, would you log into your bank with your OpenID? If your OpenID provider isn't regulated, or even in the same country as you, would you trust it enough with potential access to your online bank? Let me turn that question around a bit now, if you're OpenID provider was a regulated authority, perhaps the bank in question or even some government department - would that change your answer?&lt;br /&gt;&lt;br /&gt;The final question left in my mind was, that with a few people thinking about decentralised escrow like data accounts, could you trust people to look after their own data? I know that when I carry my passport with me, I get slightly paranoid. I also know that after losing 2 or 3 hard discs over the last 10 years, I'm not sure I'd want that responsibility. What I do know is that I hate repeating myself, and if government bodies can share data easier between themselves, and if there's a way I can authorise companies to share my data in a way that makes my life easier to lead, I might just buy into that.&lt;br /&gt;&lt;br /&gt;I suppose with the level of data that may become available, the responsibility may shift somewhat with who owns, maintains and secures that data.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-332072469180831356?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-332072469180831356</guid>
         <pubDate>Wed, 02 Jul 2008 15:19:00 -0700</pubDate>
      </item>
      <item>
         <title>Confusion and Patience</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/hzfX7dVuSFo/confusion-and-patience.html</link>
         <description>I find it interesting that, as a developer, I tend to have very low patience for poor user experience. I sometimes feel stupid if I fail to use a piece of technology, though these are often kiosk based applications like checking in at an airport.&lt;br /&gt;&lt;br /&gt;Then conversely, it seems that some people go out of the way to make something more complicated. Earlier today I renewed my Arsenal membership. There are several levels of membership and several variations of each.&lt;br /&gt;&lt;br /&gt;* Junior&lt;br /&gt;* Red&lt;br /&gt;* Silver&lt;br /&gt;* Gold&lt;br /&gt;* Platinum&lt;br /&gt;&lt;br /&gt;I just want the cheap option is which priority booking for match tickets, now there are four payment options.&lt;br /&gt;&lt;br /&gt;* Lite&lt;br /&gt;* Lite DD&lt;br /&gt;* Full&lt;br /&gt;* Full DD&lt;br /&gt;&lt;br /&gt;I couldn't find the difference between Lite and Full, and the DD stands for Direct Debit, which is a payment option, surely not a membership option.&lt;br /&gt;&lt;br /&gt;I just can't stand stuff like this, why do people go out of their way to make it harder for me to go about my day? Too many options are bad, make it clear what I'm getting. As for the crappy kiosk applications, I'm impatient and as such am likely to make mistakes, be forgiving and make it transparent what's going on.&lt;br /&gt;&lt;br /&gt;I have to say, I think the London Underground have got it right with their ticket machines (though this may be as I'm used to travelling on the system - I actually found San Francisco's train network fairly confusing even though the premise is very simple). They have big colourful buttons on a touch screen, where I can easily search for the ticket I need for my journey.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-6123269007661905352?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-6123269007661905352</guid>
         <pubDate>Sun, 29 Jun 2008 09:07:00 -0700</pubDate>
      </item>
      <item>
         <title>Bear vs Shark strikes again - TV Billboards</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/i5wFWRhLGv8/bear-vs-shark-strikes-again-tv.html</link>
         <description>Driving to San Francisco today, I saw a disturbing site - a TV Billboard. This was not a revolving billboard with three rotating adverts, this was a twenty odd foot TV display on a major motorway. &lt;br /&gt;&lt;br /&gt;I've always found billboards a distraction when driving, so I wonder how TV based versions will go down. I can just imagine these being indiscriminately targeted at their audience; coffee shops for morning commute, alcohol and restaurants for evening commutes, toys and games for the school runs and the list goes on. &lt;br /&gt;&lt;br /&gt;It's just another step.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-4035374986931127644?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-4035374986931127644</guid>
         <pubDate>Tue, 10 Jun 2008 21:16:00 -0700</pubDate>
      </item>
      <item>
         <title>How .Net is becoming more like Java everyday</title>
         <link>http://feedproxy.google.com/~r/RobbieClutton/~3/f9Y7viw1PCc/how-net-is-becoming-more-like-java.html</link>
         <description>I've noticed that the .Net community appears to becoming more like Java everyday, and it's nothing to do with the language. I haven't built any commercial .Net applications in over a year, but I have been using Java a lot of the last 6 months or so. While I don't rate Java as a language above or below any others (they all have plus/minus points after all), the most powerful thing about Java , in my opinion, is the community. &lt;br /&gt;&lt;br /&gt;The amount of tools around the language is amazing, with arguably the best product being the Spring Framework. What I've noticed in the .Net community is a movement they're calling &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.altdotnet.org&quot;&gt;Alt.Net&lt;/a&gt;, which is embracing broad terms like agile and open source. The way I see it is that, whatever you think of the .Net Framework, it'll never do everything that everyone wants, just like the Java runtime will never be. These are people who have ideas and are moving towards community based development and moving away from reliance on Mircosoft.&lt;br /&gt;&lt;br /&gt;This moves the discussion on somewhat, with all the new languages available on top of Java and .Net, the next arguments won't be Java vs .Net, it'll be JRE (Java Runtime Environment) vs CLR/DLR (Common/Dynamic Language Runtime). Both have a Ruby implementation, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://jruby.codehaus.org/&quot;&gt;JRuby&lt;/a&gt; on the JRE and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.ironruby.net/&quot;&gt;IronRuby&lt;/a&gt; on the DLR among a whole bunch of others. The only thing holding .Net back is Linux deployment, but the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.mono-project.com&quot;&gt;Mono Project&lt;/a&gt; is trying to solve that problem, and as they come more mature, it'll be interesting to see what runtime people will be deploying on. Will the amount of runtimes get smaller while the choice of language on each grows? I'm not sure, but I'll be watching.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23992350-7853701497687653452?l=blog.iclutton.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>Robbie</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-23992350.post-7853701497687653452</guid>
         <pubDate>Sat, 24 May 2008 07:07:00 -0700</pubDate>
      </item>
   </channel>
</rss>
<!-- fe1.pipes.sp1.yahoo.com uncompressed/chunked Tue Nov 24 00:26:00 PST 2009 -->
