<?xml version="1.0" encoding="utf-8"?>
<cargowire>
  <contributors>
    <contributor id="1" name="C Rowe" nickname="Craig">
      <urls>
        <url>http://cargowire.net</url>
      </urls>
      <emails />
    </contributor>
    <contributor id="2" name="M Pike" nickname="Matt" />
    <contributor id="3" name="A Fan" nickname="范英霞" />
    <contributor id="4" name="P Anstey" nickname="Pete" />
    <contributor id="5" name="D McDermid" nickname="Dave" />
    <contributor id="6" name="T Smith" nickname="Tristan" />
    <contributor id="7" name="J McDonald" nickname="Joe" />
  </contributors>
  <categories>
    <category id="1" item="Website" list="Websites" />
    <category id="2" item="Program" list="Programs" />
    <category id="3" item="Multimedia" list="Multimedia Items" />
    <category id="4" item="General" list="General Stuff" />
    <category id="5" item="Development" list="Development" />
    <category id="6" item="Project52" list="Project52" externalhref="http://project52.info/" />
    <category id="7" item="Event" list="Events" />
    <category id="8" item="Featured" list="Featured" />
  </categories>
  <companies>
    <company id="1" name="BTP" url="http://btpuk.com" />
    <company id="2" name="Bluesulphur" url="http://www.bluesulphur.com" />
    <company id="3" name="Headscape" url="http://www.headscape.co.uk" />
    <company id="4" name="Dootrix" url="http://www.dootrix.com" />
  </companies>
  <urlset xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9  http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd  http://cargowire.net/cargowire-sitemap  http://cargowire.net/cargowire-sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:cargowire-sitemap="http://cargowire.net/cargowire-sitemap" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <url>
      <loc>http://cargowire.net/</loc>
      <lastmod>2012-06-04</lastmod>
      <changefreq>weekly</changefreq>
      <priority>1</priority>
      <cargowire-sitemap:pathandquery accesskey="1" showinnav="1">/</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Home</cargowire-sitemap:title>
      <cargowire-sitemap:subtitle>The Homepage</cargowire-sitemap:subtitle>
    </url>
    <url>
      <loc>http://cargowire.net/blog</loc>
      <lastmod>2012-11-24 16:30</lastmod>
      <changefreq>weekly</changefreq>
      <priority>1</priority>
      <cargowire-sitemap:pathandquery accesskey="2" showinnav="1">/blog</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Blogs</cargowire-sitemap:title>
      <cargowire-sitemap:subtitle>Things I think about</cargowire-sitemap:subtitle>
    </url>
    <url>
      <loc>http://cargowire.net/blog/joiningdootrix</loc>
      <lastmod>2012-11-24</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="blog" uri="joiningdootrix">/blog/joiningdootrix</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Joining Dootrix</cargowire-sitemap:title>
      <cargowire-sitemap:description>Very gradual change you can believe in.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/blog/change_thumb.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/blog/polygotdotnetdev</loc>
      <lastmod>2012-07-04</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="blog" uri="polygotdotnetdev">/blog/polygotdotnetdev</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>.NET Web Development, you know you want to...</cargowire-sitemap:title>
      <cargowire-sitemap:description>Secretly... no really, it could be	your new guilty pleasure... ...maybe I can convince you.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/blog/smashingmag.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/blog/shouldwealllearntocode</loc>
      <lastmod>2012-06-04</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="blog" uri="shouldwealllearntocode">/blog/shouldwealllearntocode</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Should everyone learn to code?</cargowire-sitemap:title>
      <cargowire-sitemap:description>Learn to code? not learn to code? argue about who should learn, when and why?.. definitely.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/blog/code.gif" />
    </url>
    <url>
      <loc>http://cargowire.net/blog/barnsite</loc>
      <lastmod>2012-04-03</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="blog" uri="barnsite">/blog/barnsite</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>The Barn site is live!</cargowire-sitemap:title>
      <cargowire-sitemap:description>For the last few weeks I've been pulling together the concept of 'The Barn'.  Ostensibly it's a company blog, but to me it's a bit nicer than that.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/blog/barn.gif" />
    </url>
    <url>
      <loc>http://cargowire.net/blog/bcbomo4</loc>
      <lastmod>2012-03-07</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="blog" uri="bcbomo4">/blog/bcbomo4</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Barcamp Bournemouth 4</cargowire-sitemap:title>
      <cargowire-sitemap:description>This time with added hackspace.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/events/bcbomo.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/blog/wp7vsiphone</loc>
      <lastmod>2012-02-16</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="blog" uri="wp7vsiphone">/blog/wp7vsiphone</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>WP7 vs iPhone</cargowire-sitemap:title>
      <cargowire-sitemap:description>And why I'm back to my iPhone 4.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/blog/lumiaiphone.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/blog/newdesign</loc>
      <lastmod>2012-02-05</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="blog" uri="newdesign">/blog/newdesign</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Cargowire has a new design</cargowire-sitemap:title>
      <cargowire-sitemap:description>And why getting a pro designer on board is awesome</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/blog/newdesign.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/blog/bemiddleclass</loc>
      <lastmod>2011-01-15</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="blog" uri="bemiddleclass">/blog/bemiddleclass</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Why you should try to be a middle class developer</cargowire-sitemap:title>
      <cargowire-sitemap:description>And how I can get an iconic comedy sketch into a blog about devs</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/bemiddleclass.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles</loc>
      <lastmod>2010-02-21</lastmod>
      <changefreq>weekly</changefreq>
      <priority>1</priority>
      <cargowire-sitemap:pathandquery accesskey="2" showinnav="1">/articles</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Articles</cargowire-sitemap:title>
      <cargowire-sitemap:subtitle>Things I think about</cargowire-sitemap:subtitle>
    </url>
    <url>
      <loc>http://cargowire.net/articles/admityousuck</loc>
      <lastmod>2011-01-15</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="admityousuck">/articles/admityousuck</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Admit you suck</cargowire-sitemap:title>
      <cargowire-sitemap:description>What should be your new years resolution?</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/admityousuck.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/commoncode</loc>
      <lastmod>2010-08-29</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="commoncode">/articles/commoncode</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Thoughts on Common Code...</cargowire-sitemap:title>
      <cargowire-sitemap:description>Some ramblings on maintaining a common codebase for web projects including thoughts on the less hyped benefits.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/commoncode.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/extendingxml</loc>
      <lastmod>2010-04-05</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="extendingxml">/articles/extendingxml</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Extending Xml: Two birds with one stone?</cargowire-sitemap:title>
      <cargowire-sitemap:description>Mini post introducing extending Xml with a few examples from cargowire.net</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/extendingxml.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/joeltest11</loc>
      <lastmod>2010-02-21</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="joeltest11">/articles/joeltest11</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>The Joel Test #11</cargowire-sitemap:title>
      <cargowire-sitemap:description>
				During the Boagworld 200 show Drew Mclellan, Rachel Andrew, Paul Stanton and I
				discussed the Joel Test.  One of the tests we didn't get on to was test number 11...
			</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/joeltest.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/dotnetdev102</loc>
      <lastmod>2010-01-28</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="dotnetdev102">/articles/dotnetdev102</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>.NET Dev 101 (part 2)</cargowire-sitemap:title>
      <cargowire-sitemap:description>A follow-up to my .NET Dev 101 rant from early 2009. Aimed at beginner to intermediate .NET devs.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/dotnetdev102.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/xslfordesigners</loc>
      <lastmod>2010-01-20</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="xslfordesigners">/articles/xslfordesigners</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>XSL for Designers?</cargowire-sitemap:title>
      <cargowire-sitemap:description>An intro to XSL using CSS as a basis for comparison. Applicable to designers and developers alike.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/xslfordesigners.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/playwithpipes</loc>
      <lastmod>2010-01-11</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="playwithpipes">/articles/playwithpipes</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Paginate and filter with Yahoo Pipes</cargowire-sitemap:title>
      <cargowire-sitemap:description>
				An intro to how Yahoo pipes can be utilised to paginate, and filter multiple datasources into one
				feed.  Useful to delegate the hard work, leaving your code to handle just the desired content.
			</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/playwithpipes.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/usefulfordotnetdev</loc>
      <lastmod>2010-01-04</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="usefulfordotnetdev">/articles/usefulfordotnetdev</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>What's useful for a .NET Dev?</cargowire-sitemap:title>
      <cargowire-sitemap:description>
				Towards the end of last year I had some correspondance with a Boagworld listener who
				was interested to know what kind of resources I used for both dev and just plain keeping up to date... here it is in lovely blog post stylé.
			</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/useful.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/cargowiremvcrouting</loc>
      <lastmod>2009-12-06</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="cargowiremvcrouting">/articles/cargowiremvcrouting</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Cargowire MVC: Routing</cargowire-sitemap:title>
      <cargowire-sitemap:description>
				Cargowire is now running .NET MVC.  This is the first in an intended series of articles
				discussing the implementation and changeover from .NET WebForms... starting with Routing
				and URL design.
			</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/routing.jpg" />
    </url>
    <url uri="xmlexplicitiseasy">
      <loc>http://cargowire.net/articles/xmlexplicitiseasy</loc>
      <lastmod>2009-11-05</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="xmlexplicitiseasy">/articles/xmlexplicitiseasy</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Xml Explicit Always Sucks</cargowire-sitemap:title>
      <cargowire-sitemap:description>
				You and I both know that if you ever venture into the world of SQL Server's XML explicit, you usually
				end up regretting it. So here's a brief example of how it works.. just to refresh your memory.
			</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/explicit.jpg" />
    </url>
    <url>
      <loc>http://boagworld.com/development/why-dotnet-mvc-and-why-should-we-care</loc>
      <lastmod>2009-08-18</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles">http://boagworld.com/development/why-dotnet-mvc-and-why-should-we-care</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Why .NET MVC? (and why should we care?)</cargowire-sitemap:title>
      <cargowire-sitemap:description>An intro and brief take on .NET MVC and what it means particularly in reference to WebForms.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/letters.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/seamlessubuntuwindows</loc>
      <lastmod>2009-08-09</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="seamlessubuntuwindows">/articles/seamlessubuntuwindows</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Ubuntu gets inside Windows</cargowire-sitemap:title>
      <cargowire-sitemap:description>A run down on my experiences of getting my pre-existing Ubuntu install to run inside VirtualBox on vista.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/ubuntu.jpg" />
    </url>
    <url uri="donthatemeformydotnet">
      <loc>http://cargowire.net/articles/donthatemeformydotnet</loc>
      <lastmod>2009-05-02</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="donthatemeformydotnet">/articles/donthatemeformydotnet</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Don't hate me for my .NET</cargowire-sitemap:title>
      <cargowire-sitemap:description>A quick airing of my thoughts on .NET after plenty of discussions with haters and lovers alike.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/macwindows.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/ourfirstairapp</loc>
      <lastmod>2009-02-13</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="ourfirstairapp">/articles/ourfirstairapp</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Our First AIR App</cargowire-sitemap:title>
      <cargowire-sitemap:description>A Boagworld post on the experiences of Dave McDermid and I in creating a simple AIR application.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/airapp.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/whyyoushouldmakeyourownsite</loc>
      <lastmod>2008-11-30</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="whyyoushouldmakeyourownsite">/articles/whyyoushouldmakeyourownsite</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Why you should make your own site</cargowire-sitemap:title>
      <cargowire-sitemap:description>A developers view: Thoughts on the benefits of starting from scratch</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/portfolio/cargowire.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/cacheexpirationscheduling</loc>
      <lastmod>2008-10-25</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="cacheexpirationscheduling">/articles/cacheexpirationscheduling</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Cheap Scheduling with Cache Expiration</cargowire-sitemap:title>
      <cargowire-sitemap:description>Need scheduled activities but don't or can't create a service?</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/scheduling.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/dateformattinginxml</loc>
      <lastmod>2008-10-18</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="dateformattinginxml">/articles/dateformattinginxml</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Dateformatting in XML</cargowire-sitemap:title>
      <cargowire-sitemap:description>Simple way to format dates using .net objects and xml/xslt.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/calendar.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/dotnetobjectsinxml</loc>
      <lastmod>2008-10-12</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="dotnetobjectsinxml">/articles/dotnetobjectsinxml</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>.NET objects in XML</cargowire-sitemap:title>
      <cargowire-sitemap:description>Need to get extra functionality into your xsl transforms?</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/net.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/articles/threedimensionalknowledgerepresentation</loc>
      <lastmod>2005-09-29</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="articles" uri="threedimensionalknowledgerepresentation">/articles/threedimensionalknowledgerepresentation</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>3D Knowledge Representation [Dissertation]</cargowire-sitemap:title>
      <cargowire-sitemap:description>An investigation into, and prototyping of, a multimedia solution to the representation of a field of study.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/3dknowledge.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/projects</loc>
      <lastmod>2011-09-26</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery accesskey="3" showinnav="1">/projects</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Projects</cargowire-sitemap:title>
      <cargowire-sitemap:subtitle>Things I'm making</cargowire-sitemap:subtitle>
    </url>
    <url>
      <loc>http://cargowire.net/projects/boagworld-ios</loc>
      <lastmod>2012-09-09</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="projects" uri="boagworld-ios">/projects/boagworld-ios</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Boagworld - iPhone App</cargowire-sitemap:title>
      <cargowire-sitemap:description>A Boagworld app that lets you access, search and read Boagworld (including podcasts and quick tips) and Headscape Barn content.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/portfolio/boagworldapp.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/projects/repo-me</loc>
      <lastmod>2012-08-19</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="projects" uri="repo-me">/projects/repo-me</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Repo Me - wordpress plugin</cargowire-sitemap:title>
      <cargowire-sitemap:description>A wordpress plugin that can be used to request posts based on modified dates returning titles/excerpts/bodies categories and any requested custom fields.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/articles/placeholder.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/projects/rulebasedthemes</loc>
      <lastmod>2012-03-25</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="projects" uri="rulebasedthemes">/projects/rulebasedthemes</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Rule Based Themes - wordpress plugin</cargowire-sitemap:title>
      <cargowire-sitemap:description>A wordpress plugin that, based on user created rules provides a class string to be used [probably on the body element] in your css.</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/portfolio/rulebasedthemes.gif" />
    </url>
    <url>
      <loc>http://cargowire.net/projects/redshift</loc>
      <lastmod>2011-11-26</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="projects" uri="fullfrontal2011">/projects/redshift</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Alpha Labs</cargowire-sitemap:title>
      <cargowire-sitemap:description>In association with Microsoft, Nokia and One Dot Zero</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/portfolio/alphalabs.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/portfolio</loc>
      <lastmod>2009-08-29</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery accesskey="4" showinnav="1">/portfolio</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Portfolio</cargowire-sitemap:title>
      <cargowire-sitemap:subtitle>Things I've made</cargowire-sitemap:subtitle>
    </url>
    <url>
      <loc>http://cargowire.net/events</loc>
      <lastmod>2011-12-03</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery accesskey="4" showinnav="1">/events</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Events</cargowire-sitemap:title>
      <cargowire-sitemap:subtitle>Things I've seen</cargowire-sitemap:subtitle>
    </url>
    <url>
      <loc>http://cargowire.net/events/fullfrontal2011</loc>
      <lastmod>2011-11-11</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="events" uri="fullfrontal2011">/events/fullfrontal2011</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Full Frontal 2011</cargowire-sitemap:title>
      <cargowire-sitemap:description>Client-side by the seaside</cargowire-sitemap:description>
      <cargowire-sitemap:image src="/content/images/events/fullfrontal.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/events/dconstruct2011</loc>
      <lastmod>2011-09-02</lastmod>
      <changefreq>never</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery showinnav="0" parent="events" uri="dconstruct2011">/events/dconstruct2011</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>dConstruct 2011</cargowire-sitemap:title>
      <cargowire-sitemap:description />
      <cargowire-sitemap:image src="/content/images/events/dconstruct.jpg" />
    </url>
    <url>
      <loc>http://cargowire.net/about</loc>
      <lastmod>2009-08-29</lastmod>
      <changefreq>monthly</changefreq>
      <priority>1</priority>
      <cargowire-sitemap:pathandquery accesskey="6" showinnav="1" rel="me">/about</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>About</cargowire-sitemap:title>
      <cargowire-sitemap:subtitle>What is cargowire</cargowire-sitemap:subtitle>
    </url>
    <url>
      <loc>http://cargowire.net/interesting</loc>
      <lastmod>2009-11-29</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.5</priority>
      <cargowire-sitemap:pathandquery accesskey="5" showinnav="0">/interesting</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Links</cargowire-sitemap:title>
      <cargowire-sitemap:subtitle>Sites of interest</cargowire-sitemap:subtitle>
    </url>
    <url>
      <loc>http://cargowire.net/notes</loc>
      <lastmod>2009-08-29</lastmod>
      <changefreq>monthly</changefreq>
      <priority>1</priority>
      <cargowire-sitemap:pathandquery showinnav="0">/notes</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Notes</cargowire-sitemap:title>
    </url>
    <url>
      <loc>http://cargowire.net/thebarn</loc>
      <lastmod>2010-02-21</lastmod>
      <changefreq>daily</changefreq>
      <priority>1</priority>
      <cargowire-sitemap:pathandquery showinnav="0">/thebarn</cargowire-sitemap:pathandquery>
      <cargowire-sitemap:title>Headscape Barn</cargowire-sitemap:title>
    </url>
  </urlset>
  <attended>
    <events>
      <event type="minor" id="24" uri="altitude2013">
        <name>Altitude 2013</name>
        <urls>
          <url type="external" href="http://altitude.io/">Altitude</url>
        </urls>
        <img title="Altitude" alt="" src="/Content/images/events/altitude.jpg" />
        <credits>
          <start display="February 27">2013-02-27</start>
          <end display="27 2013">2013-02-27</end>
        </credits>
        <location>Portsmouth, UK</location>
      </event>
      <event type="minor" id="23" uri="ddd10">
        <name>DevDevDev 2012</name>
        <urls>
          <url type="external" href="http://www.developerdeveloperdeveloper.com/ddd10/">DevDevDev</url>
        </urls>
        <img title="DevDevDev" alt="" src="/Content/images/events/ddd.jpg" />
        <credits>
          <start display="September 1">2012-09-01</start>
          <end display="1 2012">2012-09-01</end>
        </credits>
        <location>Reading, UK</location>
      </event>
      <event type="minor" id="22" uri="bcbomo4">
        <name>Barcamp Bournemouth 4</name>
        <urls>
          <url type="external" href="http://www.barcampbournemouth.org/">Barcamp Bournemouth 4</url>
          <url type="blog" href="/blog/bcbomo4">Barcamp Bournemouth 4</url>
        </urls>
        <img src="/Content/images/events/bcbomo.jpg" alt="" title="Barcamp Bournemouth" />
        <credits>
          <start display="Mar 3rd">2012-03-03</start>
          <end display="4th 2012">2012-03-04</end>
        </credits>
        <location>Bournemouth, UK</location>
      </event>
      <event type="major" id="21" uri="fullfrontal2011">
        <name>FullFrontal '11</name>
        <urls>
          <url type="external" href="http://2011.full-frontal.org/">Full Frontal</url>
        </urls>
        <img src="/Content/images/events/fullfrontal.jpg" alt="" title="Full Frontal Conf" />
        <credits>
          <start display="Nov 11th">2011-11-11</start>
          <end display="11th 2011">2011-11-11</end>
        </credits>
        <location>Duke of Yorks, Brighton UK</location>
      </event>
      <event type="major" id="20" uri="dconstruct2011">
        <name>dConstruct '11</name>
        <urls>
          <url type="external" href="http://2011.dconstruct.org/">dConstruct</url>
        </urls>
        <img src="/Content/images/events/dconstruct.jpg" alt="" title="dConstruct" />
        <credits>
          <start display="Sept 2nd">2011-09-02</start>
          <end display="2nd 2011">2011-09-02</end>
        </credits>
        <location>Brighton Dome, UK</location>
      </event>
      <event type="major" id="19" uri="sxsw2011">
        <name>SXSW '11</name>
        <urls>
          <url type="external" href="http://sxsw.com/interactive">SXSW Interactive</url>
        </urls>
        <img src="/Content/images/events/sxsw.jpg" alt="" title="SXSW Interactive '11" />
        <credits>
          <start display="March 11th">2011-03-11</start>
          <end display="15th 2010">2011-03-15</end>
        </credits>
        <location>Austin, TX</location>
      </event>
      <event type="minor" id="18" uri="ddd9">
        <name>DevDevDev '11</name>
        <urls>
          <url type="external" href="http://www.developerdeveloperdeveloper.com/ddd9/">DevDevDev</url>
        </urls>
        <img title="DevDevDev" alt="" src="/Content/images/events/ddd.jpg" />
        <credits>
          <start display="January 30">2011-01-29</start>
          <end display="30 2010">2011-01-29</end>
        </credits>
        <location>Reading, UK</location>
      </event>
      <event type="minor" id="17" uri="heartandsole1">
        <name>Heart and Sole</name>
        <urls>
          <url type="external" href="http://www.heartandsole.org.uk/">Heart and Sole</url>
        </urls>
        <img title="Heart and Sole" alt="" src="/Content/images/events/heartandsole.jpg" />
        <credits>
          <start display="January 28">2011-01-28</start>
          <end display="28 2011">2011-01-28</end>
        </credits>
        <location>Portsmouth, UK</location>
      </event>
      <event type="minor" id="16" uri="bcsoton1">
        <name>Barcamp Southampton 1</name>
        <urls>
          <url type="external" href="http://sotech.org.uk/wordpress/category/barcamp-southampton/">Barcamp Southampton 1</url>
        </urls>
        <img title="Barcamp Southampton" alt="" src="/Content/images/events/bcsoton.jpg" />
        <credits>
          <start display="November 27">2010-11-27</start>
          <end display="27 2010">2010-11-27</end>
        </credits>
        <location>Southampton, UK</location>
      </event>
      <event type="minor" id="15" uri="ddd8a">
        <name>Modern .NET Day</name>
        <urls>
          <url type="external" href="http://www.developerdeveloperdeveloper.com/ddd8a/">Modern .NET Day</url>
        </urls>
        <img title="Modern .NET Day" alt="" src="/Content/images/events/ddd.jpg" />
        <credits>
          <start display="October 23">2010-10-23</start>
          <end display="23 2010">2010-10-23</end>
        </credits>
        <location>Reading, UK</location>
      </event>
      <event type="major" id="14" uri="fowa2010">
        <name>FOWA London '10</name>
        <urls>
          <url type="external" href="http://futureofwebapps.com/london-2010/">FOWA London '10</url>
        </urls>
        <img title="Future of Web Apps London" alt="" src="/Content/images/events/fowa.jpg" />
        <credits>
          <start display="October 4th">2010-10-04</start>
          <end display="5th 2008">2010-10-05</end>
        </credits>
        <location>The Brewery, London, UK</location>
      </event>
      <event type="major" id="13" uri="dconstruct2010">
        <name>dConstruct '10</name>
        <urls>
          <url type="external" href="http://2010.dconstruct.org/">dConstruct</url>
        </urls>
        <img src="/Content/images/events/dconstruct.jpg" alt="" title="dConstruct" />
        <credits>
          <start display="Sept 3rd">2010-09-03</start>
          <end display="3rd 2009">2010-09-03</end>
        </credits>
        <location>Brighton Dome, UK</location>
      </event>
      <event type="minor" id="12" uri="techdays2010">
        <name>UK Tech Days</name>
        <urls>
          <url type="external" href="http://www.microsoft.com/uk/techdays/">Microsoft UK Tech Days</url>
        </urls>
        <img title="UK Tech Days" alt="" src="/Content/images/events/uktechdays.jpg" />
        <credits>
          <start display="April 13">2010-04-13</start>
          <end display="13 2010">2010-04-13</end>
        </credits>
        <location>London, UK</location>
      </event>
      <event type="minor" id="11" uri="bcbomo2">
        <name>Barcamp Bournemouth 2</name>
        <urls>
          <url type="external" href="http://www.barcampbournemouth.org/">Barcamp Bournemouth 2</url>
        </urls>
        <img title="Barcamp Bournemouth" alt="" src="/Content/images/events/bcbomo.jpg" />
        <credits>
          <start display="April 10">2010-04-10</start>
          <end display="11 2010">2010-04-11</end>
        </credits>
        <location>Bournemouth, UK</location>
      </event>
      <event type="major" id="10" uri="sxsw2010">
        <name>SXSW '10</name>
        <urls>
          <url type="external" href="http://sxsw.com/interactive">SXSW Interactive</url>
          <url type="blog" href="/blog/sxsw2010overall">SXSW Interactive</url>
        </urls>
        <img src="/Content/images/events/sxsw.jpg" alt="" title="SXSW Interactive '10" />
        <credits>
          <start display="March 12th">2010-03-12</start>
          <end display="16th 2010">2010-03-16</end>
        </credits>
        <location>Austin, TX</location>
      </event>
      <event type="minor" id="9" uri="ddd8">
        <name>DevDevDev '10</name>
        <urls>
          <url type="external" href="http://www.developerdeveloperdeveloper.com/ddd8/">DevDevDev</url>
        </urls>
        <img title="DevDevDev" alt="" src="/Content/images/events/ddd.jpg" />
        <credits>
          <start display="January 30">2010-01-30</start>
          <end display="30 2010">2010-01-30</end>
        </credits>
        <location>Reading, UK</location>
      </event>
      <event type="major" id="8" uri="devdays2009">
        <name>StackOverflow DevDays</name>
        <urls>
          <url type="external" href="http://stackoverflow.carsonified.com/events/london/">StackOverflow DevDays</url>
        </urls>
        <img src="/Content/images/events/stackoverflow.jpg" alt="" title="StackOverflow DevDays" />
        <credits>
          <start display="Oct 28th">2009-10-28</start>
          <end display="28th 2009">2009-10-28</end>
        </credits>
        <location>Kensington Town Hall, UK</location>
      </event>
      <event type="major" id="7" uri="dconstruct2009">
        <name>dConstruct</name>
        <urls>
          <url type="external" href="http://2009.dconstruct.org/">dConstruct</url>
        </urls>
        <img src="/Content/images/events/dconstruct.jpg" alt="" title="dConstruct" />
        <credits>
          <start display="Sept 4th">2009-09-04</start>
          <end display="4th 2009">2009-09-04</end>
        </credits>
        <location>Brighton Dome, UK</location>
      </event>
      <event type="minor" id="6" uri="openweb3">
        <name>OpenWeb3 Southampton</name>
        <urls>
          <url type="external" href="http://openweb.slipstreamstudio.com/">OpenWeb</url>
        </urls>
        <img src="/Content/images/events/openweb.jpg" alt="" title="OpenWeb Soton" />
        <credits>
          <start display="June 11th">2009-06-11</start>
          <end display="11th 2009">2009-06-11</end>
        </credits>
        <location>Royal Southampton Yacht Club, UK</location>
      </event>
      <event type="minor" id="5" uri="webdd2009">
        <name>WebDD '09</name>
        <urls>
          <url type="external" href="http://www.developerdeveloperdeveloper.com/webdd09/">WebDD</url>
        </urls>
        <img src="/Content/images/events/ddd.jpg" alt="" title="WebDD" />
        <credits>
          <start display="April 18th">2009-04-18</start>
          <end display="18th 2009">2009-04-18</end>
        </credits>
        <location>Reading, UK</location>
      </event>
      <event type="minor" id="4" uri="openweb2">
        <name>OpenWeb2 Southampton</name>
        <urls>
          <url type="external" href="http://openweb.slipstreamstudio.com/">OpenWeb</url>
        </urls>
        <img src="/Content/images/events/openweb.jpg" alt="" title="OpenWeb Soton" />
        <credits>
          <start display="April 15th">2009-04-15</start>
          <end display="15th 2009">2009-04-15</end>
        </credits>
        <location>Royal Southampton Yacht Club, UK</location>
      </event>
      <event type="major" id="3" uri="sxsw2009">
        <name>SXSW '09</name>
        <urls>
          <url type="external" href="http://sxsw.com">SXSW Interactive</url>
        </urls>
        <img src="/Content/images/events/sxsw.jpg" alt="" title="SXSW Interactive '09" />
        <credits>
          <start display="March 12th">2009-03-12</start>
          <end display="16th 2009">2009-03-16</end>
        </credits>
        <location>Austin, TX</location>
      </event>
      <event type="minor" id="2" uri="ddd7">
        <name>DevDevDev '08</name>
        <urls>
          <url type="external" href="http://www.developerday.co.uk/">DevDevDev</url>
        </urls>
        <img title="DevDevDev" alt="" src="/Content/images/events/ddd.jpg" />
        <credits>
          <start display="November 22">2008-11-22</start>
          <end display="22 2008">2008-11-22</end>
        </credits>
        <location>Reading, UK</location>
      </event>
      <event type="major" id="1" uri="fowa2008">
        <name>FOWA Expo '08</name>
        <urls>
          <url type="external" href="http://london2008.futureofwebapps.com/">FOWA Expo</url>
        </urls>
        <img title="Future of Web Apps Expo" alt="" src="/Content/images/events/fowa.jpg" />
        <credits>
          <start display="October 8th">2008-10-08</start>
          <end display="10th 2008">2008-10-10</end>
        </credits>
        <location>ExCel, London, UK</location>
      </event>
    </events>
  </attended>
  <errors>
    <error code="34">Sorry, that page does not exist</error>
  </errors>
  <page>
    <barn>
      <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" xmlns:atom="http://www.w3.org/2005/Atom">
        <channel>
          <title>Headscape Barn</title>
          <description>Pipes Output</description>
          <link>http://pipes.yahoo.com/pipes/pipe.info?_id=55ce6845e13f2dee8b8ff8aa4a93c54b</link>
          <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=55ce6845e13f2dee8b8ff8aa4a93c54b&amp;_render=rss" />
          <pubDate>Wed, 22 May 2013 06:04:13 +0000</pubDate>
          <generator>http://pipes.yahoo.com/pipes/</generator>
          <item>
            <title>Skills, maintenance and proposals</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/bb0phFQHKnA/</link>
            <description>This week on little web design podcast  we look at the key skills every web designer should have, how to win over clients and how to manage them over the long term.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/bb0phFQHKnA" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/6/episode/s06e05/</guid>
            <pubDate>Thu, 16 May 2013 11:00:00 +0000</pubDate>
            <media:content fileSize="24004188" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/rHuA2hVLf-U/S06-E05.mp3" />
            <enclosure length="24004188" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/rHuA2hVLf-U/S06-E05.mp3" />
          </item>
          <item>
            <title>Freelancing, popups and performance</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/4MIDDaNVnY8/</link>
            <description>This week on the Boagworld podcast it&amp;#8217;s all about the performance of your site, changing your career and discussing the fact that pop-ups just never seem to die.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/4MIDDaNVnY8" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/6/episode/s06e04/</guid>
            <pubDate>Thu, 09 May 2013 11:00:00 +0000</pubDate>
            <media:content fileSize="24516187" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/ZyDyX1vbOIM/S06-E04.mp3" />
            <enclosure length="24516187" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/ZyDyX1vbOIM/S06-E04.mp3" />
          </item>
          <item>
            <title>Sprites, UX advice and long term clients</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/Pd4pLBtM2no/</link>
            <description>This week on the Boagworld show, awful accents asking about sprites, the thing all non ux people should know and working with long term clients.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/Pd4pLBtM2no" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/6/episode/s06e03/</guid>
            <pubDate>Thu, 02 May 2013 11:00:00 +0000</pubDate>
            <media:content fileSize="19700253" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/23NRM57ayxA/S06-E03.mp3" />
            <enclosure length="19700253" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/23NRM57ayxA/S06-E03.mp3" />
          </item>
          <item>
            <title>Schemas, RSS and the beginning of all things</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/N2TtdEXQNwQ/</link>
            <description>This week on Boagworld we talk schemas, ask whether there is still a role for RSS and talk about our first ever client.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/N2TtdEXQNwQ" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/6/episode/s06e02/</guid>
            <pubDate>Thu, 25 Apr 2013 11:30:00 +0000</pubDate>
            <media:content fileSize="21076175" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/m1uUC6p_Fjk/S06-E02.mp3" />
            <enclosure length="21076175" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/m1uUC6p_Fjk/S06-E02.mp3" />
          </item>
          <item>
            <title>Plagiarism, age and competition</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/Zsd1djKmV70/</link>
            <description>On our first episode of season 6 we cover, what to do about stolen content, can old people work in web design and more besides.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/Zsd1djKmV70" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/6/episode/s06e01/</guid>
            <pubDate>Thu, 18 Apr 2013 11:00:00 +0000</pubDate>
            <media:content fileSize="23108293" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/x21oKLniwSo/S06-E01.mp3" />
            <enclosure length="23108293" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/x21oKLniwSo/S06-E01.mp3" />
          </item>
          <item>
            <title>We were right all along</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/TKHd15mk2lk/</link>
            <description>On the last show of this series we ask whether the RFP is broken, look at lean usability and investigate ways of working closer with our clients. Oh yes and Marcus picks a post from the BBC (surprise, surprise).&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/TKHd15mk2lk" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/5/episode/s05e09/</guid>
            <pubDate>Thu, 14 Mar 2013 12:00:00 +0000</pubDate>
            <media:content fileSize="25812280" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/yoZyF1N4TdQ/S05-E09.mp3" />
            <enclosure length="25812280" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/yoZyF1N4TdQ/S05-E09.mp3" />
          </item>
          <item>
            <title>Mumbling about mobile</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/JUVubdaM6Mg/</link>
            <description>This week on the most lushish web design podcast: One size fits none, nine questions about your mobile strategy and how do you hold your mobile phone?&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/JUVubdaM6Mg" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/5/episode/s05e08/</guid>
            <pubDate>Thu, 07 Mar 2013 12:01:00 +0000</pubDate>
            <media:content fileSize="26372345" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/etsHKRu31kk/S05-E08.mp3" />
            <enclosure length="26372345" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/etsHKRu31kk/S05-E08.mp3" />
          </item>
          <item>
            <title>It’s all about me</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/5qP4fJQFyaE/</link>
            <description>This week on Boagworld, its all about me… oh yes and Jeffrey Zeldman. We cover choice paralysis, 10 commandments  of web design and the evils of email.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/5qP4fJQFyaE" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/5/episode/s05e07/</guid>
            <pubDate>Thu, 28 Feb 2013 12:17:00 +0000</pubDate>
            <media:content fileSize="31988253" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/ftWy7UE-w2I/S05-E07.mp3" />
            <enclosure length="31988253" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/ftWy7UE-w2I/S05-E07.mp3" />
          </item>
          <item>
            <title>All apps are evil (but Mark Boulton is great)</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/H-z1yWFCC6g/</link>
            <description>This week on our little web design podcast; facebook breaks the internet, Mark Boulton refines the canons of design and we all queue up for mailbox.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/H-z1yWFCC6g" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/5/episode/s05e06/</guid>
            <pubDate>Thu, 21 Feb 2013 12:05:00 +0000</pubDate>
            <media:content fileSize="26292306" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/YesO72bWsdY/S05-E06.mp3" />
            <enclosure length="26292306" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/YesO72bWsdY/S05-E06.mp3" />
          </item>
          <item>
            <title>The rise of the muppet</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/RuAENU2_Xp4/</link>
            <description>In recent weeks and months I have been thinking a lot about the place of openness, honesty and authenticity when running a business. I’ve been reading the inspiring Culture Shock by Will McInnes and one of the major themes that I have been struck by is the role of failure within an organisation. Epic fail [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=657</guid>
            <pubDate>Wed, 20 Feb 2013 12:55:34 +0000</pubDate>
            <content:encoded>&lt;p&gt;In recent weeks and months I have been thinking a lot about the place of openness, honesty and authenticity when running a business. I’ve been reading the inspiring &lt;a rel="nofollow" title="Culture Shock" target="_blank" href="http://www.amazon.co.uk/Culture-Shock-Handbook-Century-Business/dp/1118312430"&gt;Culture Shock&lt;/a&gt; by &lt;a rel="nofollow" title="Twitter - Will McInnes" target="_blank" href="https://twitter.com/willmcinnes"&gt;Will McInnes&lt;/a&gt; and one of the major themes that I have been struck by is the role of failure within an organisation.&lt;span id="more-657"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Epic fail&lt;/h3&gt;
&lt;p&gt;Traditionally failure is something best avoided. Failure is weakness and if you are week, then you are out. This culture leads to a environment of secrecy and of people working in silos for fear of being exposed for what they really are.&lt;/p&gt;
&lt;p&gt;We all fail at times. We fail our friends, we fail our families and we fail at work. It is not a question of if. It is a question of when. And we all know it. As such, if the environment in which we find ourselves doesn&amp;#8217;t accept this inevitability we tend to play it safe for fear of the consequences.&lt;/p&gt;
&lt;p&gt;Generations of people in organisations across industries and across the world, have failed to fulfil their potential because of a fear of failure. Risks that should be taken are side-stepped, innovations that should be made are missed, and opportunities for both the individuals and the organisations of which they are apart are lost.&lt;/p&gt;
&lt;h3&gt;Organic muppets&lt;/h3&gt;
&lt;p&gt;In my life before I launched &lt;a rel="nofollow" title="Dootrix" target="_blank" href="http://www.dootrix.com"&gt;Dootrix&lt;/a&gt; I worked at a &lt;a rel="nofollow" title="Headscape" target="_blank" href="http://www.headscape.co.uk"&gt;fantastic web agency called Headscape&lt;/a&gt;. During a period when I was running the technical team it became clear to me that I was probably the weakest developer in the group. They were a very, very talented team! &lt;i&gt;smile&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;This realisation opened up an opportunity to move away from a traditional top down approach to leadership and on to a model of true collaboration. Because I, as the lead, was the first to unashamedly put my hand up and ask for input from the team it made it ok for all team members to do the same.&lt;/p&gt;
&lt;p&gt;This culture shift developed and gave rise to something we called The Muppet Award. Whenever somebody asked for help in a stupid context they were declared The Muppet. The award could be handed out to anybody, by anybody, for any reason that they saw fit and soon shifted from being a metaphorical badge to a physical singing, dancing, pink hippo that sat on the desk of the current Muppet Award owner!&lt;/p&gt;
&lt;p&gt;In a very short space of time The Muppet started being awarded several times a day and was something of a badge of honour. Silly questions, stupid mistakes, epic fails were all of a sudden OK! Consequently issues were in the open sooner and problems were resolved quicker. Collaboration increased, team knowledge was shared and productivity increased all because of the organic rise of The Muppet.&lt;/p&gt;
&lt;p&gt;Eventually a Gonzo in a Hawaiian shirt was purchased and used to award The Muppet of the Year for the most hilarious fail, across the entire organisation, in the last twelve months. This became part of the Christmas party each year and was very amusing. Designers, developers, project managers, and directors all got involved and carried their Muppet Award with pride.&lt;/p&gt;
&lt;h3&gt;Openness, authenticity and personality&lt;/h3&gt;
&lt;p&gt;Headscape’s Muppet Award is a brilliant example of what can happen when fear of failure gives way to openness, authenticity and the natural personality that exists within any organisation.&lt;/p&gt;
&lt;p&gt;Failure is part of life. It is unavoidable. Accept it and use it to your advantage.&lt;/p&gt;
&lt;p&gt;At Dootrix we do not have a Muppet Award but we are trying to encourage an environment of open collaboration and honest feedback. We have found that if it is OK to get things wrong people are more likely to enjoy the freedom to get things right.&lt;/p&gt;
&lt;p&gt;How is failure handled in your organisation? What impact does it have on your people? Do leave a comment, I&amp;#8217;m really interested your experiences of this.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Design differently</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/1tphO1E6F9Q/</link>
            <description>This week on Boagworld its all about design. Design at Google, moving beyond user centric design and designing with audio.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/1tphO1E6F9Q" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/5/episode/s05e05/</guid>
            <pubDate>Thu, 14 Feb 2013 12:00:00 +0000</pubDate>
            <media:content fileSize="24836345" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/HNSJrKqfzho/S05-E05.mp3" />
            <enclosure length="24836345" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/HNSJrKqfzho/S05-E05.mp3" />
          </item>
          <item>
            <title>Agile day-to-day</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/dXNVg7Ued7c/</link>
            <description>So far I have talked a little about why we have decided to use agile at Dootrix and what the big picture looks like. Now I want to take some time to talk about the specifics of how it works day-to-day. Our use of agile is anchored around the principle of delivering working software every [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=642</guid>
            <pubDate>Thu, 07 Feb 2013 15:45:18 +0000</pubDate>
            <content:encoded>&lt;p&gt;So far I have talked a little about &lt;a rel="nofollow" title="How we do agile" target="_blank" href="http://www.robborley.com/how-we-do-agile/"&gt;why we have decided to use agile at Dootrix&lt;/a&gt; and &lt;a rel="nofollow" title="Agile at Dootrix" target="_blank" href="http://www.robborley.com/agile-at-dootrix/"&gt;what the big picture looks like&lt;/a&gt;. Now I want to take some time to talk about the specifics of how it works day-to-day.&lt;/p&gt;
&lt;p&gt;Our use of agile is anchored around the principle of delivering working software every two weeks. This means that every two weeks the project owner has something that can be user tested and then provide feedback. This point about testing is the key to understanding why we do things the way that we do.&lt;span id="more-642"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Testing is never cut&lt;/h2&gt;
&lt;p&gt;Testing is at the heart of our process. We deliver software; be it a website, a mobile app, desktop software or complex embedded system, that just works. This means that our code has to be vigorously tested and robust. And this also means that the experience of the user is tested and proven to be good.&lt;/p&gt;
&lt;p&gt;All of our code is written using Test Driven Development (TDD). Our team analyse the requirements and write the software tests before they write any new code. Only once the tests are written is the code developed. Rather than coding to a requirement each developer writes code to pass these tests. Testing is foundational.&lt;/p&gt;
&lt;p&gt;Alongside TDD we run agile user testing. The user stories are considered by the test team. Our developers are then informed as to any user centric code tests that need to be developed to supplement the original tests that came out of the TDD process.&lt;/p&gt;
&lt;p&gt;This &amp;#8216;test first&amp;#8217; approach ensures that we can continue to release working versions of the software every two weeks without being derailed by elongated test phases and endless lists of bugs. When scope creeps and time-lines are squeezed testing is never, ever cut. As a result we deliver software of exceptional quality. It works!&lt;/p&gt;
&lt;h2&gt;Sprint planning meeting&lt;/h2&gt;
&lt;p&gt;Each sprint starts with a planning meeting. The principle behind these meetings is that the team, as a whole, owns the project. It’s the team, not a project manager that make decisions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;How a problem is solved.&lt;/li&gt;
&lt;li&gt;What the estimated amount of time to complete each problem (user story) is.&lt;/li&gt;
&lt;li&gt;What user stories are included in each sprint.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Together the team commit to what will be delivered during each sprint. They sign up to it. They own it.&lt;/p&gt;
&lt;p&gt;This is achieve by a process of discussion with the project owner so that all understand exactly what each user story entails and then each team member, individually, assigns an estimate to it. These estimates are put together and a consensus is arrived at.&lt;/p&gt;
&lt;p&gt;The next article in this series will look at this in more detail including the fun to be had with planning poker. *&lt;em&gt;smile&lt;/em&gt;*&lt;/p&gt;
&lt;h2&gt;Daily stand-ups&lt;/h2&gt;
&lt;p&gt;This is the time to have a &lt;em&gt;quick&lt;/em&gt; discussion about what happened yesterday and what we aim to do today. The plan is to take 20mins at the start of each day to get any questions and problems out of the way which enables:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The team to avoid protracted, and often pointless meetings.&lt;/li&gt;
&lt;li&gt;Individuals to get down to the tasks in hand with all of the resources that they need at the start of each day.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At Dootrix we have found that we do not actually have a stand-up each day. Our teams are, generally speaking, constantly communicating. Maybe we are fortunate to have naturally cooperative individuals. It also helps that the team members are situated close together. Their desks are right next door! Whatever the exact cause it has become clear to us at the moment that we do not need a daily stand-up because there is often nothing new to cover. Instead these sessions tend to happen every two or three days.&lt;/p&gt;
&lt;h2&gt;Sprint demo and retrospective&lt;/h2&gt;
&lt;p&gt;At the end of each two week sprint the user stories that were completed are demoed. This serves a number of purposes in the whole process.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Teams are aware that their stories will be publicly demoed to their peers. This helps to keep them focused, during the planning, on user focused development. The question is asked; “how will this be demoed?&amp;#8221;&lt;/li&gt;
&lt;li&gt;Individuals are accountable to their peers. As a team they have signed up, together, to complete the work in a sprint. It is obvious at demo time if somebody hasn&amp;#8217;t been pulling their weight.&lt;/li&gt;
&lt;li&gt;All members of the company are invited to demos. This aids transparency and knowledge sharing.&lt;/li&gt;
&lt;li&gt;The sprint demo is generally a fun and social occasion. It is a clear end to each sprint and we have found that it offers some much appreciated down time.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Following the demos is a sprint retrospective. This is the session where the sprint team have a chance to reflect on what happened over the last two weeks and how the process can be adapted, adjusted, and improved going forward.&lt;/p&gt;
&lt;p&gt;More detail on the retrospectives will come in a couple of weeks.&lt;/p&gt;
&lt;h2&gt;Rinse and repeat&lt;/h2&gt;
&lt;p&gt;This basic pattern of planning, collaborating and reviewing is repeated every two weeks. Sprint by sprint a release is completed. Throughout the whole cycle the process is tweaked so as to adapt to the needs of the team to enable them to produce an ever improving end result.&lt;/p&gt;
&lt;p&gt;If you want to discuss how an agile team from Dootrix can help your organisation then &lt;a rel="nofollow" title="Get in touch with Dootrix" target="_blank" href="http://www.dootrix.com/#getInTouch"&gt;please get in touch&lt;/a&gt;.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Blind criticism</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/nHT6VATWW2s/</link>
            <description>On this week's podcast David Ball goes blind, Christian Heilmann rants at the ranters and I widen the scope of web standards.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/nHT6VATWW2s" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/5/episode/s05e04/</guid>
            <pubDate>Thu, 07 Feb 2013 12:00:00 +0000</pubDate>
            <media:content fileSize="29924371" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/SD1OdCrC9OQ/S05-E04.mp3" />
            <enclosure length="29924371" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/SD1OdCrC9OQ/S05-E04.mp3" />
          </item>
          <item>
            <title>Everybody else is wrong</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/rPoDxwdbRxU/</link>
            <description>This week on boagworld we slag off sliders, call css smelly and look at cartoons about mental models.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/rPoDxwdbRxU" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/5/episode/s05e03/</guid>
            <pubDate>Thu, 31 Jan 2013 12:00:00 +0000</pubDate>
            <media:content fileSize="26020214" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/nHcHtHevZts/S05-E03.mp3" />
            <enclosure length="26020214" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/nHcHtHevZts/S05-E03.mp3" />
          </item>
          <item>
            <title>Why Microsoft are still the guys to beat – in-traction.com</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/uEABiDd8QZ8/</link>
            <description>Department of Defense licenses $617 million in Microsoft products - http://www.techradar.com/us/news/software/department-of-defense-licenses-617-million-in-microsoft-products-1122883 I could end the article there really. The enterprise space is still in love with Microsoft. Read more on in-traction.com</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=654</guid>
            <pubDate>Sun, 27 Jan 2013 12:18:54 +0000</pubDate>
            <content:encoded>&lt;blockquote&gt;&lt;p&gt;Department of Defense licenses $617 million in Microsoft products - &lt;a rel="nofollow" title="US DoD sign massive deal with Microsoft" target="_blank" href="http://www.techradar.com/us/news/software/department-of-defense-licenses-617-million-in-microsoft-products-1122883"&gt;http://www.techradar.com/us/news/software/department-of-defense-licenses-617-million-in-microsoft-products-1122883&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I could end the article there really. The enterprise space is still in love with Microsoft.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" title="Wy microsoft are still the guys to beat" target="_blank" href="http://www.in-traction.com/why-microsoft-are-still-the-guys-to-beat/"&gt;Read more on in-traction.com&lt;/a&gt;&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Technological terror</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/jhxJ9QULJsk/</link>
            <description>This week on the world’s best podcast: responsive design turns out to be more complicated than we thought, we all get typographical and we revisit a post from the year 2000.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/jhxJ9QULJsk" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/5/episode/s05e02/</guid>
            <pubDate>Thu, 24 Jan 2013 12:00:00 +0000</pubDate>
            <media:content fileSize="18452227" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/stzCcXy2gpw/S05-E02.mp3" />
            <enclosure length="18452227" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/stzCcXy2gpw/S05-E02.mp3" />
          </item>
          <item>
            <title>Agile at Dootrix</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/ZfAU_Qfw6sQ/</link>
            <description>Following on from last weeks article about how our agile teams operate at Dootrix I thought that I would offer a little more detail on the reasons why we chose agile and how we implement it day to day. Our overriding objective is to deliver something to the project owner / client, that works, every [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=617</guid>
            <pubDate>Thu, 17 Jan 2013 12:33:49 +0000</pubDate>
            <content:encoded>&lt;p&gt;Following on from last weeks article about how our &lt;a rel="nofollow" title="How we do agile" target="_blank" href="http://www.robborley.com/how-we-do-agile/"&gt;agile teams operate at Dootrix&lt;/a&gt; I thought that I would offer a little more detail on the reasons why we chose agile and how we implement it day to day.&lt;span id="more-617"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our overriding objective is to deliver something to the project owner / client, that works, every two weeks. This has a number of positive effects on both the quality of the deliverable and the team that is working on it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The project owner / client stay involved.&lt;/li&gt;
&lt;li&gt;Project scope and priorities are continually assessed.&lt;/li&gt;
&lt;li&gt;The team remain engaged and feel a continual sense of achievement.&lt;/li&gt;
&lt;li&gt;Testing is never forgotten or cut back.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;The role of project owner&lt;/h3&gt;
&lt;p&gt;At Dootrix the role of the project owner is vital. This is the person in the team that owns the project. They can make decisions about scope, answer questions about deliverables, clarify ambiguity when it arises and they understand the end users or customers of the deliverables. This works best if the project owner is the actual client.&lt;/p&gt;
&lt;p&gt;However, this isn&amp;#8217;t always possible of course in which case a member of the Dootrix team, not in production, is appointed project owner and it is their job to act on the clients behalf. This does create some extra admin and slows things down a little but seems to be an adequate second best setup. An internal product owner only works if they have the authority to make a decision on the behalf of the client. This is very important.&lt;/p&gt;
&lt;p&gt;Sometimes, a decision is made that the client doesn&amp;#8217;t agree with. This is inevitable. But we are only ever two weeks away from an opportunity to correct such a decision and it actually serves as a good prompt for the client to take on the role of project owner themselves.&lt;/p&gt;
&lt;h3&gt;Managing scope creep&lt;/h3&gt;
&lt;p&gt;Battling scope creep is a challenge that is faced by all project managers. Scope creep, in my experience, is often driven by the client but this is not always the case. Often the team at the coal face on a project will develop ideas for enhancements as they go through the design and build process. Project managers all know that an enthusiastic team will deliver a better outcome. This is the only type of team that will introduce ideas for enhancements and so how to keep a lid on these additions to the scope, while not stifling the teams creativity and damaging morale, is a genuine issue.&lt;/p&gt;
&lt;p&gt;These ideas, together with new ideas and changes from project owner are added to the project backlog along with all of the other items (stories) that are currently in the agreed scope.&lt;/p&gt;
&lt;p&gt;It is inevitable, as time passes on a project, that priorities will change. A new idea, a new piece of technology, some new feedback from the users or simply the process of designing and building something can revealed that the initial approach wasn&amp;#8217;t quite right. The inevitability of such changes can be a major headache for a traditional project manager. However, when running an agile process it does not present a significant problem.&lt;/p&gt;
&lt;p&gt;All of the user stories that make up the agreed scope are placed, in order of priority, in the backlog. Every two weeks, at a sprint planning meeting, we decide what stories will be included in the next sprint. Any new stories are explored and explained in this meeting. This results in the project owner having a full understanding of the implications in time and cost of their new ideas. Under agile scope does not creep instead it evolves. This is the expectation from the beginning and so dramatically improves the dynamic between the team and the project owner.&lt;/p&gt;
&lt;h3&gt;Engaging a team on a protracted timeline&lt;/h3&gt;
&lt;p&gt;Projects often suffer as a result of long timelines. Teams will often do a lot of background and backend work first to lay the foundations for the whole project. Decisions that affect the whole project are made very early on and, on large projects, can be very costly to change.&lt;/p&gt;
&lt;p&gt;Another problem with protracted timelines is that the production team have to wait a significant period of time before they feel like they have achieved anything. We all like to achieve, it makes us feel good. This sense of achievement drives our engagement to continue to achieve.&lt;/p&gt;
&lt;p&gt;At Dootrix we deliver working software every two weeks. Each iteration will be light on new functionality but:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It works.&lt;/li&gt;
&lt;li&gt;It&amp;#8217;s complete.&lt;/li&gt;
&lt;li&gt;It&amp;#8217;s testable by a user.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To achieve this we only make decisions about an approach when we need to make them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We do not second guess the future.&lt;/li&gt;
&lt;li&gt;We do not build with future enhancements in mind (except in very specific circumstances.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our assumption is that the scope, as we understand it now, will evolve. As such the principle idea is to always implement the simplest solution to the problem that is in front of us.&lt;/p&gt;
&lt;p&gt;Of course, this does mean that some rework is required from time to time but the benefits of not making early mistakes, and having an engaged team, heavily out way this potential problem.&lt;/p&gt;
&lt;h3&gt;Testing and the power of TDD&lt;/h3&gt;
&lt;p&gt;Clients do not understand testing and, in general, they do not like to pay for it. However, testing is vital and if it is cut then the deliverables suffer badly.&lt;/p&gt;
&lt;p&gt;A common project scenario is as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project scope and timeline set with a testing phase at the end.&lt;/li&gt;
&lt;li&gt;Project scope creeps but the client does not want to spend any more money and expects the timeline to remain the same.&lt;/li&gt;
&lt;li&gt;Client is happy with your flexibility.&lt;/li&gt;
&lt;li&gt;Time is remove from the testing phase of the project so that the delivery date can be met.&lt;/li&gt;
&lt;li&gt;Final deliverables are sub standard.&lt;/li&gt;
&lt;li&gt;Client is unhappy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At Dootrix our agile process is underpinned by Test Driven Development (TDD.) So, not only are our deliverables tested as part of every sprint (every two weeks) but each piece of new functionality is designed with TDD. This means that the tests are written first and then the code is written to pass those tests. This approach ensures that all new functionality is thought through fully and designed properly before any code is written. With testing at the heart of the process sub standard deliverables are never the end result.&lt;/p&gt;
&lt;h3&gt;Solving project management problems&lt;/h3&gt;
&lt;p&gt;I had a fixed set of problems with projects that I had observed over the years. Implementing agile has gone a long way to helping see those resolved. Our process is being augmented and adapted all the time as we learn, together as a team, what works and what doesn&amp;#8217;t.&lt;/p&gt;
&lt;p&gt;Next we will look at how agile works day to day as well as some of the tools that we use to help us along the way.&lt;/p&gt;
&lt;p&gt;If you are interested in &lt;a rel="nofollow" title="Get in touch with Dootrix" target="_blank" href="http://www.dootrix.com/#getInTouch"&gt;engaging an agile team from Dootrix&lt;/a&gt; get in touch for a chat.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Welcome to the world of tomorrow</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/rrk_ofrn99k/</link>
            <description>On this week’s show, we kick off a new season that focuses on inspirational posts including redesign versus realignment, what the heck is SEO, and responsive data tables.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/rrk_ofrn99k" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/5/episode/s05e01/</guid>
            <pubDate>Thu, 17 Jan 2013 12:24:38 +0000</pubDate>
            <media:content fileSize="30531666" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/pd36hQwa5cI/S05-E01.mp3" />
            <enclosure length="30531666" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/pd36hQwa5cI/S05-E01.mp3" />
          </item>
          <item>
            <title>Mobile apps must offer something different – in-traction.com</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/2GhCsoqDgAc/</link>
            <description>At Dootrix we have recently been engaged in a consultancy exercise  for EURSIN who provide web and mobile communications services to the European Union in Brussels. Following our work with them they have now successfully developed and launched their News Room app for iOS. Read more about what we discovered on in-traction.com</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=652</guid>
            <pubDate>Tue, 15 Jan 2013 12:13:30 +0000</pubDate>
            <content:encoded>&lt;p&gt;At &lt;a rel="nofollow" title="dootrix - enterprise software development" target="_blank" href="http://www.dootrix.com"&gt;Dootrix&lt;/a&gt; we have recently been engaged in a consultancy exercise  for EURSIN who provide web and mobile communications services to the European Union in Brussels. Following our work with them they have now successfully developed and launched their News Room app for iOS.&lt;/p&gt;
&lt;p&gt;Read more about what we discovered on &lt;a rel="nofollow" title="Mobile apps must offer something different" target="_blank" href="http://www.in-traction.com/mobile-apps-must-offer-something-different/"&gt;in-traction.com&lt;/a&gt;&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>How we do agile</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/kOD3jpcoa7U/</link>
            <description>At Dootrix we run our software teams using the agile framework. In all of my previous roles as a developer, consultant or project manager a variant of Prince 2 has been the project delivery mechanism or choice. So, now that I run my own shop, why have we opted to use agile instead? Starting from [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=605</guid>
            <pubDate>Mon, 07 Jan 2013 12:40:34 +0000</pubDate>
            <content:encoded>&lt;p&gt;At &lt;a rel="nofollow" title="Dootrix - enterprise software development" target="_blank" href="http://www.dootrix.com"&gt;Dootrix&lt;/a&gt; we run our software teams using the agile framework. In all of my previous roles as a developer, consultant or project manager a variant of Prince 2 has been the project delivery mechanism or choice. So, now that I run my own shop, why have we opted to use agile instead?&lt;span id="more-605"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Starting from scratch&lt;/h3&gt;
&lt;p&gt;When setting up Dootrix I wanted to make sure that I attempted to overcome some of the shortcomings that I perceived elsewhere in my career. I have been involved in both product and project delivery in big and small organisations and the difficulties have always been centered around the same issues in each scenario.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Team collaboration.&lt;/li&gt;
&lt;li&gt;Team ownership of the deliverables.&lt;/li&gt;
&lt;li&gt;Scope creep and the subsequent slippage and battle to maintain quality.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#8217;m not saying that these issues are directly related to the organisations that I was working in or the use of variants of Prince 2. They are simply the three main areas of difficulty that I came up against again and again. Starting up Dootrix, with no baggage or history, has given me an opportunity to try and do something to prevent these issues from manifesting themselves.&lt;/p&gt;
&lt;h3&gt;Why agile?&lt;/h3&gt;
&lt;p&gt;Most of the problems I had come up against on projects were a result of teams struggling to understand their role on a project. The project manager always found themselves in the role of project owner. Acting as a go between between the client and the production team the PM would often find themselves making decisions that they were not best placed to make and making compromises on both the clients desires and how the production team wants to go about the project. Ownership of the client relationship, ownership of the spec, ownership of the production team, ownership of the solution and internal ownership of the  final deliverables all tend to fall on the project manager. Over time the technical and design expertise of the production team are lost in an apathetic me-laze of just doing what they are told to do.&lt;/p&gt;
&lt;p&gt;Agile turns this on its head. The focus is on the team who are delivering the project with the product owner, preferably the end client, very much part of this team. Together, the team decide the scope, the timeline and how the solution is crafted. The team own the solution and commit to a timeline. As a result the team care about what they are delivering thus increasing the quality of the final outputs.&lt;/p&gt;
&lt;p&gt;Clients still try and squeeze in new functionality (scope creep) but as they are part of the team they understand and accept the consequences of this from the very beginning. There is no battle between managing the teams time and the clients expectations because everybody is on the same side.&lt;/p&gt;
&lt;p&gt;Agile also prevents long development cycles of little tangible progress. Every few weeks we have working, testable software. We have achieved something. This is a fantastic tool to keep the team engaged and interested in the project.&lt;/p&gt;
&lt;p&gt;Here ends the theory.&lt;/p&gt;
&lt;h3&gt;How we run agile projects&lt;/h3&gt;
&lt;p&gt;Over the next few weeks I will be posting on how we do agile at Dootrix. Of course, the nature of agile means that we are constantly refining our process to try and optimise it for our needs. The way we do agile will be different from how others use the toolset. Maybe a better description in this case is how we &lt;em&gt;currently&lt;/em&gt; run agile projects.&lt;/p&gt;
&lt;p&gt;Our sprints run for two weeks. Each sprint starts with a sprint planning meeting. We have daily stand-ups. We end each sprint with a sprint demo and sprint retrospective.&lt;/p&gt;
&lt;p&gt;In the coming weeks I  will cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height:13px;"&gt;The tools that we use.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Sprint planning meetings, planning poker and the use of story points.&lt;/li&gt;
&lt;li&gt;Running a sprint and daily stand-ups.&lt;/li&gt;
&lt;li&gt;Sprint retrospectives, demos, and analysing velocity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I do not claim to have the perfect solution and would love your feedback on what we are doing as we go.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Mobile development sprints – in-traction.com</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/wh3cKXMKxog/</link>
            <description>When starting a new mobile app development project isolating the features that really matter is very important. You do not need to develop an entire wish list of features in one go. This can actually be very damaging to your project in the long run. Read more about how Dootrix use development &amp;#8216;sprints&amp;#8217; when starting work with a new [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=615</guid>
            <pubDate>Thu, 20 Dec 2012 13:51:02 +0000</pubDate>
            <content:encoded>&lt;p&gt;When starting a new mobile app development project isolating the features that really matter is very important. You do not need to develop an entire wish list of features in one go. This can actually be very damaging to your project in the long run.&lt;/p&gt;
&lt;p&gt;Read more about how &lt;a rel="nofollow" title="Mobile development sprints" target="_blank" href="http://www.in-traction.com/mobile-development-sprints/"&gt;Dootrix use development &amp;#8216;sprints&amp;#8217;&lt;/a&gt; when starting work with a new client.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Bug herding, brackets and dealing with multimedia</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/Dgf213oCEP4/</link>
            <description>On this week's show. A tool for bug reporting, an amazing new code editor and a news feed app that gets better over time. We also look at a couple of services which will help with the multimedia on your site.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/Dgf213oCEP4" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e14/</guid>
            <pubDate>Thu, 20 Dec 2012 12:00:28 +0000</pubDate>
            <media:content fileSize="29556358" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/VKDRA901v8I/S04-E14.mp3" />
            <enclosure length="29556358" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/VKDRA901v8I/S04-E14.mp3" />
          </item>
          <item>
            <title>Volia vs Skitch, Hammer vs Mixture, Mailchimp and CarTunes</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/PkrJloaax1g/</link>
            <description>This week on the boagworld show, A screen capture showdown, Hammer vs Mixture, email newsletters get even easier and I rant about my car stereo.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/PkrJloaax1g" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e13/</guid>
            <pubDate>Thu, 13 Dec 2012 12:00:00 +0000</pubDate>
            <media:content fileSize="27675124" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/L5aSlxBUWGc/S04-E13.mp3" />
            <enclosure length="27675124" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/L5aSlxBUWGc/S04-E13.mp3" />
          </item>
          <item>
            <title>Pixa, Smush.it, text expanders and Gusto</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/9pMuKV0VVIw/</link>
            <description>This week we organise our inspiration libraries, compress our clients images and speed up customer support. We also kick the butt on Diet Coda.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/9pMuKV0VVIw" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e12/</guid>
            <pubDate>Thu, 06 Dec 2012 12:00:45 +0000</pubDate>
            <media:content fileSize="24724332" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/IyZklozG2M8/S04-E12.mp3" />
            <enclosure length="24724332" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/IyZklozG2M8/S04-E12.mp3" />
          </item>
          <item>
            <title>Spectrum, Emmet, Qualaroo and Analytics Tiles</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/EI4KKWa6eqw/</link>
            <description>Something for everybody this week. A colour tool for designers, a web developers toolkit and a nice survey tool for website owners. We also have a mobile pick that everybody will love.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/EI4KKWa6eqw" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e11/</guid>
            <pubDate>Thu, 29 Nov 2012 12:00:52 +0000</pubDate>
            <media:content fileSize="18180345" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/J9UHQY37C2k/S04-E11.mp3" />
            <enclosure length="18180345" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/J9UHQY37C2k/S04-E11.mp3" />
          </item>
          <item>
            <title>iPad mini is perfect for business and enterprise – in-traction.com</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/O_MBEthYoZw/</link>
            <description>Apple have been making steady progress into business and enterprise. The iPad has been picked up by many organisations for its power, portability, and the shear joy consumers experience when they use it. Employees who use their iPad&amp;#8217;s day to day want that same experience from their business IT too. Apple has also made strong [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=599</guid>
            <pubDate>Wed, 28 Nov 2012 10:28:47 +0000</pubDate>
            <content:encoded>&lt;p&gt;Apple have been making steady progress into business and enterprise. The iPad has been picked up by many organisations for its power, portability, and the shear joy consumers experience when they use it. Employees who use their iPad&amp;#8217;s day to day want that same experience from their business IT too. Apple has also made strong gains in the &amp;#8216;almost enterprise&amp;#8217; sector of education. The iPad in schools has been a huge growth market.&lt;span id="more-599"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;But what of the iPad mini? It lacks the power of its larger sibling and everything is, well, just smaller. What can it add to the business and enterprise space?&lt;/p&gt;
&lt;p&gt;Read more on &amp;#8220;&lt;a rel="nofollow" target="_blank" href="http://www.in-traction.com/ipad-mini-is-perfect-for-business-and-enterprise/"&gt;iPad mini is perfect for business and enterprise&lt;/a&gt;&amp;#8221; at in-traction.com.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Lorempixel, GTMetrix, Responsibility Matrix and What the Font</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/KFHiJW97r2Y/</link>
            <description>Dummy images that won't confuse clients. The ultimate performance measuring tool. A mobile app for identifying fonts and something called a responsibility assignment matrix. Not a bad line up for this week's show.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/KFHiJW97r2Y" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e10/</guid>
            <pubDate>Thu, 22 Nov 2012 12:30:00 +0000</pubDate>
            <media:content fileSize="25144172" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/ab9O54ZFmck/S04-E10.mp3" />
            <enclosure length="25144172" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/ab9O54ZFmck/S04-E10.mp3" />
          </item>
          <item>
            <title>Samsung’s loss is Microsoft’s gain – in-traction.com</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/NUTVfL7DIbU/</link>
            <description>In the ongoing battle for the supremacy of the exploding smartphone and tablet device market Apple&amp;#8217;s courtroom drama with Samsung over patent infringement has blown the landscape wide open. What has been advertised as a straight fight between Apple and Samsung is actually a little more complex than that. The role that Google&amp;#8217;s Android mobile operating system [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=597</guid>
            <pubDate>Sun, 18 Nov 2012 10:24:58 +0000</pubDate>
            <content:encoded>&lt;p&gt;In the ongoing battle for the supremacy of the exploding smartphone and tablet device market Apple&amp;#8217;s courtroom drama with Samsung over patent infringement has blown the landscape wide open. What has been advertised as a straight fight between Apple and Samsung is actually a little more complex than that. The role that Google&amp;#8217;s Android mobile operating system has had to play in all this has far reaching implications for the industry.&lt;span id="more-597"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Hardware companies writing software&lt;/h3&gt;
&lt;p&gt;Samsung are a hardware company. Apple are also a hardware company but they develop software too. Samsung have implemented an augmented version of Google&amp;#8217;s Android to drive their devices and it&amp;#8217;s this combination that was at the centre of the legal action. Samsung are not the only vender using an Android based system. The choice of operating systems for venders is limited. Apple tightly control their iOS system and so other, non apple devices are unable  to use it. Therefore Android or the emerging Windows Mobile platform (first 7 and now 8) are the only two options for everybody else. Android&amp;#8217;s openness combined with Windows&amp;#8217; lateness to market has made this decision, up to now, a relatively straight forward one. Almost every hardware manufacturer is augmenting and deploying an Android based system.&lt;/p&gt;
&lt;p&gt;Read more on &amp;#8220;&lt;a rel="nofollow" target="_blank" href="http://www.in-traction.com/samsungs-loss-is-microsofts-gain/"&gt;Samsung&amp;#8217;s loss is Microsoft&amp;#8217;s gain&lt;/a&gt;&amp;#8221; at in-traction.com&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Reflow, Transmit, Supportbee, Mention</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/ikEJ1p1VdWg/</link>
            <description>Marcus gets excited about FTP, I enthuse about Adobe Reflow, we both pretend to care about customer support and then go ego surfing.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/ikEJ1p1VdWg" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e09/</guid>
            <pubDate>Thu, 15 Nov 2012 12:29:31 +0000</pubDate>
            <media:content fileSize="27588188" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/KUW9L-vk8Xc/S04-E09.mp3" />
            <enclosure length="27588188" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/KUW9L-vk8Xc/S04-E09.mp3" />
          </item>
          <item>
            <title>Solidify, Sublime, Optimise and Ideas</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/H7BhbYt5i9o/</link>
            <description>This week on the show we look at a new user testing tool, explore your multi-variance options, review Sublime text and get some design inspiration.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/H7BhbYt5i9o" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e08/</guid>
            <pubDate>Thu, 08 Nov 2012 12:10:55 +0000</pubDate>
            <media:content fileSize="22669226" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/LTFT9kFTg88/S04-E08.mp3" />
            <enclosure length="22669226" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/LTFT9kFTg88/S04-E08.mp3" />
          </item>
          <item>
            <title>Bring Your Own Device: Enterprise solutions – in-traction.com</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/szhNMGw5wco/</link>
            <description>As technology has advanced and the love affair between consumers and their mobile phones has intensified, you could say that the invasion of personal computing equipment into the enterprise space has been inevitable. However, few could have predicted the pace at which the BYOD (Bring Your Own Device) phenomenon has taken hold.  The BYOD phenomenon [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=594</guid>
            <pubDate>Wed, 07 Nov 2012 10:20:10 +0000</pubDate>
            <content:encoded>&lt;p&gt;As technology has advanced and the love affair between consumers and their mobile phones has intensified, you could say that the invasion of personal computing equipment into the enterprise space has been inevitable. However, few could have predicted the pace at which the BYOD (Bring Your Own Device) phenomenon has taken hold. &lt;span id="more-594"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;The BYOD phenomenon&lt;/h3&gt;
&lt;p&gt;Just a couple of years ago the iPad didn’t exist and the idea of employees using personal smartphones for corporate email and applications was beyond consideration. Now, according to Forrester, nearly 60% of organisations are embracing a BYOD programme. We herd from Apples Tim Cook  at the recent launch of the iPad mini that 80% of fortune 500 companies are rolling out or trialing iPads. I find this claim very easy to believe simply by considering the new work and enquiries that come across my desk at &lt;a rel="nofollow" title="Dootrix - enterprise software solutions" target="_blank" href="http://www.dootrix.com"&gt;Dootrix&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Previously mobility in enterprise meant that the selected few, company executives and salespeople, would be handed a standard issue BlackBerry. Now BYOD means that employees can bring their own smartphones and tablets and connect them to corporate systems. This is a great advance. Employees love to bring their own devices into the office. And mobile, connected employees are happier and more productive. As the owner of enterprise IT you just need to be confident of the security and management capabilities of your infrastructure so that you can make the most of this opportunity. Simple?&lt;/p&gt;
&lt;p&gt;Read more about &amp;#8220;&lt;a rel="nofollow" target="_blank" href="http://www.in-traction.com/bring-your-own-device-enterprise-solutions/"&gt;Bring Your Own Device: Enterprise solutions&lt;/a&gt;&amp;#8221; on in-traction.com&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Screenflow, Starkers, Mailchimp and Photosync</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/upJZ_BjaUog/</link>
            <description>On this week's show we have screencast recording software, Wordpress starter templates, software for sending newsletters and an app for moving photos around seamlessly.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/upJZ_BjaUog" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e07/</guid>
            <pubDate>Thu, 01 Nov 2012 04:01:35 +0000</pubDate>
            <media:content fileSize="28777073" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/-NZAVbFyxoE/S04-E07.mp3" />
            <enclosure length="28777073" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/-NZAVbFyxoE/S04-E07.mp3" />
          </item>
          <item>
            <title>Verifyapp, FitVid, Privacy Policy Generator and Pocket</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/uS4XE7t5uW0/</link>
            <description>On this week's podcast; quick and dirty user testing, and the challenges of responsive design. We also look at privacy policies and managing your reading list.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/uS4XE7t5uW0" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e06/</guid>
            <pubDate>Thu, 25 Oct 2012 11:28:07 +0000</pubDate>
            <media:content fileSize="21668214" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/fhqPeNHG65w/S04-E06.mp3" />
            <enclosure length="21668214" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/fhqPeNHG65w/S04-E06.mp3" />
          </item>
          <item>
            <title>Gridset, Trello, SoundGecko and Coda vs Espresso</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/wvmnGswUN1A/</link>
            <description>This week we cover a great grid tool, enjoy list nirvana, and learn to listen to our reading list. We also put Coda 2 and Espresso head to head.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/wvmnGswUN1A" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e05/</guid>
            <pubDate>Thu, 18 Oct 2012 11:39:31 +0000</pubDate>
            <media:content fileSize="28660253" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/ZSp4NS_9USI/S04-E05.mp3" />
            <enclosure length="28660253" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/ZSp4NS_9USI/S04-E05.mp3" />
          </item>
          <item>
            <title>TinyPNG, Twitter Boostrap, SocialSafe and Day One</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/vVJOFojxdts/</link>
            <description>Paul gets over excited about audio effects, Marcus proves clueless about Twitter bootstrap and we both think TinyPNG is the dogs bollocks.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/vVJOFojxdts" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e04/</guid>
            <pubDate>Thu, 11 Oct 2012 09:39:46 +0000</pubDate>
            <media:content fileSize="24188090" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/Afj9vCKN2SQ/S04-E04.mp3" />
            <enclosure length="24188090" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/Afj9vCKN2SQ/S04-E04.mp3" />
          </item>
          <item>
            <title>Axure, Fireworks, LESS and IFTTT</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/oJsRGisQyQ0/</link>
            <description>This week I claim Axure is overpriced, @leigh explains why we should all be using Fireworks and we delve into pre-processors.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/oJsRGisQyQ0" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e03/</guid>
            <pubDate>Thu, 04 Oct 2012 11:18:16 +0000</pubDate>
            <media:content fileSize="27252358" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/sr97fSgGWzM/S04-E03.mp3" />
            <enclosure length="27252358" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/sr97fSgGWzM/S04-E03.mp3" />
          </item>
          <item>
            <title>Gridlover, Codekit, Buffer and Flipboard</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/QWBxqmqv4qc/</link>
            <description>In our continual hunt for the best apps and tools for web designers we look at Gridlover, Codekit, Buffer and Flipboard.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/QWBxqmqv4qc" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e02/</guid>
            <pubDate>Thu, 27 Sep 2012 11:49:55 +0000</pubDate>
            <media:content fileSize="22708306" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/wi1FwWzsBXs/S04-E02.mp3" />
            <enclosure length="22708306" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/wi1FwWzsBXs/S04-E02.mp3" />
          </item>
          <item>
            <title>ICOMoon, Adobe Shadow, Evernote and Everclip</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/ynQxizEfGZE/</link>
            <description>The Boagworld Show returns for season 4. Apps reviewed include ICOMoon, Adobe Shadow, Evernote and Everclip&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/ynQxizEfGZE" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/4/episode/s04e01/</guid>
            <pubDate>Thu, 20 Sep 2012 11:28:49 +0000</pubDate>
            <media:content fileSize="24836345" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/GGSLV9oeoec/S04-E01.mp3" />
            <enclosure length="24836345" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/GGSLV9oeoec/S04-E01.mp3" />
          </item>
          <item>
            <title>.NET Web Development, you know you want to...</title>
            <link>http://cargowire.net/blog/polygotdotnetdev</link>
            <description>secretly... no really, it could be	your new guilty pleasure......maybe I can convince you&lt;p&gt;My first smashing coding article is now available! It's main
				aim is to convince people that .NET isn't all bad.&lt;/p&gt;&lt;p&gt;Hopefully there'll be something in there for developers of
				all backgrounds - A basic intro to .NET for devs from other platforms and a little play with the lesser used .NET
				languages for the experienced .NETter.&lt;/p&gt;&lt;p&gt;Check out the article, 
				source code and demo.&lt;/p&gt;&lt;p&gt;If anyone fancies adding another example of either a different language or framework by all means Fork Me!&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/polygotdotnetdev</guid>
            <pubDate>Wed, 04 Jul 2012 12:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;My first &lt;a rel="nofollow" target="_blank" href="http://coding.smashingmagazine.com"&gt;smashing coding&lt;/a&gt; article is now available! It's main
				aim is to convince people that .NET isn't all bad.&lt;/p&gt;&lt;p&gt;Hopefully there'll be something in there for developers of
				all backgrounds - A basic intro to .NET for devs from other platforms and a little play with the lesser used .NET
				languages for the experienced .NETter.&lt;/p&gt;&lt;p&gt;Check out the &lt;a rel="nofollow" target="_blank" href="http://coding.smashingmagazine.com/2012/07/02/dive-net-web-development/"&gt;article&lt;/a&gt;, 
				&lt;a rel="nofollow" target="_blank" href="https://github.com/cargowire/DotNetDev"&gt;source code&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://stuff.cargowire.net/dotnetdev/"&gt;demo&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If anyone fancies adding another example of either a different language or framework by all means Fork Me!&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Managing feedback</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/yYzL59ENOGs/</link>
            <description>Client centric design encourages clients to comment on the web design process. But how do you keep the client focused and encouraging the right type of feedback?&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/yYzL59ENOGs" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/3/episode/s03e06/</guid>
            <pubDate>Wed, 20 Jun 2012 11:01:04 +0000</pubDate>
            <media:content fileSize="21460280" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/9SXd6rzGY-8/S03-E06_2.mp3" />
            <enclosure length="21460280" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/9SXd6rzGY-8/S03-E06_2.mp3" />
          </item>
          <item>
            <title>Dealing with design</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/Apwar8-1zPw/</link>
            <description>Design is the subject most likely to undermine the client / designer relationship. This post focuses on how to get client and designer working together effectively over design, rather than it descending into a power struggle.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/Apwar8-1zPw" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/3/episode/s03e05/</guid>
            <pubDate>Wed, 06 Jun 2012 11:51:13 +0000</pubDate>
            <media:content fileSize="27428319" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/oo2VZ2fXKs0/S03-E05.mp3" />
            <enclosure length="27428319" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/oo2VZ2fXKs0/S03-E05.mp3" />
          </item>
          <item>
            <title>Should everyone learn to code?</title>
            <link>http://cargowire.net/blog/shouldwealllearntocode</link>
            <description>Learn to code? not learn to code? argue about who should learn, when and why?.. definitely.&lt;p&gt;
					It's not often I write opinion pieces but the whole 'learn to code' thing seems to have been building since the beginning of the year.  It's time
					to add my voice to the squabble.
 				&lt;/p&gt;&lt;p&gt;The big recent news of course is that Jeff Atwood added his voice to 
				the fray with the rather comment baiting "please don't learn to code".  Atwood's post appeared to be in response to the buzz around Code Academy's
				Code Year; an initiative to get people learning to code.&lt;/p&gt;&lt;p&gt;If we go back to the beginning of the year though we can see this idea was hitting the headlines in the UK for difference reasons.  Michael Gove, 
				darling of the teaching unions,
				was reported by the BBC as wanting to overhaul ICT teaching in schools.&lt;/p&gt;&lt;p&gt;Now, this idea wasn't a sudden epiphany from Gove.
				The BCS had been pushing for change
				for a long time, and so too have a number of individuals in the creative technology industries. And although an American organisation pushing the learning 
				of code (with figures like the Mayor of New York taking them up on it) and the British Government potentially encouraging schools to teach computing may seem unrelated both are anchored in the 
				core principle that 'coding' is a fundamental thing to be learned.&lt;/p&gt;&lt;p&gt;To me, that's the key pivot point and the main thing that people like Jeff Atwood were getting at.  No-one is suggesting people should be dissallowed to learn
				or even discouraged if they want to.  It's more whether it is a fundamentally useful thing to learn even if you do not intend to take a career path making direct use of it.&lt;/p&gt;&lt;p&gt;Back when the UK curriculum was in the news I remember discussing it with Rob. What became clear is it's actually quite hard
				to be objective about it.  If you've spent most your life using computers, did a degree in it and are now working in that field of course you are going to think it would have
				been useful to learn it back at school and of course you're going to think everyone should experience how awesome you find it.  But then arguably that's true of a lot of fields.
				Should a Lawyer expect to learn how a court works at school?&lt;/p&gt;&lt;p&gt;There are probably two main aims for curriculum: 
					To prepare the student for getting through life e.g. literacy, numeracy, personal, social and health educationTo give them a taste of the wide scope of human knowledge and activity so as to adequately make them aware of how they might want to make their impact on the world&lt;/p&gt;&lt;p&gt;So does 'computing' fit into either of these categories? Well you definitely need to know how to use a computer. They are pervasive in the workplace and in
				terms of dealing with governments, banks and media.  But then is using a computer as key as being able to read and communicate effectively through the written word?&lt;/p&gt;&lt;p&gt;Arguably the subjects we see as core were baked into our concept of a curriculum before computing. The need to be able to use computers was met, although 
				often heavily criticised, by
				ICT.&lt;/p&gt;&lt;p&gt;However one of the key things I think ICT has failed to do is address the second point in terms of giving the student that taste of computer science that can allow them
				to run away with it, turning it into a life passion and career.  ICT never really said, to me at least, "Hey guys these apps you're using, these games you're playing
				you can do this shit and get paid for it and here's how".&lt;/p&gt;&lt;p&gt;
					This whole 'user vs creator' argument is often put forward but then I use a lot of things that I'm unable to create or fix from plumbing through cars and electrical hardware.
					In most cases if I wish to get into it there are courses available but they are generally later in life and optional.  I call bullshit on every comment saying
					people need to know coding to avoid things like, as Mortiz Schlarb put it "How can my download limit be exceeded, I haven't downloaded anything, I just watched streams?!".
					Knowing how to code doesn't suddenly make you a general computer expert it's a very specific aspect of computer knowledge.&lt;/p&gt;&lt;p&gt;In fact it isn't even the only way you 'create' with a computer.  If I use applications to create 3D art or craft a level for Portal I'm creating, but I'm not coding.&lt;/p&gt;&lt;p&gt;Similarly there are those who try and argue that
					coding isn't what it's about. It's actually all about critical thinking and analysis. Well is it? surely coding is not the only mechanism for that.  Should we
					add philosophy classes to the list of 'must haves'?
				&lt;/p&gt;&lt;p&gt;In fact, for the pros the best argument is actually sticking to their guns and saying that programming really is a new fundamental building block (along with literacy, numercy etc).
				Afterall it's applicable to many jobs (probably more so going forward) and you don't really get a job as a general purpose 'programmer' in the same way that you don't get a job as a general
				'writer' you use those skills and further them into your particular career niche.  A digital artist can be a programmer as much as an engineer or a journalist or
				the various flavours of web, app, game and OS programmers.&lt;/p&gt;&lt;p&gt;In this way I think I'm left leaning to the pro camp in terms of teaching 'computing' in some form.  But to me that shouldn't just be coding it should be a more up to date
				well rounded IT/Computing education.  As Scott Hanselman puts it it'd be useful for a user to know
				a bit more, say on DNS and HTTP.  As some of the commenters on the Atwood article put it it might be useful to know more about what streaming or what a browser is.  Many of the arguments 
				people put forth argued for technical topics much of which is aside from, or at least in addition to, knowing how to code.&lt;/p&gt;&lt;p&gt;In fact, I might be more open to a relatively stripped back computing curriculum in it's own right but with specific time and resources set aside for integration
				with existing subjects such as maths, technology (whether its D&amp;T, Graphics etc), geography etc.  It's value as a cross-cutting concern is surely huge.&lt;/p&gt;&lt;p&gt;As a developer I can't help but be struck by Roridge's words:&lt;/p&gt;&lt;p&gt;When more and more people come to me with 'the next facebook' and a budget of 'around five hundred pounds' I might shake my head in the direction of the 'learn to code' movement.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/shouldwealllearntocode</guid>
            <pubDate>Mon, 04 Jun 2012 16:20:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
					It's not often I write opinion pieces but the whole 'learn to code' thing seems to have been building since the beginning of the year.  It's time
					to add my voice to the squabble.
 				&lt;/p&gt;&lt;p&gt;The big recent news of course is that &lt;a rel="nofollow" target="_blank" href="http://www.codinghorror.com/blog/2012/05/please-dont-learn-to-code.html"&gt;Jeff Atwood&lt;/a&gt; added his voice to 
				the fray with the rather comment baiting "please don't learn to code".  Atwood's post appeared to be in response to the buzz around Code Academy's
				&lt;a rel="nofollow" target="_blank" href="http://codeyear.com/"&gt;Code Year&lt;/a&gt;; an initiative to get people learning to code.&lt;/p&gt;&lt;p&gt;If we go back to the beginning of the year though we can see this idea was hitting the headlines in the UK for difference reasons.  Michael Gove, 
				&lt;a rel="nofollow" target="_blank" href="http://www.guardian.co.uk/education/2012/apr/08/teachers-union-leader-attacks-michael-gove" title="Guardian reports on NASUWT describing Gove's actions as an 'unparalleled vicious assault'"&gt;darling of the teaching unions&lt;/a&gt;,
				was &lt;a rel="nofollow" target="_blank" href="http://www.bbc.co.uk/news/education-16493929"&gt;reported by the BBC&lt;/a&gt; as wanting to overhaul ICT teaching in schools.&lt;/p&gt;&lt;p&gt;Now, this idea wasn't a &lt;a rel="nofollow" target="_blank" href="http://www.bbc.co.uk/news/education-18073996" title="Oh yes, he also wants every school to be sent a King James bible"&gt;sudden epiphany from Gove&lt;/a&gt;.
				The BCS had been &lt;a rel="nofollow" target="_blank" href="http://academy.bcs.org/category/16234" title="BCS note summarising the activities of the BCS Academy of Computing in relation to ICT curriculum"&gt;pushing for change&lt;/a&gt;
				for a long time, and so too have &lt;a rel="nofollow" target="_blank" href="http://maban.co.uk/64"&gt;a number of individuals&lt;/a&gt; in the creative technology industries. And although an American organisation pushing the learning 
				of code (with figures like the Mayor of New York taking them up on it) and the British Government potentially encouraging schools to teach computing may seem unrelated both are anchored in the 
				core principle that 'coding' is a fundamental thing to be learned.&lt;/p&gt;&lt;p&gt;To me, that's the key pivot point and the main thing that people like Jeff Atwood were getting at.  No-one is suggesting people should be dissallowed to learn
				or even discouraged if they want to.  It's more whether it is a fundamentally useful thing to learn even if you do not intend to take a career path making direct use of it.&lt;/p&gt;&lt;p&gt;Back when the UK curriculum was in the news I remember discussing it with &lt;a rel="nofollow" target="_blank" href="http://twitter.com/bobscape"&gt;Rob&lt;/a&gt;. What became clear is it's &lt;strong&gt;actually quite hard
				to be objective about it&lt;/strong&gt;.  If you've spent most your life using computers, did a degree in it and are now working in that field of course you are going to think it would have
				been useful to learn it back at school and of course you're going to think everyone should experience how awesome you find it.  But then arguably that's true of a lot of fields.
				Should a Lawyer expect to learn how a court works at school?&lt;/p&gt;&lt;h3&gt;Curriculum&lt;/h3&gt;&lt;p&gt;There are probably two main aims for curriculum: 
					&lt;ul&gt;&lt;li&gt;To prepare the student for getting through life e.g. literacy, numeracy, personal, social and health education&lt;/li&gt;&lt;li&gt;To give them a taste of the wide scope of human knowledge and activity so as to adequately make them aware of how they might want to make their impact on the world&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;img alt="Computing in the Curriculum Venn Diagram" width="419" height="327"/&gt;&lt;p&gt;So does 'computing' fit into either of these categories? Well you definitely need to know how to use a computer. They are pervasive in the workplace and in
				terms of dealing with governments, banks and media.  But then is using a computer as key as being able to read and communicate effectively through the written word?&lt;/p&gt;&lt;p&gt;Arguably the subjects we see as core were baked into our concept of a curriculum before computing. The need to be able to &lt;em&gt;use&lt;/em&gt; computers was met, although 
				often &lt;a rel="nofollow" target="_blank" href="http://www.bbc.co.uk/news/uk-14683133" title="Googles Eric Schmidt criticises teaching of 'learning to use software'"&gt;heavily criticised&lt;/a&gt;, by
				ICT.&lt;/p&gt;&lt;p&gt;However one of the key things I think ICT has failed to do is address the second point in terms of giving the student that taste of computer science that can allow them
				to run away with it, turning it into a life passion and career.  ICT never really said, to me at least, "Hey guys these apps you're using, these games you're playing
				you can do this shit and get paid for it and here's how".&lt;/p&gt;&lt;h3&gt;User vs Creator&lt;/h3&gt;&lt;p&gt;
					This whole 'user vs creator' argument is often put forward but then I use a lot of things that I'm unable to create or fix from plumbing through cars and electrical hardware.
					In most cases if I wish to get into it there are courses available but they are generally later in life and optional.  I call bullshit on every comment saying
					people need to know coding to avoid things like, as Mortiz Schlarb put it "How can my download limit be exceeded, I haven't downloaded anything, I just watched streams?!".
					Knowing how to code doesn't suddenly make you a general computer expert it's a very specific aspect of computer knowledge.&lt;/p&gt;&lt;p&gt;In fact it isn't even the only way you 'create' with a computer.  If I use applications to create 3D art or craft a level for Portal I'm creating, but I'm not coding.&lt;/p&gt;&lt;p&gt;Similarly there are those who try and argue that
					coding isn't what it's about. It's actually all about critical thinking and analysis. Well is it? surely coding is not the only mechanism for that.  Should we
					add philosophy classes to the list of 'must haves'?
				&lt;/p&gt;&lt;h3&gt;How would I argue the 'for'&lt;/h3&gt;&lt;p&gt;In fact, for the pros the best argument is actually sticking to their guns and saying that programming really is a new fundamental building block (along with literacy, numercy etc).
				Afterall it's applicable to many jobs (probably more so going forward) and you don't really get a job as a general purpose 'programmer' in the same way that you don't get a job as a general
				'writer' you use those skills and further them into your particular career niche.  A digital artist can be a programmer as much as an engineer or a journalist or
				the various flavours of web, app, game and OS programmers.&lt;/p&gt;&lt;p&gt;In this way I think I'm left leaning to the pro camp in terms of teaching 'computing' in some form.  But to me that shouldn't just be coding it should be a more up to date
				well rounded IT/Computing education.  As &lt;a rel="nofollow" target="_blank" href="http://www.hanselman.com/blog/PleaseLearnToThinkAboutAbstractions.aspx"&gt;Scott Hanselman&lt;/a&gt; puts it it'd be useful for a user to know
				a bit more, say on DNS and HTTP.  As some of the commenters on the Atwood article put it it might be useful to know more about what streaming or what a browser is.  Many of the arguments 
				people put forth argued for technical topics much of which is aside from, or at least in addition to, knowing how to code.&lt;/p&gt;&lt;p&gt;In fact, I might be more open to a relatively stripped back computing curriculum in it's own right but with specific time and resources set aside for integration
				with existing subjects such as maths, technology (whether its D&amp;amp;T, Graphics etc), geography etc.  It's value as a cross-cutting concern is surely huge.&lt;/p&gt;&lt;h3&gt;Final thoughts&lt;/h3&gt;&lt;p&gt;As a developer I can't help but be struck by Roridge's words:&lt;/p&gt;&lt;blockquote&gt;
						"The other part is they risk becoming people who "learnt to code" in Javascript and will therefore attempt to solve every problem and adopt the "shit's easy" attitude."
					&lt;/blockquote&gt;&lt;p&gt;When more and more people come to me with 'the next facebook' and a budget of 'around five hundred pounds' I might shake my head in the direction of the 'learn to code' movement.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>A business embedded approach</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/zm8loF0jquE/</link>
            <description>A big part of client centric web design is being focused on business drivers and objectives. In this post we look at how to increase your knowledge of the clients business.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/zm8loF0jquE" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/3/episode/s03e04/</guid>
            <pubDate>Wed, 23 May 2012 11:48:05 +0000</pubDate>
            <media:content fileSize="22403195" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/rlKEa6yPLKg/S03-E04.mp3" />
            <enclosure length="22403195" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/rlKEa6yPLKg/S03-E04.mp3" />
          </item>
          <item>
            <title>Nurturing a communicative relationship</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/APxvqnja7sE/</link>
            <description>Too many client relationships are like something from a bad romantic comedy. In this post we look at how working with clients is much like dating. Marcus and Paul are the love doctors laying down principles for the perfect relationship.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/APxvqnja7sE" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/3/episode/s03e03/</guid>
            <pubDate>Wed, 09 May 2012 11:43:23 +0000</pubDate>
            <media:content fileSize="25999107" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/hyMQpw-vli4/S03-E03.mp3" />
            <enclosure length="25999107" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/hyMQpw-vli4/S03-E03.mp3" />
          </item>
          <item>
            <title>A partnership of experts</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/1pZrT2LYGpc/</link>
            <description>For the client/designer relationship to work both parties need to respect the other. In this post we explore how to move the clients perception of you as a pixel pusher to that of an expert.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/1pZrT2LYGpc" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/3/episode/s03e02/</guid>
            <pubDate>Wed, 25 Apr 2012 11:35:04 +0000</pubDate>
            <media:content fileSize="30530203" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/QSJW6KF0SK4/S03-E02.mp3" />
            <enclosure length="30530203" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/QSJW6KF0SK4/S03-E02.mp3" />
          </item>
          <item>
            <title>Introducing Client Centric Design</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/E3cPNIc1RR4/</link>
            <description>In the first episode of season 3 we introduce client centric design. This methodology addresses the negative attitude that exists towards client work and has the potential to transform your business.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/E3cPNIc1RR4" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/3/episode/s03e01/</guid>
            <pubDate>Wed, 11 Apr 2012 10:55:53 +0000</pubDate>
            <media:content fileSize="26436293" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/p7QM3QRa6bU/S03-E01.mp3" />
            <enclosure length="26436293" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/p7QM3QRa6bU/S03-E01.mp3" />
          </item>
          <item>
            <title>The Barn site is live!</title>
            <link>http://cargowire.net/blog/barnsite</link>
            <description>Finally it's here&lt;p&gt;
					For the last few weeks I've been pulling together the concept of 'The Barn'.  Ostensibly it's a company blog, but to me it's a bit
					nicer than that.
				&lt;/p&gt;&lt;p&gt;In drafting up the 'about' page I defined it as 'Headscapers not Headscape' and that's my hope.  The intention
				is that there is a clear Headscape tie in - Articles and content will relate strongly to what we're doing at Headscape,
				how and when.  This allows us to talk openly about clients and particular implementations we've done, perhaps more so than we
				would have done on personal sites.  However it's not intended as a press release mechanism, nor an enforced 'write an article for every project you do'.&lt;/p&gt;&lt;p&gt;The articles will be written by all Headscapers.  That means the scope will be broad. But if you are more code focused simply
				follow the code category or authors such as 
				Dan and I.  If
				design's your thing follow Ed or Chris.
				
				The design (pixels!)Once again our designer Ed has done an awesome job both with handling my demands
				and coming up with some great pixel artwork for the header.  I'm still staring at it now - one day I will find Wally in there I'm sure.Check it outPlease do check out the site.  We've tried to avoid a classic 'launch with no content' scenario and have filled in a bunch of stuff
				including some downloads, code and articles.  My launch articles are: Rule based themes - WP Plugin,
				Using Domain Events and Unit-testing - first steps.
				Although dated to match when they were relevant to projects these are pretty much freshly written so please do let me know what you think.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/barnsite</guid>
            <pubDate>Tue, 03 Apr 2012 17:30:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
					For the last few weeks I've been pulling together the concept of '&lt;a rel="nofollow" target="_blank" href="http://barn.headscape.co.uk"&gt;The Barn&lt;/a&gt;'.  Ostensibly it's a company blog, but to me it's a bit
					nicer than that.
				&lt;/p&gt;&lt;p&gt;In drafting up the 'about' page I defined it as 'Headscapers not Headscape' and that's my hope.  The intention
				is that there is a clear Headscape tie in - Articles and content will relate strongly to what we're doing at Headscape,
				how and when.  This allows us to talk openly about clients and particular implementations we've done, perhaps more so than we
				would have done on personal sites.  However it's not intended as a press release mechanism, nor an enforced 'write an article for every project you do'.&lt;/p&gt;&lt;h3&gt;Content&lt;/h3&gt;&lt;p&gt;The articles will be written by all Headscapers.  That means the scope will be broad. But if you are more code focused simply
				follow the &lt;a rel="nofollow" target="_blank" href="http://barn.headscape.co.uk/category/code/"&gt;code category&lt;/a&gt; or authors such as 
				&lt;a rel="nofollow" target="_blank" href="http://barn.headscape.co.uk/author/dansheerman/"&gt;Dan&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://barn.headscape.co.uk/author/craigrowe/"&gt;I&lt;/a&gt;.  If
				design's your thing follow &lt;a rel="nofollow" target="_blank" href="http://barn.headscape.co.uk/author/edmerritt/"&gt;Ed&lt;/a&gt; or &lt;a rel="nofollow" target="_blank" href="http://barn.headscape.co.uk/author/chrissanderson/"&gt;Chris&lt;/a&gt;.
				
				&lt;h3&gt;The design (pixels!)&lt;/h3&gt;&lt;p&gt;&lt;a rel="nofollow"&gt;Once again&lt;/a&gt; our designer &lt;a rel="nofollow" target="_blank" href="http://www.edmerritt.com"&gt;Ed&lt;/a&gt; has done an awesome job both with handling my demands
				and coming up with some great pixel artwork for the header.  I'm still staring at it now - one day I will find &lt;a rel="nofollow" target="_blank" href="https://en.wikipedia.org/wiki/Where%27s_Wally%3F"&gt;Wally&lt;/a&gt; in there I'm sure.&lt;/p&gt;&lt;h3&gt;Check it out&lt;/h3&gt;&lt;p&gt;Please do check out the site.  We've tried to avoid a classic 'launch with no content' scenario and have filled in a bunch of stuff
				including some downloads, code and articles.  My launch articles are: &lt;a rel="nofollow" target="_blank" href="http://barn.headscape.co.uk/downloads/rule-based-themes-wp-plugin/"&gt;Rule based themes - WP Plugin&lt;/a&gt;,
				&lt;a rel="nofollow" target="_blank" href="http://barn.headscape.co.uk/code/using-domain-events/"&gt;Using Domain Events&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://barn.headscape.co.uk/code/unit-testing-first-steps/"&gt;Unit-testing - first steps&lt;/a&gt;.
				Although dated to match when they were relevant to projects these are pretty much freshly written so please do let me know what you think.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Barcamp Bournemouth 4</title>
            <link>http://cargowire.net/blog/bcbomo4</link>
            <description>This time with added hackspace.&lt;p&gt;Having made the trip twice before I was looking forward to Barcamp Bournemouth.  It's probably my favourite small event.  Partly because
				it's so close, partly because it's a great venue but mainly because there's always something interesting and new (at least new to me)
				going on.&lt;/p&gt;&lt;p&gt;This year Mozilla Developer Network had added a new element into the mix by sponsoring and providing gamepads for a hack space.
				But that wasn't the only difference. There was, at least in my now old man eyes, many more younger attendees than before which led to some interesting discussions - 
				ranging from the validity and credibility of our professional body, the BCS, to interesting views on getting a job and what
				the best smart phone is.&lt;/p&gt;&lt;p&gt;As a career long member of the BCS it was interesting to get involved in debating its usefulness during the discussion led by 
				Tom.  My personal view is that it's very london centric with too broad a remit to be of
				more use to someone than the independent, specific events/groups that are available.  It's power comes however in being a 'force for our interests'
				at a governmental/lobbying level.  For example, in recent work pushing for computer science rather than an MS Office based IT curriculum.&lt;/p&gt;&lt;p&gt;It would appear that many of the attendees also felt that it was irrelevant to (particularly web, as was the nature of the audience) development
				job applications and it's accreditation of degrees was not particularly seen as the 'gold standard' as the organisation maybe hopes.&lt;/p&gt;&lt;p&gt;By far the most memorable thing from this years event was the Hack created by Syd and Ad.&lt;/p&gt;&lt;p&gt;Having retired to the comfort of my own bed late on Saturday night I returned to find that Syd and Adam had spent the night knocking up
				a pretty impressive demo using an arduino, mac, ruby, objective-c, LED combo.
				The device was able to display an 8 by 8 grid of lights based either upon a website control or by reading tweets marked with the #bcbomo4 hashtag (using
				the now readily available Lawrence Sans font).&lt;/p&gt;&lt;p&gt;Whether it was down to that, or the talk by Syd (that I'm now referring to as the 'make awesome shit' talk) I knocked up a tiny hack myself afterward.
				In fact I'd hate to say it was actually inspired by cocks, but maybe it was.  While various attendees were fighting for control to draw phallic symbols
				on the 8x8 grid I thought it'd be kinda cool to be able to create such a dot matrix style picture based on an image.&lt;/p&gt;&lt;p&gt;Written in JS and using canvas this little tool now lives here and here.
				It will take an image from a remote online location and transpose it into a grid of coloured or black and white dots.  Not particularly useful, but kinda fun - and
				that's the whole point really.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/bcbomo4</guid>
            <pubDate>Wed, 07 Mar 2012 22:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Having made the trip twice before I was looking forward to Barcamp Bournemouth.  It's probably my favourite small event.  Partly because
				it's so close, partly because it's a great venue but mainly because there's always something interesting and new (at least new to me)
				going on.&lt;/p&gt;&lt;p&gt;This year Mozilla Developer Network had added a new element into the mix by sponsoring and providing gamepads for a hack space.
				But that wasn't the only difference. There was, at least in my now old man eyes, many more younger attendees than before which led to some interesting discussions - 
				ranging from the validity and credibility of our professional body, the BCS, to interesting views on getting a job and what
				the best smart phone is.&lt;/p&gt;&lt;p&gt;As a career long member of the BCS it was interesting to get involved in debating its usefulness during the discussion led by 
				&lt;a rel="nofollow" target="_blank" href="http://ibuildstuff.co.uk/"&gt;Tom&lt;/a&gt;.  My personal view is that it's very london centric with too broad a remit to be of
				more use to someone than the independent, specific events/groups that are available.  It's power comes however in being a 'force for our interests'
				at a governmental/lobbying level.  For example, in recent work pushing for computer science rather than an MS Office based IT curriculum.&lt;/p&gt;&lt;p&gt;It would appear that many of the attendees also felt that it was irrelevant to (particularly web, as was the nature of the audience) development
				job applications and it's accreditation of degrees was not particularly seen as the 'gold standard' as the organisation maybe hopes.&lt;/p&gt;&lt;h3&gt;Hacks&lt;/h3&gt;&lt;p&gt;By far the most memorable thing from this years event was the Hack created by &lt;a rel="nofollow" target="_blank" href="https://twitter.com/sydlawrence"&gt;Syd&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://twitter.com/skattyadz"&gt;Ad&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Having retired to the comfort of my own bed late on Saturday night I returned to find that Syd and Adam had spent the night knocking up
				&lt;a rel="nofollow" target="_blank" href="https://path.com/p/2OL9ce" title="LED displayed tweets"&gt;a pretty impressive demo using an arduino, mac, ruby, objective-c, LED combo&lt;/a&gt;.
				The device was able to display an 8 by 8 grid of lights based either upon a website control or by reading tweets marked with the #bcbomo4 hashtag (using
				the now readily available &lt;a rel="nofollow" target="_blank" href="http://fontstruct.com/fontstructions/show/619817"&gt;Lawrence Sans&lt;/a&gt; font).&lt;/p&gt;&lt;p&gt;Whether it was down to that, or the talk by Syd (that I'm now referring to as the 'make awesome shit' talk) I knocked up a tiny hack myself afterward.
				In fact I'd hate to say it was actually inspired by cocks, but maybe it was.  While various attendees were fighting for control to draw phallic symbols
				on the 8x8 grid I thought it'd be kinda cool to be able to create such a dot matrix style picture based on an image.&lt;/p&gt;&lt;p&gt;Written in JS and using canvas this little tool now lives &lt;a rel="nofollow" target="_blank" href="http://dimd.co.uk/dotmatrix/" title="Demo of DotMatrixJS"&gt;here&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="https://github.com/cargowire/DotMatrixJS" title="GitHub for DotMatrixJS"&gt;here&lt;/a&gt;.
				It will take an image from a remote online location and transpose it into a grid of coloured or black and white dots.  Not particularly useful, but kinda fun - and
				that's the whole point really.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>WP7 vs iPhone</title>
            <link>http://cargowire.net/blog/wp7vsiphone</link>
            <description>&lt;p&gt;Ok so if you follow me on twitter you may know that towards the end of last year I took part in 
				'Alphalabs'.  Organised by onedotzero this was a 
				competition	aimed at encouraging developers and artists to work together on the Lumia 800 platform.&lt;/p&gt;&lt;p&gt;While not taking part in	the eventual competition I was part of an initialteam creating projects for the launch of the event.  This meant an intensive two week project
				(which, in our case, used Silverlight and XNA 3D).&lt;/p&gt;&lt;p&gt;I'll write something up about that later.  However a side effect of this was that I was able to get hold of a Lumia 800
				very early on and for the duration of the project I was using the Lumia as my main device.&lt;/p&gt;&lt;p&gt;What that sentence also tells you is that I'm no longer using it as my main device.  So why is that? I'm a .NET developer
				after all.  Doesn't that make me a windows fan boy? well... no...&lt;/p&gt;&lt;p&gt;The physical phone itself is roughly equivalent in size to the iphone so makes little difference (other than the power
				button placement on the side of the device - which is actually quite nice).  So what does, is the OS and the surrounding 
				ecosystem.&lt;/p&gt;&lt;p&gt;WP7 requires a Windows Live account (OK, so iPhone requires an iTunes/Apple ID).  One of the annoying things about this
				however is that if you want to change it you have to effectively factory reset the device.  So you better make damn sure you use
				the same live account that your xbox uses or else you're in for some fun after setting it all up and realising your mistake
				(OK I did that.. what of it!).  Oh and yes I love having my legacy xbox live related hotmail account syncing to my phone...&lt;/p&gt;&lt;p&gt;In addition to normal phone functionality the main apps I use every day on iPhone are:&lt;/p&gt;&lt;p&gt;All of these apps are available on WP7.  In fact they go one step further and integrate into the rest of the phone.
				With a facebook account added these people appear in your 'people' hub, same with twitter.  The only problem is I never
				really got why I'd want them integrated like that.  I'm on a small device undertaking specific tasks I don't really find
				value in an app that washes over me my entire set of contacts and social interactions across different apps that I probably
				already segment people in to e.g facebook = friends, twitter = work.&lt;/p&gt;&lt;p&gt;It's odd to think that one of the big reasons I quit using WP7 was also one of it's biggest selling points - The Metro
				interface.  At a glance, and if you play with someone elses phone temporarily this is really nice.  Not only does it seem
				new and slick it is also very different - not an iphone clone at all.&lt;/p&gt;&lt;p&gt;The problem comes after you use it for a while and I'll illustrate it with this comparison shot:&lt;/p&gt;&lt;p&gt;Can you se what the problem might be? yep... it's the stupid waste of space.  In the same space that WP7
				has told me I'm using facebook and looking at the most recent posts the iPhone app has provided links to
				the menu, friends, messages, notifications plus action buttons for sorting, adding a new status, photo or checking in.
				By the time we get to the content area I can see one facebook update compared to two on the iphone.&lt;/p&gt;&lt;p&gt;The facebook app is by no means alone in this.  The twitter and guardian apps have similar problems.  This isn't
				because people are being slap dash with their WP7 implementations (at least not just because of that!). This
				is the design approach WP7 and Metro are pushing for us to use.&lt;/p&gt;&lt;p&gt;I want the WP7 devices to succeed.  Aside from their shortcomings they at least provide a viable and real alternative
				to iphone with a pre-existing set of .NET and Silverlight developers.  But they need to get usability right, now that
				they've done the whole beauty thing.&lt;/p&gt;&lt;p&gt;An end to end tie up between my WP7 device, Windows machine and Xbox live account is quite enticing... and definitely
				better than that Game Centre rubbish.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/wp7vsiphone</guid>
            <pubDate>Thu, 16 Feb 2012 21:20:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Ok so if you follow me on twitter you may know that towards the end of last year I took part in 
				'&lt;a rel="nofollow" target="_blank" href="http://alphalabs.cc"&gt;Alphalabs&lt;/a&gt;'.  Organised by &lt;a rel="nofollow" target="_blank" href="http://onedotzero.com/"&gt;onedotzero&lt;/a&gt; this was a 
				competition	aimed at encouraging developers and artists to work together on the Lumia 800 platform.&lt;/p&gt;&lt;p&gt;While not taking part in	the eventual competition I was part of an &lt;a rel="nofollow" target="_blank" href="http://treehousedev.co.uk/"&gt;initial&lt;/a&gt;&lt;a rel="nofollow" target="_blank" href="http://field.io"&gt;team&lt;/a&gt; creating projects for the launch of the event.  This meant an intensive two week project
				(which, in our case, used Silverlight and XNA 3D).&lt;/p&gt;&lt;p&gt;I'll write something up about that later.  However a side effect of this was that I was able to get hold of a Lumia 800
				very early on and for the duration of the project I was using the Lumia as my main device.&lt;/p&gt;&lt;p&gt;What that sentence also tells you is that I'm no longer using it as my main device.  So why is that? I'm a .NET developer
				after all.  Doesn't that make me a windows fan boy? well... no...&lt;/p&gt;&lt;h3&gt;Using the thing&lt;/h3&gt;&lt;p&gt;The physical phone itself is roughly equivalent in size to the iphone so makes little difference (other than the power
				button placement on the side of the device - which is actually quite nice).  So what does, is the OS and the surrounding 
				ecosystem.&lt;/p&gt;&lt;p&gt;WP7 requires a Windows Live account (OK, so iPhone requires an iTunes/Apple ID).  One of the annoying things about this
				however is that if you want to change it you have to effectively factory reset the device.  So you better make damn sure you use
				the same live account that your xbox uses or else you're in for some fun after setting it all up and realising your mistake
				(OK I did that.. what of it!).  Oh and yes I love having my legacy xbox live related hotmail account syncing to my phone...&lt;/p&gt;&lt;h3&gt;The Apps&lt;/h3&gt;&lt;p&gt;In addition to normal phone functionality the main apps I use every day on iPhone are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Twitter&lt;/li&gt;&lt;li&gt;Facebook&lt;/li&gt;&lt;li&gt;Guardian News&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;All of these apps are available on WP7.  In fact they go one step further and integrate into the rest of the phone.
				With a facebook account added these people appear in your 'people' hub, same with twitter.  The only problem is I never
				really got why I'd want them integrated like that.  I'm on a small device undertaking specific tasks I don't really find
				value in an app that washes over me my entire set of contacts and social interactions across different apps that I probably
				already segment people in to e.g facebook = friends, twitter = work.&lt;/p&gt;&lt;h3&gt;The main reason I quit WP7&lt;/h3&gt;&lt;p&gt;It's odd to think that one of the big reasons I quit using WP7 was also one of it's biggest selling points - The Metro
				interface.  At a glance, and if you play with someone elses phone temporarily this is really nice.  Not only does it seem
				new and slick it is also very different - not an iphone clone at all.&lt;/p&gt;&lt;p&gt;The problem comes after you use it for a while and I'll illustrate it with this comparison shot:&lt;/p&gt;&lt;img title="WP7 and iPhone Facebook apps side by side"/&gt;&lt;p&gt;Can you se what the problem might be? yep... it's the stupid waste of space.  In the same space that WP7
				has told me I'm using facebook and looking at the most recent posts the iPhone app has provided links to
				the menu, friends, messages, notifications plus action buttons for sorting, adding a new status, photo or checking in.
				By the time we get to the content area I can see one facebook update compared to two on the iphone.&lt;/p&gt;&lt;p&gt;The facebook app is by no means alone in this.  The twitter and guardian apps have similar problems.  This isn't
				because people are being slap dash with their WP7 implementations (at least not &lt;strong&gt;just&lt;/strong&gt; because of that!). This
				is the design approach WP7 and Metro are pushing for us to use.&lt;/p&gt;&lt;h3&gt;Don't get me wrong...&lt;/h3&gt;&lt;p&gt;I want the WP7 devices to succeed.  Aside from their shortcomings they at least provide a viable and real alternative
				to iphone with a pre-existing set of .NET and Silverlight developers.  But they need to get usability right, now that
				they've done the whole beauty thing.&lt;/p&gt;&lt;p&gt;An end to end tie up between my WP7 device, Windows machine and Xbox live account is quite enticing... and definitely
				better than that Game Centre rubbish.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Cargowire has a new design</title>
            <link>http://cargowire.net/blog/newdesign</link>
            <description>&lt;p&gt;
					Apparently doodling can be good for you.  Although when I do it, it's not so good for 
					Ed Merritt.&lt;/p&gt;&lt;p&gt;A bit before christmas I finally decided to sketch out some ideas I'd been having for a new layout
					and design for cargowire.
				&lt;/p&gt;&lt;p&gt;The idea was pretty simple.  With the homepage acting as a funnel through which I push the various channels of blog, articles, portfolio and events
				I could have a consistent, relatively rigid, grid layout with obvious scope for responsiveness.  The only problem was I wanted some nice design touches.&lt;/p&gt;&lt;p&gt;Luckily I work at a great agency where I get to share the building with some awesome designers... who I can then hassle for pro bono photoshop wizardry.&lt;/p&gt;&lt;p&gt;So Ed got my sketch, a paragraph explaining it and a skype along the lines of:&lt;/p&gt;&lt;p&gt;In our microcosm of the design process we'd started out with a wireframe and a genre based on some keywords and a few snippets of other sites (e.g. breadcrumbs
				from the guardian) - a losely held together 'mood board' if you like.&lt;/p&gt;&lt;p&gt;After a few iterations Ed came up with an automotive / americana feeling logo that fitted right with my
				thinking and from there the rest just grew into the original wireframe. He even did an html template for me... what a nice guy...&lt;/p&gt;&lt;p&gt;Although I'm pretty pleased with it I now have to hunt down a whole bunch of content that I didn't have on my previous site.  While I do that, please bear
				with me with the Placeholder images!&lt;/p&gt;&lt;p&gt;So, cheers to Ed for the stunning design.  Hopefully I won't bastardise it too much as I bend it to my will... although I might redo the markup and js ;-)&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/newdesign</guid>
            <pubDate>Sun, 05 Feb 2012 21:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
					Apparently &lt;a rel="nofollow" target="_blank" href="http://www.ted.com/talks/sunni_brown.html" title="TED talk: Doodler's unit!"&gt;doodling can be good for you&lt;/a&gt;.  Although when I do it, it's not so good for 
					&lt;a rel="nofollow" target="_blank" href="http://edmerritt.com/"&gt;Ed Merritt&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;A bit before christmas I finally decided to sketch out some ideas I'd been having for a new layout
					and design for cargowire.
				&lt;/p&gt;&lt;img alt="My initial sketch for the new cargowire" class="flex"/&gt;&lt;p&gt;The idea was pretty simple.  With the homepage acting as a funnel through which I push the various channels of blog, articles, portfolio and events
				I could have a consistent, relatively rigid, grid layout with obvious scope for responsiveness.  The only problem was I wanted some nice design touches.&lt;/p&gt;&lt;p&gt;Luckily I work at a great agency where I get to share the building with some awesome designers... who I can then hassle for pro bono photoshop wizardry.&lt;/p&gt;&lt;p&gt;So Ed got my sketch, a paragraph explaining it and a skype along the lines of:&lt;/p&gt;&lt;blockquote&gt;...a Sharp Retro look, kinda 50s with bright strong colours.&lt;/blockquote&gt;&lt;p&gt;In our microcosm of the design process we'd started out with a wireframe and a genre based on some keywords and a few snippets of other sites (e.g. breadcrumbs
				from the guardian) - a losely held together 'mood board' if you like.&lt;/p&gt;&lt;p&gt;After a few iterations Ed came up with an &lt;a rel="nofollow" target="_blank" href="http://edmerritt.com/work_cargowire.htm"&gt;automotive / americana feeling logo&lt;/a&gt; that fitted right with my
				thinking and from there the rest just grew into the original wireframe. He even did an html template for me... what a nice guy...&lt;/p&gt;&lt;p&gt;Although I'm pretty pleased with it I now have to hunt down a whole bunch of content that I didn't have on my previous site.  While I do that, please bear
				with me with the Placeholder images!&lt;/p&gt;&lt;p&gt;So, cheers to Ed for the stunning design.  Hopefully I won't bastardise it too much as I bend it to my will... although I might redo the markup and js ;-)&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Joining Dootrix</title>
            <link>http://cargowire.net/blog/joiningdootrix</link>
            <description>Very gradual change you can believe in.&lt;p&gt;
					It's been a while since I posted.  I'd like to say that's because a lot's been going on.  In reality I got lazy and now I just happen to have
					something to write about that can make it sound like a lot has been going on.
				&lt;/p&gt;&lt;p&gt;
					So I joined Dootrix.. and therefore left Headscape.  To be honest
					that's not that big a deal.. certainly not for you.  It is just my job after all, not yours. So I thought about twisting it to chat about change.
				&lt;/p&gt;&lt;p&gt;
					I'd been at Headscape for some four and a half years and as Tech Lead was in the privileged position of being able to exercise a great amount
					of control over my work.  As an aside; I say 'privileged' because I truly believe that the most important aspect of staff morale is control over your own
					work.  That includes not only how you do things but also the shift in responsibility from some 'upper layer' to yourself - with direct ownership.
				&lt;/p&gt;&lt;p&gt;
					So when the opportunity came up to move with Bob to his new company it was quite a big decision to make.
					Not only would it be a change in technologies it would also be a slight change in role, going from the lead to being part of a team under the technical
					directorship of Kev.  I've also become the youngest at a company again (which is always good for the early mid-life
					crisis).
				&lt;/p&gt;&lt;p&gt;
						For those keen readers amongst you you may relate this to my post from August about being a middle class dev.
					&lt;/p&gt;&lt;p&gt;
					When making the decision I was reminded by a friend of Haw's words "If You Do Not Change, You
					Can Become Extinct".  I'm a great believer that two truisms of being a programmer are that your main job is to handle change and part of handling that change
					is constant learning.  Now this comes in many forms.  In an agency environment each project represents new challenges and potentially things you've never done
					before.  Then on each project as the requirements evolve your aims and tasks are constantly needing readjustment.  If that isn't something you look forward to
					then you might want to reconsider being a programmer.
				&lt;/p&gt;&lt;p&gt;
					Personal projects may be your playground for trying new things but bearing in mind you probably spend about a third of your life at work wouldn't it make sense
					to get to try new things at work? Now, that isn't always possible and is often more incremental then it is seismic or even lateral.  This makes sense for business
					and can also for you, particularly if you want to become an expert in something specific.  However, as we know the tech world moves fast and so as professionals so should
					we.  One of the easiest ways to do that is to switch roles entirely...
				&lt;/p&gt;&lt;p&gt;
					In times of recession and austerity there can be many factors that influence a decision to move jobs that aren't just about if the new job will be fun. However
					in true hipster #YOLO style I decided to try and rule out those kinds of concerns.  Instead I returned to my point above regarding change and constant learning.  What was
					on offer at Dootrix was enforced change within a known situation (working with Bob) and so was Ideal. Since joining I've been working on C++, OpenGL, Silverlight and iOS.
					A reasonably far cry from my ASP.NET web days.  And that is not to denigrate those days.  The web is awesome, in many ways still the future and I will definitely still
					be in this space on personal projects but now I get to learn at a dramatic pace during worktime (which is, let's be honest the majority of the time) on a wide variety
					of software projects.
				&lt;/p&gt;&lt;p&gt;
					Hopefully you'll see a bit more variety in my articles switching from web to native and back again.  I've got a couple of web projects I'd like to be making
					and a few silly gadgets I like messing around with so the coming year should be great.
				&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/joiningdootrix</guid>
            <pubDate>Thu, 24 Nov 2011 20:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
					It's been a while since I posted.  I'd like to say that's because a lot's been going on.  In reality I got lazy and now I just happen to have
					something to write about that can make it sound like a lot has been going on.
				&lt;/p&gt;&lt;p&gt;
					So I joined &lt;a rel="nofollow" target="_blank" href="http://www.dootrix.com"&gt;Dootrix&lt;/a&gt;.. and therefore left &lt;a rel="nofollow" target="_blank" href="http://www.headscape.co.uk"&gt;Headscape&lt;/a&gt;.  To be honest
					that's not that big a deal.. certainly not for you.  It is just &lt;strong&gt;my&lt;/strong&gt; job after all, not yours. So I thought about twisting it to chat about change.
				&lt;/p&gt;&lt;p&gt;
					I'd been at Headscape for some four and a half years and as Tech Lead was in the privileged position of being able to exercise a great amount
					of control over my work.  As an aside; I say 'privileged' because I truly believe that the most important aspect of staff morale is control over your own
					work.  That includes not only how you do things but also the shift in responsibility from some 'upper layer' to yourself - with direct ownership.
				&lt;/p&gt;&lt;p&gt;
					So when the opportunity came up to move with &lt;a rel="nofollow" target="_blank" href="http://www.robborley.com"&gt;Bob&lt;/a&gt; to his new company it was quite a big decision to make.
					Not only would it be a change in technologies it would also be a slight change in role, going from the lead to being part of a team under the technical
					directorship of &lt;a rel="nofollow" target="_blank" href="http://www.kevatron.co.uk/"&gt;Kev&lt;/a&gt;.  I've also become the youngest at a company again (which is always good for the early mid-life
					crisis).
				&lt;/p&gt;&lt;p&gt;&lt;i&gt;
						For those keen readers amongst you you may relate this to my post from August about &lt;a rel="nofollow" target="_blank" href="http://cargowire.net/blog/bemiddleclass"&gt;being a middle class dev&lt;/a&gt;.
					&lt;/i&gt;&lt;/p&gt;&lt;h3&gt;Decisions, decisions...&lt;/h3&gt;&lt;p&gt;
					When making the decision I was reminded by a friend of &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Who_Moved_My_Cheese%3F"&gt;Haw's words&lt;/a&gt; "If You Do Not Change, You
					Can Become Extinct".  I'm a great believer that two truisms of being a programmer are that your &lt;strong&gt;main job is to handle change&lt;/strong&gt; and part of handling that change
					is &lt;strong&gt;constant learning&lt;/strong&gt;.  Now this comes in many forms.  In an agency environment each project represents new challenges and potentially things you've never done
					before.  Then on each project as the requirements evolve your aims and tasks are constantly needing readjustment.  If that isn't something you look forward to
					then you might want to reconsider being a programmer.
				&lt;/p&gt;&lt;p&gt;
					Personal projects may be your playground for trying new things but bearing in mind you probably spend about a third of your life at work wouldn't it make sense
					to get to try new things at work? Now, that isn't always possible and is often more incremental then it is seismic or even lateral.  This makes sense for business
					and can also for you, particularly if you want to become an expert in something specific.  However, as we know the tech world moves fast and so as professionals so should
					we.  One of the easiest ways to do that is to switch roles entirely...
				&lt;/p&gt;&lt;h3&gt;"What Would You Do If You Weren't Afraid?"&lt;/h3&gt;&lt;p&gt;
					In times of recession and austerity there can be many factors that influence a decision to move jobs that aren't just about if the new job will be fun. However
					in true hipster #YOLO style I decided to try and rule out those kinds of concerns.  Instead I returned to my point above regarding change and constant learning.  What was
					on offer at Dootrix was enforced change within a known situation (working with Bob) and so was Ideal. Since joining I've been working on C++, OpenGL, Silverlight and iOS.
					A reasonably far cry from my ASP.NET web days.  And that is not to denigrate those days.  The web is awesome, in many ways still the future and I will definitely still
					be in this space on personal projects but now I get to learn at a dramatic pace during worktime (which is, let's be honest the majority of the time) on a wide variety
					of software projects.
				&lt;/p&gt;&lt;h3&gt;Going forward:&lt;/h3&gt;&lt;p&gt;
					Hopefully you'll see a bit more variety in my articles switching from web to native and back again.  I've got a couple of web projects I'd like to be making
					and a few silly gadgets I like messing around with so the coming year should be great.
				&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>The whys, wheres and hows of going live</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/DlfxAlU67DU/</link>
            <description>If you thought building a website was hard, wait until you try to launch it. In this post we ask "when do you launch?" and "how do you launch without problems?"&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/DlfxAlU67DU" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/2/episode/s02e11/</guid>
            <pubDate>Wed, 09 Nov 2011 12:12:14 +0000</pubDate>
            <media:content fileSize="20981089" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/mayfg5XOY-I/S02-E11.mp3" />
            <enclosure length="20981089" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/mayfg5XOY-I/S02-E11.mp3" />
          </item>
          <item>
            <title>Making analytics work for you</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/g-q-6J5lBSI/</link>
            <description>Do you get the most out of Google analytics or are you just scratching the surface? In this post we discover that analytics is about more than user sessions, page views and bounce rates.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/g-q-6J5lBSI" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/2/episode/s02e10/</guid>
            <pubDate>Wed, 26 Oct 2011 14:00:32 +0000</pubDate>
            <media:content fileSize="23637429" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/jlEH9hjuQnE/S02-E10.mp3" />
            <enclosure length="23637429" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/jlEH9hjuQnE/S02-E10.mp3" />
          </item>
          <item>
            <title>An old guys guide to building modern websites</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/hY-0X0TEk58/</link>
            <description>[S02E09] Boagworld.com is the first site I have personally coded in a long time. Things have certainly come a long way and become very exciting.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/hY-0X0TEk58" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/2/episode/s2e9/</guid>
            <pubDate>Wed, 12 Oct 2011 09:10:46 +0000</pubDate>
            <media:content fileSize="29988319" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/_4kaa1DzSRY/S02-E09.mp3" />
            <enclosure length="29988319" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/_4kaa1DzSRY/S02-E09.mp3" />
          </item>
          <item>
            <title>Working with WordPress</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/C7GCM9WLSeI/</link>
            <description>[S02E08] WordPress has come a long way since its humble beginnings as a blogging tool. It&amp;#8217;s now a fully fledged content management system. But is it still the right choice for a site like Boagworld?&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/C7GCM9WLSeI" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/2/episode/s2e8/</guid>
            <pubDate>Wed, 28 Sep 2011 09:35:34 +0000</pubDate>
            <media:content fileSize="18164253" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/tarQTosdk9M/S02-E08.mp3" />
            <enclosure length="18164253" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/tarQTosdk9M/S02-E08.mp3" />
          </item>
          <item>
            <title>Real Life Responsive Design: Ethan Marcotte</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/TFatD6f3O0Q/</link>
            <description>[S02E07] We have all read articles on responsive design. However, when you put theory into practice things are never as simple as they first appear. Fortunately you can always ask Ethan Marcotte for help!&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/TFatD6f3O0Q" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/2/episode/s2e7/</guid>
            <pubDate>Wed, 14 Sep 2011 16:36:07 +0000</pubDate>
            <media:content fileSize="34900175" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/hVULecB10Q8/S02-E07.mp3" />
            <enclosure length="34900175" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/hVULecB10Q8/S02-E07.mp3" />
          </item>
          <item>
            <title>Web Accessibility in the real world</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/XkL0tziYU1I/</link>
            <description>[S02E06] The accessibility of our websites is not something many of us like to think about. However, we have a legal and morale obligation to do so.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/XkL0tziYU1I" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/2/episode/s2e6/</guid>
            <pubDate>Wed, 31 Aug 2011 08:45:54 +0000</pubDate>
            <media:content fileSize="32196188" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/4xip9mcOo5o/S02-E06.mp3" />
            <enclosure length="32196188" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/4xip9mcOo5o/S02-E06.mp3" />
          </item>
          <item>
            <title>Why you should try to be a middle class developer</title>
            <link>http://cargowire.net/blog/bemiddleclass</link>
            <description>&lt;p&gt;You may not know this but this blog has been xml based since its inception (in fact there's a longstanding, not yet achieved, task to 'replace' it
				with a 'better' persistant storage mechanism -- clearly I must agree then, that the perfect is the enemy of the good).  But anyway...
				don't worry.  I'm not about to do anotherblogaboutxml.&lt;/p&gt;&lt;p&gt;My point/warning really is that the root node of my articles xml is 'articles' as you might expect.  The root node of the blog/front
				page however has always been 'Rambling'...  ...so let the  begin...&lt;/p&gt;&lt;p&gt;Some time ago I had an idea for a blog post talking about various developer 'personas'.  Mainly to give me a chance to talk about
				the many hats web developers are required to wear day to day.  That never came about, however a clip show, or the internet, or a random 
				thought reminded me of this:&lt;/p&gt;&lt;p&gt;Now, I've talked before about developer humility and what to look for when applying for a job.
				However there is another, perhaps even more important, thing to consider when plucking for a place to work or finding people to surround yourself with:&lt;/p&gt;&lt;p&gt;Can you be the Ronnie Barker in the comedy sketch that is your career?&lt;/p&gt;&lt;p&gt;Perhaps, you may say, it's obvious that you will want someone to look up to.  Someone to aspire to be. Moreover you may want to actually be the 'top dog' (the Cleese
				in this ever imagination stretching metaphor that is my mid year ramble).&lt;/p&gt;&lt;p&gt;My argument would be that you want, for as long as possible to be Barker.  You want to learn from someone but also to be able to teach those Corbetts
				among us.  You don't want to rest on your laurels, don't want to avoid being questionned by someone who may actually know more than you and you definitely don't
				want a superiority complex.&lt;/p&gt;&lt;p&gt;On the other side the
				teaching of others 'below you' is in itself developing your understanding.  Never underestimate the power of trying to teach someone else something that you 
				think you understand.&lt;/p&gt;&lt;p&gt;You need to be kicked every now and then and to be honest to realise that you never will be Cleese.  In fact agree with yourself now that you won't ever be.
				If you think you are then you've stopped trying to get better or are just plain ignorant of the vast skill and ingenuity that is out there now and was there
				before allowing you to stand on	their shoulders.&lt;/p&gt;&lt;p&gt;If you can't find these roles within your organisation (and many of us can't) put yourself out there, find Cleese at a conference or a Corbett to mentor or help on stackoverflow.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/bemiddleclass</guid>
            <pubDate>Tue, 16 Aug 2011 21:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;You may not know this but this blog has been xml based since its inception (in fact there's a longstanding, not yet achieved, task to 'replace' it
				with a 'better' persistant storage mechanism -- clearly I must agree then, that the perfect is the enemy of the good).  But anyway...
				don't worry.  I'm not about to do &lt;a rel="nofollow"&gt;another&lt;/a&gt;&lt;a rel="nofollow"&gt;blog&lt;/a&gt;&lt;a rel="nofollow"&gt;about&lt;/a&gt; xml .&lt;/p&gt;&lt;p&gt;My point/warning really is that the root node of my articles xml is 'articles' as you might expect.  The root node of the blog/front
				page however has always been 'Rambling'...  ...so let the &amp;lt;ramble&amp;gt; begin...&lt;/p&gt;&lt;p&gt;Some time ago I had an idea for a blog post talking about various developer 'personas'.  Mainly to give me a chance to talk about
				the many hats web developers are required to wear day to day.  That never came about, however a clip show, or the internet, or a random 
				thought reminded me of this:&lt;/p&gt;&lt;img alt="The famous class sketch between Cleese, Barker and Corbett"/&gt;&lt;p&gt;Now, I've talked before about &lt;a rel="nofollow"&gt;developer humility&lt;/a&gt; and &lt;a rel="nofollow"&gt;what to look for when applying for a job&lt;/a&gt;.
				However there is another, perhaps even more important, thing to consider when plucking for a place to work or finding people to surround yourself with:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Can you be the Ronnie Barker in the comedy sketch that is your career?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Perhaps, you may say, it's obvious that you will want someone to look up to.  Someone to aspire to be. Moreover you may want to actually be the 'top dog' (the Cleese
				in this ever imagination stretching metaphor that is my mid year ramble).&lt;/p&gt;&lt;p&gt;My argument would be that you want, for as long as possible to be Barker.  You want to learn from someone but also to be able to teach those Corbetts
				among us.  You don't want to rest on your laurels, don't want to avoid being questionned by someone who may actually know more than you and you definitely don't
				want a superiority complex.&lt;/p&gt;&lt;p&gt;On the other side the
				teaching of others 'below you' is in itself developing your understanding.  Never underestimate the power of trying to teach someone else something that you 
				think you understand.&lt;/p&gt;&lt;blockquote&gt;
					"It is the way of the world, Baldrick.  The abused always kick downwards. I'm annoyed, and so I kick the cat.  The cat pounces on the
					mouse, and finally, the mouse..."
					"...bites you on the behind."
					&lt;cite&gt;Edmund B.&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;You need to be kicked every now and then and to be honest to realise that you never will be Cleese.  In fact agree with yourself now that you won't ever be.
				If you think you are then you've stopped trying to get better or are just plain ignorant of the vast skill and ingenuity that is out there now and was there
				before allowing you to stand on	their shoulders.&lt;/p&gt;&lt;p&gt;If you can't find these roles within your organisation (and many of us can't) put yourself out there, find Cleese at a conference or a Corbett to mentor or help on stackoverflow.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>The big decisions about design and how to make them</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/Oagab0W3yTo/</link>
            <description>[S02E05] Design is full of decisions from whether to design in the browser to which typeface is best. But how do you make those decisions and what factors need considering?&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/Oagab0W3yTo" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/2/episode/s2e5/</guid>
            <pubDate>Wed, 10 Aug 2011 11:11:28 +0000</pubDate>
            <media:content fileSize="23234098" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/V-E-Whqyl2c/S02-E05.mp3" />
            <enclosure length="23234098" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/V-E-Whqyl2c/S02-E05.mp3" />
          </item>
          <item>
            <title>Helping users find content and take action</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/t50W-w7q0Js/</link>
            <description>[S02E04] A successful website should enable users to find the content they require as quickly as possible, while encouraging them to complete your desired course of action. In this post I examine how to achieve these demanding objectives.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/t50W-w7q0Js" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/2/episode/s2e4/</guid>
            <pubDate>Wed, 20 Jul 2011 08:21:39 +0000</pubDate>
            <media:content fileSize="33029180" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/ytSVC1JsdIY/S02-E04.mp3" />
            <enclosure length="33029180" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/ytSVC1JsdIY/S02-E04.mp3" />
          </item>
          <item>
            <title>Falling out of Kindle love</title>
            <link>http://cargowire.net/blog/fallingoutofkindlelove</link>
            <description>Have I fallen out of love with my kindle?&lt;p&gt;While reading a book the other day (C# in depth if you're interested... I'd recommend it to all you .net lovers out there..
				yes you.. both of you) I suddenly realised something.  I was holding a book.&lt;/p&gt;&lt;p&gt;Now the odd thing about that of course is that I own a Kindle and that, as we all know,
				replaces books.&lt;/p&gt;&lt;p&gt;Don't get me wrong.. I was very much on the Kindle bandwagon
				and to some extent I stillam. I've just
				noticed something recently about my reading habits and how the Kindle has affected them.  So, bearing in mind this is the internet and I have a blog I
				thought I'd over generalise my personal experience and draw conclusions about the world at large... with no authority or legitimacy. Ya'know, 
				as you do.&lt;/p&gt;&lt;p&gt;When I first got my kindle I was all over it, downloading
				books willy nilly, starting multiple books at once... but ultimately... not really finishing them. Looking back I was quick to take recommendations and
				download books that I was, shall we say, 'half interested' in. Admittedly I should probably have gone with sample chapters... but hey... it's so easy to just
				'buy now'!&lt;/p&gt;&lt;p&gt;With regard to the book I was reading, I even had it on my kindle... and yet I chose to read it via ink imprinted on the remnants of a dead tree.&lt;/p&gt;&lt;p&gt;To me this is beginning to mirror my initial feelings towards digital music.  If I wanted to listen
				to something I would download it via iTunes or similar, but if I really wanted it I would buy the physical disk.  
				With music this categorisation works out ok as you can consume it differently: from casually liking/listening to really loving and focussing on it.  With books this 
				is harder.  I mean, can you 'casually read'? maybe for a bit... but you're not going to last the whole book.&lt;/p&gt;&lt;p&gt;To be fair my aversion to buying/leasing digital music is less true now. The ever growing grumpy old man in me has caught up with the cool kids.  But I think it's going
				to take slightly longer for digital books to bypass this.&lt;/p&gt;&lt;p&gt;With music the feeling as a user is fundamentally the same. If you closed your eyes, but for the
				particularly atuned ear, it would be hard to differentiate the experience.  With a book it's entirely different.  There's the 'affordances' factor: with a kindle I can't feel it's weight, flick back and forth,
				hold one page open as I glance back at another or even display them for guests to admire.&lt;/p&gt;&lt;p&gt;And yes... I have many leather bound books and my apartment smells of rich mahogany.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/fallingoutofkindlelove</guid>
            <pubDate>Sun, 10 Jul 2011 20:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;While reading a book the other day (C# in depth if you're interested... I'd recommend it to all you .net lovers out there..
				yes you.. both of you) I suddenly realised something.  I was holding a book.&lt;/p&gt;&lt;p&gt;Now the odd thing about that of course is that I own a Kindle and that, as we all know,
				&lt;a rel="nofollow" target="_blank" href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;amp;tid=8501" title="remember the paperless office..."&gt;replaces books&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Don't get me wrong.. I was very much &lt;a rel="nofollow" target="_blank" href="http://twitter.com/cargowire/status/46937147088973825" title="see, I do use it"&gt;on the Kindle bandwagon&lt;/a&gt;
				and to some extent I &lt;a rel="nofollow" target="_blank" href="http://www.instapaper.com" title="Read later or 'guilt alleviating queue' your mileage may vary"&gt;still&lt;/a&gt;&lt;a rel="nofollow" target="_blank" href="http://www.goodreads.com/topic/show/534189-how-often-do-you-go-farther-than-the-sample" title="Free words! (sample chapters)"&gt;am&lt;/a&gt;. I've just
				noticed something recently about my reading habits and how the Kindle has affected them.  So, bearing in mind this is the internet and I have a blog I
				thought I'd over generalise my personal experience and draw conclusions about the world at large... with no authority or legitimacy. Ya'know, 
				&lt;a rel="nofollow" target="_blank" href="https://secure.wikimedia.org/wikipedia/en/wiki/Popular_psychology" title="'Please relax, and tell me about your mother'"&gt;as you do&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;When I first got my kindle I was &lt;a rel="nofollow" target="_blank" href="http://www.youtube.com/watch?v=OQSNhk5ICTI" title="Like a godamn double rainbow"&gt;all over it&lt;/a&gt;, downloading
				books willy nilly, starting multiple books at once... but ultimately... not really finishing them. Looking back I was quick to take recommendations and
				download books that I was, shall we say, 'half interested' in. Admittedly I should probably have gone with sample chapters... but hey... it's so easy to just
				'buy now'!&lt;/p&gt;&lt;p&gt;With regard to the book I was reading, I even had it on my kindle... and yet I chose to read it via ink imprinted on the remnants of a dead tree.&lt;/p&gt;&lt;p&gt;To me this is beginning to mirror my initial feelings towards digital music.  If I wanted to listen
				to something I would download it via iTunes or similar , but if I &lt;strong&gt;really&lt;/strong&gt; wanted it I would buy the physical disk.  
				With music this categorisation works out ok as you can consume it differently: from casually liking/listening to really loving and focussing on it.  With books this 
				is harder.  I mean, can you 'casually read'? maybe for a bit... but you're not going to last the whole book.&lt;/p&gt;&lt;p&gt;To be fair my aversion to buying/leasing digital music is less true now. The ever growing grumpy old man in me has caught up with the cool kids.  But I think it's going
				to take slightly longer for digital books to bypass this.&lt;/p&gt;&lt;p&gt;With music the feeling as a user is fundamentally the same. If you closed your eyes, but for the
				particularly atuned ear, it would be hard to differentiate the experience.  With a book it's entirely different.  There's the 'affordances' factor: with a kindle I can't feel it's weight, flick back and forth,
				hold one page open as I glance back at another or even display them for guests to admire.&lt;/p&gt;&lt;p&gt;And yes... I have many leather bound books and my apartment smells of rich mahogany.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>The secret power of personality</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/ni20oCtQHsA/</link>
            <description>[S02E03] The design of your site should communicate something of your organisations personality as well as make a connection with users. Knowing who you are and how you communicate is a vital for a successful site.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/ni20oCtQHsA" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/2/episode/s2e3/</guid>
            <pubDate>Wed, 06 Jul 2011 11:30:03 +0000</pubDate>
            <media:content fileSize="22757207" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/f3As1p9AteU/S02-E03.mp3" />
            <enclosure length="22757207" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/f3As1p9AteU/S02-E03.mp3" />
          </item>
          <item>
            <title>Defining your audience and their tasks</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/RHLlwFwZs-o/</link>
            <description>[S02E02] This week on the boagworld show we look at defining your target audience and identifying their goals, activities and tasks.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/RHLlwFwZs-o" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/2/episode/s2e2/</guid>
            <pubDate>Wed, 22 Jun 2011 10:10:42 +0000</pubDate>
            <media:content fileSize="31332266" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/m3EIovFRNMQ/S02-E02.mp3" />
            <enclosure length="31332266" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/m3EIovFRNMQ/S02-E02.mp3" />
          </item>
          <item>
            <title>Laying the ground work</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/0dHt1AL_nwI/</link>
            <description>[S02E01]: Before you can create an effective website you need to know what you are trying to achieve, how you are going to measure success and what you want from users.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/0dHt1AL_nwI" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/2/episode/s2e1/</guid>
            <pubDate>Sun, 12 Jun 2011 15:36:54 +0000</pubDate>
            <media:content fileSize="22772253" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/qh75btBqdz8/S02-E01.mp3" />
            <enclosure length="22772253" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/qh75btBqdz8/S02-E01.mp3" />
          </item>
          <item>
            <title>Last night I dreamt something existed that didn't..</title>
            <link>http://cargowire.net/blog/wishfulhookthinking</link>
            <description>&lt;p&gt;Part of my role at Headscape has included looking at our development processes/practices.
				There's a blog in this (and it's coming soon), but as a brief teaser to that:&lt;/p&gt;&lt;p&gt;I'm using Cruise Control.Net to automate MSBUILD builds from our source control provider.  Originally this was happening on a regular interval...
				but that's just annoying (if you get annoyed by such things) and led to waiting to see if it had built, or
				worse just force building anyway. Luckily Github
				and CodebaseHQ both have post 
				commit/push hook mechanisms that we can
				take advantage of.&lt;/p&gt;&lt;p&gt;As you'd expect these processes post some data to a url of your choice when a push is received for a particular repository.&lt;/p&gt;&lt;p&gt;So, taking codebasehq as an example the post data they provide is json (as listed in their own repo).
				This is fantastic but the notification centre itself only allows creation of notifications to the project level, not repository level.  So the repository
				name has to come from the post data itself (if I wish to build the CCNet project with the same name) i.e. I cannot use the url alone to identify the repository.&lt;/p&gt;&lt;p&gt;To join these two tools together I ended up making a small Application that could accept the post from Codebase and essentially forward it on to the appropriate CCNet build
				request. And so CIBridge came into existance, leading to the following
				workflow:&lt;/p&gt;&lt;p&gt;Commit Locally -&amp;gt; Push to Codebase -&amp;gt; Codebase Notification notifies CIBridge -&amp;gt; CIBridge forces a CCNet Build -&amp;gt; CCNet publishes the site&lt;/p&gt;&lt;p&gt;Ok, so what I thought might be cool.. is customisable posts from these hosted source control providers.  Something along the lines of a screen that allows
				you to build up a list of post variable 'templates' with keywords used to be replaced by the hook info during generation of the post.&lt;/p&gt;&lt;p&gt;So I could, for example,	say 'I want one form variable called 'Repository' with the contents { name: %REPO_NAME% }' (where repo name is replaced by the repo that
				caused the notification).&lt;/p&gt;&lt;p&gt;In this way I could use the hosted source code provider directly, without the need for the bridge, nor for specific support from my current or future build server.&lt;/p&gt;&lt;p&gt;CIBrdige was a quick fix to get it running.  Is there a better way?&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/wishfulhookthinking</guid>
            <pubDate>Sat, 30 Apr 2011 13:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Part of my role at Headscape has included looking at our development processes/practices.
				There's a blog in this (and it's coming soon), but as a brief teaser to that:&lt;/p&gt;&lt;p&gt;I'm using &lt;a rel="nofollow" target="_blank" href="http://ccnet.thoughtworks.com/" title="Other CI Tools are available"&gt;Cruise Control.Net&lt;/a&gt; to automate MSBUILD builds from our source control provider.  Originally this was happening on a regular interval...
				but that's just annoying (if you get annoyed by such things) and led to waiting to see if it had built, or
				worse just force building anyway. Luckily &lt;a rel="nofollow" target="_blank" href="http://www.github.com" title="The hosted source control I use personally"&gt;Github&lt;/a&gt;
				and &lt;a rel="nofollow" target="_blank" href="http://www.codebasehq.com" title="The hosted source control we use at Headscape"&gt;CodebaseHQ&lt;/a&gt; both have post 
				&lt;a rel="nofollow" target="_blank" href="http://help.github.com/post-receive-hooks/" title="The github support pages on post-receive hooks"&gt;commit/push hook mechanisms&lt;/a&gt; that we can
				take advantage of.&lt;/p&gt;&lt;p&gt;As you'd expect these processes post some data to a url of your choice when a push is received for a particular repository.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Great Stuff:&lt;/strong&gt; I can simply post to a url to build from&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Not so great stuff:&lt;/strong&gt; I have no control over the hook other than the url it goes to&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;So, taking codebasehq as an example the post data they provide is json (&lt;a rel="nofollow" target="_blank" href="https://codebase.codebasehq.com/stuff/notify-server/blob/master/test/examples/commit.json"&gt;as listed in their own repo&lt;/a&gt;).
				This is fantastic but the notification centre itself only allows creation of notifications to the project level, not repository level.  So the repository
				name has to come from the post data itself (if I wish to build the CCNet project with the same name) i.e. I cannot use the url alone to identify the repository.&lt;/p&gt;&lt;p&gt;To join these two tools together I ended up making a small Application that could accept the post from Codebase and essentially forward it on to the appropriate CCNet build
				request. And so &lt;a rel="nofollow" target="_blank" href="https://github.com/cargowire/CIBridge" title="CIBridge hosted on Github"&gt;CIBridge&lt;/a&gt; came into existance, leading to the following
				workflow:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Commit Locally -&amp;gt; Push to Codebase -&amp;gt; Codebase Notification notifies CIBridge -&amp;gt; CIBridge forces a CCNet Build -&amp;gt; CCNet publishes the site&lt;/strong&gt;&lt;/p&gt;&lt;h3&gt;A better way?&lt;/h3&gt;&lt;p&gt;Ok, so what I thought might be cool.. is customisable posts from these hosted source control providers.  Something along the lines of a screen that allows
				you to build up a list of post variable 'templates' with keywords used to be replaced by the hook info during generation of the post.&lt;/p&gt;&lt;p&gt;So I could, for example,	say 'I want one form variable called 'Repository' with the contents { name: %REPO_NAME% }' (where repo name is replaced by the repo that
				caused the notification).&lt;/p&gt;&lt;p&gt;In this way I could use the hosted source code provider directly, without the need for the bridge, nor for specific support from my current or future build server.&lt;/p&gt;&lt;h3&gt;Am I missing something?&lt;/h3&gt;&lt;p&gt;CIBrdige was a quick fix to get it running.  Is there a better way?&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Live 'end of season one' show</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/G0KF1MhQ1eM/</link>
            <description>To mark the end of season one of the Boagworld Show we recorded a live special from SXSW in Austin Texas.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/G0KF1MhQ1eM" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/1/episode/s1e7/</guid>
            <pubDate>Fri, 25 Mar 2011 12:15:38 +0000</pubDate>
            <media:content fileSize="30866242" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/IQj5XkoyBq4/S01-E07.mp3" />
            <enclosure length="30866242" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/IQj5XkoyBq4/S01-E07.mp3" />
          </item>
          <item>
            <title>SXSW 2011: The tale of the lost man points</title>
            <link>http://cargowire.net/blog/lostmanpoints</link>
            <description>The best made plans...&lt;p&gt;So we're here... just, but with far less man points than we started... to be fair I think I've lost out to Ryan
				on this one&lt;/p&gt;&lt;p&gt;For more info see...Ryans post&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/lostmanpoints</guid>
            <pubDate>Thu, 10 Mar 2011 00:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;So we're here... just, but with far less man points than we started... to be fair I think I've lost out to &lt;a rel="nofollow" target="_blank" href="http://twitter.com/ryanhavoc"&gt;Ryan&lt;/a&gt;
				on this one&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;The first points slip from my grasp...&lt;/dt&gt;&lt;dd&gt;&lt;p&gt;"Hey Rob, where's Marcus live again?"&lt;/p&gt;&lt;p&gt;"I dno you're driving"&lt;/p&gt;&lt;p&gt;"...shit"&lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;It gets better&lt;/dt&gt;&lt;dd&gt;&lt;p&gt;"So you guys got some money for the taxi"&lt;/p&gt;&lt;p&gt;"...money?"&lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;Ryan get's onboard with the shame...&lt;/dt&gt;&lt;dd&gt;&lt;p&gt;"You've got a boarding pass for the connecting flight?"&lt;/p&gt;&lt;p&gt;"Yeh, don't you?"&lt;/p&gt;&lt;p&gt;"...shit, we haven't"&lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;It's ok we got the passes... kinda...&lt;/dt&gt;&lt;dd&gt;&lt;p&gt;"Dude, I'm so unfit, least we're on the tram now.  What seat are you?"&lt;/p&gt;&lt;p&gt;"22B"&lt;/p&gt;&lt;p&gt;"Same here... hang on?!"&lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;At least we kept our morals...&lt;/dt&gt;&lt;dd&gt;&lt;p&gt;"You on this flight too?"&lt;/p&gt;&lt;p&gt;"Yeh, heard they've delayed it a bit for us though"&lt;/p&gt;&lt;p&gt;....&lt;/p&gt;&lt;p&gt;"I'm afraid there's only five seats left"&lt;/p&gt;&lt;p&gt;"THERE'S FIVE OF US"&lt;/p&gt;&lt;p&gt;...&lt;/p&gt;&lt;p&gt;...sorry girls&lt;/p&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;For more info see...&lt;a rel="nofollow" target="_blank" href="http://ryanhavoctaylor.com/conferences/apparently-chivalry-is-dead/"&gt;Ryans post&lt;/a&gt;&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>When driving traffic, think quality as well as quantity.</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/OvGSGQRDpNY/</link>
            <description>(S01:E06) As website owners how do we drive high quality traffic to our websites that will generate the return on investment we need?&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/OvGSGQRDpNY" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/1/episode/s1e6/</guid>
            <pubDate>Thu, 03 Mar 2011 13:39:57 +0000</pubDate>
            <media:content fileSize="24740214" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/_qzIRylrgfw/S01-E06.mp3" />
            <enclosure length="24740214" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/_qzIRylrgfw/S01-E06.mp3" />
          </item>
          <item>
            <title>Are you refining or rotting?</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/4IVoway9les/</link>
            <description>(S01:E05) Too many websites are just left to rot. If you want your website to generate a return on investment you need to continually refine it.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/4IVoway9les" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/1/episode/s1e5/</guid>
            <pubDate>Thu, 24 Feb 2011 13:48:28 +0000</pubDate>
            <media:content fileSize="19092332" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/Gs2iwzu0E0c/S01-E05.mp3" />
            <enclosure length="19092332" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/Gs2iwzu0E0c/S01-E05.mp3" />
          </item>
          <item>
            <title>Calls to Action help users</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/h3iZ2W9IVlM/</link>
            <description>(S01:E04) Everybody seems to go on about calls to action. They offer obvious benefits to your business, but what about your users?&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/h3iZ2W9IVlM" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/1/episode/s1e4/</guid>
            <pubDate>Thu, 17 Feb 2011 13:14:22 +0000</pubDate>
            <media:content fileSize="20473269" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/mzzzX2tyiI0/S01-E04.mp3" />
            <enclosure length="20473269" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/mzzzX2tyiI0/S01-E04.mp3" />
          </item>
          <item>
            <title>Becoming user focused</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/zUbWQ17UqaI/</link>
            <description>(S01:E03) Although business objectives should be your sites number one goal, ignoring users would be a mistake. Happy users are a prerequisite of a successful website.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/zUbWQ17UqaI" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/1/episode/s1e3/</guid>
            <pubDate>Thu, 10 Feb 2011 13:13:55 +0000</pubDate>
            <media:content fileSize="17808361" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/JCPRnC5HVew/S01-E03.mp3" />
            <enclosure length="17808361" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/JCPRnC5HVew/S01-E03.mp3" />
          </item>
          <item>
            <title>Measuring your successes and failures</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/Cbjkvu8ckUw/</link>
            <description>(S01:E02) What is the point of making changes to your website if you have no real way to tell whether it is an improvement or not? Stop guessing. Start measuring.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/Cbjkvu8ckUw" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/1/episode/s1e2/</guid>
            <pubDate>Thu, 03 Feb 2011 12:45:35 +0000</pubDate>
            <media:content fileSize="19188254" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/pKdup1GVEoU/S01-E02.mp3" />
            <enclosure length="19188254" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/pKdup1GVEoU/S01-E02.mp3" />
          </item>
          <item>
            <title>Make better informed decisions about your site</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/ktyMGA02FFA/</link>
            <description>(S01:E01) As website owners we like to talk about the importance of business objectives but I suspect we talk the talk, rather than walk the walk.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/ktyMGA02FFA" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/1/episode/s1e1/</guid>
            <pubDate>Thu, 27 Jan 2011 13:00:11 +0000</pubDate>
            <media:content fileSize="15316280" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/qN82SEqAGiA/S01-E01.mp3" />
            <enclosure length="15316280" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/qN82SEqAGiA/S01-E01.mp3" />
          </item>
          <item>
            <title>Building websites for return on investment webcast</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/D8qJnZh-u50/</link>
            <description>We kickoff Season 1 of the new podcast with a 40 minute live webcast on building websites for return on investment.&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/D8qJnZh-u50" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">http://boagworld.com/season/1/episode/webcast/</guid>
            <pubDate>Wed, 19 Jan 2011 11:24:44 +0000</pubDate>
          </item>
          <item>
            <link>http://cargowire.net/articles/jsways</link>
            <guid isPermaLink="false">http://cargowire.net/articles/jsways</guid>
            <pubDate>Sat, 15 Jan 2011 18:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
                    Not a pro but been playing recently, lots of JS heavy stuff now, main focus on additions still
                    in my work
                &lt;/p&gt;&lt;h3 class="title_"&gt;Global Scope&lt;/h3&gt;&lt;h3 class="title_"&gt;Namespaced&lt;/h3&gt;&lt;h3 class="title_"&gt;OnLoad&lt;/h3&gt;&lt;p&gt;traverse&lt;/p&gt;&lt;h3 class="title_"&gt;Pub sub&lt;/h3&gt;&lt;h3 class="title_"&gt;Conclusion&lt;/h3&gt;&lt;code&gt;
                    public static class StringExtensions
                    {
                    // Notice the 'this' keyword before the first parameter to signify that this
                    // is an extension method for string
                    public static int ToInt(this string @string, int defaultValue)
                    {
                    int value;
                    return int.TryParse(@string, out value) ? value : defaultValue;
                    }
                    public static int? ToNullableInt(this string @string, int? defaultValue)
                    {
                    int value;
                    return int.TryParse(@string, out value) ? value : defaultValue;
                    }
                    }
                    // Call style
                    string a = "5";
                    int? b = a.ToNullableInt(null); // 'this' parameter is omitted
                &lt;/code&gt;</content:encoded>
          </item>
          <item>
            <title>Admit you suck</title>
            <link>http://cargowire.net/articles/admityousuck</link>
            <description>What should be your new years resolution?</description>
            <guid isPermaLink="false">http://cargowire.net/articles/admityousuck</guid>
            <pubDate>Sat, 15 Jan 2011 18:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
                    With the new year upon us I took the opportunity to reflect a little upon my career choice. What would be a good
                    resolution for a developer? ...I decided we should all admit we suck.
                &lt;/p&gt;&lt;p&gt;
                    Two of my recent articles made subtle reference to this.  Within '&lt;a rel="nofollow"&gt;common code&lt;/a&gt;'
                    I discussed the benefits of knowledge and process sharing, and during my analysis of the &lt;a rel="nofollow"&gt;11th Joel Test&lt;/a&gt;
                    one of the themes was encouraging a dialog between developers who were both open and equal (i.e. not &lt;a rel="nofollow"&gt;scoring points smugly&lt;/a&gt;).
                &lt;/p&gt;&lt;p&gt;
                    So yeah, this is going to be a slight rant about humility, 'no man is an island', self-improvement etc but this isn't just
                    to make the world a better place.  This has tangible benefits for our careers and happiness.
                &lt;/p&gt;&lt;h3 id="title_benefits"&gt;Benefits?&lt;/h3&gt;&lt;p&gt;
                    During the latter part of last year I started collecting quotes from twitter, podcasts and the web in general that related to this
                    idea of admitting you suck. I'll open with one by Scott Galloway:
                &lt;/p&gt;&lt;blockquote&gt;
                    Bad programmers are the ones who think they're already as good as they can be
                    &lt;cite&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/scottgal/status/27635524570"&gt;@scottgal&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;
                    Let's be clear, we work within one of the fastest moving industries out there.  You can literally be out of date on a day by day basis.
                    If you want to get a job, work more productively or even just continue to be supported by vendors you need to stay up to date.
                &lt;/p&gt;&lt;p&gt;
                    Don't think you're safe in your long service position not looking to move... if you work within a team and a new member joins you want them
                    to be able to take on the work quickly.  If you try and mould them to work in a way/with a technology that hasn't been used during their
                    entire working life you are not an attractive prospect for them, and you are adding a large training overhead for yourself.
                &lt;/p&gt;&lt;p&gt;
                    This doesn't just cover being up to date with technologies.  This includes continually improving your own techniques within the existing
                    techs you use. Because, of course, we all have legacy projects, but it's a bad sign if when we go back to these projects we also go back to our mindset at
                    the time they were created.
                &lt;/p&gt;&lt;blockquote&gt;
                    The supply and demand situation where you're trying to help someone who doesn't want to be helped is not good.
                    "I don't want be better I want to keep sucking..." let them keep sucking.
                    &lt;cite&gt;&lt;a rel="nofollow" target="_blank" href="http://www.thisdeveloperslife.com/post/1-0-4-being-mean"&gt;Giles Bowkett&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;
                    Don't be the person people avoid working with because you aren't open to new ideas or constructive criticism.  Don't be precious
                    about your baby.  Give it up and open yourself to ideas from others.  Acting as if you know best is a sure route to conflict within your
                    team and will gradually isolate you.  You're not making yourself a linchpin you're painting yourself into a corner.
                &lt;/p&gt;&lt;blockquote&gt;
                    The only people who like to hear that their code is bad are those who are trying to be better.  Those are the people you want to associate
                    with in the first place.
                    &lt;cite&gt;&lt;a rel="nofollow" target="_blank" href="http://www.thisdeveloperslife.com/post/1-0-4-being-mean"&gt;Giles Bowkett&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;
                    It's important to remember that with the huge variety of tasks/platforms/languages developers deal with every day there is always
                    something you do not know.  Length of service doesn't permit you to ignore ideas from newbies.  The best quality of a senior is
                    the ability to take something on board and change.  It's neither a weakness on their part or a huge victory for you (you're not 'scoring
                    points' by finding a minor error or suggesting a change of direction.  You are simply being a good developer).
                &lt;/p&gt;&lt;h3 id="title_alwaysqestion"&gt;Refactor!&lt;/h3&gt;&lt;blockquote&gt;
                    If you're prepared to admit you're not always right (and have the luxury of time), refactoring code can have excellent results.
                    &lt;cite&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/jaspertandy/status/29389037345"&gt;@jaspertandy&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;
                    Clients want fast performing, cheap, flexible solutions.  They want to know that you aren't stuck in your ways, that you are
                    never resting on your laurels.
                &lt;/p&gt;&lt;p&gt;
                    Future you wants to be able to thank past you for refactoring code in that legacy project rather
                    than bolting on more and more half arsed patches.
                &lt;/p&gt;&lt;p&gt;
                    The hard thing here is being willing to admit to yourself that you might have been wrong, or rather that you might now be able to do
                    things better.  Don't code in targetted islands. Be willing to reorganise and potentially even do drastic
                    things like delete that chunk of code you just spent hours on but you now realise should be done differently.
                &lt;/p&gt;&lt;h3 id="title_reasons"&gt;More quotes? really?!&lt;/h3&gt;&lt;blockquote&gt;
                    The trouble with programmers is that you can never tell what a programmer is doing until it's too late.
                    &lt;cite&gt;&lt;a rel="nofollow" target="_blank" href="http://wtfcode.net/post/189230014/the-trouble-with-programmers-is-that-you-can-never"&gt;Seymour Cray&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;
                    If you put the blinkers on you're likely to make mistakes.  The best thing you can do is open yourself up to challenges early on.
                    Fail fast and filter out potential pitfalls by discussing approaches with colleagues or through your blog.  You may find you're reinventing
                    the wheel, or making a square one.
                &lt;/p&gt;&lt;blockquote&gt;
                    Asking someone a question accomplishes far more than just receiving the answer.
                    &lt;cite&gt;&lt;a rel="nofollow" target="_blank" href="http://samizdat.mines.edu/howto/HowToBeAProgrammer.html#id2791028"&gt;Robert L Read&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;
                    In a team dynamic encouraging a culture that doesn't fear being 'wrong' or questionning 'authority' can only be a good thing.  It's
                    a classic keep you on your toes scenario.
                &lt;/p&gt;&lt;h3 id="title_finally"&gt;Ok, I'm done&lt;/h3&gt;&lt;p&gt;
                    We, as developers, are living in a world that becomes obsolete very quickly.  There's no time for personal pride of the sort
                    that leads you to ignore other peoples ideas or stick with a solution just because it's what you did last time. We need to be constantly
                    checking ourselves.
                &lt;/p&gt;&lt;p&gt;
                    So I'd say, realise you can't know everything, refactor regularly, start a blog, go to events, encourage code review, discuss your ideas openly, ask
                    for criticism.  Because, let's be honest you suck.. and so do I.
                &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>The start of a brand new year (2011)</title>
            <link>http://cargowire.net/blog/newyear2011</link>
            <description>&lt;p&gt;Year in review and resolution posts may seem a bit passe, cliche and anything else that ends in an 'e' that sounds like
            an 'a'... but let's get one out of our (my) system anyway.&lt;/p&gt;&lt;p&gt;Rather than an elongated reflection over the year - what I have started, not started, bought, not bought, I'd just like to 
            take the opportunity again to reiterate how amazed I am at the differences in the world in just this decade.  
            This video still sums up the awe that we, for me, still need.  Ten years ago we're
                talking pretty much no google, a pre-gamecube, pre-youtube, pre-firefox, pre-wikipedia era where everyone had a Nokia 3210 (we also had a 9th planet!).  Come on... 
                that's awesome and has to bode well for the next ten.&lt;/p&gt;&lt;p&gt;So if that's the review bit what about the resolution bit?  Well rather than a set of resolutions here's a bunch of things I did
            on Jan 1st that you might like to too... in prep for the year and all that...&lt;/p&gt;&lt;p&gt;I think my overidding resolution then, if that's appropriate, is just to continually keep in mind the idea of being and getting better - 
            plain and simple.  The last few comments of Robin Ince here
            really resonate with that idea.
            &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/newyear2011</guid>
            <pubDate>Mon, 03 Jan 2011 17:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Year in review and resolution posts may seem a bit passe, cliche and anything else that ends in an 'e' that sounds like
            an 'a'... but let's get one out of our ( my ) system anyway.&lt;/p&gt;&lt;p&gt;Rather than an elongated reflection over the year - what I have started, not started, bought, not bought, I'd just like to 
            take the opportunity again to reiterate how amazed I am at the differences in the world in just this decade.  
            &lt;a rel="nofollow" target="_blank" href="http://www.youtube.com/watch?v=8r1CZTLk-Gk" title="Louis CK tech rant"&gt;This video&lt;/a&gt; still sums up the awe that we, for me, still need.  Ten years ago we're
                talking pretty much no google, a pre-gamecube, pre-youtube, pre-firefox, pre-wikipedia era where everyone had a Nokia 3210 (we also had a 9th planet!).  Come on... 
                that's awesome and has to bode well for the next ten.&lt;/p&gt;&lt;p&gt;So if that's the review bit what about the resolution bit?  Well rather than a set of resolutions here's a bunch of things I did
            on Jan 1st that you might like to too... in prep for the year and all that...&lt;/p&gt;&lt;h3&gt;Small things&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Reset iGoogle to stuff I actually pay attention to&lt;/li&gt;&lt;li&gt;Clear out my Google Reader (particularly things I follow because I think I should rather than because I am actually interested)&lt;/li&gt;&lt;li&gt;Review app authorisations (facebook inc privary settings, fireeagle)&lt;/li&gt;&lt;li&gt;Use &lt;a rel="nofollow" target="_blank" href="http://lanyrd.com"&gt;lanyrd.com&lt;/a&gt; to find a few interesting events to register for&lt;/li&gt;&lt;li&gt;Create pile of charity shop books/cds/dvds&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changes&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Listen to classical music when wanting to get things done (I had a Vanessa Mae CD that I used when 
                revising for GCSE's - no lyrics - works) - also try Zero 7 or even PPPPPP&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Semi-weird things&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;I added a bunch of my worst time wasting sites to my hosts file and created a default website that effectively
                points to a local copy of this &lt;a rel="nofollow"&gt;/GetBetter&lt;/a&gt;.  Just as an added kick up the arse when I find myself
                procrastinating.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I think my overidding resolution then, if that's appropriate, is just to continually keep in mind the idea of being and getting better - 
            plain and simple.  The last few comments of &lt;a rel="nofollow" target="_blank" href="http://www.youtube.com/watch?v=-2_jIbJlhNo&amp;amp;feature=player_embedded#t=5m35s" title="Robin Ince - Talking about not wasting time"&gt;Robin Ince here&lt;/a&gt;
            really resonate with that idea.
            &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>FOWA London 2010</title>
            <link>http://cargowire.net/blog/fowalondon2010</link>
            <description>&lt;p&gt;In keeping with my 'write a blog post when I go to an event'
          approach to blogging... I was at fowa last weekend!&lt;/p&gt;&lt;p&gt;Carsonified were kind enough to allow me to attend as a helper on the day
            (cheers again to Keir and Lou for
            sorting that for me). Which meant I was one of the 'Turqoise Shirts'
            helping with registration, ushering, getting prints done etc.
          &lt;/p&gt;&lt;p&gt;As an aside I'd recommend offering to help out at events.  It's not just that you don't have to fight for (and pay for)
          a ticket.  If you're less gregarious than some, or are travelling alone it's a ready made way to meet
          people including the organisers and potentially speakers when they register.  You're also still able to get to your "can't miss"
          talks.&lt;/p&gt;&lt;p&gt;This was my second fowa, having attended in 2008
          and I must say, I enjoyed it thoroughly.  The event appeared to have been downsized slightly since then but The Brewery
          is a great venue with a very friendly feel.  I particularly liked the 'loft party' cushion area at the back of the porter tun.&lt;/p&gt;&lt;p&gt;The highlight for me was catching John Resig, creator of jquery, discussing
          jQuery mobile and jQuery Templates.  
          Some exciting stuff here for us web devs.  The idea of double binding a json object to an html template (that was brought down in the markup
          of the page) seems like such a clean approach to building on the clientside.
          I've also, since the event, watched and enjoyed Jason Calacanis's keynote.  
          Grating and potentially intimidating as he is he does speak a lot of sense (in my view anyway).&lt;/p&gt;&lt;p&gt;I'd also recommend catching Joe Stump talk about location aware apps in his very enthusiastic style.  I'm still
          waiting for that Role playing game where my dragon is less effective if the geo space I'm in is under stormy conditions!&lt;/p&gt;&lt;p&gt;Some related linky link links..&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/fowalondon2010</guid>
            <pubDate>Sat, 09 Oct 2010 16:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;In keeping with my ' write a blog post when I go to an event '
          approach to blogging... I was at &lt;a rel="nofollow" target="_blank" href="http://futureofwebapps.com/london-2010/" title="The Future of Web Apps"&gt;fowa&lt;/a&gt; last weekend!&lt;/p&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/carsonified"&gt;Carsonified&lt;/a&gt; were kind enough to allow me to attend as a helper on the day
            (cheers again to &lt;a rel="nofollow" target="_blank" href="http://twitter.com/keirwhitaker"&gt;Keir&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://twitter.com/loulou"&gt;Lou&lt;/a&gt; for
            sorting that for me). Which meant I was one of the '&lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Redcoats_%28Butlins%29" title="Not quite a redcoat"&gt;Turqoise Shirts&lt;/a&gt;'
            helping with registration, ushering, getting prints done etc.
          &lt;/p&gt;&lt;p&gt;As an aside I'd recommend offering to help out at events.  It's not just that you don't have to fight for (and pay for)
          a ticket.  If you're less gregarious than some, or are travelling alone it's a ready made way to meet
          people including the organisers and potentially speakers when they register.  You're also still able to get to your "can't miss"
          talks.&lt;/p&gt;&lt;p&gt;This was my second fowa, having &lt;a rel="nofollow" title="My thoughts after FOWA Expo 2008"&gt;attended in 2008&lt;/a&gt;
          and I must say, I enjoyed it thoroughly.  The event appeared to have been downsized slightly since then but &lt;a rel="nofollow" target="_blank" href="http://www.thebrewery.co.uk/about/"&gt;The Brewery&lt;/a&gt;
          is a great venue with a very friendly feel.  I particularly liked the 'loft party' cushion area at the back of the porter tun.&lt;/p&gt;&lt;p&gt;The highlight for me was catching &lt;a rel="nofollow" target="_blank" href="http://twitter.com/jeresig"&gt;John Resig&lt;/a&gt;, creator of jquery, discussing
          &lt;a rel="nofollow" target="_blank" href="http://jquerymobile.com/"&gt;jQuery mobile&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://blog.jquery.com/2010/10/04/new-official-jquery-plugins-provide-templating-data-linking-and-globalization/"&gt;jQuery Templates&lt;/a&gt;.  
          Some exciting stuff here for us web devs.  The idea of double binding a json object to an html template (that was brought down in the markup
          of the page) seems like such a clean approach to building on the clientside.
          I've also, since the event, watched and enjoyed &lt;a rel="nofollow" target="_blank" href="http://twitter.com/jason"&gt;Jason Calacanis's&lt;/a&gt; keynote.  
          Grating and potentially intimidating as he is he does speak a lot of sense (in my view anyway).&lt;/p&gt;&lt;p&gt;I'd also recommend catching &lt;a rel="nofollow" target="_blank" href="http://twitter.com/joestump"&gt;Joe Stump&lt;/a&gt; talk about location aware apps in his very enthusiastic style.  I'm still
          waiting for that Role playing game where my dragon is less effective if the geo space I'm in is under stormy conditions!&lt;/p&gt;&lt;p&gt;Some related linky link links..&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/benlangfeld/fowa-volunteers-2010"&gt;Twitter list of fowa helpers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://futureofwebapps.com/london-2010/register/"&gt;Fowa Video ticket registration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://37signals.com/svn/posts/2219-jason-calacanis-vs-david-heinemeier-hansson-on-this-week-in-startups"&gt;Jason Calacanis vs David Heinemeier Hansson&lt;/a&gt;&lt;span&gt; - Not from fowa, but a very engaging back and forth between the, at times very different, viewpoints of Calacanis and 37 signals&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;</content:encoded>
          </item>
          <item>
            <title>dConstruct 2010</title>
            <link>http://cargowire.net/blog/dConstruct2010</link>
            <description>&lt;p&gt;It seems that I mainly Blog (as opposed to write 'articles')
          after attending some kind of nerd based event, but here I am again, just after an event typing away...&lt;/p&gt;&lt;p&gt;This time it's dConstruct, and I have to say it was a blast -
          very different from other events (FOWA, SXSW
          and smaller events like DDD, WebDD, Barcamps and user groups like
          NxtGen).&lt;/p&gt;&lt;p&gt;Like Jasper I'd have to say that the thing that
          makes dConstruct a great conference to attend is its almost brazen affront to technique style takeaways and it's ability
          to either shun, or at least dramatically downplay, any feelings of being sold to or comercialised. Techniques are
          rightly consigned to the realm of the workshop. The difficulty then, as an attendee, is to justify attendance.
          Can you quantify the shot of enthusiasm and inspiration as easily as going on a training course?&lt;/p&gt;&lt;p&gt;I think so.  Attempting to provide workshop style content is a huge balancing act between the potential knowledge
          bases of the large audience. And putting up sponsors to speak is an immediate turn off. But planting ideas, making you think,
        that is what makes you want to get back onto your laptop and start working away.&lt;/p&gt;&lt;p&gt;I've boiled the conference down to a single sentence per talk.  At this point the interesting thing to me is that some of the remainder
            might be labelled 'obvious', but to me it's down to the quality of an engaging speaker that you come away with a clear message.&lt;/p&gt;&lt;p&gt;This also reminds me of an article by Max Pool
            that I read not too long ago:&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/dConstruct2010</guid>
            <pubDate>Sun, 05 Sep 2010 19:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;It seems that I mainly Blog (as opposed to write 'articles' )
          after attending some kind of nerd based event, but here I am again, just after an event typing away...&lt;/p&gt;&lt;p&gt;This time it's &lt;a rel="nofollow" target="_blank" href="http://2010.dconstruct.org/" title="dConstruct 2010 homepage"&gt;dConstruct&lt;/a&gt;, and I have to say it was a blast -
          very different from other events (&lt;a rel="nofollow" title="My thoughts after FOWA Expo 2008"&gt;FOWA&lt;/a&gt;, &lt;a rel="nofollow" title="Thoughts on SXSW 2010"&gt;SXSW&lt;/a&gt;
          and smaller events like &lt;a rel="nofollow" title="Notes on DevDevDev 8"&gt;DDD&lt;/a&gt;, &lt;a rel="nofollow" title="Writeup of WebDD 2009"&gt;WebDD&lt;/a&gt;, &lt;a rel="nofollow" title="Notes on Barcamp Bournemouth 2"&gt;Barcamps&lt;/a&gt; and user groups like
          NxtGen).&lt;/p&gt;&lt;p&gt;Like &lt;a rel="nofollow" target="_blank" href="http://jspr.tndy.me/2010/09/dconstructed/" title="Jasper Tandys thoughts on dConstruct 2010"&gt;Jasper&lt;/a&gt; I'd have to say that the thing that
          makes dConstruct a great conference to attend is its almost brazen affront to technique style takeaways and it's ability
          to either shun, or at least dramatically downplay, any feelings of being sold to or comercialised. Techniques are
          rightly consigned to the realm of the workshop. The difficulty then, as an attendee, is to justify attendance.
          Can you quantify the shot of enthusiasm and inspiration as easily as going on a training course?&lt;/p&gt;&lt;p&gt;I think so.  Attempting to provide workshop style content is a huge balancing act between the potential knowledge
          bases of the large audience. And putting up sponsors to speak is an immediate turn off. But planting ideas, making you think,
        that is what makes you want to get back onto your laptop and start working away.&lt;/p&gt;&lt;h4&gt;Talks&lt;/h4&gt;&lt;table id="dayone" class="fowa"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan="2"&gt;dConstruct 2010: Talks / Boiled down&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tfoot&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;/tr&gt;&lt;/tfoot&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/martyneumeier"&gt;Marty Neumeier&lt;/a&gt;&lt;/td&gt;&lt;td rowspan="2"&gt;
                      Products fall into four broard categories: 
                      "good and different", "not good but different", "good but not different" and "neither good or different"
                    &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;The Designful Company&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/brendandawes"&gt;Brendan Dawes&lt;/a&gt;&lt;/td&gt;&lt;td rowspan="2"&gt;1. Collect, 2. Think, 3. Remove all that isn't necessary&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Boil, Simmer, Reduce&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/mccandelish"&gt;David McCandless&lt;/a&gt;&lt;/td&gt;&lt;td rowspan="2"&gt;Visualise data to see what you couldn't before&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Information Is Beautiful&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/samanthatoy"&gt;Samantha Warren&lt;/a&gt;&lt;/td&gt;&lt;td rowspan="2"&gt;The time for web typography is now&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;The Power &amp;amp; Beauty of Typography&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/gruber"&gt;John Gruber&lt;/a&gt;&lt;/td&gt;&lt;td rowspan="2"&gt;Success comes from a single mindedness but that single mind can lower
                    the collective talent if the auteur has a lesser taste than the team&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;The Auteur Theory of Design&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/han"&gt;Hannah Donovan&lt;/a&gt;&lt;/td&gt;&lt;td rowspan="2"&gt;The power of collaboration through improvisation (which isn't just random
                    ad hoc activity it's subject to structure, timing and harmonious roles).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Jam Session: What Improvisation Can Teach Us About Design&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/stml"&gt;James Bridle&lt;/a&gt;&lt;/td&gt;&lt;td rowspan="2"&gt;The journey from one historical fact to another is as much, if not more, intriguing
                    than facts alone&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;The Value Of Ruins&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/tomcoates"&gt;Tom Coates&lt;/a&gt;&lt;/td&gt;&lt;td rowspan="2"&gt;Interconnectedness enabled massively by the proliferance of APIs are as revolutionary as the roads of the Persian Empire
                    (2secs I'm just off to make a &lt;a rel="nofollow" target="_blank" href="http://www.guardian.co.uk/technology/blog/2010/sep/03/tfl-timetables-boris-johnson"&gt;mash up&lt;/a&gt;)
                    &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Everything The Network Touches&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/hotdogsladies"&gt;Merlin Mann&lt;/a&gt;&lt;/td&gt;&lt;td rowspan="2"&gt;It's good to be a nerd but don't be complacent, keep looking for the next thing to nerd out about
                    (before you're obsolete)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Kerning, Orgasms &amp;amp; Those Goddamned Japanese Toothpicks&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;I've boiled the conference down to a single sentence per talk.  At this point the interesting thing to me is that some of the remainder
            might be labelled 'obvious', but to me it's down to the quality of an engaging speaker that you come away with a clear message.&lt;/p&gt;&lt;p&gt;This also reminds me of &lt;a rel="nofollow" target="_blank" href="http://www.codesqueeze.com/intellects-dont-appreciate-intelligence/"&gt;an article by Max Pool&lt;/a&gt;
            that I read not too long ago:&lt;/p&gt;&lt;blockquote&gt;Just because you can grasp the answer does not mean you have the knowledge, wisdom, experience, or work ethic to
            come to that answer &lt;cite&gt;http://www.codesqueeze.com/intellects-dont-appreciate-intelligence/&lt;/cite&gt;&lt;/blockquote&gt;</content:encoded>
          </item>
          <item>
            <title>Thoughts on Common Code...</title>
            <link>http://cargowire.net/articles/commoncode</link>
            <description>Some ramblings on maintaining a common codebase for web projects including thoughts on the less hyped benefits.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/commoncode</guid>
            <pubDate>Sun, 29 Aug 2010 20:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
            As a developer in the web industry you're probably used to buzzwords that seem to get
            clung on to and overused by non-techs.  For me, one of the most oft heard is 'Generic'.  An all
            encompassing word that encapsulates the hopes and dreams of non-techs that as soon as some work
            is done once, it will never have to be done again and can easily be part migrated into any
            and all projects, old or new.
          &lt;/p&gt;&lt;p&gt;Of course, this isn't the reality in a lot of cases, but it should be the gold standard.  There's little benefit
          in constantly reinventing the wheel or working in isolation from the world around you.&lt;/p&gt;&lt;h3 id="title_what"&gt;What?&lt;/h3&gt;&lt;p&gt;So let's start from the beginning... If you're a developer who went the traditional education route you'll be well aware 
          of the idea of reusability.&lt;/p&gt;&lt;blockquote&gt;
            Reusable code is code that can be used, without modification, to perform a specific service regardless of what application uses the code.
            &lt;cite&gt;http://msdn.microsoft.com/en-us/library/aa189112%28office.10%29.aspx&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;By using a CMS we are using someone elses 'reusable code', by building on top of a framework, or even using someone's scripting language
          we are all running at some level of abstraction through reusable code.  We are at the application level - few of us are creating
          languages but many of us are creating bespoke applications.&lt;/p&gt;&lt;p&gt;The languages and frameworks we use don't often provide application level functionality, instead they provide the bones with
          which we make the skeleton, and often they provide us with multiple options.&lt;/p&gt;&lt;p&gt;So we are at the next level, the applications themselves. Does this mean we don't create reusable code? that we sit atop
          the mount of others? Certainly not.. As a web agency we work with a variety of clients in a variety of 
          industries but if we think about it these aren't too different.. We've got CRUD operations, entity/list manipulation, email,
          security, performance considerations.. all of which could be said to apply to almost any project and so should be kept separate.&lt;/p&gt;&lt;h3 id="title_why"&gt;Why?&lt;/h3&gt;&lt;p&gt;So let's think about why we should be maintaining our own common codebase on top of all the other peoples code we are reusing...
          starting by breaking down a view of project code:&lt;/p&gt;&lt;img class="main" alt="The onion of project codebases"/&gt;&lt;p class="figure"&gt;Fig 1.0: The world of project code.&lt;/p&gt;&lt;p&gt;The above diagram indicates the categorisation of code I like to consider when developing a website/application.
          A codebase can be broken down relatively simply into:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Level 1:&lt;/strong&gt; Code that plugs holes in the language or framework&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Level 2:&lt;/strong&gt; Code that could in theory be used by any website&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Level 3:&lt;/strong&gt; Code that is specific to a particular client, for example, they may have
              a bespoke system (human or technological) that you are integrating with that no other client will
            &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Level 4:&lt;/strong&gt; Code that is specific to the particular project or problem that you are working on&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You could go even lower, although I won't for the purposes of this post, and say that beneath level 1 there are the design
          patterns and algorithms that you favour that reach further than even one language choice.  Equally you could suggest
          that in parallel to this world is the breakdown of code in competing company codebases.  But before
          someone mentions Schrodinger's cat lets get onto the benefits of keeping a common codebase.  Starting with the most obvious and hyped...&lt;/p&gt;&lt;h4&gt;Reuse&lt;/h4&gt;&lt;p&gt;
            One of the most important things to note is that &lt;strong&gt;No project is bespoke&lt;/strong&gt;.  No project sits solely on that
            outer rim of the world even if it sits atop an off the shelf system at the lowest two levels.  Often there is very 
            little about a project, from a development point of view, that is actually bespoke.  If your site is purely content you're talking about a CMS.
            If you are integrating with a third party app there's a degree of wrapper code that is distinct from the project specific application.&lt;/p&gt;&lt;p&gt;To take it further if 
            you are manipulating data in some way, outputting reports in CSV, encrypting some data or interacting with a database this should
            be created free from the rest of the system and reusable.. to take it to the extreme, outside of UI wiring, some projects could be 
            made up almost solely of calls into a common codebase.
          &lt;/p&gt;&lt;h4&gt;Speed&lt;/h4&gt;&lt;p&gt;If you are reusing code to that degree your development times will be that much quicker.  Need to two way encrypt something?
          nip into your common encryption code and your done.&lt;/p&gt;&lt;p&gt;But let's think about this some more:&lt;/p&gt;&lt;h3 id="title_further"&gt;Thinking Further&lt;/h3&gt;&lt;h4&gt;Quality&lt;/h4&gt;&lt;p&gt;If you are constantly reusing code you will also be constantly fixing it, refining it, testing it in different contexts
          and scenarios.  You won't finish a project and not look at its codebase again until a year later when some obscure bug gets
          reported.&lt;/p&gt;&lt;p&gt;This has obvious ties to maintenance and upgrades.  If you find a better or more secure way to do something it may be as
          easy as updating the common libary version used by projects.  This is less possible if developers have rolled their own solution
          to all problems. &lt;em&gt;'Oh our encryption isn't very strong. I've updated my method, did you use similar?'... 'yes but I called it something
        else and it's mixed in with the integration code I did'... 'oh'&lt;/em&gt;&lt;/p&gt;&lt;h4&gt;Knowledge sharing&lt;/h4&gt;&lt;p&gt;If you're working within a team there's always the concern that you might be redoing the work or research that someone has
          already done.  Short of asking around everytime you embark on the smallest of algorithms you can search the common codebase
         (perhaps paired with a team wiki) allowing others to get on with their work while you benefit from the shared knowledge base.&lt;/p&gt;&lt;p&gt;By this means you are capturing and sharing the knowledge of prior team members, contractors and others who are not in the
          office that day.&lt;/p&gt;&lt;h4&gt;Process sharing&lt;/h4&gt;&lt;p&gt;Short of coming up with a programming style guide ( that you toil over for weeks until realising no-one will bother to read it )
          the common code library acts as a vehicle for convergence among the different programming styles of the team.  As you each
          add and modify items within the common code you come to an understanding as to naming conventions, architecture and style purely by absorbing
        the pre-existing approach and fitting additions around it.  What's more this isn't seen as a convention that is pushed upon the team
        nor is it autocratically defined by a single lead.  It grows and evolves.&lt;/p&gt;&lt;h4&gt;Expectation setting&lt;/h4&gt;&lt;p&gt;If a new team member joins they could trawl through old projects to get a feel for approach or they could sit in a meeting
          or training day, or even be assigned a mentor. Ultimately though, providing them with a good chunk of reusable code is an easy
          expectation setter.  It allows them to quickly see and guage the combined wisdom of the team, as well as acting as a base
          that they can expect to see in projects they are assigned to work on. Indeed, if they are particularly junior you can consider
          the common code base an effort in avoiding bugs as you are providing them with a big chunk of, in theory, bug-free code.&lt;/p&gt;&lt;p&gt;
            Furthermore it can provide a natural dividing line where code reviews can take place (at the gateway into the main common
            code branch).  It can also be seen as a performance indicator.  &lt;strong&gt;At the end of a project you could rightly expect to either
            find a lot of calls into the common code or a lot of new common code.&lt;/strong&gt; If not, why not? Is the project really that bespoke? were there contributing factors (lack of
            design time, a short terminist perception of 'not enough time') that need to be addressed?
            Even better, have they found issues with the common code and applied fixes or updates?
          &lt;/p&gt;&lt;h4&gt;Design enforcement&lt;/h4&gt;&lt;p&gt;Ultimately by having a common codebase and by categorising the code you create into the four levels you are forced to ask
          questions of yourself as you code.  'Can i extract some of this?', 'Would this be beneficial to others?', 
          'How can I better abstract this?', 'Is this likely to be needed by all the clients apps or just this one?', 'Is this of good
          enough quality to sit aside the rest our common code?' and perhaps most importantly &lt;strong&gt;'If it's not in our common codebase is it
        in someone elses?'&lt;/strong&gt; Why am I not looking for and using that? (and if it's not out there you've just found a gap to fill and a question
        you can answer on stackoverflow).&lt;/p&gt;&lt;h3 id="title_more"&gt;What more can you do with it?&lt;/h3&gt;&lt;p&gt;Outside of your own team/company if you've built a set of reusable components/classes/functions, and you've done this in a way that you can easily segment
          into the various levels, you could decide to put it out there, open source it as an addition to the public space for your 
        stack of choice (with the bonus that at the first two levels you can be sure it's not even putting client confidentiality at risk).&lt;/p&gt;&lt;h3 id="title_how"&gt;How to do it?&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;Set aside a central area in source control (you're all using source control right?)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;If you're creating it for the first time go back over some projects and extract as much as you can&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Even if you don't refactor that project to use the common code just yet at least you've pulled the knowledge out of it for future use&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Ensure the team are completely aware of its location and how it's to be used&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Ensure there is a review process in place&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Perform code review for additions and rolling reviews of the code in relation to changing standards/upcoming tech&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Decide upon an organisation method&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Within the .NET world I prefer to mirror the System namespace with my own company name.  In this way any consumer
                already has a frame of reference for where they would expect to find something.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Keep it up to date&lt;/span&gt;&lt;ul&gt;&lt;li&gt;This may even include eventually delegating calls directly to the framework if they plug the holes you plugged some time ago&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="title_downsides"&gt;Downsides?&lt;/h3&gt;&lt;p&gt;Of course as with anything there can be perceived downsides.  Maybe there are battles against management, against short 
          sightedness that you have to overcome.  But this is where the senior devs have to take on the internal salesman role.&lt;/p&gt;&lt;p&gt;Pragmatism, though, must not be forgotten.  Don't go around suddenly making every minor thing a common code class 'just in case you 
          want to swap it out later'.  Be realistic, keep in mind good programming practices... 
          &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29"&gt;SOLID&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY&lt;/a&gt;,
          &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/KISS_principle"&gt;KISS&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it"&gt;YAGNI&lt;/a&gt; etc.
          &lt;/p&gt;&lt;h3 id="title_conclusion"&gt;Conclusion&lt;/h3&gt;&lt;p&gt;People talk of &lt;a rel="nofollow" target="_blank" href="http://allinthehead.com/retro/345/whats-in-your-utility-belt"&gt;Utility Belts&lt;/a&gt;, and &lt;a rel="nofollow" target="_blank" href="http://stackoverflow.com/questions/140224/reusable-code-class-repositories"&gt;Reusable Code&lt;/a&gt;
          and &lt;a rel="nofollow" target="_blank" href="http://geekswithblogs.net/BlackRabbitCoder/archive/2010/05/27/code-reuse-is-damn-hard.aspx"&gt;fret over it&lt;/a&gt; a lot.  Ultimately any good developer should already be thinking about reusability
          and more generally the idea of a common codebase.  The key is to decide upon a good structure, a method of introducing it to the team and 
          a plan for keeping it ticking over.  As well as being aware of the less hyped benefits such
          as performance indicators, training tools, design enforcement and encouragement to reuse external code (and provide yours for reuse by
        others).&lt;/p&gt;&lt;p&gt;Embrace your common codebase.  It's more than just some utility functions in an include file.&lt;/p&gt;&lt;h3&gt;Appendix - So what's in mine?&lt;/h3&gt;&lt;p&gt;Some examples of classes and namespaces that are in my common codebase...&lt;/p&gt;&lt;ul class="inline"&gt;&lt;li&gt;BaseControllers&lt;/li&gt;&lt;li&gt;BaseRepositories&lt;/li&gt;&lt;li&gt;Extension Methods per primitive types&lt;/li&gt;&lt;li&gt;CacheManagers&lt;/li&gt;&lt;li&gt;GenericSerializers&lt;/li&gt;&lt;li&gt;Encryption&lt;/li&gt;&lt;li&gt;Image Manipulators&lt;/li&gt;&lt;li&gt;Mailers&lt;/li&gt;&lt;li&gt;Compressors&lt;/li&gt;&lt;li&gt;Validators&lt;/li&gt;&lt;/ul&gt;&lt;p /&gt;</content:encoded>
          </item>
          <item>
            <title>Microsoft UK Tech Days 2010</title>
            <link>http://cargowire.net/blog/uktechdays2010</link>
            <description>&lt;p&gt;Continuing the theme of keeping myself busy with geek events! I also recently attended the 
          Microsoft UK Tech Days Visual Studio and .NET 4 talks.&lt;/p&gt;&lt;p&gt;To be fair a lot of the content was similar to what I had already heard at ddd8.
          So we're talking Optional Parameters, Named Arguments, Generic Variance and Dynamic Typing for .NET 4 plus multi-monitor
          support, changes to code highlighting and javascript intellisense and a WPF interface for Visual Studio...  I particularly 
          liked the 'code only' profile for VS that disables some unnecessary services and hides all windows/toolbars except for the
          editor and solution explorer.&lt;/p&gt;&lt;p&gt;In addition to this the parallelisation features of .net were discussed (AsParallel(),
          PLINQ) - something that's always intriguing and worth
          trying out.  And there were niceities too for asp.net.  Caching being pushed into a provider model, controllable client IDs and a far more slimline
          web.config are all a part of this.&lt;/p&gt;&lt;p&gt;Overall ALM features were a focus. Unfortunately much of this is 
          only VS Ultimate and/or TFS related.  However they give food for throught on process,
          particularly when linked to the talk on 'agile' development. Pair programming, code review, automated builds and tests are
          all things that can add to your development process and should be thought about whether or not you are using the MS tools.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/uktechdays2010</guid>
            <pubDate>Sun, 18 Apr 2010 15:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Continuing the theme of keeping myself busy with geek events! I also recently attended the 
          &lt;a rel="nofollow" target="_blank" href="http://www.microsoft.com/uk/techdays/"&gt;Microsoft UK Tech Days&lt;/a&gt; Visual Studio and .NET 4 talks.&lt;/p&gt;&lt;p&gt;To be fair a lot of the content was similar to what I had already heard at &lt;a rel="nofollow"&gt;ddd8&lt;/a&gt;.
          So we're talking Optional Parameters, Named Arguments, Generic Variance and Dynamic Typing for .NET 4 plus multi-monitor
          support, changes to code highlighting and javascript intellisense and a WPF interface for Visual Studio...  I particularly 
          liked the 'code only' profile for VS that disables some unnecessary services and hides all windows/toolbars except for the
          editor and solution explorer.&lt;/p&gt;&lt;p&gt;In addition to this the parallelisation features of .net were discussed (&lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.linq.parallelenumerable.asparallel%28VS.100%29.aspx"&gt;AsParallel()&lt;/a&gt;,
          &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/magazine/cc163329.aspx"&gt;PLINQ&lt;/a&gt;) - something that's always intriguing and worth
          trying out.  And there were niceities too for asp.net.  Caching being pushed into a provider model, controllable client IDs and a far more slimline
          web.config are all a part of this.&lt;/p&gt;&lt;p&gt;Overall ALM features were a focus. Unfortunately much of this is 
          only VS Ultimate and/or TFS related.  However they give food for throught on process,
          particularly when linked to the talk on 'agile' development. Pair programming, code review, automated builds and tests are
          all things that can add to your development process and should be thought about whether or not you are using the MS tools.&lt;/p&gt;&lt;p /&gt;</content:encoded>
          </item>
          <item>
            <title>Barcamp Bournemouth 2</title>
            <link>http://cargowire.net/blog/barcampbomo2</link>
            <description>&lt;p&gt;Having been to a few of the 'big' conferences and just returned from SXSW
          it was quite refreshing to attend a more small scale, local affair.  With other barcamp's often being either far
          away or both far away and starting too soon after work BarCamp Bournemouth made it easy, running over
          a weekend and being so close!&lt;/p&gt;&lt;p&gt;I must of course say congratulations to the organisers for putting in the effort to provide a free social/conference
          for up to 100 attendees.  No small feat, including organising the venue plus sponsorship for two free meals.&lt;/p&gt;&lt;p&gt;In terms of comparison I would suggest that the small scale nature of the event made it much more of a 'geek social'
          than a free conference.  Which made it a heck of a lot more fun but perhaps less about learning.&lt;/p&gt;&lt;p&gt;I made it to a number of talks including a run through of scala (with some very similar features to .net), a designers do better
          rant from Rich Quick, partook in a .NET MVC discussion, a number of discussions surrounding the Digital Economy Bill, and an intro to British Sign Language
          (from Lalita D'Cruze).  And yes, I can now sign my name :-)&lt;/p&gt;&lt;p&gt;Off the back of this I looked into what other smallscale events are run in my area:&lt;/p&gt;&lt;p&gt;So will show up to those in due course.  I also learnt to play Polarity and Werewolf!&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/barcampbomo2</guid>
            <pubDate>Tue, 13 Apr 2010 23:40:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Having been to a few of the 'big' conferences and just returned from &lt;a rel="nofollow"&gt;SXSW&lt;/a&gt;
          it was quite refreshing to attend a more small scale, local affair.  With other barcamp's often being either far
          away or both far away and starting too soon after work &lt;a rel="nofollow" target="_blank" href="http://www.barcampbournemouth.org/"&gt;BarCamp Bournemouth&lt;/a&gt; made it easy, running over
          a weekend and being so close!&lt;/p&gt;&lt;p&gt;I must of course say congratulations to the organisers for putting in the effort to provide a free social/conference
          for up to 100 attendees.  No small feat, including organising the venue plus sponsorship for two free meals.&lt;/p&gt;&lt;p&gt;In terms of comparison I would suggest that the small scale nature of the event made it much more of a 'geek social'
          than a free conference.  Which made it a heck of a lot more fun but perhaps less about learning.&lt;/p&gt;&lt;p&gt;I made it to a number of talks including a run through of scala (with some very similar features to .net), a designers do better
          rant from &lt;a rel="nofollow" target="_blank" href="http://twitter.com/richquick"&gt;Rich Quick&lt;/a&gt;, partook in a .NET MVC discussion, a number of discussions surrounding the Digital Economy Bill, and an intro to British Sign Language
          (from &lt;a rel="nofollow" target="_blank" href="http://twitter.com/lallyd"&gt;Lalita D'Cruze&lt;/a&gt;).  And yes, I can now sign my name :-)&lt;/p&gt;&lt;p&gt;Off the back of this I looked into what other smallscale events are run in my area:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://winchesterwebscene.co.uk/"&gt;Winchester Web Scene&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.nxtgenug.net/Region.aspx?RegionID=9"&gt;NxtGen Southampton&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.bcs.org/server.php?show=nav.12189"&gt;BCS Hampshire&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So will show up to those in due course.  I also learnt to play Polarity and Werewolf!&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Extending Xml: Two birds with one stone?</title>
            <link>http://cargowire.net/articles/extendingxml</link>
            <description>Mini post introducing extending Xml with a few examples from cargowire.net</description>
            <guid isPermaLink="false">http://cargowire.net/articles/extendingxml</guid>
            <pubDate>Mon, 05 Apr 2010 23:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
                I remember once sitting in a classroom being told Xml is great because you can make up your own elements. But
                I didn't quite get it... Who or what would care about my made up names?
            &lt;/p&gt;&lt;p&gt;Well it turns out it's all rather simple.  To me it also has the side effect of tying in nicely to a well known programming principle:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;DRY : Don't Repeat Yourself&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em class="footnote"&gt;(and don't repeat anyone else for that matter - use what's already there!)&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;When developing an XML/XSL driven site such as cargowire.net you will be representing your own data as XML.
            However the things you are trying to represent are rarely entirely unique.  There may already be an XML format for the type of information you wish to
            portray, or one that exists for a similar purpose to yours but with some aspect added or missing from your needs.&lt;/p&gt;&lt;p&gt;So why not bend those to your will rather than starting from scratch, and then use the same XML for multiple purposes.
            Your 'engine' can then save on transforms and reuse XML generation code (which can also mean reusing a single cache or file).&lt;/p&gt;&lt;h3 id="title_background"&gt;First, some background&lt;/h3&gt;&lt;p&gt;The tried and tested example of namespacing and extending XML is that of HTML and XSL.  Below is a snippet of HTML from
            cargowire.net that represents part of the header of the site.&lt;/p&gt;&lt;code&gt;
              &amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;
                ...
                &amp;lt;div id="header"&amp;gt;
                    &amp;lt;h1 id="siteTitle"&amp;gt;
                        &amp;lt;a accesskey="1" rel="home" title="Home" href="/"&amp;gt;
                            &amp;lt;img width="334" height="110" alt="" src="/Content/images/cargowire.png" id="logo" /&amp;gt;
                            &amp;lt;span&amp;gt;Cargowire&amp;lt;/span&amp;gt;
                        &amp;lt;/a&amp;gt;
                    &amp;lt;/h1&amp;gt;
                &amp;lt;/div&amp;gt;
                ...
              &amp;lt;/html&amp;gt;
            &lt;/code&gt;&lt;p&gt;It is rather familiar HTML (or to be more specific, with it's well formed structure, XHTML).  The all lower case angled bracket element
            layout is a form of XML, in this case, within the '&lt;a rel="nofollow" target="_blank" href="http://www.w3.org/TR/REC-xml-names/#defaulting" title="Namespace defaulting on the w3c"&gt;default namespace&lt;/a&gt;'
            of xhtml.&lt;/p&gt;&lt;p&gt;The xmlns attribute on the parent html element identifies all children
            elements as part of XHTML as specified by the w3c (with the known elements and attributes that that entails - as described at the namespace uri).  If you followed the link on namespace 
            defaulting above you'll know that namespaces can be mixed.  And further, if you're a programmer this idea of namespacing to allow the use
            of different items with the same name will be very familiar to you.&lt;/p&gt;&lt;p&gt;To illustrate this, below is an excerpt from the cargowire.net XSL templates showing this kind of 'mixing':&lt;/p&gt;&lt;code&gt;
                &amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
                &amp;lt;xsl:stylesheet version="2.0"
                  xmlns="http://www.w3.org/1999/xhtml"
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                  xmlns:ms="urn:schemas-microsoft-com:xslt"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;
                    ...
                    &amp;lt;!-- Elements within anything but the default namespace are prefixed --&amp;gt;
                    &amp;lt;xsl:template match="cargowire"&amp;gt;
                        ...
                        &amp;lt;div id="container"&amp;gt;
                            &amp;lt;div id="content"&amp;gt;
                                &amp;lt;h1 id="contentTitle"&amp;gt;
                                    &amp;lt;xsl:apply-templates select="page" mode="title"/&amp;gt;
                                &amp;lt;/h1&amp;gt;
                                &amp;lt;xsl:apply-templates select="page" mode="content"/&amp;gt;
                            &amp;lt;/div&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/xsl:template&amp;gt;
                &amp;lt;/xsl:stylesheet&amp;gt;
            &lt;/code&gt;&lt;p&gt;As you can see the XHTML namespace is specified as the default (line 3).  Further namespaces are declared via multiple
            namespace attributes on the root stylesheet element (lines 4-7) with a colon separating 'xmlns' from the namespace prefix that will be used e.g. 'xmlns:xsl'.&lt;/p&gt;&lt;p&gt;In this way &lt;a rel="nofollow" target="_blank" href="http://www.w3schools.com/XML/xml_namespaces.asp"&gt;parsers can be sure of uniqueness&lt;/a&gt; when processing
            a particular xml document.  In the XSL example above the processor identifies items with an xsl prefix as transform processing instructions
            whereas those with the default XHTML namespace are left to be written to the output directly.&lt;/p&gt;&lt;p&gt;This idea of mixing one set of known XML elements/attributes with another can be expanded to our own XML design.  Here's a 
            couple of examples from cargowire:&lt;/p&gt;&lt;h3 id="title_sitemap"&gt;Scenario A: Sitemap&lt;/h3&gt;&lt;p&gt;One of the obvious items of information required by a website is a menu structure.  This could be represented in any
            number of ways.  But before jumping in and creating a new nomenclature it's worth stopping to think what other purpose this xml
            could serve.&lt;/p&gt;&lt;p&gt;You will want to use your 'page structure' xml to present a menu to users but you may also want to present this information
            to other consumers. &lt;a rel="nofollow" target="_blank" href="http://www.sitemaps.org/"&gt;Sitemaps.org&lt;/a&gt; defines a standard for representing a website's sitemap
            that can be &lt;a rel="nofollow" target="_blank" href="http://www.sitemaps.org/protocol.php#informing"&gt;submitted to search engines&lt;/a&gt;.  This can obviously also be
            used to represent your navigation. However in the case
            of cargowire I wanted to add a 'subtitle' to each menu item.&lt;/p&gt;&lt;p&gt;There was no scope for doing this within the sitemaps protocol,  which left me with two options.  One, that I create a bespoke xml schema for my sites purposes, with a transform to enable
            output in the known sitemap.xml format.  The other is that I keep the sitemap.xml format and 'extend' it with my own elements/attributes.&lt;/p&gt;&lt;p&gt;Below is the 'extended' version:&lt;/p&gt;&lt;code&gt;
            &amp;lt;urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
              xmlns:cargowire-sitemap="http://cargowire.net/cargowire-sitemap"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9  http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd  http://cargowire.net/cargowire-sitemap  http://cargowire.net/cargowire-sitemap.xsd"
              &amp;gt;
                &amp;lt;url&amp;gt;
                    &amp;lt;loc&amp;gt;http://cargowire.net/articles&amp;lt;/loc&amp;gt;
                    &amp;lt;lastmod&amp;gt;2009-08-29&amp;lt;/lastmod&amp;gt;
                    &amp;lt;changefreq&amp;gt;weekly&amp;lt;/changefreq&amp;gt;
                    &amp;lt;priority&amp;gt;0.5&amp;lt;/priority&amp;gt;
                    &amp;lt;!-- My added content --&amp;gt;
                    &amp;lt;cargowire-sitemap:accesskey&amp;gt;2&amp;lt;/cargowire-sitemap:accesskey&amp;gt;
                    &amp;lt;cargowire-sitemap:pathandquery&amp;gt;/articles&amp;lt;/cargowire-sitemap:pathandquery&amp;gt;
                    &amp;lt;cargowire-sitemap:title&amp;gt;Articles&amp;lt;/cargowire-sitemap:title&amp;gt;
                    &amp;lt;cargowire-sitemap:subtitle&amp;gt;Things I think about&amp;lt;/cargowire-sitemap:subtitle&amp;gt;
                &amp;lt;/url&amp;gt;
                ...
              &amp;lt;/urlset&amp;gt;
            &lt;/code&gt;&lt;p&gt;This can then be accessed in the XSL by referencing the namespace.  Both in the root stylesheet element
            and then when matching the particular elements:&lt;/p&gt;&lt;code&gt;      
              &amp;lt;xsl:stylesheet ...
                xmlns:s="http://www.sitemaps.org/schemas/sitemap/0.9"
                xmlns:cargowire-sitemap="http://cargowire.net/cargowire-sitemap"&amp;gt;

              &amp;lt;xsl:template match="s:urlset" mode="nav"&amp;gt;
                &amp;lt;dl id="pNav"&amp;gt;
                  &amp;lt;xsl:apply-templates select="./s:url[cargowire-sitemap:pathandquery/@showinnav = 1]" mode="nav"/&amp;gt;
                &amp;lt;/dl&amp;gt;
              &amp;lt;/xsl:template&amp;gt;
            &lt;/code&gt;&lt;p&gt;This has saved on having an additional transform whilst allowing me to ensure that only parsers expecting/looking for the
            cargowire namespace are aware of it.&lt;/p&gt;&lt;h3 id="title_feed"&gt;Scenario B: Feed Aggregation&lt;/h3&gt;&lt;p&gt;&lt;a rel="nofollow"&gt;TheBarn&lt;/a&gt; section of this site pulls in feed contents from a variety of sources (&lt;a rel="nofollow"&gt;as discussed previously,
            using yahoo pipes&lt;/a&gt;).  This content adheres to the RSS xml spec and contains all the information I need to display a 
            listing except for one thing.  On my barn page I also display a small avatar of the author.&lt;/p&gt;&lt;p&gt;Following the example above a gravatar element can be added to the 'item' element of the rss feed:&lt;/p&gt;&lt;code&gt;
               &amp;lt;item&amp;gt;
                  ...
                  &amp;lt;cargowire:avatar url="http://www.gravatar.com/avatar.php?gravatar_id=f953df82b2a3f65e0acb9b3897908be0&amp;amp;amp;rating=G&amp;amp;amp;size=40" /&amp;gt;
               &amp;lt;/item&amp;gt;
            &lt;/code&gt;&lt;h4&gt;Doing this with Yahoo Pipes&lt;/h4&gt;&lt;p&gt;Unfortunately at time of creation I was unable to do this addition within the Yahoo pipes interface i.e. specify a namespace
            in the root element output to allow the avatar element within the items to persist (see some forum posts regarding it 
            &lt;a rel="nofollow" target="_blank" href="http://discuss.pipes.yahoo.com/Message_Boards_for_Pipes/threadview?m=tm&amp;amp;bn=pip-DeveloperHelp&amp;amp;tid=9607&amp;amp;mid=9629&amp;amp;tof=-1&amp;amp;rt=2&amp;amp;frt=2&amp;amp;off=1"&gt;here&lt;/a&gt;).
            So currently I, as the consumer of pipes content, have to add any custom information I want at my end.&lt;/p&gt;&lt;h3 id="title_xsd"&gt;Defining your extensions&lt;/h3&gt;&lt;p&gt;If you are using a tool like Visual Studio you may be able to validate and/or receive intellisense (autocomplete)
            on your XML if you specify an XSD .  An XSD can also be used to validate
            an XML document ensuring that a document will not cause any suprises for any consuming code.&lt;/p&gt;&lt;code&gt;
              &amp;lt;xs:schema id="cargowire-sitemap" xmlns:tns="http://cargowire.net/cargowire-sitemap" 
                 attributeFormDefault="unqualified" elementFormDefault="qualified"
                 targetNamespace="http://cargowire.net/cargowire-sitemap"
                 xmlns:xs="http://www.w3.org/2001/XMLSchema"&amp;gt;

                &amp;lt;xs:element name="pathandquery"&amp;gt;
                  &amp;lt;xs:complexType&amp;gt;
                    &amp;lt;xs:simpleContent&amp;gt;
                      &amp;lt;xs:extension base="xs:string"&amp;gt;
                        &amp;lt;xs:attribute name="rel" type="xs:string" use="optional" /&amp;gt;
                        &amp;lt;xs:attribute name="showinnav" type="xs:boolean" use="optional" /&amp;gt;
                        &amp;lt;xs:attribute name="accesskey" type="xs:string" use="optional"/&amp;gt;
                      &amp;lt;/xs:extension&amp;gt;
                    &amp;lt;/xs:simpleContent&amp;gt;
                  &amp;lt;/xs:complexType&amp;gt;
                &amp;lt;/xs:element&amp;gt;
                &amp;lt;xs:element name="title" type="xs:string" /&amp;gt;
                &amp;lt;xs:element name="subtitle" type="xs:string" /&amp;gt;

              &amp;lt;/xs:schema&amp;gt;
            &lt;/code&gt;&lt;p&gt;A namespace uri will often lead to a page describing the namespace and include links to the schema definitions 
            (see the &lt;a rel="nofollow" target="_blank" href="http://www.w3.org/2001/XMLSchema"&gt;XML Schema namespace uri&lt;/a&gt; itself for an example).&lt;/p&gt;&lt;p&gt;The schemaLocation attribute (as seen in the sitemaps.org example in fig 3.0) can be used to identify the XSD location
            for a particular namespace.  The attribute value will be a list of key value pairs. The key being the namespace uri and
            the value being the schema location (use xsi:noNamespaceSchemaLocation for the default namespace).&lt;/p&gt;&lt;p&gt;Although XSD's are 
            not the focus of this article it is worth knowing how to read these attributes when investigating XML schemas published 
            by others.&lt;/p&gt;&lt;h3 id="title_conclusion"&gt;Conclusion&lt;/h3&gt;&lt;p&gt;Extending XML can be an extremely flexible way of addressing multiple problems within one Xml document. Doing so acts
            an extension of good programming practice - before starting, look to build on what already exists.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>SXSW - In Reflection</title>
            <link>http://cargowire.net/blog/sxsw10overall</link>
            <description>&lt;p&gt;
          Having seen (or at least made notes on) 17 talks at last year's 'South By', coupled with the fact
          that this year pretty much the entire Headscape team were heading out to Austin I felt sure that
          my 'talk total' would be much lower.  However I somehow managed to make it out to 21
          different talks, panels and/or podcast recordings!
          &lt;/p&gt;&lt;p&gt;Unfortunately I didn't find the time to write up these notes during the conference.  But I will
          do so over the coming days (and backdate them within this blog).&lt;/p&gt;&lt;p&gt;For me, this year had quite a different feel to it.  Knowing 11 rather than just 3 people from the outset
          leant itself to more of a family holiday feel than a networking event...&lt;/p&gt;&lt;p&gt;In terms of the talks there seemed to be a theme of design and persuasion with less technical technique oriented
          items on the schedule.  However as I've said before technique 'takeaways' are few and far between at large scale
          conferences.  In fact it is perhaps more beneficial to dip into some sessions that won't necessarily have a direct impact on your
          role.  Instead they will enrich it with insight into some other aspect of web design/development work. This is useful particularly
          within small agencies where roles are often blurred.  For me this included talks on psychology, design and interfaces.&lt;/p&gt;&lt;p&gt;Looking back at last year I spent a lot of time checking out Flash and iPhone based talks which this year seem to have been 
          replaced by Javascript/HTML5, or geo/location based talks.  To me this matches the movemement in the industry away from flash (due to 
          devices like the iPhone driving it out) and away from 'device features' to 'applications that can be based on device features'
          e.g. "OK, your device has access to GPS, what can I now actually make with that".
        &lt;/p&gt;&lt;p&gt;It's interesting to note that last year I was listening to Microsoft Rep's discussing IE8's intended CSS capabilities
          and during this years SXSW IE9 was being announced/discussed at Microsoft MIX.
          With talk of SVG, CSS3 and GPU powered graphics.  They really seem to be ramping up their versions now in competition with
          Mozilla, Apple, Google and Opera (after their 5 year IE6/7 gap), with some promising stuff coming out of redmond.&lt;/p&gt;&lt;p&gt;Overall SXSW was definitely worth reattending.  I've returned once again enthused about the industry and getting stuck
          into some interesting projects, although it would be interesting to take some time to attend more workshop based
          events in the UK in the future.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/sxsw10overall</guid>
            <pubDate>Sun, 21 Mar 2010 20:40:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
          Having seen (or at least made notes on) 17 talks at last year's 'South By', coupled with the fact
          that this year pretty much the entire Headscape team were heading out to Austin I felt sure that
          my 'talk total' would be much lower.  However I somehow managed to make it out to 21
          different talks, panels and/or podcast recordings!
          &lt;/p&gt;&lt;p&gt;Unfortunately I didn't find the time to write up these notes during the conference.  But I will
          do so over the coming days (and backdate them within this blog).&lt;/p&gt;&lt;p&gt;For me, this year had quite a different feel to it.  Knowing 11 rather than just 3 people from the outset
          leant itself to more of a family holiday feel than a networking event...&lt;/p&gt;&lt;h4&gt;The Talks&lt;/h4&gt;&lt;p&gt;In terms of the talks there seemed to be a theme of design and persuasion with less technical technique oriented
          items on the schedule.  However as I've said before technique 'takeaways' are few and far between at large scale
          conferences.  In fact it is perhaps more beneficial to dip into some sessions that won't necessarily have a direct impact on your
          role.  Instead they will enrich it with insight into some other aspect of web design/development work. This is useful particularly
          within small agencies where roles are often blurred.  For me this included talks on psychology, design and interfaces.&lt;/p&gt;&lt;p&gt;Looking back at last year I spent a lot of time checking out Flash and iPhone based talks which this year seem to have been 
          replaced by Javascript/HTML5, or geo/location based talks.  To me this matches the movemement in the industry away from flash (due to 
          devices like the iPhone driving it out) and away from 'device features' to 'applications that can be based on device features'
          e.g. "OK, your device has access to GPS, what can I now actually make with that".
        &lt;/p&gt;&lt;h4&gt;IE&lt;/h4&gt;&lt;p&gt;It's interesting to note that last year I was listening to Microsoft Rep's discussing IE8's intended CSS capabilities
          and during this years SXSW &lt;a rel="nofollow" target="_blank" href="http://ie.microsoft.com/testdrive/"&gt;IE9&lt;/a&gt; was being announced/discussed at &lt;a rel="nofollow" target="_blank" href="http://live.visitmix.com/"&gt;Microsoft MIX&lt;/a&gt;.
          With talk of SVG, CSS3 and GPU powered graphics.  They really seem to be ramping up their versions now in competition with
          Mozilla, Apple, Google and Opera (after their 5 year IE6/7 gap), with some promising stuff coming out of redmond.&lt;/p&gt;&lt;p&gt;Overall SXSW was definitely worth reattending.  I've returned once again enthused about the industry and getting stuck
          into some interesting projects, although it would be interesting to take some time to attend more workshop based
          events in the UK in the future.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>The Joel Test no.11</title>
            <link>http://cargowire.net/articles/joeltest11</link>
            <description>During the Boagworld 200 show Drew Mclellan, Rachel Andrew, Paul Stanton and I
            discussed the Joel Test.  One of the tests we didn't get on to was test number 11...</description>
            <guid isPermaLink="false">http://cargowire.net/articles/joeltest11</guid>
            <pubDate>Sun, 21 Feb 2010 16:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
              The application process is there for two reasons. One, for the employer to get to know if the employee
              is a good fit. And second for the employee to get to know if the employer is a good fit.
          &lt;/p&gt;&lt;p&gt;With any role a new hire needs to address a number of 'transferable skills' questions such as 'can this person communicate clearly'
          and 'can this person work with others'.  However, on top of this each role has specific skillset requirements.  It is
          these requirements that need bespoke methods of identification.  The question is, what methods should we use?&lt;/p&gt;&lt;h3 id="title_appprocessvariants"&gt;The developer application process&lt;/h3&gt;&lt;p&gt;Developer application processes can vary greatly.  However their focus must be &lt;strong&gt;'is this person able to program at the level we require?'&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Here's just a few examples of the methods I have encountered myself:&lt;/p&gt;&lt;div class="callout"&gt;&lt;dl class="comparison half"&gt;&lt;dt id="appprocess_oldschool"&gt;The "Old school" approach&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;Phone interview&lt;/li&gt;&lt;li&gt;A single, in person interview&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;dt id="appprocess_minicontractor"&gt;The "Mini contractor" approach&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;Phone interview&lt;/li&gt;&lt;li&gt;1 paid day on the job&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;dl class="comparison half"&gt;&lt;dt id="appprocess_bluechip"&gt;The "Blue chip" approach&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;Structured Application Form instead of CV/Cover letter&lt;/li&gt;&lt;li&gt;Phone Interview business&lt;/li&gt;&lt;li&gt;Phone Interview technical&lt;/li&gt;&lt;li&gt;Recruitment day including Apptitude testing and monitored group activities&lt;/li&gt;&lt;li&gt;Second recruitment day including multiple interviews (sometimes videoed, sometimes requiring a pre-prepared presentation)&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;dl class="comparison half"&gt;&lt;dt id="appprocess_righthererightnow"&gt;The "Do something right here, right now" approach&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;Phone interview&lt;/li&gt;&lt;li&gt;Business interview&lt;/li&gt;&lt;li&gt;Tech interview + coding on a whiteboard&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;dl class="comparison half"&gt;&lt;dt id="appprocess_showusthecode"&gt;The "Show us some code" approach&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt;Phone interview&lt;/li&gt;&lt;li&gt;Minor coding project&lt;/li&gt;&lt;li&gt;In person interview&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/div&gt;&lt;hr class="breaker"/&gt;&lt;h3 id="title_joeltest"&gt;The Joel Test #11&lt;/h3&gt;&lt;p&gt;In his &lt;a rel="nofollow" target="_blank" href="http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html" title="Joel's guerilla guide to interviewing"&gt;article on interviewing for new developers&lt;/a&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/spolsky"&gt;Joel Spolsky&lt;/a&gt; identifies two key aspects to look for in new hires.  That they
          are smart and that they can get things done.&lt;/p&gt;&lt;p&gt;The &lt;a rel="nofollow" target="_blank" href="http://www.joelonsoftware.com/articles/fog0000000043.html" title="Joel Test article"&gt;Joel test&lt;/a&gt; (a means of measuring the quality of a software team) provides
          a pretty compelling argument as to why candidates should write code as part of the application process.&lt;/p&gt;&lt;blockquote&gt;&lt;ol start="11"&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Do new candidates write code during their interview?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Would you hire a magician without asking them to show you some magic tricks? Of course not...&lt;/p&gt;&lt;p&gt;...Yet, every day, programmers are hired on the basis of an impressive resumé or because the interviewer enjoyed chatting with them. Or they are asked trivia questions ("what's the difference between CreateDialog() and DialogBox()?") which could be answered by looking at the documentation. You don't care if they have memorized thousands of trivia about programming, you care if they are able to produce code. Or, even worse, they are asked "AHA!" questions: the kind of questions that seem easy when you know the answer, but if you don't know the answer, they are impossible.&lt;/p&gt;&lt;p&gt;Please, just stop doing this. Do whatever you want during interviews, but make the candidate write some code.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;cite&gt;
              Joel Spolsky - &lt;a rel="nofollow" target="_blank" href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;http://www.joelonsoftware.com/&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;&lt;h3 id="title_thebigquestion"&gt;The big question&lt;/h3&gt;&lt;p&gt;So how do each of the approaches above answer the big question &lt;strong&gt;"Can this person actually develop software with
          us / the way we do / the way we intend to in the foreseeable future."&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If we take a look back at some of the variants only a few actually ask for code:&lt;/p&gt;&lt;table class="fowa"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan="3"&gt;Can you develop?&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Old school&lt;/td&gt;&lt;td&gt;A technical representative will quiz you&lt;/td&gt;&lt;td&gt;As part of an interview I was once asked "So are you comfortable writing Javascript functions?".  I replied
                    "Yes".  Needless to say the only party that learnt something here was me.  And I only learnt that the technical
                    interviewer either wasn't very good at interviewing, or wasn't very good in general. The problem is, what can
                    you ask verbally that actually proves competence?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mini Contractor&lt;/td&gt;&lt;td&gt;At the end of the day the employer sees your code and assesses how much help you needed from others&lt;/td&gt;&lt;td&gt;In this case the company needs some work for you to do that you can get up to speed with quickly (rather
                    than wasting time teaching you) and is not under NDA . This approach can be useful to see how the applicant
                    works in your environment but has extreme time costs for both parties, particularly as their presence may disrupt 'non-interviewing'
                    members of staff.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Blue Chip ( legendary logic tests )&lt;/td&gt;&lt;td&gt;Answer a thought experiment/riddle&lt;/td&gt;&lt;td&gt;I've not encountered this myself during interview - the concept is almost mythical. Although
                    logic questions may, like apptitude tests, give an insight into how 'smart' someone is it is nowhere near as
                  directly related to programming as getting actual code samples to be done/provided.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Right here right now&lt;/td&gt;&lt;td&gt;Produce a code sample to a particular problem in a short time frame while being monitored&lt;/td&gt;&lt;td&gt;Requires a relatively 'trivial' task that can be completed in a short amount of time.  Being watched adds abnormal
                    pressure but maintains control over the entire process and removes the ability to cheat the system.  If
                    the situation doesn't involve a computer (code on white board) it is quite different to the expected role.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Show us the code&lt;/td&gt;&lt;td&gt;Produce a code sample to a specific set task prior to coming in for interview&lt;/td&gt;&lt;td&gt;Can be 'gamed' (completed by someone else and/or with abnormal effort - 'yeh it only took 2 hours *cough*every minute
                    since you gave me the task to now*cough*').  Doesn't give you a direct insight into the process only the process
                  as viewed by the participant retrospectively.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;tfoot&gt;&lt;tr&gt;&lt;td colspan="3"&gt;&lt;/tr&gt;&lt;/tfoot&gt;&lt;/table&gt;&lt;p&gt;
            If we agree that completing real code in some way is the only way to identify the programming ability of a prospective
            candidate we rule out all but the last two approaches (with 'right here right now' and the 'mini contractor' being roughly equivalent
            but for the probable time frame involved). And then it becomes a case of &lt;a rel="nofollow" target="_blank" href="http://www.youtube.com/watch?v=Np6gyUb0E7o" title="A Harry Hill styl&amp;#xe9;.. FIIIIIGHT!"&gt;which is better&lt;/a&gt;?
          &lt;/p&gt;&lt;h3 id="title_ourprocess"&gt;What do we use?&lt;/h3&gt;&lt;p&gt;At Headscape we use a process similar to 'Show us the code'.  After a CV/Covering letter and phone interview
          sift we ask applicants to complete a mini project (based on a spec provided) and submit it to us as the next stage.
          This is for a number of reasons:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Asking programming questions verbally is inherently difficult.  It can be tricky to avoid trivia
            style questions and is not particularly representative of day to day work.&lt;/li&gt;&lt;li&gt;Asking someone to code on a white board without the luxury of intellisense or google will filter out a chunk of 
            applicants however it doesn't necessarily provide you with a full picture of them.  Such testing relies on 
            being able to generalise the success of creating a small algorithm to overall success on the job and doesn't
            account for 'off days'.&lt;/li&gt;&lt;li&gt;The actual output we receive is not so much 'marked' with a pass or fail (although it can be used to assess
            whether an applicant is at the level we require).  The main benefit from our point of view is twofold...  A useful effect
            of asking for new code is that the commitment required acts as a &lt;strong&gt;'desire filter'&lt;/strong&gt; on the applicants behalf. Applicants sending mailshot CV's to multiple jobs may be put
            off continuing down a path that requires more commitment from them - and this is a good thing.  As an employer we want
            employees who really want to be with us &lt;strong&gt;rather than just someone who needs a job&lt;/strong&gt;.
            &lt;/li&gt;&lt;li&gt;By asking them to complete new work
            in their own time we do not force them to have an extended stay at our offices for testing nor do we 'suprise' them with
            an algorithm question on the day. The other benefit therefore is that the &lt;strong&gt;technical part of the interview can revolve
            around the task&lt;/strong&gt;.  "How did you go about it?", "What did you find difficult?", "What did you need to research?",
            "What would you improve?", "How does this solution account for extensibility?", "Did you reuse some of your code/third
            parties?", "Did you satisfy the spec".  All of these questions are only available if we have an extended code sample. And by &lt;strong&gt;setting each candidate
            the same mini-project it is more comparable&lt;/strong&gt; than discussing their previous most recent project.  It also
            gives the candidate scope to impress us by going the extra mile. For example I have previously been asked to write an 
            IsPalindrome function on a white board.  Comparing that to being given a mini project there is clearly more scope for me to
            show my desire (by adding extra functionality), show my planning skills (by building in extensibility), show my decision
            making (by using/not using third parties or previous code).  All things that would be relevant to a developer role but
            are difficult to assess when reviewing single algorithms.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;The argument is essentially the same as the coursework vs exams debate from education.  Although coursework is more
          open to cheating and less able to be tightly controlled it is actually more like working life.&lt;/p&gt;&lt;p&gt;Discussing the project can easily identify if the candidate has had some 'assistance' from a third party.  The main
          shortcoming then is not knowing exactly how much of the time between phone interview and in-person interview the candidate
          spent creating the output they provided.  In my view this shortcoming is balanced by being able to have an in-depth
          discussion of the project.  The speed of response and passion in their discussion surrounding this should provide pointers
          to how 'smart' they are.&lt;/p&gt;&lt;p&gt;Any suspicions or a large amount of applicants can be filtered by doing an initial technical interview over the phone
          regarding the project if necessary.&lt;/p&gt;&lt;h3 id="title_asanapplicant"&gt;As an applicant&lt;/h3&gt;&lt;p&gt;So thats all well and good as an employer. Just sit back and fire out homework for your applicants.  But as an applicant is it merely another hoop to jump through?&lt;/p&gt;&lt;p&gt;When I've been an
          applicant myself I actually prefer to do code in some way.  Not because I like to be tested or even just because I like to write
          code but because it allows me scope to get a feel for the employer.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Do I get a glazed look on the face of the technical interviewer when I discuss some aspect of the project?&lt;/li&gt;&lt;li&gt;Did they generally agree with my approach or are they entirely different?&lt;/li&gt;&lt;li&gt;Did they notice the bit I rushed?&lt;/li&gt;&lt;li&gt;Did they offer a different approach I hadn't considered? (can I learn from them?)&lt;/li&gt;&lt;li&gt;Did they smugly point out a minute flaw to establish their dominance&lt;/li&gt;&lt;li&gt;Did the back and forth about my code at times slip out of interview mode and become more like a discussion with colleagues?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;All of these points allow me to guage my half of the application bargain "Is the employer a good fit for me?".&lt;/p&gt;&lt;h3 id="title_reserverations"&gt;Reservations?&lt;/h3&gt;&lt;p&gt;While agreeing with Joel that Smart does not mean 'knows the answer to trivia questions' I also understand that by
          asking for a mini-project to be completed we are asking for a reasonable amount of commitment from the applicant.  However
          we both benefit from this in the richness of the interview process that follows.&lt;/p&gt;&lt;p&gt;Something we have also considered at Headscape is changing the 'test' to a situation where we provide a solution
          to the applicant and ask them to extend it in some way.  This would be more realistic (most projects are continuations
          of old ones, or built on a base codebase rather than clean slates) and would also allow us to ask the applicant their
          thoughts on the project we provided.  Would they have done it this way?&lt;/p&gt;&lt;p&gt;Allowing them to critique us not only assists
          their desire to judge if we are a good fit for them but allows us to see their analytical and critical skills.&lt;/p&gt;&lt;h3 id="title_closing"&gt;In Closing&lt;/h3&gt;&lt;p&gt;Our interviews involve key personal (representatives from each team PMs, Directors, Developers) and we must assess
          the standard job interview issues.  However when it comes to development some form of coding is essential.  In our
          case we favour the 'coursework' style.  It may be that a mix of both is appropriate.  With all things 'it depends'. If you 
          expect 100 applicants to get to the testing phase then assessing those projects will be a huge undertaking. But relying
          on only a small in-person algorithm test can be difficult to generalise potential success from.  Mixing the two, by bringing in a candidate
          and asking them to code all day may seem like an ideal compromise but requires a single fixed large timeframe commitment from
          both parties. We also all know how different it is to code with someone watching over your shoulder.
          &lt;/p&gt;&lt;p&gt;At all times we need to consider the benefit for both us as employers and applicants as potential employees through
          the process.  We are not the only ones making a big decision.  If we can somehow forge the process to allow the applicant
          to test us we will inevitably have a better new hire in the long run.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Boagworld 200th</title>
            <link>http://cargowire.net/blog/boagworld200</link>
            <description>&lt;p&gt;It was my pleasure to take part in the 200th Boagworld
                (bw200) yesterday.  A
                marathon session that started with Bob, Paul and 
                I waiting outside the locked barn keyless and cold until
                Dave, Stanton and Ryan
                came to the rescue...
                &lt;/p&gt;&lt;p&gt;In my mind the day was like a free one day, online conference with a brilliant lineup
                all sharing their time for free.  There wasn't too rigid a schedule with guests in and out all the time either via skype
                or in person.
                However there was a general plan of 30minute sessions (expertly co-ordinated and organised by Ryan Taylor).
                &lt;/p&gt;&lt;p&gt;Each session was recorded and as far as I'm aware will be released by Marcus and Paul over the coming weeks.&lt;/p&gt;&lt;p&gt;Highlights for me included a relaxed, and seemingly extremely well read (if his bookshelf was anything to go by) Andy Clarke
                getting into a heated debate with Paul regarding browser support / progressive enhancement and some excellent food for thought from Drew Mclellan
                and Rachel Andrew in regard to e-commerce projects.&lt;/p&gt;&lt;p&gt;The only real lowlight was some rather unnecessary behaviour in the backchannel.  Other than that
                it's a shame each guest was only on for 30minutues as there was some excellent content that could have taken up entire shows in their own right.&lt;/p&gt;&lt;p&gt;Thanks to the rotating host system I got to co-host a chat with Drew and Rachel on 
                The Joel Test and to speak with 
                Christian Heilmann about Yahoo's YQL.&lt;/p&gt;&lt;p&gt;The Joel test is an interesting one that allows teams to take a step back and guage how effectively they are operating. Covering questions on
                Source Control, bug tracking, scheduling and working conditions.  &lt;/p&gt;&lt;p&gt;One of the tests that we didn't have time for was 'Do new candidates write code during
                their interview?' which for me is something that I've been wrestling with at Headscape (where we do ask for code to be created as part of the application
                process). Shortly I will be posting an article covering my thoughts on the matter (as encouraged by Emily).&lt;/p&gt;&lt;p&gt;Unfortunately I think there was a misunderstanding regarding the length of Christians session (being only half an hour instead of an hour) however I think it
                was one of the best sessions for takeaway action.  The YQL demos that Christian had prepared showed us just how easily web apps and mashups can be created
                by standing on the shoulders of Yahoo. Allowing us to get down to the real functionally of our apps rather than worrying about the wiring of individual pieces
                across differing API boundaries. I urge you to take a look at the YQL Demos
                that Christian prepared.&lt;/p&gt;&lt;p&gt;All in all, a great day.  Thanks to everyone involved (especially Cath for providing food for us all!&lt;/p&gt;&lt;p&gt;P.S. I'm still not sure Paul noticed the hijack of his about page throughout the day... did you?&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/boagworld200</guid>
            <pubDate>Sat, 13 Feb 2010 11:15:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;It was my pleasure to take part in the &lt;a rel="nofollow" target="_blank" href="http://boagworld.com/news/200-live" title="Boagworld 200th homepage"&gt;200th Boagworld&lt;/a&gt;
                (&lt;a rel="nofollow" target="_blank" href="http://search.twitter.com/search?q=%23bw200" title="Boagworld 200 on twitter"&gt;bw200&lt;/a&gt;) yesterday.  A
                marathon session that started with &lt;a rel="nofollow" target="_blank" href="http://twitter.com/bobscape"&gt;Bob&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="http://twitter.com/boagworld"&gt;Paul&lt;/a&gt; and 
                &lt;a rel="nofollow" target="_blank" href="http://twitter.com/cargowire"&gt;I&lt;/a&gt; waiting outside the locked barn keyless and cold until
                &lt;a rel="nofollow" target="_blank" href="http://twitter.com/davemcdermid"&gt;Dave&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="http://twitter.com/stanton"&gt;Stanton&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://twitter.com/ryanhavoc"&gt;Ryan&lt;/a&gt;
                came to the rescue...
                &lt;/p&gt;&lt;p&gt;In my mind the day was like a &lt;a rel="nofollow" target="_blank" href="http://twitter.com/cargowire/status/9007717396"&gt;free one day, online conference&lt;/a&gt; with a brilliant lineup
                all sharing their time for free.  There wasn't too rigid a schedule with guests in and out all the time either &lt;a rel="nofollow" target="_blank" href="http://www.flickr.com/photos/ryanjtaylor/4351110517/in/set-72157623291945233/" title="Flickr: Sarah Parmenter calling in remotely"&gt;via skype&lt;/a&gt;
                or &lt;a rel="nofollow" target="_blank" href="http://www.flickr.com/photos/ryanjtaylor/4351047369/in/set-72157623291945233/" title="Flickr: Jeremy Keith and Anna Debenham being entirely serious and professional on arrival"&gt;in person&lt;/a&gt;.
                However there was a general plan of 30minute sessions (expertly co-ordinated and organised by &lt;a rel="nofollow" target="_blank" href="http://havocinspired.co.uk/" title="Headscape's most recent employee"&gt;Ryan Taylor&lt;/a&gt;).
                &lt;/p&gt;&lt;p&gt;Each session was recorded and as far as I'm aware will be released by Marcus and Paul over the coming weeks.&lt;/p&gt;&lt;img class="featured" alt="The Boagworld 200 Technical Setup"/&gt;&lt;p&gt;Highlights for me included a relaxed, and seemingly extremely well read (if his bookshelf was anything to go by) &lt;a rel="nofollow" target="_blank" href="http://twitter.com/malarkey"&gt;Andy Clarke&lt;/a&gt;
                getting into a heated debate with Paul regarding browser support / progressive enhancement and some excellent food for thought from &lt;a rel="nofollow" target="_blank" href="http://twitter.com/drewm"&gt;Drew Mclellan&lt;/a&gt;
                and &lt;a rel="nofollow" target="_blank" href="http://twitter.com/rachelandrew"&gt;Rachel Andrew&lt;/a&gt; in regard to e-commerce projects.&lt;/p&gt;&lt;p&gt;The only real lowlight was some rather &lt;a rel="nofollow" target="_blank" href="http://www.rachelandrew.co.uk/archives/2010/02/13/women-and-the-backchannel/" title="Chatroom treatment of the female guests by Rachel Andrew"&gt;unnecessary behaviour in the backchannel&lt;/a&gt;.  Other than that
                it's a shame each guest was only on for 30minutues as there was some excellent content that could have taken up entire shows in their own right.&lt;/p&gt;&lt;p&gt;Thanks to the rotating host system I got to co-host a chat with Drew and Rachel on 
                &lt;a rel="nofollow" target="_blank" href="http://www.joelonsoftware.com/articles/fog0000000043.html" title="Original Joel Test article on JoelOnSoftware"&gt;The Joel Test&lt;/a&gt; and to speak with 
                &lt;a rel="nofollow" target="_blank" href="http://icant.co.uk"&gt;Christian Heilmann&lt;/a&gt; about Yahoo's YQL.&lt;/p&gt;&lt;p&gt;The Joel test is an interesting one that allows teams to take a step back and guage how effectively they are operating. Covering questions on
                Source Control, bug tracking, scheduling and working conditions.  &lt;/p&gt;&lt;p&gt;One of the tests that we didn't have time for was 'Do new candidates write code during
                their interview?' which for me is something that I've been wrestling with at Headscape (where we do ask for code to be created as part of the application
                process). Shortly I will be posting an article covering my thoughts on the matter (as encouraged by &lt;a rel="nofollow" target="_blank" href="http://twitter.com/gradualist"&gt;Emily&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;Unfortunately I think there was a misunderstanding regarding the length of Christians session (being only half an hour instead of an hour) however I think it
                was one of the best sessions for takeaway action.  The YQL demos that Christian had prepared showed us just how easily web apps and mashups can be created
                by standing on the shoulders of Yahoo. Allowing us to get down to the real functionally of our apps rather than worrying about the wiring of individual pieces
                across differing API boundaries. I urge you to take a look at the &lt;a rel="nofollow" target="_blank" href="http://isithackday.com/boagworld.php" title="Christian's YQL Demos for Boagworld 200"&gt;YQL Demos&lt;/a&gt;
                that Christian prepared.&lt;/p&gt;&lt;p&gt;All in all, a great day.  Thanks to everyone involved (especially &lt;a rel="nofollow" target="_blank" href="http://twitter.com/boaggirl"&gt;Cath&lt;/a&gt; for providing food for us all!&lt;/p&gt;&lt;h3&gt;Some related bits and bobs&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.flickr.com/photos/ryanjtaylor/sets/72157623291945233/" title="Flickr Set of the show"&gt;A Flickr set of the show&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://homeofmuppets.com/moblogs/view/11492" title="Stanton's Moblog photos of the show"&gt;Some more photos from Stanton&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://icant.co.uk/goohoobi"&gt;GooHooBi - An example of YQL usage to aggregate multiple search engines&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.wait-till-i.com/2010/02/12/diving-into-the-web-of-data-the-yql-talk-at-boagworld-live-200/" title="Christian's write up of his YQL session"&gt;Christians YQL demo writeup&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;P.S. I'm still not sure Paul noticed the &lt;a rel="nofollow" class="thickbox" title="Boagworld about page change?"&gt;hijack of his about page&lt;/a&gt; throughout the day... did you?&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Developer Day 8</title>
            <link>http://cargowire.net/blog/ddd8</link>
            <description>&lt;p&gt;
            Another Developer Day over, another enthusiasm shot for the day job. Here's the usual breakdown:
          &lt;/p&gt;&lt;p&gt;Overall some excellent content with useful take aways.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/ddd8</guid>
            <pubDate>Tue, 02 Feb 2010 23:05:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
            Another &lt;a rel="nofollow" target="_blank" href="http://www.developerdeveloperdeveloper.com/ddd8/"&gt;Developer Day&lt;/a&gt; over, another enthusiasm shot for the day job. Here's the usual breakdown:
          &lt;/p&gt;&lt;table id="dayone" class="fowa"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan="2"&gt;DeveloperDeveloperDeveloper: Speaker / Thoughts&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tfoot&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;/tr&gt;&lt;/tfoot&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Mark Needham (ThoughtWorks)&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;p&gt;Not really what I had expected based on the title alone...&lt;/p&gt;&lt;p&gt;After introducing functional programming as a language with first class functions (can be created
                  during execution, passed/returned etc), immutability, lazy evaluation, recursion and pattern matching
                  Mark proceeded to demo 'Transformational' instead of imperative thinking using the linq implementations of a
                  variety of 'functional' principles: Map = Select, Filter = Where, Reduce ≅ Sum.&lt;/p&gt;&lt;p&gt;Usage of such extensions on IEnuemerable allow code to be more declarative - with the statement
                  of the desired result being specified as opposed to the exact process to undertake.&lt;/p&gt;&lt;p&gt;Although Mark did make some good points in reference to realising linq can easily lead
                  to duplication (reminding me of jquery selectors being used multiple times because
                  they look small, irrespective of the actual work they are doing), the content generally had a low
                  difficulty level feeling (which could have been enhanced perhaps by focusing more on the design patterns content
                  that was briefly touched on), with a chunk of the questions at the end critiquing the examples rather
                  than drilling down into the subject.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.markhneedham.com/blog/2010/01/31/ddd8-mixing-functional-and-object-oriented-approaches-to-programming-in-c/"&gt;Mixing functional and object oriented approaches to programming in C#&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Andrea Magnorsky (Round Crisis)&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;p&gt;Probably my favourite talk of the day &lt;a rel="nofollow" target="_blank" href="http://twitter.com/silverspoon" title="Andrea on Twitter"&gt;Andrea&lt;/a&gt;
                  gave an excellent fast paced intro to Unit Testing using &lt;a rel="nofollow" target="_blank" href="http://www.codeplex.com/xunit"&gt;Xunit&lt;/a&gt; and 
                  &lt;a rel="nofollow" target="_blank" href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt;.  With the example of testing an OrderService we saw how to use
                  consistent, verbose naming of tests for clarity/ease of use and were reminded that a unit really does mean
                  a small unit.  For example multiple tests of the save method of OrderService were used to illustrate a first simple 
                  'does not throw' test, through using a stub
                of an invalid object to check the 'if not valid return false' nature of save to using a mock of an email sender to check that
                a 'send email' call is sent.&lt;/p&gt;&lt;p&gt;By using mocks and stubs the testing of the order service is contained only to the logic within the service and not
                  to any of it's dependencies - any repository related aspects should be tested separately.&lt;/p&gt;&lt;p&gt;The phase 'be super paranoid about your tests' enforced the idea that test code is no smaller matter than production
                  code, and if anything should be treated even more thoroughly.&lt;/p&gt;&lt;p&gt;A general rule given was that behaviour tests end in a Verify on Mock whereas state tests end in an Assert
                  and that tests follow an &lt;strong&gt;A&lt;/strong&gt;rrange, &lt;strong&gt;A&lt;/strong&gt;ction, &lt;strong&gt;A&lt;/strong&gt;ssert (or verify)
                  flow. The final golden rules were: tests should not involve conditionals, should not depend on other tests and
                should not assess multiple expectations.&lt;/p&gt;&lt;p&gt;Although pointed to during the talk it would be interesting to hear more about unit testing in the context of Test Driven Development.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;&lt;a rel="nofollow" target="_blank" href="http://roundcrisis.com/2010/01/31/lessons-learned-in-unit-testing-session-ddd8/"&gt;Lessons learned on Unit Testing&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jon Skeet (Google)&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;p&gt;Having previously seen Jon Skeet &lt;a rel="nofollow"&gt;recreate linq to objects&lt;/a&gt; in 60mins this was undoubtedly going
                  to be a good session.&lt;/p&gt;&lt;p&gt;Jon covered the main 'newness' coming in C#4.0
                    &lt;dl&gt;&lt;dt&gt;Optional parameters&lt;/dt&gt;&lt;dd&gt;As in VB C# can now provide optional parameters with default values (referencing libraries
                      will need a rebuild if the optional parameters are changed as they are copied in - similar to consts)&lt;/dd&gt;&lt;dt&gt;Named arguments&lt;/dt&gt;&lt;dd&gt;Arguments can now be named allowing the order to not matter - playing nicely with multiple optional
                      parameters&lt;/dd&gt;&lt;dt&gt;Generic variance (interfaces and delegates only - reference not value types)&lt;/dt&gt;&lt;dd&gt;&lt;p&gt;Co-Variance: Specific to general - used when returning out (IList&amp;lt;Circle&amp;gt; assigned to IEnumerable&amp;lt;IShape&amp;gt;)&lt;/p&gt;&lt;p&gt;Contra-Variance: General to specific - used when sending in (IComparer&amp;lt;IShape&amp;gt; used as IComparer&amp;lt;Circle&amp;gt;)&lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;Dynamic typing (implemented as a library on top of CLR)&lt;/dt&gt;&lt;dd&gt;Variables can be statically typed as 'dynamic' and then have properties added using dot syntax&lt;/dd&gt;&lt;dt&gt;Better COM interop&lt;/dt&gt;&lt;dd&gt;The combination of named optional parameters and dynamic objects makes COM a lot less painful.&lt;/dd&gt;&lt;/dl&gt;
                    Jon has also made his code available on his &lt;a rel="nofollow" target="_blank" href="http://csharpindepth.com/Talks.aspx"&gt;C# in Depth site&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;C# 4&lt;/td&gt;&lt;/tr&gt;&lt;tr class="grok"&gt;&lt;td&gt;Lunch Time&lt;/td&gt;&lt;td rowspan="2"&gt;
                The Grok talks this year seemed a far bigger deal (with a large room and a lot of attendees).  Some good tidbits
                included a demo of using T4 templates to generate code/sql/xaml in visual studio from Rob Blackmore and a run through
                of CodeRush Xpress by Rory Becker.
                &lt;/td&gt;&lt;/tr&gt;&lt;tr class="grok"&gt;&lt;td class="sub"&gt;Grok Talks&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Simon Sabin (SQL Server Consultant)&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;p&gt;As with most developers I have been concerned by the use of ORM's such as Linq2Sql and EF 
                    in terms of the 'auto generated' sql that they produce.  Simon allayed some of those concerns by running a number of test queries,
                    using instrumentation such as 'SET STATISTICS TIME ON' to compare the differing sql between manually and EF created, with mostly good results.
                    There were a few specific examples of weakness in EF1 however the speed of application construction must be balanced against the speed
                    of direct ADO.NET queries (which vastly outperformed the ORM queries - with no overhead for mapping etc).&lt;/p&gt;&lt;p&gt;A couple of important things to remember are that when you construct a sql statement you are asking SQL Server for the result
                    not telling it exactly what to run and it will often reorgnise queries before execution.  Additionally the old argument between stored 
                    procedures and text queries was touched upon with the only benefits really being the amount of text over the network and the security
                    issues of allowing direct modification of tables.  Performance is not an issue as compiled plans of text queries are cached in SQL.&lt;/p&gt;&lt;p&gt;The underlying theme was to check your queries using tools such as &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/ms187929.aspx"&gt;SQL Server Profiler&lt;/a&gt;
                    in order to hone your query performance (whether it be through direct SQL, EF, Linq2Sql, nHibernate..).&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Entity Framework - How to stop your DBA from having a heart attack&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Barry Dorrans (Soon to be Microsoft)&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;p&gt;As Barry is soon to be moving to Microsoft in the states his talk was somewhat hijacked by the DDD team with various
                    videos leading to a rather jovial atmosphere for the final talk of the day.&lt;/p&gt;&lt;p&gt;The content itself was very factual rather than contextualised to the day to day in the sense that the presentation did not really go
                    in to real world examples, prefering instead to describe the variety of encryption/hashing options available to developers.
                    &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Hashing: One way reducing (∴ collisions are possible) algorithm used for passwords/checksums (MD5 and SHA1 to be avoided)
                            &lt;ul&gt;&lt;li&gt;Always salt a hash (include a random piece of data in the plain text before hashing) to avoid dictionary attacks&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Symmetric Encyption - uses a single key for encrypt/decrypt (Rijndael is most used algorithm)&lt;/li&gt;&lt;li&gt;Asymmetric Encryption - uses public/private key but is computationally expensive so often used only initially to transfer/protect a symmetric key&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;&lt;a rel="nofollow" target="_blank" href="http://idunno.org/archive/2010/01/30/a-developers-guide-to-encryption.aspx"&gt;A developers guide to encryption&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Overall some excellent content with useful take aways.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>.NET Dev 101 (part 2)</title>
            <link>http://cargowire.net/articles/dotnetdev102</link>
            <description>A follow-up to my .NET Dev 101 rant from early 2009. Aimed at beginner to intermediate .NET devs.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/dotnetdev102</guid>
            <pubDate>Thu, 28 Jan 2010 23:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
                    Some time ago I blogged about &lt;a rel="nofollow" title="Cargowire on .NET dev 'things you should know'"&gt;a number of areas of the .NET Framework&lt;/a&gt;
                    that people really should be both aware of and actively using.  This was driven by working on existing codebases that
                    appeared to show a lack of knowledge of some fundamental aspects of the framework and associated languages.
                &lt;/p&gt;&lt;p&gt;This time around the points aren't necessarily as small and 'obvious' as the items in the original list.  However they are powerful
                aspects of C# or VB.NET that are useful to know as a beginner and can even seem to slip people by who have been working with .NET for
                some time.&lt;/p&gt;&lt;h3 id="title_extensionmethods"&gt;1) Extension Methods&lt;/h3&gt;&lt;p&gt;An early, obvious one, Extension methods have been available in the .NET framework for 
				&lt;a rel="nofollow" target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx" title="Extension method 'announcement' on Scott Gu's blog 2007"&gt;a while now&lt;/a&gt;.
                Essentially they can be used in place of a static method that performs some action on it's first parameter - using
                additional parameters if necessary.&lt;/p&gt;&lt;p&gt;After creation and referencing they manifest to the developer as instance methods on the type being 'extended' with full intellisense
                support (this syntactic sugar is actually just the same as a static call behind the scenes).&lt;/p&gt;&lt;h4&gt;An Extension Method Example&lt;/h4&gt;&lt;code&gt;
                public static class StringExtensions
                {
                    // Notice the 'this' keyword before the first parameter to signify that this
                    // is an extension method for string
                    public static int ToInt(this string @string, int defaultValue)
                    {
                        int value;
                        return int.TryParse(@string, out value) ? value : defaultValue;
                    }
                    public static int? ToNullableInt(this string @string, int? defaultValue)
                    {
                        int value;
                        return int.TryParse(@string, out value) ? value : defaultValue;
                    }
                }
                // Call style
                string a = "5";
                int? b = a.ToNullableInt(null); // 'this' parameter is omitted
                &lt;/code&gt;&lt;p&gt;There has been a lot of discussion surrounding the acceptable usage of extension methods (which many people regard as a &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Code_smell"&gt;code smell&lt;/a&gt; outside
                of linq).  However, outside of fluent interfaces, they can be extremely useful at simply removing repetition.  In the example above we can see how the minor process of parsing a
                string into an integer can be extracted away from wherever it is needed in the codebase into an extension method for string. This then allows
                the logic of an application to be more concise as the non-business logic related/mundane tasks are hidden away.&lt;/p&gt;&lt;p&gt;The key difference for me, with these small applications of extension methods, is that they are not used in areas where the functionality 
                could possibly be swapped out in the future.  In these cases a more Object Oriented Polymorphic approach would be favoured.&lt;/p&gt;&lt;h3 id="title_buildtotheframework"&gt;2) Build with the framework in mind&lt;/h3&gt;&lt;p&gt;Some time ago, when I wrote about &lt;a rel="nofollow"&gt;Date Formatting in XML/XSLT&lt;/a&gt; I made reference to the following sanity check
                before embarking on any coding endeavour: &lt;/p&gt;&lt;blockquote&gt;Does this new piece of functionality fit within the framework somewhere already?&lt;/blockquote&gt;&lt;p&gt;The reasoning behind this is both an issue of maintenance and expectation.  If a project closely works alongside the extensibility points
                of the framework new developers can have an expectation that logic is implemented in a way that fits with their pre-existing
                knowledge.  This includes general &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/czefa0ke%28VS.71%29.aspx"&gt;library design&lt;/a&gt;
                as well as how new functionality is created.&lt;/p&gt;&lt;h4&gt;A specific example&lt;/h4&gt;&lt;code&gt;
                    string.Format(new BritishDateTimeFormatter(), "{0:ddx}", dt);
                &lt;/code&gt;&lt;p&gt;The &lt;a rel="nofollow"&gt;British date formatting example&lt;/a&gt; shows an implementation of an IFormatProvider, ICustomFormatter
                to add british suffix ('th', 'st', 'rd') formatting to dates using the 'x' character.  The issue here is that any object could have been custom made to provide methods for british date
                formatting.  However by implementing a pre-existing interface (IFormatProvider) the code can be used with the string.format method and can be reused by any
				other library that has decided to use the 'built in' IFormatProvider.&lt;/p&gt;&lt;p&gt;Many similar interfaces exist (IConvertible, IComparable, IFormattable, IEquatable etc) as well as the provider model for things
                like membership etc.  The point is to look for these 'fits' within the framework before just starting from scratch.&lt;/p&gt;&lt;h3 id="title_customoperators"&gt;3) Custom operators&lt;/h3&gt;&lt;p&gt;To continue the idea of building to the framework rather than just with it lets take a look at a quick example of overloading operators.  The
                general pattern is that you implement a static method within a Type definition that uses the 'operator' keyword and symbol/TypeName to identify itself
                as an implementation of an operator.&lt;/p&gt;&lt;p&gt;This allows the specification of what happens when you do MyCustomTypeInstance + MyCustomTypeInstance or (MyCustomTypeInstance)myStringValue.
                Available operators include ++, --, !, +, -, *, /, %, ==, !=, &amp;gt;, &amp;lt;, &amp;amp;, |, ^, &amp;lt;&amp;lt;, &amp;gt;&amp;gt;, &amp;gt;=, and &amp;lt;= as well as conversions
                between types.&lt;/p&gt;&lt;h4&gt;Examples&lt;/h4&gt;&lt;p&gt;One of the canonical example's of this for me is the 'Cycle' example as discussed by some of the Microsoft Literature whereby the + operator is
                overloaded for a custom Cycle type.  This allows the Cycle to control addition to an inner integer value and cycle back to the beginning of a range
                when it is added to e.g. a Cycle is created with min 1 and max 5. When 1 is added to a cycle with value 5 the value becomes 1 instead of 6.&lt;/p&gt;&lt;p&gt;Another example below shows how custom conversion can also be implemented as operators on a class:&lt;/p&gt;&lt;code&gt;
                public MyClass {
                    ...
                    public static implicit operator int(MyClass arg)
                    {
                       return arg.Id;
                    }
                }
                // Calling example
                MyClass myClassInstance = new myClassInstance(5);
                int i = myClassInstance;
                &lt;/code&gt;&lt;p&gt;In this case an integer can be set directly from the custom instance (which could be a value that is calculated or even
                private and not exposed in any other way).&lt;/p&gt;&lt;p&gt;This kinda of approach can be very powerful. However the decision to use them should take into account the slightly hidden
                nature of them.  For example you could override the cast to boolean operator to do validation, but doing so strips you of the
                ability to expose a clearly named 'Validate' method (or you end up doing both leading to inconsistent usage of the two in
                consuming libraries).&lt;/p&gt;&lt;h3 id="title_httpmodule"&gt;4) IHttpModule&lt;/h3&gt;&lt;p&gt;As developers of .NET web applications we often find ourselves using the Global.asax file to specify actions to undertake on particular events.  The only 
				issue here is that to reuse this functionality you need to merge pre-existing global.asax files between projects.  Additionally they are not particularly well
				defined.  That is to say, that you can't look at the name of it and get a feel for what it does.  However, if we use implementations of IHttpModule
				instead, they can be encapsulated.  For example you might have an AuthenticationModule or an ErrorModule as below:&lt;/p&gt;&lt;h4&gt;Example - Error Handling&lt;/h4&gt;&lt;p /&gt;&lt;code&gt;
                public class ErrorModule : IHttpModule
                {
                    ...
                    public void Init(HttpApplication application)
                    {
                        application.Error += new EventHandler(Application_Error);
                    }

                    public void Application_Error(object sender, EventArgs e)
                    {
                        ...
                        logger.LogError(string.format("Unhandled exception: {0}", exception));
                    }
                }
                &lt;/code&gt;&lt;code&gt;
                    &amp;lt;!-- Web.config extract --&amp;gt;
                    &amp;lt;system.webServer&amp;gt;
                        &amp;lt;add name="ErrorModule" type="Cargowire.Common.Web.ErrorModule, Cargowire.Common.Web" /&amp;gt;
                    &amp;lt;/modules&amp;gt;
                &lt;/code&gt;&lt;p&gt;As you can see the Application_Error event usually found in global.asax is part of the IHttpModule specification
                allowing multiple different event handlers to listen for the same events rather than clogging the global.asax with
                disperate concerns.&lt;/p&gt;&lt;h3 id="title_httphandler"&gt;5) IHttpHandler&lt;/h3&gt;&lt;p&gt;When a url is requested the code that handles generating a response is an HttpHandler (System.Web.StaticFileHandler, System.Web.Mvc.MvcHandler etc).
				Custom handlers can also be created, implementing IHttpHandler and registered in the web.config they can respond to requests to a specified path. They are
				particularly useful when no real response is required or if the response is plain text, with that added benefit that they incur far less setup (in terms of wiring
				of post back, session etc that happens on normal page loads).&lt;/p&gt;&lt;h3&gt;Example - Session Heartbeat&lt;/h3&gt;&lt;p&gt;A common problem encountered in systems with prolonged data entry is the possibility that the session times out between edits.
				To keep a session alive some simple javascript can be written to poll the server to keep alive the user session.  There is no
				real response needed and definitely no need for a full page request process to begin...&lt;/p&gt;&lt;code&gt;
				/// The IRequiresSessionState does nothing but mark this handler as requiring the Session
				/// context to be available to the handler. This can be omitted if session is not required
                public class Heartbeat : IHttpHandler, IRequiresSessionState
                {
                    public readonly bool IsReusable() {
                        get { return false; }
                    }
                                       
                    public void ProcessRequest(HttpContext context)
                        context.Response.ContentType = "text/plain"
                        context.Session("keepalive") = DateTime.Now.Ticks
                        context.Response.Write(context.Session("keepalive"))
                    }
                }
                &lt;/code&gt;&lt;p&gt;The above can be implemented as a code file and then registered in the web.config or as a .ashx file in your web project.&lt;/p&gt;&lt;p&gt;Another recent example where using an IHttpHandler can make sense is as a responder to an AJAX auto-complete script.  There
                is no need for session, no full page output, no separate use case, the functionality only exists for javascript to call it and receive a
                json object containing suggestions for the input field.
                So there is no need to implement this as a complete page or controller/view - Instead just a light weight handler.&lt;/p&gt;&lt;h3 id="title_beforeyouleave"&gt;Before you leave&lt;/h3&gt;&lt;p&gt;It's important to note these lists aren't meant as a teaching aide for learning .NET from scratch 
                nor does usage of any of the above immediately make you a better programmer.  Extensive knowledge
                of a language and framework is &lt;em&gt;beneficial&lt;/em&gt; but not without a grounding in how to utilise it effectively
                and in a considerate manner as regards maintainability, reuse and handover to new devs.&lt;/p&gt;&lt;p&gt;Hopefully this list has highlighted some areas for further reading. More info can be found through a plethora 
                of resources including those mentionned in my &lt;a rel="nofollow"&gt;'useful for a .NET dev'&lt;/a&gt; post.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>XSL for Designers?</title>
            <link>http://cargowire.net/articles/xslfordesigners</link>
            <description>An intro to XSL using CSS as a basis for comparison. Applicable to designers and developers alike.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/xslfordesigners</guid>
            <pubDate>Wed, 20 Jan 2010 23:30:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
                At Headscape we use our own in house CMS.  This technology is based on
                XML and XSLT 
                with the XSL layer usually under the purview of the development team...&lt;/p&gt;&lt;p&gt;There is however, no reason why a proficient CSS user can't take advantage of, and work with XSLT.  In fact, if the XSL is written in
                a more &lt;a rel="nofollow" href="#declarativevsprocedural"&gt;declarative, rather than procedural&lt;/a&gt; manner it can be very similar to working with CSS to style HTML.
                &lt;/p&gt;&lt;h3 id="title_whyxsl"&gt;Why Xsl?&lt;/h3&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.w3.org/Style/XSL/" title="W3 XSL"&gt;XSL&lt;/a&gt; is a stylesheet language that can be used to 'transform' (the 'T' in XSL&lt;strong&gt;T&lt;/strong&gt;) XML
                    into some other output. I can go from:&lt;/p&gt;&lt;code&gt;
                    &amp;lt;item&amp;gt;
                        &amp;lt;name nick="Craig"&amp;gt;Craig Rowe&amp;lt;/name&amp;gt;
                        &amp;lt;company&amp;gt;Headscape&amp;lt;/company&amp;gt;
                        &amp;lt;group&amp;gt;colleague&amp;lt;/group&amp;gt;
                    &amp;lt;/item&amp;gt;
                &lt;/code&gt;&lt;p&gt;to:&lt;/p&gt;&lt;code&gt;
                    &amp;lt;h3&amp;gt;Contacts&amp;lt;/h3&amp;gt;
                    &amp;lt;p class="colleague"&amp;gt;
                        &amp;lt;strong&amp;gt;Craig Rowe&amp;lt;/strong&amp;gt; (Craig) from Headscape
                    &amp;lt;/p&amp;gt;
                &lt;/code&gt;&lt;p&gt;Although the transformation is from one text ouput to another we can see the similarities to applying CSS to HTML.  With CSS the HTML starts off in one form,
                default browser styling renders it in a particular way (with fonts, padding, positioning), user CSS is then applied turning it into a slightly different
                visual output (different fonts, padding, positioning etc). In the XSL example above the only difference is that the final outcome is another type of text output
                rather than a graphical display.&lt;/p&gt;&lt;p&gt;In terms of the process we can imagine:&lt;/p&gt;&lt;p class="callout"&gt;&lt;strong&gt;Backend Coder&lt;/strong&gt; → generates → &lt;strong&gt;XML&lt;/strong&gt; → transformed by → &lt;strong&gt;XSL&lt;/strong&gt; → into → &lt;strong&gt;XHTML&lt;/strong&gt; → styled by → &lt;strong&gt;CSS&lt;/strong&gt; → ending in a → &lt;strong&gt;Beautifully designed website&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The neat separation between content and presentation is immediately clear.  If the 'engine' of an application created, used
                and output XML, then XSLT could be used to create any output without the need to modify a line of code. In fact
                this is how cargowire is created (as I've pointed to briefly before &lt;a rel="nofollow" target="_blank" href="http://cargowire.net/blog/rss"&gt;here&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://cargowire.net/blog/thebarn"&gt;here&lt;/a&gt;).
                Multiple outputs are provided purely by leveraging XML and XSLT.&lt;/p&gt;&lt;p&gt;XSL, as a templating engine, is also backend language agnostic.  That is to say I could go from running my site
                on .NET to running my site on PHP or Ruby but maintain the same XSL as long as I could generate the same semantic XML.&lt;/p&gt;&lt;p&gt;There are other benefits too... Many web APIs &lt;a rel="nofollow" title="Cargowire article on using Yahoo pipes to access external feed content"&gt;provide XML or RSS based outputs&lt;/a&gt;.
                 Both of which can be transformed into HTML using XSL.&lt;/p&gt;&lt;p&gt;And it's not just &lt;a rel="nofollow" target="_blank" href="http://www.headscape.co.uk" title="Headscape"&gt;us&lt;/a&gt; that use XSL.  For example, &lt;a rel="nofollow" target="_blank" href="http://www.symphony-cms.com" title="Homepage of Symphony CMS a PHP/XSL based CMS"&gt;Symphony CMS&lt;/a&gt;
                    is a PHP based CMS solution that leverages XSL as its templating engine.&lt;/p&gt;&lt;h3 id="title_cssandxsl"&gt;Similarities to CSS&lt;/h3&gt;&lt;p&gt;Both CSS and XSL are tasked with selecting particular elements within a document and applying some kind of property or change to them.  Let's compare
                the differing selection syntax.  The following are equivalent:&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan="2"&gt;CSS Selectors&lt;/th&gt;&lt;th&gt;XSL Selectors (known as '&lt;a rel="nofollow" target="_blank" href="http://www.w3schools.com/XPath/default.asp" title="w3schools XPath homepage"&gt;XPath&lt;/a&gt;')&lt;/th&gt;&lt;th&gt;Plain English&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;div#content p.intro&lt;/td&gt;&lt;td&gt;//div[@id='content']//p[@class='intro']&lt;/td&gt;&lt;td&gt;p with class 'intro' inside div with id 'content'&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;#container thead th&lt;/td&gt;&lt;td&gt;//*[@id='container']//thead//th&lt;/td&gt;&lt;td&gt;th inside thead inside any element with id 'container'&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;#content h3&lt;/td&gt;&lt;td&gt;//*[@id='content']//h3&lt;/td&gt;&lt;td&gt;h3 inside any element with id 'content'&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;#content &amp;gt; h3&lt;/td&gt;&lt;td&gt;//*[@id='content']/h3&lt;/td&gt;&lt;td&gt;h3 as direct child of element with id 'content'&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;#content, .content&lt;/td&gt;&lt;td&gt;//*[@id='content'] | //*[@class='content']&lt;/td&gt;&lt;td&gt;Any element with id 'content' or class 'content'&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;ul.inline li:last-child&lt;/td&gt;&lt;td&gt;//ul[@class='inline']/li[position()=last()]]&lt;/td&gt;&lt;td&gt;The last li inside a ul with class 'inline'&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td &gt;&lt;td&gt;//a/@href&lt;/td&gt;&lt;td&gt;Select the href attribute of all anchor elements&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td &gt;&lt;td&gt;.&lt;/td&gt;&lt;td&gt;The current context node&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;tfoot&gt;&lt;tr&gt;&lt;td colspan="4"&gt;&lt;/tr&gt;&lt;/tfoot&gt;&lt;/table&gt;&lt;p class="caption"&gt;Some of the syntax will be familiar to experienced CSS users. For example a[rel=external] is a CSS rule that is almost identical in XPath 
                //a[@rel='external'].  The key differences to be aware of are as follows:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;There is no shorthand for the id or class of an element in xsl, they are merely attributes that need to be specified in square brackets.&lt;/li&gt;&lt;li&gt;The separator between sections of a css rule is usually a space or class/id shorthand. In XPath it is a / (direct child) or double // (any descendant)&lt;/li&gt;&lt;li&gt;The element type is required (note the use of * in rules 2-5 instead of merely starting with [@id=content])&lt;/li&gt;&lt;li&gt;The / or // separators are also required at the beginning of an XPath statement unless the statement is intended to start from the &lt;a rel="nofollow" href="#xslcontext" title="Brief explanation of 'current context' in xsl"&gt;current context&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Comma separating CSS selectors essentially means 'this or that'.  With XPath this is represented by the pipe character | (rule 5).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you want to test out these XPath selectors try the Firefox &lt;a rel="nofollow" target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/1192" title="XPather Firefox plugin download page"&gt;XPather plugin&lt;/a&gt;
                which allows you to type XPath selectors in a console window and see what results are returned from your html.&lt;/p&gt;&lt;img alt="The XPather plugin window" class="featured"/&gt;&lt;h3 id="title_xslsyntax"&gt;An XSL Stylesheet&lt;/h3&gt;&lt;p&gt;The template below could be used to transform the &lt;a rel="nofollow" href="#title_whyxsl"&gt;example data above&lt;/a&gt;.  Do not be put off, it is very HTML esque with some opening tags
                at the top and a few document type declarations like xml version and output method, with the real meat in the centre.&lt;/p&gt;&lt;code&gt;
                    &amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
                    &amp;lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&amp;gt;
                        &amp;lt;xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /&amp;gt;

                        &amp;lt;xsl:template match="/"&amp;gt;&amp;lt;!-- Will match the root of the document and therefore run first --&amp;gt;
                            &amp;lt;xsl:call-template name="contacts" /&amp;gt;&amp;lt;!-- Calls a template to run by name --&amp;gt;
                        &amp;lt;/xsl:template&amp;gt;
                        
                        &amp;lt;!-- A named template --&amp;gt;
                        &amp;lt;xsl:template name="contacts"&amp;gt;
                            &amp;lt;h3&amp;gt;Contacts&amp;lt;/h3&amp;gt;     
                                                  
                            &amp;lt;xsl:apply-templates select="//item" /&amp;gt;&amp;lt;!-- Apply all rules/templates that match the selector --&amp;gt;
                            
                        &amp;lt;/xsl:template&amp;gt;
                        
                        &amp;lt;!-- A match/rule based template --&amp;gt;
                        &amp;lt;xsl:template match="//item"&amp;gt;
                            &amp;lt;p&amp;gt;&amp;lt;!-- Attributes can be added as below or using curly brace shorthand e.g. class="{group}" --&amp;gt;
                                &amp;lt;xsl:attribute name="class"&amp;gt;
                                    &amp;lt;xsl:value-of select="group"/&amp;gt;
                                &amp;lt;/xsl:attribute&amp;gt;
                                &amp;lt;strong&amp;gt;
                                    &amp;lt;xsl:value-of select="name"/&amp;gt;
                                &amp;lt;/strong&amp;gt;
                                &amp;lt;xsl:text&amp;gt; (&amp;lt;/xsl:text&amp;gt;
                                    &amp;lt;xsl:value-of select="name/@nick"/&amp;gt;
                                &amp;lt;xsl:text&amp;gt;) from &amp;lt;/xsl:text&amp;gt;&amp;lt;xsl:value-of select="company"/&amp;gt;
                            &amp;lt;/p&amp;gt;
                        &amp;lt;/xsl:template&amp;gt;
                        
                    &amp;lt;/xsl:stylesheet&amp;gt;
                &lt;/code&gt;&lt;p&gt;Like HTML, XSL files start and end with an angled bracket element (&amp;lt;xsl:stylesheet&amp;gt;) and can contain any number of templates, which themselves will
                contain any number of statements including plain text output. Any &amp;lt;xsl:...&amp;gt; tags are part of the stylesheet and not output.  Any other elements, such
                as the H3 seen above, will be output as is.&lt;/p&gt;&lt;h4&gt;How it works&lt;/h4&gt;&lt;p&gt;When this template is applied to XML the following will happen:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;A template that matches the root element is looked for and run&lt;/li&gt;&lt;li&gt;The root template has only one instruction, to call the 'contacts' template&lt;/li&gt;&lt;li&gt;The contacts template will start by outputing an H3 for the 'Contacts' header&lt;/li&gt;&lt;li&gt;The contacts template then tells the XSL processor to apply any templates that match the specified selector.  In this case 'any element named item'&lt;/li&gt;&lt;li&gt;The template that matches this selector is called for each 'item' element in the xml (in this case there is only one)&lt;/li&gt;&lt;li&gt;&lt;span&gt;Inside the item template (where the current context is the item node itself - so the selectors do not start with a slash)&lt;/span&gt;&lt;ul&gt;&lt;li&gt;The p element is output with an attribute named class set to the value of the 'group' node&lt;/li&gt;&lt;li&gt;A 'strong' element is output with the contents of the 'name' node inside it.&lt;/li&gt;&lt;li&gt;This is followed by the plain text backet before outputting the value of the name
                            elements nick attribute, some more text and finally the company node contents.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;As mentioned earlier and &lt;a rel="nofollow" href="#declarativevsprocedural"&gt;discussed in the notes below&lt;/a&gt; XSL stylesheets can have a distinctly procedural
                feel to them or a more declarative. In the template above we get a flavour of both.  The more procedural style occurs where a template is called
                by name (line 6) - akin to a javascript method being called that document.write()'s.  The more declarative style can be seen where templates are set up to 'match'
                a selector statement (line 13 and 18) with apply-templates being called to tell the xsl processor to match those rules.&lt;/p&gt;&lt;h3 id="title_xsltryityourself"&gt;How can I try it myself?&lt;/h3&gt;&lt;p&gt;As a developer I mainly use XSLT from within a backend language (in my case, .NET which supports XSL 1.0) however many browsers are also
                XML/XSL aware so it is quite easy to test locally without any backend code knowledge simply by adding the reference to the stylesheet in the xml itself.&lt;/p&gt;&lt;code&gt;
                    &amp;lt;?xml-stylesheet type="text/xsl" href="items.xsl"?&amp;gt;
                &lt;/code&gt;&lt;p&gt;For an example of this please see &lt;a rel="nofollow"&gt;items.xml&lt;/a&gt; and &lt;a rel="nofollow"&gt;items.xsl&lt;/a&gt; (using view source
                to see the xml and xslt that is used).  If you are using an XSL aware browser when you hit items.xml you should see the transformed html (which can be seen
                in firebug - view source will show the raw xml).&lt;/p&gt;&lt;p&gt;Using this technique the template generation can be done locally with example XML data before the intended application is even written. This can be used
                in conjunction with XPather for debugging.&lt;/p&gt;&lt;h3 id="title_xsloncargowire"&gt;Example from Cargowire&lt;/h3&gt;&lt;p&gt;A more elaborate example can be garned from Cargowire itself.  Last week I wrote about how &lt;a rel="nofollow"&gt;Yahoo Pipes can be used to create an aggregate and filtered RSS feed&lt;/a&gt;.  The output was 
                &lt;a rel="nofollow" target="_blank" href="http://pipes.yahoo.com/cargowire/paginatedbarn?_render=rss&amp;amp;from=2&amp;amp;limit=20"&gt;a feed for the Headscape bloggers&lt;/a&gt;.
                On it's own this is useful for subscriptions however with XSLT we are able to &lt;a rel="nofollow" title="Headscape bloggers feed presented within cargowire.net"&gt;present the content in an entirely different way&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The data source is standard RSS which we know is XML and can be transformed as such. A trimmed down version of the XSL for &lt;a rel="nofollow"&gt;the barn
                page&lt;/a&gt; can be seen below.  This transform occurs on the server side after code has retrieved the feed from Yahoo and before it sends a response to the user.&lt;/p&gt;&lt;code&gt;
                    &amp;lt;xsl:template match="//page/*/*/channel"&amp;gt;
                        &amp;lt;!-- Assumes a root matching template somewhere else in the XSL as well as the 
                        definition of the gravatar template and $formatstring variable --&amp;gt;
                      &amp;lt;p&amp;gt;This is simply a combined feed from &amp;lt;a href="http://www.boagworld.com" title="boagworld.com"&amp;gt;Paul&amp;lt;/a&amp;gt;, &amp;lt;a href="http://www.edmerritt.com" title="edmerritt.com"&amp;gt;Ed&amp;lt;/a&amp;gt;, &amp;lt;a href="http://www.davemcdermid.co.uk" title="davemcdermid.co.uk"&amp;gt;Dave&amp;lt;/a&amp;gt;, &amp;lt;a href="http://www.robborley.com" title="robborley.com"&amp;gt;Rob&amp;lt;/a&amp;gt; and &amp;lt;a href="/about#stalk"&amp;gt;Myself&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
                      
                        &amp;lt;div id="publicationLinks"&amp;gt;
                          &amp;lt;dl id="publication"&amp;gt;
                            &amp;lt;xsl:for-each select="item"&amp;gt;
                                &amp;lt;dt&amp;gt;
                                  &amp;lt;h3&amp;gt;
                                    &amp;lt;xsl:choose&amp;gt;
                                      &amp;lt;xsl:when test="string-length(link) &amp;gt; 0"&amp;gt;
                                        &amp;lt;a href="{link}"&amp;gt;
                                          &amp;lt;!-- if this is an external link mark it as so --&amp;gt;
                                          &amp;lt;xsl:if test="not(starts-with(link, 'http://cargowire'))"&amp;gt;
                                            &amp;lt;xsl:attribute name="rel"&amp;gt;external&amp;lt;/xsl:attribute&amp;gt;
                                          &amp;lt;/xsl:if&amp;gt;
                                          &amp;lt;xsl:value-of select="title" /&amp;gt;
                                        &amp;lt;/a&amp;gt;
                                      &amp;lt;/xsl:when&amp;gt;
                                      &amp;lt;xsl:otherwise&amp;gt;
                                        &amp;lt;xsl:value-of select="title" /&amp;gt;
                                      &amp;lt;/xsl:otherwise&amp;gt;
                                    &amp;lt;/xsl:choose&amp;gt;
                                    &amp;lt;!-- A call to a template to output the avatar image --&amp;gt;
                                    &amp;lt;xsl:call-template name="Gravatar"/&amp;gt;
                                  &amp;lt;/h3&amp;gt;
                                &amp;lt;/dt&amp;gt;
                                &amp;lt;dd&amp;gt;
                                  &amp;lt;!-- call into some code to format the date after creating a variable --&amp;gt;
                                  &amp;lt;xsl:variable name="datetimestampformat"&amp;gt;
                                    &amp;lt;xsl:text&amp;gt;yyyy-MM-ddTHH:mm:ss+00:00&amp;lt;/xsl:text&amp;gt;
                                  &amp;lt;/xsl:variable&amp;gt;
                                  &amp;lt;!-- use curly brace shorthand to use xsl/xpath to set an attribute value --&amp;gt;
                                  &amp;lt;p class="published" title="{date:FormatDate(string(pubDate), $datetimestampformat)}"&amp;gt;
                                    &amp;lt;xsl:value-of select="date:FormatDate(string(pubDate),$formatString)" /&amp;gt;
                                  &amp;lt;/p&amp;gt;
                                  &amp;lt;p class="abstract"&amp;gt;
                                    &amp;lt;!-- Disable output escaping will maintain html tags in the output --&amp;gt;
                                    &amp;lt;xsl:value-of select="description" disable-output-escaping="yes" /&amp;gt;
                                  &amp;lt;/p&amp;gt;
                                  &amp;lt;xsl:if test="string-length(link) &amp;gt; 0"&amp;gt;
                                    &amp;lt;a href="{link}" class="moreLink"&amp;gt;
                                      &amp;lt;xsl:if test="not(starts-with(link, 'http://cargowire'))"&amp;gt;
                                        &amp;lt;xsl:attribute name="rel"&amp;gt;external&amp;lt;/xsl:attribute&amp;gt;
                                      &amp;lt;/xsl:if&amp;gt;
                                      &amp;lt;xsl:text&amp;gt;Read More...&amp;lt;/xsl:text&amp;gt;
                                    &amp;lt;/a&amp;gt;
                                  &amp;lt;/xsl:if&amp;gt;
                                &amp;lt;/dd&amp;gt;
                            &amp;lt;/xsl:for-each&amp;gt;
                          &amp;lt;/dl&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/xsl:template&amp;gt;
                &lt;/code&gt;&lt;p&gt;In the above stylesheet snippet we can see a template that matches the RSS channel element then loops through the items
                to produce an HTML based listing of the feed contents.  Relatively self-describing constructs such as 'choose' and 'if' are used
                and so too are a couple of extras such as the &lt;a rel="nofollow"&gt;call out to an external code object to format dates&lt;/a&gt;
                on line 33 and the use of not() and starts-with() on line 42.  A variable is also defined on line 29 before being used on line 33.&lt;/p&gt;&lt;p&gt;If you want to find out more a good quick reference/start point for xslt 1.0 xpath and functions is 
                provided by &lt;a rel="nofollow" target="_blank" href="http://www.cheat-sheets.org/saved-copy/XSLT_1quickref-v2.pdf"&gt;Mulberry Technologies&lt;/a&gt;.&lt;/p&gt;&lt;h3 id="title_conclusion"&gt;Final Points&lt;/h3&gt;&lt;p&gt;This article aimed to give you a taste of XSL and how it is used.  As such we have kept to quite minimal templates and selectors however these core aspects of XSL
                should allow you to view and make ammendments to XSL templates without too much trouble. By using tools such as XPather and XSL in the browser you should be
                well equipped to make changes to and understand many XSL templates created by backend developers.  It's also important to remember that although this example
                has discussed tranforming to HTML the output from XSL could just have equally been json, rss or even plain text.&lt;/p&gt;&lt;p&gt;The final example from Cargowire aims to illustrate a practical example and as such contains some more complicated functionality that is not fully described in
                this article. However if you are comfortable with HTML, CSS and perhaps a little javascript it should be relatively easy to follow.&lt;/p&gt;&lt;p&gt;&lt;a rel="nofollow"&gt;Let me know your thoughts&lt;/a&gt;&lt;/p&gt;&lt;hr class="sectionbreak"/&gt;&lt;h2 id="xslcontext"&gt;Appendix A: Current Context in XSL&lt;/h2&gt;&lt;p&gt;In XPath there are three main ways to start a selector:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;/elementName - Finds the root element named elementName (in html only /html would match)&lt;/li&gt;&lt;li&gt;//elementName - Finds any instance of elementName in the entire XML document&lt;/li&gt;&lt;li&gt;elementName - Finds any instance of elementName as a direct child of the current context&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In terms of the 'current context': If I was inside a template that had just matched 'item' an XPath of 'seconditem' would look for a direct child
                of the 'item' element that is named 'seconditem'.  It would not match all 'seconditem' instances in the entire xml document.&lt;/p&gt;&lt;p&gt;In terms of CSS this could be seen as
                a rule that only applies to elements inside another rule.  Or in jQuery a selector that runs from the 'this' context e.g jQuery('seconditem', this).&lt;/p&gt;&lt;a rel="nofollow" href="#title_cssandxsl"&gt;back&lt;/a&gt;&lt;span&gt; - &lt;/span&gt;&lt;a rel="nofollow"&gt;back to top&lt;/a&gt;&lt;hr class="sectionbreak"/&gt;&lt;h2 id="declarativevsprocedural"&gt;Appendix B: Declarative Vs Procedural XSL Stylesheets&lt;/h2&gt;&lt;p&gt;It is my experience that many backend developers who move in to using XSL are keen to maintain the traditional coding paradigm of one thing following another until
                   completion.  Taking this view with XSL can lead to single large primary templates with many conditionals, loops and calling of sub templates.&lt;/p&gt;&lt;p&gt;This can make XSL difficult to read, particularly to non-technical users.  However XSL is in its element when used declaratively.  Instead of attempting
                    to run down the XML as if parsing it in code simply define a number of rules that match the relevant parts and then apply those rules to the XML document (like CSS).&lt;/p&gt;&lt;p&gt;Lets look at a simple example comparison between two templates that do the same thing:&lt;/p&gt;&lt;code&gt;
                    &amp;lt;addressbook&amp;gt;
                        &amp;lt;name&amp;gt;Work&amp;lt;/name&amp;gt;
                        &amp;lt;items&amp;gt;
                            &amp;lt;item&amp;gt;
                                &amp;lt;name nick="Craig"&amp;gt;Craig Rowe&amp;lt;/name&amp;gt;
                                &amp;lt;company&amp;gt;Headscape&amp;lt;/company&amp;gt;
                            &amp;lt;/item&amp;gt;
                            &amp;lt;item&amp;gt;
                                &amp;lt;name nick="Craig"&amp;gt;Craig Rowe&amp;lt;/name&amp;gt;
                                &amp;lt;company&amp;gt;Headscape&amp;lt;/company&amp;gt;
                            &amp;lt;/item&amp;gt;
                        &amp;lt;/items&amp;gt;
                    &amp;lt;/addressbook&amp;gt;
                &lt;/code&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Procedural Style&lt;/th&gt;&lt;th&gt;Declarative Style&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;
                                    &amp;lt;xsl:templates match="/"&amp;gt;
                                        &amp;lt;h2&amp;gt;&amp;lt;xsl:value-of select="name"/&amp;gt;&amp;lt;/h2&amp;gt;
                                        
                                        &amp;lt;xsl:for-each select="items/item"&amp;gt;
                                            &amp;lt;h3&amp;gt;&amp;lt;xsl:value-of select="@nick" /&amp;gt;&amp;lt;/h3&amp;gt;
                                        &amp;lt;/xsl:for-each&amp;gt;
                                    &amp;lt;/xsl:template&amp;gt;
                                &lt;/code&gt;&lt;p&gt;This style has the look of javascript structure where loops and tests occur in sequence&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;
                                    &amp;lt;xsl:templates match="/"&amp;gt;
                                        &amp;lt;xsl:apply-templates select="items/name" /&amp;gt;
                                        &amp;lt;xsl:apply-templates select="items/item" /&amp;gt;
                                    &amp;lt;/xsl:template&amp;gt;
                                    
                                    &amp;lt;xsl:templates match="name"&amp;gt;
                                        &amp;lt;h2&amp;gt;&amp;lt;xsl:value-of select="."/&amp;gt;&amp;lt;/h2&amp;gt;
                                    &amp;lt;/xsl:templates&amp;gt;
                                    
                                    &amp;lt;xsl:template match="item"&amp;gt;
                                        &amp;lt;h3&amp;gt;&amp;lt;xsl:value-of select="@nick" /&amp;gt;&amp;lt;/h3&amp;gt;
                                    &amp;lt;/xsl:template&amp;gt;
                                &lt;/code&gt;&lt;p&gt;This style has the look of a CSS structure i.e. a list of rules that match selectors&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a rel="nofollow"&gt;back to top&lt;/a&gt;</content:encoded>
          </item>
          <item>
            <title>Paginate and filter with Yahoo Pipes</title>
            <link>http://cargowire.net/articles/playwithpipes</link>
            <description>An intro to how Yahoo pipes can be utilised to paginate, and filter multiple datasources into one
                feed.  Useful to delegate the hard work, leaving your code to handle just the desired content.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/playwithpipes</guid>
            <pubDate>Mon, 11 Jan 2010 23:50:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
                    Rapid &lt;a rel="nofollow" target="_blank" href="http://www.zeldman.com/2008/04/27/content-outsourcing-and-the-disappearing-personal-site/" title="Jeffrey Zeldman discussing the vanishing personal website"&gt;decentralisation of our personal content&lt;/a&gt; has led many
                    of &lt;a rel="nofollow" target="_blank" href="http://coffeepowered.co.uk/" title="Paul Stanton's minimal homepage with links to externally hosted content"&gt;us&lt;/a&gt; to have rather minimal
                    websites with the main content hosted on any number of a variety of web services. The homepage then acts as a hub, virtual business card or
                     &lt;a rel="nofollow" target="_blank" href="http://timvandamme.com/" title="Tim Van Damme's tiny homepage with links to external presences"&gt;placeholder&lt;/a&gt; instead.
                &lt;/p&gt;&lt;h3 id="title_halfwayhouse"&gt;The half way house&lt;/h3&gt;&lt;p&gt;The middle ground then, between the more 'old school' all-in-one personal site and the business card style, are hybrid sites
                where, although the content may be hosted externally, it is still pulled in to the hub for central display and branding.  This is 
                probably the first contact many of us developers/designers have with a new API - trying to access it and pull content in to our
                personal locations.  It can be seen in the large amount of twitter/brightkite/google maps 'badges' across our personal websites.&lt;/p&gt;&lt;p&gt;Indeed, on cargowire itself these three api's are used on top of connections to delicious (currently deactivated) and to a variety of RSS
                feeds for &lt;a rel="nofollow"&gt;the headscape barn&lt;/a&gt; article listings.&lt;/p&gt;&lt;h3 id="title_yahoostepsin"&gt;Yahoo YQL and Pipes&lt;/h3&gt;&lt;p&gt;The approach to site development described above can mean a large amount of research and development work for each new 'type' of thing you want to bring in to your
                site.  &lt;a rel="nofollow" target="_blank" href="http://developer.yahoo.com/yql/" title="Yahoo Query Language homepage"&gt;YQL&lt;/a&gt; is Yahoo's attempt at helping standardize this for us (something that you 
                will often find &lt;a rel="nofollow" target="_blank" href="http://developer.yahoo.com/yql/" title="Christian discussing the kind of 'building on the shoulders of giants approach' mentioned above"&gt;Christian Heilmann&lt;/a&gt;, one of Yahoo's
                Developer Evangelists, &lt;a rel="nofollow" target="_blank" href="http://www.vimeo.com/8075850" title="Christian demoing YQL to create a search mashup"&gt;talking about&lt;/a&gt;). However the focus of this
                article is on another of Yahoo's offerings - Yahoo Pipes.&lt;/p&gt;&lt;p&gt;Pipes has been around for a while now (since back in 2007) and provides a nice GUI interface for accessing and manipulating the kind of data you
                can use YQL to retrieve. After &lt;a rel="nofollow" target="_blank" href="http://pipes.yahoo.com/pipes/" title="Yahoo Pipes homepage"&gt;signing up&lt;/a&gt; you will be able
                to create, manage and publish your pipes. Taking advantage of the &lt;a rel="nofollow" target="_blank" href="http://pipes.yahoo.com/pipes/docs"&gt;documentation&lt;/a&gt; and
                examples provided.&lt;/p&gt;&lt;h3 id="title_thebrief"&gt;The brief&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;Flexible pulling in of external feed content - appropriately filtered and limited.&lt;/p&gt;&lt;p&gt;Consider the following example scenarios:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;You are sending requests for external content for inclusion on your webpage. Either:&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Clientside javascript sends an ajax request for content&lt;/li&gt;&lt;li&gt;The server itself is requesting and merging the response with other content before sending down to the client&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;You are creating an iPhone application that intends to display custom or aggregated feed contents.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;p&gt;Without direct control over the feed it can be difficult to retrieve exactly what you need.  This can then become an issue
                for the speed of your application.  If I'm on my phone and I want to see the most recent items on a feed I don't want to have to 
                download all 500 archive items before being presented with the top ten.&lt;/p&gt;&lt;h3 id="title_simplepipe"&gt;A simple aggregated Pipe&lt;/h3&gt;&lt;p&gt;Below is a screenshot of the yahoo pipes editor.  Using drag and drop alone you can select a number of modules from the left
                toolbar and position them on the canvas area as if sketching a flow chart. Dragging from the connector points allows the flow
                to be guided through to the pipe output.&lt;/p&gt;&lt;img class="featured" alt="Screenshot of the Pipes editor showing Cargowire and Boagworld feeds merged together"/&gt;&lt;p&gt;To create an aggregated pipe we use 3 types of module (in addition to the default 'pipe ouput' that comes with
                a new pipe).  &lt;a rel="nofollow" target="_blank" href="http://pipes.yahoo.com/pipes/docs?doc=sources#FetchFeed" title="Fetch Feed docs page"&gt;'Fetch Feed'&lt;/a&gt; modules
                are used with an accompanying URL to specify the feed content that you wish to pull in. The 
                &lt;a rel="nofollow" target="_blank" href="http://pipes.yahoo.com/pipes/docs?doc=operators#Union" title="Union docs page"&gt;'Union'&lt;/a&gt; module under 'Operators' is then
                used to merge the two feeds together. These all then feed into a simple 
                &lt;a rel="nofollow" target="_blank" href="http://pipes.yahoo.com/docs?doc=operators#Sort" title="Sort docs page"&gt;'Sort'&lt;/a&gt; module which allows you to specify a particular 
                field to sort by (multiple sort fields can be specified by using the 'add (+)' button on this module).&lt;/p&gt;&lt;h4 id="title_filtering"&gt;Filtering&lt;/h4&gt;&lt;p&gt;So now I have a combined feed of Cargowire and Boagworld.  However the Boagworld feed exposed from boagworld.com includes
                the podcast as well as blog posts...&lt;/p&gt;&lt;img class="featured" alt="Screenshot of the Pipes editor showing Boagworld feed filtered to exlude the podcast"/&gt;&lt;p&gt;To remove the items that I do not want I can use a &lt;a rel="nofollow" target="_blank" href="http://pipes.yahoo.com/pipes/docs?doc=operators#Filter" title="Filter docs page"&gt;'Filter'&lt;/a&gt;
                 module.  This type of module can act either as a whitelist or a blacklist by blocking or permitting based on a list of rules. 
                 Rules can use the following operators: contains, does not contain, Matches Regex, is greater than, is, is less than, is after, is before. In
                 the example above the items from the boagworld feed are blocked if the link contains the phrase '/podcast/'.
                &lt;/p&gt;&lt;h3 id="title_paginating"&gt;Paginating&lt;/h3&gt;&lt;p&gt;With the feeds combined and appropriately filtered my only concern now, in consuming code, is to avoid large datasets when
                all I want to do is peek at the top 10.&lt;/p&gt;&lt;p&gt;To do this, and to allow my consuming code to control pagination itself, I need to be able to send parameters with my request for the pipe.
                This can be done using the 'user inputs' modules (which could equally have been used with the 'filter' module above to provide
                dynamic filtering).&lt;/p&gt;&lt;p&gt;The screenshot below shows the flow of the pipe with this implemented. The following new modules are used:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Split - will provide two connector points from one&lt;/li&gt;&lt;li&gt;Count - will count the input items and output a number&lt;/li&gt;&lt;li&gt;Simple Math - can be used for simple arithmetic&lt;/li&gt;&lt;li&gt;Number Input - can be used to pull a number from the request querystring&lt;/li&gt;&lt;li&gt;Tail - takes a number and feed input and returns the items after the specified number position&lt;/li&gt;&lt;li&gt;Truncate - takes a number and feed input and returns the items up to the specified number position&lt;/li&gt;&lt;/ul&gt;&lt;img class="featured" alt="Screenshot of the Pipes editor showing Boagworld feed selecting 1st-10th item"/&gt;&lt;h4&gt;Explanation&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;&lt;span&gt;The feed (or feeds) are fetched and pushed in to a split&lt;/span&gt;&lt;ul&gt;&lt;li&gt;The split is necessary so that the feed contents can be used later as an output but also as the source for calculations&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;A count is performed to identify the total number of items in the list&lt;/li&gt;&lt;li&gt;&lt;span&gt;
                            A 'Tail' is used to select the count minus a user input 'from' parameter.  This
                            small calculation is performed through the 'Simple Math' module.
                        &lt;/span&gt;&lt;ul&gt;&lt;li&gt;i.e. to select from the 5th item out of 20 I need to 'Tail' the list by 'count' minus 'from' (20-5) or 15&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;A 'Truncate' is then used to select the amount up to the 'limit' parameter&lt;/span&gt;&lt;ul&gt;&lt;li&gt;
                                Combining a tail and truncate allows the specification of a start position and an amount of items to retrieve. e.g. to retrieve
                                the items from 5 to 15 in a list of 20 the user will specify '5' and '10'.  The 5 will be calculated against the count
                                and use 'Tail' to retrieve the last 15 items.  The truncate will then select the first 10 to result in 5-15.
                            &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 id="title_usingthepipe"&gt;Using the pipe&lt;/h3&gt;&lt;p&gt;By setting a friendly profile and pipe url the paginated feed can then be accessed by any client using:&lt;/p&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://pipes.yahoo.com/cargowire/paginatedboagworld?_render=rss&amp;amp;from=2&amp;amp;limit=5"&gt;http://pipes.yahoo.com/cargowire/paginatedboagworld?_render=rss&amp;amp;from=2&amp;amp;limit=5&lt;/a&gt;&lt;/p&gt;&lt;p&gt;They can then adjust the viewing parameters as necessary.&lt;/p&gt;&lt;p&gt;By combining all of the above techniques we can use pipes to provide us with an aggregated Headscape Barn feed that is 
                filtered to exclude podcast entries, sorted and then paginated based on user input.&lt;/p&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://pipes.yahoo.com/cargowire/paginatedbarn?_render=rss&amp;amp;from=2&amp;amp;limit=20"&gt;http://pipes.yahoo.com/cargowire/paginatedbarn?_render=rss&amp;amp;from=2&amp;amp;limit=20&lt;/a&gt;&lt;/p&gt;&lt;img title="Screenshot showing a combined Headscape barn pipe filtered, sorted and paginated" class="featured"/&gt;&lt;h3 id="title_finalthooughts"&gt;Final Thoughts&lt;/h3&gt;&lt;p&gt;In this example I have fetched rss feeds, however Yahoo Pipes is also capable of sourcing data from a variety of input
                sources such as flickr, CSV and plain xml/json.  For example I could use a 
                &lt;a rel="nofollow" target="_blank" href="http://pipes.yahoo.com/pipes/docs?doc=sources#FetchData" title="Fetch Data docs page"&gt;'Fetch Data'&lt;/a&gt; module to pull
                the same content from my site but using my .xml output instead of .rss.  I can then use the 
                &lt;a rel="nofollow" target="_blank" href="http://pipes.yahoo.com/pipes/docs?doc=operators#Rename" title="Rename docs page"&gt;'Rename'&lt;/a&gt; module to provide an appropriate output.
                Equally I could pull content from an API that exposed json through GET requests (such as the twitter public API) and then layer on my own
                manipulation.  Allowing me to implement a large chunk of functionality easily and quickly, delegating all the manipulation code
                to a third party.&lt;/p&gt;&lt;p&gt;This is exactly the approach taken with &lt;a rel="nofollow"&gt;the barn feed&lt;/a&gt; on this site.  The content is pulled from yahoo
                pipes leaving me only to concern myself with local caching and transforming.&lt;/p&gt;&lt;p&gt;In the case of Cargowire this request is done on the server side with the resulting XML transformed using XSLT into XHTML
                to send down to the browser. However I could also use the same pipe in JSON format for clientside development or as a simple embed
                html/script badge (as provided by Yahoo).&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>The Project52 Challenge</title>
            <link>http://cargowire.net/blog/project52-2010</link>
            <description>&lt;p&gt;
            During the end of December last year I, along with many others, somehow got caught up by the #p52 hashtag and,
            in true 'resolutions that I probably won't be able to keep' stylé, I took on the challenge.  The idea is as follows:
          &lt;/p&gt;&lt;p&gt;I'm kicking that off with a new article about useful .net dev resources and how to keep up to date.
          I've also finally made some good use of my free basecamp account by making a list of potential articles so I should be on my way for at least a few months. It's 
          finding the time that could be tricky.&lt;/p&gt;&lt;p&gt;The idea has already 'persuaded' me to get some more functionality up on to cargowire.  The categorisation of my posts is now exposed
          through url routes (e.g. http://cargowire.net/articles/tagged/general) and I will be tagging all my Project52 posts appropriately at:
          /articles/tagged/project52.&lt;/p&gt;&lt;p&gt;Additionally I've begun to add 'table of contents' links to the upper right
          of articles.  Thus allowing skipping down the article.  Commenting functionality is coming soon... I promise.
          &lt;/p&gt;&lt;p&gt;I'm also going to try and run a commenting #p52 alongside the article writing, as Yaili proposed.&lt;/p&gt;&lt;p&gt;Looking forward to a fun and productive 2010!&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/project52-2010</guid>
            <pubDate>Mon, 04 Jan 2010 22:05:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
            During the end of December last year I, along with many others, somehow got caught up by the &lt;a rel="nofollow" target="_blank" href="http://search.twitter.com/search?q=%23p52"&gt;#p52&lt;/a&gt; hashtag and,
            in true 'resolutions that I probably won't be able to keep' stylé, I took on the challenge.  The idea is as follows:
          &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;The goal is to write at least 1 new article per week for 1 year.&lt;/p&gt;&lt;cite&gt;http://project52.info&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;I'm kicking that off with a new article about &lt;a rel="nofollow" title="Useful for .net dev"&gt;useful .net dev resources and how to keep up to date&lt;/a&gt;.
          I've also finally made some good use of my free basecamp account by making a list of potential articles so I should be on my way for at least a few months. It's 
          finding the time that could be tricky.&lt;/p&gt;&lt;p&gt;The idea has already 'persuaded' me to get some more functionality up on to cargowire.  The categorisation of my posts is now exposed
          through url routes (e.g. http://cargowire.net/articles/tagged/general) and I will be tagging all my Project52 posts appropriately at:
          &lt;a rel="nofollow"&gt;/articles/tagged/project52&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Additionally I've begun to add 'table of contents' links to the upper right
          of articles.  Thus allowing skipping down the article.  Commenting functionality is coming soon... I promise.
          &lt;/p&gt;&lt;p&gt;I'm also going to try and run a commenting #p52 alongside the article writing, as &lt;a rel="nofollow" target="_blank" href="http://twitter.com/yaili/status/6529425549"&gt;Yaili proposed&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Looking forward to a fun and productive 2010!&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>What's useful for a .NET Dev?</title>
            <link>http://cargowire.net/articles/usefulfordotnetdev</link>
            <description>Towards the end of last year I had some correspondance with a Boagworld listener who
        was interested to know what kind of resources I used for both dev and just plain keeping up to date... here it is in lovely blog post stylé.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/usefulfordotnetdev</guid>
            <pubDate>Mon, 04 Jan 2010 22:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
            Day to day there are many resources and tools that are invaluable to me as a .NET developer.  The following article discusses some 
            of the most useful examples.
          &lt;/p&gt;&lt;h3 id="title_preamble"&gt;Preamble&lt;/h3&gt;&lt;p&gt;Without sounding too grandiose about it, the Internet has brought so much information to our fingertips and as web designers/developers we
          are even luckier. The resource we add to each time we complete a project is also the resource we use to increase our knowledge and
          complete our work. I certainly do not envy software developers plying their trade before the Internet. The advantage of being able to run off 
          and, in a split second, consult hundreds of thousands of other people's knowledge and expertise is immeasurable.&lt;/p&gt;&lt;p&gt;Not to get off point too much, but sometimes it's useful to &lt;a rel="nofollow" target="_blank" href="http://www.youtube.com/watch?v=-LkusicUL2s" title="Louic CK reminds us to appreciate technology (Conan O'Brien)"&gt;remind ourselves how lucky we really are&lt;/a&gt; with
          the abundance of podcasts, blogs, websites and ebooks available to us.  This is also why we should do our best to give something back, either
          via blogging ourselves or contributing to an open source project.&lt;/p&gt;&lt;h3 id="title_personally"&gt;Personally&lt;/h3&gt;&lt;p&gt;I find that the most regularly used resources, for me, are podcasts.  As a commuter the ease of use and ability to add value to an otherwise
          unused 1.5hr travel time every day is too good an opportunity to miss.  Secondary to that are blog posts. Most often accessed through
          some level of aggregration, whether that be through following respected professionals on &lt;a rel="nofollow" target="_blank" href="http://twitter.com/cargowire/web" title="My web folk list on twitter"&gt;twitter&lt;/a&gt;/&lt;a rel="nofollow" target="_blank" href="http://huffduffer.com/cargowire" title="Cargowire on HuffDuffer"&gt;huffduffer&lt;/a&gt;
          or subscribing to &lt;a rel="nofollow" target="_blank" href="http://twitter.com/boaglinks" title="BoagLinks web design/dev aggregated feed"&gt;aggregated feed services&lt;/a&gt;, it saves time on that first sift. The third level then is 'feature length' content such as
          physical and electronic books. These are often most useful if you want to focus on something particular or train as a beginner in a new area.&lt;/p&gt;&lt;h3 id="title_podcasts"&gt;Podcasts&lt;/h3&gt;&lt;p&gt;Generally the podcasts that stay with me are those with a more discussive tone to them. They tend to hold attention better
          than more structured presentational style recordings (think Tutorial vs Lecture):&lt;/p&gt;&lt;ul class="discussionlist"&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://itc.conversationsnetwork.org/series/stackoverflow.html" title="Stackoverflow Podcast: Jeff and Joel discussing software"&gt;StackOverflow podcast&lt;/a&gt;&lt;/span&gt;&lt;p&gt;An excellent replacement for a radio breakfast show. &lt;a rel="nofollow" target="_blank" href="http://www.joelonsoftware.com" title="Joel on software"&gt;Joel&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://www.codinghorror.com/blog/" title="Jeffs Coding Horror blog"&gt;Jeff&lt;/a&gt; discuss a
              range of topics rooted in their &lt;a rel="nofollow" target="_blank" href="http://blog.stackoverflow.com/2009/05/the-stack-overflow-trilogy/" title="Stackoverflow, Serverfault and Superuser"&gt;StackOverflow trilogy&lt;/a&gt;
              (which also happens to be one of the highest profile ASP.NET MVC implementations right now).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://hanselminutes.com" title="Hansel Minutes: Weekly dev talk show"&gt;Hanselminutes&lt;/a&gt;&lt;/span&gt;&lt;p&gt;Microsoft Principal Program Manager &lt;a rel="nofollow" target="_blank" href="http://www.hanselman.com"&gt;Scott Hanselman's&lt;/a&gt; weekly 'talk show' podcast
              offers up some real gems as guests. With a knowledgable host able to navigate the useful topics well.  Scott is also very good
              at ensuring any jargon or acronyms are explained (even if only briefly) to ensure you aren't left wondering what something means as it's
              discussed.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://dotnetrocks.com" title="DotNetRocks: Weekly internet talk show for .NET developers"&gt;.NET Rocks&lt;/a&gt;&lt;/span&gt;&lt;p&gt;A podcast that I have only dipped in and out of occassionally but that can also throw up some excellent guest content.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://boagworld.com/podcast" title="Boagworld: Weekly general web dev/design podcast"&gt;Boagworld&lt;/a&gt;&lt;/span&gt;&lt;p&gt;Although not strongly development focused the Boagworld podcast is the first podcast that kept me hooked to my subscription.
              Its broad subject range is also particularly useful to maintain knowledge of the wider web community rather than getting too isolated
              in a backend developer world.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="title_blogs"&gt;Websites / Blogs&lt;/h3&gt;&lt;ul class="discussionlist"&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.stackoverflow.com" title="Stackoverflow: collaboratively edited question and answer site for programmers"&gt;StackOverflow&lt;/a&gt;&lt;/span&gt;&lt;p&gt;Most google searches for a .NET based problem seem to throw up a stackoverflow entry at position 1 or 2 (and that's a good thing).  An excellent community
              driven site, with a clean interface and vast catalog of knowledge.  The old school forum paradigm is shaken up with a Q&amp;amp;A wiki based approach. Sign up and start &lt;a rel="nofollow" target="_blank" href="http://stackoverflow.com/about"&gt;collecting your reputation and badges&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://codebetter.com/blogs/" title="Codebetter: Programmer blogs"&gt;Codebetter&lt;/a&gt;&lt;/span&gt;&lt;p&gt;Some excellent blog content from contributors such as &lt;a rel="nofollow" target="_blank" href="http://codebetter.com/blogs/jeremy.miller/" title="Jeremy D Miller on CodeBetter"&gt;Jeremy D Miller&lt;/a&gt;
               (StructureMap) and &lt;a rel="nofollow" target="_blank" href="http://codebetter.com/blogs/karlseguin/" title="Karl Seguin on CodeBetter"&gt;Karl Seguin&lt;/a&gt; (Codebetter.Canvas).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com" title="DotNetKicks: Community based .net news site"&gt;DotNetKicks&lt;/a&gt;&lt;/span&gt;&lt;p&gt;A favourite among many .NET dev's DotNetKicks does an excellent job of aggregating .NET related links and resources.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="title_misc"&gt;Misc / Books&lt;/h3&gt;&lt;ul class="discussionlist"&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://codebetter.com/blogs/karlseguin/archive/2008/06/24/foundations-of-programming-ebook.aspx" title="Foundations of Programming eBook"&gt;A Foundations of Programming eBook by Karl Seguin&lt;/a&gt;&lt;/span&gt;&lt;p&gt;An eBook that I really enjoyed reading and would recommend to any .NET developer - and it's entirely free!&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.amazon.co.uk/MCTS-Self-Paced-Training-70-536-Framework-Application/dp/0735626197/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1262567589&amp;amp;sr=1-1" title="Microsoft Qualifications Books on Amazon"&gt;Microsoft Qualification Books&lt;/a&gt;&lt;/span&gt;&lt;p&gt;Many employers put effort into becoming Microsoft partners and pushing their staff through Microsoft Certification.  Regardless of
            the pros and cons of this the books put out for the qualification programs can act as excellent references, especially early on.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="title_events"&gt;Events&lt;/h3&gt;&lt;p&gt;On top of daily blogs/podcasts/books I'd recommend attending as many events as possible, many are free (although will involve your own time) and others are reasonably priced if you have
          scope within your organisation for training costs.&lt;/p&gt;&lt;ul class="discussionlist"&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.developerday.co.uk/ddd/default.asp" title="Developer Day: UK Events at Microsoft Campus"&gt;DDD Developer Days&lt;/a&gt;&lt;/span&gt;&lt;p&gt;A free to attend event that often has a great line up of speakers and .NET folk to meet (I've seen the likes of Scott Guthrie and Jon Skeet speaking at these events).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.developerdeveloperdeveloper.com/webdd09/" title="Web Developer Day: UK Web Dev Events at Microsoft Campus"&gt;Web Developer Day&lt;/a&gt;&lt;/span&gt;&lt;p&gt;Another free to attend event hosted at Microsofts Reading campus - very similar to DDD but with a specific web focus.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;There are also many &lt;a rel="nofollow" target="_blank" href="http://groups.google.com/group/southampton-developers"&gt;localised&lt;/a&gt; user groups and events (&lt;a rel="nofollow" target="_blank" href="http://www.barcamp.org/"&gt;barcamps&lt;/a&gt;, &lt;a rel="nofollow" target="_blank" href="http://geekup.org/"&gt;geekups&lt;/a&gt; etc).&lt;/p&gt;&lt;p&gt;I try to ensure &lt;a rel="nofollow" title="Cargowire blogs tagged 'event'"&gt;I write up notes on the events I attend&lt;/a&gt;.  Even if time is tight a quick post with a sentence per attended talk
            is helpful to think over some of the information you absorbed throughout the day.&lt;/p&gt;&lt;h3 id="title_tools"&gt;Tools&lt;/h3&gt;&lt;ul class="discussionlist"&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.red-gate.com/products/SQL_Compare/"&gt;SQL Compare/SQL Data Compare&lt;/a&gt;&lt;/span&gt;&lt;p&gt;RedGate offer some excellent dev tools.  Of particular note are SQL Compare and Data Compare which allow you to perform Diff's on 
            both your DB structure and data.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.red-gate.com/products/reflector/"&gt;Reflector&lt;/a&gt;&lt;/span&gt;&lt;p&gt;Now also owned by RedGate, Reflector allows you to browse any dll's contents including those of .NET itself.  Very handy
            if you're trying to figure out why something acts a particular way in the framework (or in worst case scenarios trying to recreate your
            source from published copies!).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://haacked.com/archive/0001/01/01/url-routing-debugger.aspx"&gt;Phil Haacks ASP.net routing debugger&lt;/a&gt;&lt;/span&gt;&lt;p&gt;When ASP.NET MVC applications get big &lt;a rel="nofollow" title="How routing works on Cargowire"&gt;routing&lt;/a&gt; can become
            complicated.  This is where Phil Haacks small library comes in, allowing you to see a breakdown of which routes match in a tabular format simply by adding a reference
            and a single line of code.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://structuremap.sourceforge.net/Default.htm"&gt;StructureMap&lt;/a&gt;&lt;/span&gt;&lt;p&gt;The IoC I'm currently using on for Cargowire. Very flexible and powerful.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.codeplex.com/MVCContrib"&gt;MVCContrib&lt;/a&gt;&lt;/span&gt;&lt;p&gt;A useful library of additions and extensions for ASP.NET MVC including controller factories, model binders and view engines.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="item"&gt;&lt;a rel="nofollow" target="_blank" href="http://www.linqpad.net/"&gt;LINQPad&lt;/a&gt;&lt;/span&gt;&lt;p&gt;A particularly useful tool allowing you to try out and run linq queries against a data source.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In addition I hear extremely good things about &lt;a rel="nofollow" target="_blank" href="http://www.jetbrains.com/resharper/"&gt;resharper&lt;/a&gt; but have never stumped up the cash for it.  &lt;a rel="nofollow" target="_blank" href="http://www.regexbuddy.com/"&gt;Regex Buddy&lt;/a&gt; is
          another that can be particularly useful.&lt;/p&gt;&lt;h3 id="title_conclusion"&gt;Hammering it home&lt;/h3&gt;&lt;p&gt;This post is intentionally link heavy to try and point to as many resources as possible.  I encourage everyone to Blog about your experiences, create test applications,
          &lt;a rel="nofollow" target="_blank" href="http://projecteuler.net/index.php?section=problems" title="Project Euler maths problems"&gt;solve random short problems&lt;/a&gt;, play around in your own codebases...
           but do something, and do it regularly to help nail down concepts and to experiment with new things.&lt;/p&gt;&lt;br /&gt;&lt;p class="smallprint"&gt;N.B: My apologies but commenting is currently not live on cargowire.  Please feel free to &lt;a rel="nofollow"&gt;feedback through other means&lt;/a&gt;
            before commenting goes live.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Cargowire MVC Series begins...</title>
            <link>http://cargowire.net/blog/cargowiremvcseries</link>
            <description>&lt;p&gt;
            A new post has just gone up over in the articles section.  Now that I've migrated the cargowire codebase to .NET MVC I intend
            to release a few articles in relation to the process.  The first is with regard to routing, particularly extensionless routes
            that match my pre-existing urls but use the new Routing capabilities of .NET MVC.
          &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/cargowiremvcseries</guid>
            <pubDate>Sun, 06 Dec 2009 23:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
            A new post has just gone up over in the &lt;a rel="nofollow"&gt;articles&lt;/a&gt; section.  Now that I've migrated the cargowire codebase to .NET MVC I intend
            to release a few articles in relation to the process.  The first is with regard to routing, particularly extensionless routes
            that match my pre-existing urls but use the new Routing capabilities of .NET MVC.
          &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Cargowire MVC: Routing</title>
            <link>http://cargowire.net/articles/cargowiremvcrouting</link>
            <description>Cargowire is now running .NET MVC.  This is the first in an intended series of articles
          discussing the implementation and changeover from .NET WebForms... starting with Routing
          and URL design.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/cargowiremvcrouting</guid>
            <pubDate>Sun, 06 Dec 2009 22:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
            Cargowire is now fully .NET MVC. Although it looks the same, I've been able to take advantage
            of the &lt;a rel="nofollow" target="_blank" href="http://haacked.com/archive/2009/03/18/aspnet-mvc-rtw.aspx"&gt;new&lt;/a&gt;
            (&lt;a rel="nofollow" target="_blank" href="http://haacked.com/archive/2009/11/17/asp.net-mvc-2-beta-released.aspx"&gt;ish&lt;/a&gt;) MS implementation of the well known MVC pattern and
            surrounding technologies.  During the changeover I wanted to be sure that my urls remained the same.
          &lt;/p&gt;&lt;h3 id="title_urldesign"&gt;URL Design&lt;/h3&gt;&lt;p&gt;
            When I first created cargowire I wanted to ensure my urls were 'nice'. That is to say
            &lt;a rel="nofollow" target="_blank" href="http://www.w3.org/Provider/Style/URI.html" title="Tim Benners-Lee discussing URIs that don't change"&gt;they stayed around&lt;/a&gt;,
            &lt;a rel="nofollow" target="_blank" href="http://jeremy.zawodny.com/blog/archives/000296.html#000296" title="Jeremy Zawodny discussing short urls"&gt;they were short&lt;/a&gt;,
            &lt;a rel="nofollow" target="_blank" href="http://www.useit.com/alertbox/990321.html" title="Jakob Neilsen discussing URLs as UI"&gt;they were obvious&lt;/a&gt;
            and they were &lt;a rel="nofollow" target="_blank" href="http://simonwillison.net/2007/Feb/4/urls/" title="Simon Willison discussing disambiguated urls"&gt;extensionless urls&lt;/a&gt;.
          &lt;/p&gt;&lt;p&gt;Cargowire itself is a relatively short domain name and my main site sections were as follows:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span&gt;/blog&lt;/span&gt;&lt;ol&gt;&lt;li&gt;/blog/2&lt;/li&gt;&lt;li&gt;/blog/dotnetdev101&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;/articles&lt;/span&gt;&lt;ol&gt;&lt;li&gt;/articles/2&lt;/li&gt;&lt;li&gt;/articles/dateformattinginxml&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;/about&lt;/li&gt;&lt;li&gt;/notes&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;
            This was originally implemented using a third party library
            (&lt;a rel="nofollow" target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx" title="Scott Gu discussing Intelligencia"&gt;Intelligencia.UrlRewriter&lt;/a&gt;)
            running as an &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/zec9k340%28VS.71%29.aspx" title="MSDN Reference for HttpModules"&gt;HttpModule&lt;/a&gt;. Intelligencia
            used a rather traditional set of regex based rules in an XML configuration file (in this case, web.config).  So for example the following
            &lt;code&gt;
              &amp;lt;rewrite url="~/blog/([0-9]+)" to="~/default.aspx?p=$1" processing="stop" /&amp;gt;
            &lt;/code&gt;
            would match the pagination urls for the blog i.e. /blog/2, /blog/3 and rewrite that to /default.aspx?p=2, /default.aspx?p=3.
          &lt;/p&gt;&lt;p&gt;
            This method was pretty standard, among other third party approaches like the ISAPI Filter 'ISAPI Rewrite'.  However .NET 3.5 SP1
            contains the System.Web.Routing.UrlRoutingModule.  With this library we are able to create routes in the following way and add them to a RouteTable:
          &lt;/p&gt;&lt;code&gt;
            protected void Application_Start()
            {
                // Via RouteCollection.Add
                RouteTable.Routes.Add(new Route {
                  Url = "{controller}/{action}/{id}",
                  Defaults = new { action = "Index", id = (string)null },
                  RouteHandler = typeof(MvcRouteHandler)
                });

              // Or via RouteCollection.MapRoute
              RouteTable.Routes.MapRoute("DefaultRoute", "{controller}/{action}/{id}", new { action = "Index", id = (string)null }, null);
            }
          &lt;/code&gt;&lt;p&gt;
            This RouteTable is statically available, and assigned to within the Application_Start event of your global.asax.  When a request
            comes in the table is traversed and the first match found is used. For more info see the bottom of the page for a &lt;a rel="nofollow" href="#minimvcrouteguide"&gt;mini routing guide&lt;/a&gt;&lt;/p&gt;&lt;p id="keydifference"&gt;
            One key difference here is that instead of using regular expressions the url is defined by a tokenized string.  This meant that it was
            possible that my pagination and details routes would clash i.e. {controller}/{action}/{page} and {controller}/{action}/{detailsuri}.  To avoid this I had two
            options:
          &lt;/p&gt;&lt;dl&gt;&lt;dt&gt;Constraints (IRouteConstraint)&lt;/dt&gt;&lt;dd&gt;
              The MapRoute method takes an object with corresponding IRouteConstraints per route parameter.  This means I could do something like:&lt;br /&gt;
              routes.MapRoute("DefaultWithPage", "{controller}/{page}", new { controller = "Blog", action = "index", page = 1 }, &lt;em&gt;&lt;strong&gt;new { page = new IntegerConstraint() }&lt;/strong&gt;&lt;/em&gt;);&lt;br /&gt;
              An IntegerConstraint may then look like:
              &lt;code&gt;
                public class IntegerConstraint : IRouteConstraint
                {
                  public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
                  {
                    string value = values[parameterName].ToString();
                    int parsedInt = 0;
                    return int.TryParse(value, out parsedInt); // True if the value is an integer
                  }
                }
              &lt;/code&gt;&lt;/dd&gt;&lt;dt&gt;Constraints (regex string)&lt;/dt&gt;&lt;dd&gt;
              The IRouteConstraint is fine but could perhaps be seen as overkill.  Rather than unnecessarily creating a whole new class implementing IRouteConstraint
              we can instead pass regular expression strings such as:
              routes.MapRoute("DefaultRootWithPageAndFormat", "{page}", new { controller = "Blog", action = "index", uri = "" }, &lt;em&gt;&lt;strong&gt;new { page = "[0-9]+" }&lt;/strong&gt;&lt;/em&gt;);
            &lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;The much more concise approach of the regex was appropriate here.  However constraints can be useful for other more complicated scenarios.&lt;/p&gt;&lt;h3 id="title_usefulrouteconstraints"&gt;Useful IRouteConstraints&lt;/h3&gt;&lt;p&gt;
            IRouteConstraints could provide an injection point for user defined shortcut checking, such as when '/septemberdeals' is created as a shortcut to the longer 	'/shop/discounts/2009-09' url.
            This could easily be a CMS requirement:
          &lt;/p&gt;&lt;blockquote&gt;"The user can create on the fly direct links for publication or promotion purposes - for example '/septemberdeals' resolves to '/shop/discounts/2009-09' and so on."&lt;/blockquote&gt;&lt;p&gt;Of course, a short url would normally map to a default controller route e.g. '/{controller}' with '/septemberdeals' trying to find a 'SeptemberDeals' controller.&lt;/p&gt;&lt;p&gt;
            So how about a Constraint that when it receives a request goes away and compares it to a list of known shortcuts (hopefully stored in memory at this
            point rather than incurring a database hit) returning false if none exist, allowing the route engine to continue down to the less specific '/{controller}' route. When a shortcut is found the route will match and the later '/controller' route will not be compared - avoiding an error when the 'septemberdeals' controller is not found.
          &lt;/p&gt;&lt;p&gt;
            I had a similar issue for cargowire, the main content mapped well to useful controllers.  It was clear that an articles controller would be
            useful.  It could interact with an articles service/respository layer and manage listings and details views based on the data.  However
            some pages such as 'notes' were text content written directly to file, with arguably no real need for a full controller class.
          &lt;/p&gt;&lt;p&gt;
            On the prior version of cargowire I had a
            'notes.aspx' and 'xsl.aspx' page that did nothing more complicated than output some words I had hard written straight in.  To perform this action in the MVC version I made
            use of a FromValuesConstraint:
          &lt;/p&gt;&lt;code&gt;
            /// 
            /// Originally sourced from: http://blogs.microsoft.co.il/blogs/bursteg/archive/2009/01/11/asp-net-mvc-route-constraints.aspx
            /// 
            public class FromValuesListConstraint : IRouteConstraint
            {
              private string[] _values;
              public FromValuesListConstraint(params string[] values) { this._values = values; }

              public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
              {
                // Get the value from the RouteValueDictionary
                string value = values[parameterName].ToString().ToLower();

                // Return true is the list of allowed values contains this value.
                return ((IList)_values).Contains(value);
              }
            }
          &lt;/code&gt;&lt;p&gt;
            This enabled me to create a PageController that merely output a view directly by name.  The FromValuesListConstraint could then guarantee that the route only
            matched when there was a 'hard written' view to be found.
          &lt;/p&gt;&lt;p&gt;
            I could either put the FromValuesListConstraint on the '/{controller}' route with a list of known controllers, or on
            the PageController route with a list of the 'hard written' views.  I ended up opting for the former, allowing me to easily add hard written
            views ad hoc without the need for a recompile.  However I could just have easily done it the other way round, or implemented a more complex constraint
            such as one that used reflection to identify the list of controllers available or that read the view directory to find available views.
          &lt;/p&gt;&lt;h3 id="title_conclusion"&gt;Conclusion&lt;/h3&gt;&lt;p&gt;
            Constraints allow for powerful methods of route matching, far in excess of the limitations of using only regex for matching. By introducing code into the mix, in the 	  form of constraints, any number of application scenarios can result in a route matching or not matching.  A helpful resource when doing this is
            Phil Haack's Routing Debugger tool that allows for easy testing of routes including applying any associated constraints (see the related links below).
          &lt;/p&gt;&lt;hr class="sectionbreak"/&gt;&lt;h2 id="minimvcrouteguide"&gt;N.B. Mini MVC Route Guide&lt;/h2&gt;&lt;p&gt;Routing in MVC works in the following way:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Routes are defined in code and added to the static route collection&lt;/li&gt;&lt;li&gt;When a url is requested the route table is traversed.  The first route that matches is processed.&lt;/li&gt;&lt;li&gt;
              The 'controller' parameter, by convention, maps to the instantiation of a controller class that should exist in your code e.g. a route '{controller}'
              with a request '/blog' would lead to the instantiation of a 'BlogController' class.
            &lt;/li&gt;&lt;li&gt;
              The 'action' parameter, by convention, is used to call the appropriate method on that class with the remaining route parameters matching up to
              the methods parameters e.g.
              &lt;table&gt;&lt;thead&gt;&lt;th&gt;Route&lt;/th&gt;&lt;th&gt;Request&lt;/th&gt;&lt;th&gt;Matches&lt;/th&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;{controller}/{action}/{page}&lt;/td&gt;&lt;td&gt;/blog/index/2&lt;/td&gt;&lt;td&gt;
                      The Index method
                      of the BlogController, passing 2 as the int page parameter
                    &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;
              The defaults allow certain parts of the route to be missing e.g.
              &lt;table&gt;&lt;thead&gt;&lt;th&gt;Route&lt;/th&gt;&lt;th&gt;Defaults&lt;/th&gt;&lt;th&gt;Request&lt;/th&gt;&lt;th&gt;Matches&lt;/th&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;{controller}/{action}/{page}&lt;/td&gt;&lt;td&gt;defaults = new { action = "index" }&lt;/td&gt;&lt;td&gt;/blog/2&lt;/td&gt;&lt;td&gt;Will also match the '{controller}/{action}/{page}' and the BlogController index method&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ol&gt;&lt;a rel="nofollow" href="#keydifference"&gt;back&lt;/a&gt;&lt;a rel="nofollow"&gt;back to top&lt;/a&gt;</content:encoded>
          </item>
          <item>
            <title>Overengineering and a lack of testing, the pitfalls of personal projects</title>
            <link>http://cargowire.net/blog/jumpingthegun</link>
            <description>&lt;p&gt;
            Ok, so yesterday I jumped the gun somewhat with the rather over ambitious:
            asp.net MVC version of http://cargowire.net up now - pretty much the same (hopefully) fleshed out notes and added link to thebarn pagehttp://twitter.com/cargowire/status/6182546830&lt;/p&gt;&lt;p&gt;
            Inevitably this was followed by:
            
                @cargowire heads up for you this is what I see in Safari 4 for http://cargowire.net OK in FF3.5 http://yfrog.com/4imo3phttp://twitter.com/porkandpaws/status/6183712464&lt;/p&gt;&lt;p&gt;Clearly I'd made three (or at least three of my) classic 'personal project for self only' mistakes:&lt;/p&gt;&lt;p&gt;
            I had set out to merely replace the backend of my previous .NET WebForms project (that used XSL/XML for
            view separation) with an implementation of asp.net/MVC.
            A fairly trival task, that along the way I expanded by virtue of being my own client and wanting to try out random
            things.
          &lt;/p&gt;&lt;p&gt;
            Being effectively an engine swap (I was even using the same XSL as well as javascript/css) I neglected to worry
            too much about browser rendering.  After all, it was the same CSS that I'd tested before... surely all would be well.
          &lt;/p&gt;&lt;p&gt;
            My original cargowire implementation had the ability to serve different content types baked in.  You could
            call most pages in the following ways (you still can now, try it):
          &lt;/p&gt;&lt;p&gt;
            I wanted to keep this functionality with the new asp.NET MVC version, however somewhere along the way I decided it would be
            a good idea to not only expose these different formats through varying file extensions but also respond to the
            HTTP Accept header that get sent with the request.  This behaviour, similar to the respond_to method
            from Ruby On Rails, would allow multiple versions of the content to be requested easily.
          &lt;/p&gt;&lt;p&gt;
            The implementation was simple and based on my brief reading of the Http Accept header description.
          &lt;/p&gt;&lt;p&gt;
            By attempting to find any possible view it allowed me to later add any format I like (json for example) just by adding the relevant view and all
            the plumbing would wire up.
          &lt;/p&gt;&lt;p&gt;
            All seemed well in Firefox, and after forgetting about this code and finishing the rest of the backend off, browser testing
            was irrelevant.. right?... I'd not changed any css, html or JS... I pushed live.
          &lt;/p&gt;&lt;p&gt;
            During testing I'd been working with firefox, which, if you request an extensionless url, appears to send
            the following accept header (according to the live headers plugin):
          &lt;/p&gt;&lt;p&gt;So in my algorithm you'd get:&lt;/p&gt;&lt;p&gt;In this scenario the code looks for a template for html, finds one and returns (ignoring the rest of the list).&lt;/p&gt;&lt;p&gt;
            When I saw the output from porkandpaws tweet it was immediately clear
            that he was seeing the XML output instead of html.  A quick run in debug mode gave the following accept header
            from Safari 4:
          &lt;/p&gt;&lt;p&gt;
            It would appear that if no extension is specified Safari will prioritise XML over XHTML. With application/xml requested
            before application/xhtml+xml and with both being assigned the default quality level 1 my algorithm assumed the
            client wanted the XML view and returned it!
          &lt;/p&gt;&lt;p&gt;
            The quick fix was to prioritise types containing 'html' before falling back to request order.  This may not be
            a perfect solution, but lets be pragmatic, I'd only implemented this on a whim - no-one is actually using this site
            other than for the html or rss view.
          &lt;/p&gt;&lt;p&gt;
            To round up then, although overengineering and random play code is almost inevitable for the curious developer
            when working for themselves with no timescale, it doesn't excuse full testing and you can never rule out what any change,
            no matter how 'isolated', might effect.
          &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/jumpingthegun</guid>
            <pubDate>Mon, 30 Nov 2009 23:00:00 +0000</pubDate>
            <content:encoded>&lt;h4&gt;On this weeks show 'Content Negotiation' and browser testing&lt;/h4&gt;&lt;p&gt;
            Ok, so yesterday I jumped the gun somewhat with the rather over ambitious:
            &lt;blockquote&gt;&lt;p&gt;asp.net MVC version of http://cargowire.net up now - pretty much the same (hopefully) fleshed out notes and added link to thebarn page&lt;/p&gt;&lt;cite&gt;http://twitter.com/cargowire/status/6182546830&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;
            Inevitably this was followed by:
            &lt;blockquote&gt;&lt;p&gt;
                @cargowire heads up for you this is what I see in Safari 4 for http://cargowire.net OK in FF3.5 &lt;a rel="nofollow" target="_blank" href="http://yfrog.com/4imo3p"&gt;http://yfrog.com/4imo3p&lt;/a&gt;&lt;/p&gt;&lt;img class="featured" alt="Screenshot of Safari showing plain text"/&gt;&lt;cite&gt;http://twitter.com/porkandpaws/status/6183712464&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;Clearly I'd made three (or at least three of my) classic 'personal project for self only' mistakes:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Overengineering&lt;/li&gt;&lt;li&gt;Lack of testing&lt;/li&gt;&lt;li&gt;Eagerness to get it live&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;
            I had set out to merely replace the backend of my previous .NET WebForms project (that used XSL/XML for
            view separation) with an implementation of &lt;a rel="nofollow" target="_blank" href="http://www.asp.net/mvc" title="Microsoft Official asp.NET MVC site"&gt;asp.net/MVC&lt;/a&gt;.
            A fairly trival task, that along the way I expanded by virtue of being my own client and wanting to try out random
            things.
          &lt;/p&gt;&lt;p&gt;
            Being effectively an engine swap (I was even using the same XSL as well as javascript/css) I neglected to worry
            too much about browser rendering.  After all, it was the same CSS that I'd tested before... surely all would be well.
          &lt;/p&gt;&lt;h4&gt;
            The problem: &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Content_negotiation"&gt;Content Negotiation&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;
            My original cargowire implementation had the ability to serve different content types baked in.  You could
            call most pages in the following ways (you still can now, try it):
          &lt;/p&gt;&lt;ul&gt;&lt;li&gt;http://cargowire.net/articles (rendered html)&lt;/li&gt;&lt;li&gt;http://cargowire.net/articles.html&lt;/li&gt;&lt;li&gt;http://cargowire.net/articles.xml&lt;/li&gt;&lt;li&gt;http://cargowire.net/articles.rss&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;
            I wanted to keep this functionality with the new asp.NET MVC version, however somewhere along the way I decided it would be
            a good idea to not only expose these different formats through varying file extensions but also respond to the
            HTTP Accept header that get sent with the request.  This behaviour, similar to the respond_to method
            from Ruby On Rails, would allow multiple versions of the content to be requested easily.
          &lt;/p&gt;&lt;p&gt;
            The implementation was simple and based on my brief reading of the &lt;a rel="nofollow" target="_blank" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html"&gt;Http Accept header&lt;/a&gt; description.
          &lt;/p&gt;&lt;code&gt;
            // Pseudocode of the algorithm
            format = request.extension
            if exists(format) and haveViewFor(format)
              return content as format
            else
              read in list of values from Accept header
              sort the list of accept headers by quality first and original request order second
              return content as the first format in the list that matches an available view
            if no appropriate view found
              return content as html
          &lt;/code&gt;&lt;p&gt;
            By attempting to find any possible view it allowed me to later add any format I like (json for example) just by adding the relevant view and all
            the plumbing would wire up.
          &lt;/p&gt;&lt;p&gt;
            All seemed well in Firefox, and after forgetting about this code and finishing the rest of the backend off, browser testing
            was irrelevant.. right?... I'd not changed any css, html or JS... I pushed live.
          &lt;/p&gt;&lt;h4&gt;Why did Safari looks so funny?&lt;/h4&gt;&lt;p&gt;
            During testing I'd been working with firefox, which, if you request an extensionless url, appears to send
            the following accept header (according to the &lt;a rel="nofollow" target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/3829"&gt;live headers&lt;/a&gt; plugin):
          &lt;/p&gt;&lt;code&gt;
            Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
          &lt;/code&gt;&lt;p&gt;So in my algorithm you'd get:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;text/html (default q = 1) - sorted before xhtml because requested first&lt;/li&gt;&lt;li&gt;application/xhtml+xml (default q = 1)&lt;/li&gt;&lt;li&gt;application/xml;q=0.9&lt;/li&gt;&lt;li&gt;*/*;q=0.8&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;In this scenario the code looks for a template for html, finds one and returns (ignoring the rest of the list).&lt;/p&gt;&lt;p&gt;
            When I saw the output from &lt;a rel="nofollow" target="_blank" href="http://twitter.com/porkandpaws"&gt;porkandpaws&lt;/a&gt; tweet it was immediately clear
            that he was seeing the XML output instead of html.  A quick run in debug mode gave the following accept header
            from Safari 4:
          &lt;/p&gt;&lt;code&gt;
            Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
          &lt;/code&gt;&lt;p&gt;
            It would appear that if no extension is specified Safari will prioritise XML over XHTML. With application/xml requested
            before application/xhtml+xml and with both being assigned the default quality level 1 my algorithm assumed the
            client wanted the XML view and returned it!
          &lt;/p&gt;&lt;p&gt;
            The quick fix was to prioritise types containing 'html' before falling back to request order.  This may not be
            a perfect solution, but lets be pragmatic, I'd only implemented this on a whim - no-one is actually using this site
            other than for the html or rss view.
          &lt;/p&gt;&lt;h4&gt;Conclusion&lt;/h4&gt;&lt;p&gt;
            To round up then, although overengineering and random play code is almost inevitable for the curious developer
            when working for themselves with no timescale, it doesn't excuse full testing and you can never rule out what any change,
            no matter how 'isolated', might effect.
          &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Xml Explicit Always Sucks</title>
            <link>http://cargowire.net/articles/xmlexplicitiseasy</link>
            <description>You and I both know that if you ever venture into the world of SQL Server's XML explicit, you usually
        end up regretting it. So here's a brief example of how it works.. just to refresh your memory.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/xmlexplicitiseasy</guid>
            <pubDate>Thu, 05 Nov 2009 20:15:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;SQL Server's Xml Explicit has always managed to annoy me.  It's one of those things you don't do often enough to have it 
          solidified in your mind...  So here's a quick example to refresh both yours and my mind:&lt;/p&gt;&lt;h3 id="title_simpledatabase"&gt;1) Simple Database&lt;/h3&gt;&lt;table class="erd"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan="3"&gt;Contributor&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr class="primarykey"&gt;&lt;td&gt;PK&lt;/td&gt;&lt;td&gt;ContributorId&lt;/td&gt;&lt;td&gt;int&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td &gt;&lt;td&gt;Name&lt;/td&gt;&lt;td&gt;nvarchar(50)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td &gt;&lt;td&gt;Nickname&lt;/td&gt;&lt;td&gt;nvarchar(50)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="erd"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan="3"&gt;ContributorEmail&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr class="primarykey"&gt;&lt;td&gt;PK&lt;/td&gt;&lt;td&gt;ContributorEmailId&lt;/td&gt;&lt;td&gt;int&lt;/td&gt;&lt;/tr&gt;&lt;tr class="foreignkey"&gt;&lt;td&gt;FK&lt;/td&gt;&lt;td&gt;ContributorId&lt;/td&gt;&lt;td&gt;int&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td &gt;&lt;td&gt;Email&lt;/td&gt;&lt;td&gt;nvarchar (1024)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="erd"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan="3"&gt;ContributorUrl&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr class="primarykey"&gt;&lt;td&gt;PK&lt;/td&gt;&lt;td&gt;ContributorUrlId&lt;/td&gt;&lt;td&gt;int&lt;/td&gt;&lt;/tr&gt;&lt;tr class="foreignkey"&gt;&lt;td&gt;FK&lt;/td&gt;&lt;td&gt;ContributorId&lt;/td&gt;&lt;td&gt;int&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td &gt;&lt;td&gt;Url&lt;/td&gt;&lt;td&gt;nvarchar (2048)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 id="title_syntaxrecap" style="clear:both;"&gt;2) Syntax Recap&lt;/h4&gt;&lt;p&gt;Most examples talk about the resultset order being important, and we'll address that, but lets recap the syntax first. A simple
          query for XML explicit could be:&lt;/p&gt;&lt;code&gt;
            SELECT 1 as Tag,
              NULL as Parent,
              NULL AS [contributors!1],
              NULL As [contributor!2!id],
              NULL As [contributor!2!name],
              NULL as [contributor!2!nickname],
            FROM Contributor As contributor
            UNION
            SELECT 2 As Tag,
              1 as Parent,
              NULL AS [contributors!1],
              contributor.ContributorId As [contributor!2!id],
              contributor.Name As [contributor!2!name],
              contributor.Nickname as [contributor!2!nickname],
            FROM Contributor As contributor
            
            -- Outputs (without For Xml Explicit)
            -- ========
            -- Tag  Parent
            -- 1	  NULL	NULL	NULL	NULL	  NULL	NULL	NULL	NULL	NULL
            -- 2	  1	    NULL	1	    C Rowe	Craig	NULL	NULL	NULL	NULL
            -- 2	  1	    NULL	2	    M Pike	Matt	NULL	NULL	NULL	NULL
          &lt;/code&gt;&lt;p&gt;
            Each query being unioned represents a single element in the eventual xml heirachy. 'Tag' and 'Parent' are mandatory
            for SQL Server to identify the structure you intend to create for your xml document.  The other items in the select list are
            used for each node name, it's attributes and child nodes. All nodes and attributes need to be represented in the
            full resultset so they each need to be referenced in all unioned queries (even as null on the nodes that don't
            require them).
          &lt;/p&gt;&lt;p&gt;The names of the resultset columns are used to parse the normal table output into an XML document.  In brief:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The names are enclosed in square brackets.&lt;/li&gt;&lt;li&gt;The name of the element is first, separated by an exclamation mark, followed by the node number.&lt;/li&gt;&lt;li&gt;This is then optionally followed by another separator before the attribute name.&lt;/li&gt;&lt;li&gt;The attribute name can optionally be followed by !element to force it to show as a child element
            rather than an attribute or !hide to hide from results (useful for sorting).&lt;/li&gt;&lt;li&gt;!!cdata can be used to declare an item as cdata.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So, in fig 2.0 above, Tag 1 has no parent and it's element name is 'contributors'.  A second tag is declared
          as 'contributor' with three attributes id, name and nickname.  These results are nested so tag 2 is within
          tag 1 (if there were a tag 3 it would be within tag 2).&lt;/p&gt;&lt;h4 id="title_queryordering"&gt;The Ordering&lt;/h4&gt;&lt;p&gt;The important thing to ensure is that as you look down the resultset the row above the current row either has &lt;strong&gt;the same 
          Parent value&lt;/strong&gt; (is a sibling element) or &lt;strong&gt;has as its Tag value the Parent value of below&lt;/strong&gt; (is the parent node).  An incorrect order will result in the 
          following error:&lt;/p&gt;&lt;blockquote&gt;
            Parent tag ID is not among the open tags.
          &lt;/blockquote&gt;&lt;h3 id="title_desiredoutput"&gt;Desired Output&lt;/h3&gt;&lt;p&gt;The XML we want from the database is (comments indicate tag numbers in relation to the query below):&lt;/p&gt;&lt;code&gt;
            &amp;lt;contributors&amp;gt; &amp;lt;!-- This is tag #1 --&amp;gt;
              &amp;lt;contributor id="1" name="C Rowe" nickname="Craig"&amp;gt; &amp;lt;!-- This is tag #2 --&amp;gt;
                &amp;lt;urls&amp;gt; &amp;lt;!-- This is tag #3 --&amp;gt;
                  &amp;lt;url&amp;gt;http://cargowire.net&amp;lt;/url&amp;gt; &amp;lt;!-- This is tag #5 --&amp;gt;
                &amp;lt;/urls&amp;gt;
                &amp;lt;emails&amp;gt; &amp;lt;!-- This is tag #4 --&amp;gt;
                  &amp;lt;email&amp;gt;craig.rowe@fakeemail.co.uk&amp;lt;/email&amp;gt; &amp;lt;!-- This is tag #6 --&amp;gt;
                  &amp;lt;email&amp;gt;craig@randommail.com&amp;lt;/email&amp;gt; &amp;lt;!-- This is tag #6 --&amp;gt;
                &amp;lt;/emails&amp;gt;
              &amp;lt;/contributor&amp;gt;
              &amp;lt;contributor id="2" name="M Pike" nickname="Matt" /&amp;gt; &amp;lt;!-- This is tag #2 --&amp;gt;
            &amp;lt;/contributors&amp;gt;
          &lt;/code&gt;&lt;p&gt;Notice the node numbering increments for each differently named node and for each indentation i.e. no tab indent 
            has one distinct element name (contributors) this is node 1.  Single tab indent has one distinct name (contributor)
            and so is node 2.  At two levels of indent 'urls' and 'emails' become node 3 and 4 respectively leaving three indents
            in 'url' and 'email' to be 5 and 6.&lt;/p&gt;&lt;h3&gt;Query&lt;/h3&gt;&lt;p&gt;The query below can be used on the above database to display the desired output. There may well be a more succinct way
          of doing this, but I like the readability.&lt;/p&gt;&lt;p /&gt;&lt;code&gt;
            -- Section 1: Outer select allows for ordering at end
            SELECT Tag, Parent,
              [contributors!1],
              [contributor!2!id],
              [contributor!2!name],
              [contributor!2!nickname],
              null as [emails!3],
              null as [urls!4],
              [email!5],
              [url!6]
            FROM (
            -- end section 2
              -- Section 2: Create the overall parent element named 'contributors'
              -- This has null values for all other fields as it has no attributes
              SELECT 1 as Tag,
                NULL as Parent,
                NULL AS [contributors!1],
                NULL As [contributor!2!id],
                NULL As [contributor!2!name],
                NULL as [contributor!2!nickname],
                NULL As [emails!3],
                NULL As [urls!4],
                null AS [email!5],
                null AS [url!6]
              FROM Contributor As contributor
              -- end section 2
              UNION
              -- Section 3: Select all the contributor nodes with attributes
              -- for id, name and nickname
              SELECT 2 As Tag,
                1 as Parent,
                NULL AS [contributors!1],
                contributor.ContributorId As [contributor!2!id],
                contributor.Name As [contributor!2!name],
                contributor.Nickname as [contributor!2!nickname],
                NULL As [emails!3],
                NULL As [urls!4],
                NULL As [email!5],
                null As [url!6]
              FROM Contributor As contributor
              -- end section 3
              UNION
              -- Section 4: Create 'emails' container nodes, inner join to ContributorEmail to ensure
              -- no 'emails' container if no 'email' nodes to fill it later
              SELECT 3 As Tag,
                2 as Parent,
                NULL AS [contributors!1],
                contributor.ContributorId As [contributor!2!id],
                contributor.Name As [contributor!2!name],
                contributor.Nickname as [contributor!2!nickname],
                'emails' As [emails!3],
                NULL As [urls!4],
                NULL As [email!5],
                null As [urls!6]
              FROM Contributor As contributor
                INNER join ContributorEmail AS email on Email.ContributorId = contributor.ContributorId
                -- end section 4
              UNION
              -- Section 5: Create 'urls' container nodes, inner join to ContributorUrl to ensure
              -- no 'urls' container if no 'url' nodes to fill it later
              SELECT 4 AS Tag,
                2 as Parent,
                NULL AS [contributors!1],
                contributor.ContributorId As [contributor!2!id],
                contributor.Name As [contributor!2!name],
                contributor.Nickname as [contributor!2!nickname],
                NULL As [emails!3],
                'urls' As [urls!4],
                NULL As [email!5],
                null As [url!6]
              FROM Contributor As contributor
                INNER join ContributorUrl As url on Url.ContributorId = contributor.ContributorId
               -- end section 5
              UNION
              -- Section 6: Select all email nodes with the 'emails' tag as parent
              SELECT 5 AS Tag,
                3 as Parent,
                NULL AS [contributors!1],
                contributor.ContributorId As [contributor!2!id],
                contributor.Name As [contributor!2!name],
                contributor.Nickname as [contributor!2!nickname],
                'emails' As [emails!3],
                NULL As [urls!4],
                email.Email As [email!5],
                NULL As [url!6]
              FROM Contributor As contributor
                INNER join ContributorEmail AS email on Email.ContributorId = contributor.ContributorId
              -- end section 6
              UNION
              -- Section 7: Select all url nodes with the 'urls' tag as parent
              SELECT 6 AS Tag,
                4 as Parent,
                NULL AS [contributors!1],
                contributor.ContributorId As [contributor!2!id],
                contributor.Name As [contributor!2!name],
                contributor.Nickname as [contributor!2!nickname],
                NULL As [emails!3],
                'urls' As [urls!4],
                null As [email!5],
                url.url As [url!6]
              FROM Contributor As contributor
                INNER join ContributorUrl As url on Url.ContributorId = contributor.ContributorId
              -- end section 7
            ) as Contributors
            -- Section 8: By Ordering by contributor id followed by emails and urls we ensure
            -- the correct order to avoid the 'parent tag is not among the open tags' problem
            ORDER BY [Contributor!2!id], Contributors.[emails!3], Contributors.[urls!4]
            FOR XML EXPLICIT
          &lt;/code&gt;&lt;h3 id="title_tableresultset"&gt;Table resultset&lt;/h3&gt;&lt;table class="resultset"&gt;&lt;caption&gt;Note the ordering of the Tag and Parent columns and the way the 'emails' and 'urls' columns
            can be used to assist this ordering&lt;/caption&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tag&lt;/th&gt;&lt;th&gt;Parent&lt;/th&gt;&lt;th&gt;[contributors!1]&lt;/th&gt;&lt;th&gt;[contributor !2!id]&lt;/th&gt;&lt;th&gt;[contributor !2!name]&lt;/th&gt;&lt;th&gt;[contributor !2!nickname]&lt;/th&gt;&lt;th&gt;[emails!3]&lt;/th&gt;&lt;th&gt;[urls!4]&lt;/th&gt;&lt;th&gt;[email!5]&lt;/th&gt;&lt;th&gt;[url!6]&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;C Rowe&lt;/td&gt;&lt;td&gt;Craig&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;C Rowe&lt;/td&gt;&lt;td&gt;Craig&lt;/td&gt;&lt;td&gt;NULL ('urls')&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;C Rowe&lt;/td&gt;&lt;td&gt;Craig&lt;/td&gt;&lt;td&gt;NULL ('urls')&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;http://cargowire.net&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;C Rowe&lt;/td&gt;&lt;td&gt;Craig&lt;/td&gt;&lt;td&gt;NULL ('emails')&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;C Rowe&lt;/td&gt;&lt;td&gt;Craig&lt;/td&gt;&lt;td&gt;NULL ('emails')&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;craig.rowe@fakeemail.co.uk&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;C Rowe&lt;/td&gt;&lt;td&gt;Craig&lt;/td&gt;&lt;td&gt;NULL ('emails')&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;craig@randommail.com&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;M Pike&lt;/td&gt;&lt;td&gt;Matt&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h3 id="title_conclusion"&gt;Final Thoughts&lt;/h3&gt;&lt;p&gt;Xml Explicit is particularly powerful and is often the easiest course of action if a service is designed with Xml in mind.  However
          it can lead to large complex queries.  Users should consider the use of temporary tables if multiple unions occur on laborious queries.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Why .NET MVC? (and why should we care?)</title>
            <link>http://cargowire.net/articles/whydotnetmvc</link>
            <description>An intro and brief take on .NET MVC and what it means particularly in reference to WebForms.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/whydotnetmvc</guid>
            <pubDate>Tue, 18 Aug 2009 13:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
            Having &lt;a rel="nofollow" target="_blank" href="http://boagworld.com/news/dont-hate-me-for-my-net"&gt;previously written&lt;/a&gt; about the highs and, perhaps more importantly, lows of 
            working as a .NET developer.  This article will continue the trip into Microsoft World, only this time it’s to the land of MVC.
          &lt;/p&gt;&lt;p&gt;
            Recently Microsoft was brought back to the attention of many, not just for the interestingly named Bing, the Yahoo ‘partnership’, or the 
            &lt;a rel="nofollow" target="_blank" href="http://microsoftontheissues.com/cs/blogs/mscorp/archive/2009/07/31/windows-7-and-browser-choice-in-europe.aspx"&gt;delights of a browser
            choice screen&lt;/a&gt;.  Developers with their ear to the Redmond ground became aware of something being touted as the next big thing for Microsoft
            .NET development – ‘MVC’.
          &lt;/p&gt;&lt;p&gt;
            Although &lt;a rel="nofollow" target="_blank" href="http://codebetter.com/blogs/jeffrey.palermo/archive/2007/10/05/altnetconf-scott-guthrie-announces-asp-net-mvc-framework-at-alt-net-conf.aspx"&gt;announced some time ago&lt;/a&gt;
            many users left it aside until &lt;a rel="nofollow" target="_blank" href="http://weblogs.asp.net/scottgu/archive/2009/01/27/asp-net-mvc-1-0-release-candidate-now-available.aspx"&gt;a more complete release&lt;/a&gt;.  Now however, 
            with &lt;a rel="nofollow" target="_blank" href="http://haacked.com/archive/0001/01/01/asp.net-mvc-released.aspx"&gt;another release on the horizon&lt;/a&gt;
            and many examples of sites that use MVC (including the particularly well known &lt;a rel="nofollow" target="_blank" href="http://stackoverflow.com"&gt;StackOverflow&lt;/a&gt;) it is certainly something people are using on a daily basis.
          &lt;/p&gt;&lt;p&gt;
            As would any eager developer I tried the beta, &lt;a rel="nofollow" target="_blank" href="http://cargowire.net/blog/mvcfinallyinstalled"&gt;had fun installing the final release&lt;/a&gt;
            and have now been involved working with and using it. My impressions so far are good.  It would appear that Microsoft have addressed those amongst us 
            bemoaning the issues of WebForms.  For example lets take a look at a collection of comment snippets from the “don’t hate me post”:
          &lt;/p&gt;&lt;h2 id="title_markup"&gt;Markup&lt;/h2&gt;&lt;blockquote&gt;
            When I first tried the winforms model after being a ASP developer for many years part of me loved it’s rapid development but I always felt a bit dirty 
            when looking at the source code...
            &lt;cite&gt;&lt;a rel="nofollow" target="_blank" href="http://www.mmwebdesign.co.uk/"&gt;Chris Morledge&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;
            A key point really here is that the abstraction that was provided by .NET webforms was/is, for some, a step too far.  The masking of actual html output
            behind server controls, although rapid, caused friction between backend and front end developers. A carefully crafted html design would often be bounced
            back and forth as developers implemented using controls.&lt;/p&gt;&lt;p&gt;Conversely MVC is far closer to the metal in terms of both your
            html and indeed your required knowledge of the way the web works.  Although views are often output with 
            &lt;a rel="nofollow" target="_blank" href="http://blog.wekeroad.com/blog/aspnet-mvc-preview-using-the-mvc-ui-helpers/"&gt;html helpers&lt;/a&gt; these are far easier to customize than creating your
            own &lt;a rel="nofollow" target="_blank" href="http://www.singingeels.com/Articles/How_To_Control_Adapters.aspx"&gt;Custom Control Adapters&lt;/a&gt;.
            With .NET MVC, webforms Developers will be reminded that there is no inherent state on the web (and perhaps hopefully of the separation between back and front
            end development - I've never been a fan of auto-generated javascript.  It can lead to an over reliance and ignorance of approaches like
            &lt;a rel="nofollow" target="_blank" href="http://domscripting.com/blog/display/41"&gt;hijax&lt;/a&gt;).
          &lt;/p&gt;&lt;h2&gt;Tutorials Available&lt;/h2&gt;&lt;blockquote&gt;
            All of the training material and tutorials will show you how to do it the easy way
            &lt;cite&gt;Tim Snadden&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;This has been an issue I've had with some Microsoft materials for a long time.  Reading about things like &amp;lt;asp:SqlDataSource /&amp;gt; controls
          always left a bad taste in the mouth in terms of reusability, testability and layered architecture.  However, some of the &lt;a rel="nofollow" target="_blank" href="http://www.asp.net/learn/mvc/tutorial-38-cs.aspx"&gt;materials on the MVC site&lt;/a&gt;
          are bucking that trend.&lt;/p&gt;&lt;h2 id="title_workingarounddotnet"&gt;Working around .NET&lt;/h2&gt;&lt;blockquote&gt;
            we crafted our own pseudo MVC framework
            &lt;cite&gt;&lt;a rel="nofollow" target="_blank" href="http://fellowshiptech.com/"&gt;cmv&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;
            Similarly to cmv many devs have crafted their own implementation to separate presentation and logic concerns.  I have previously discussed using XML
            and XSL for this.  However now we don't have to, or if we do want to with .NET we can at least work from an
            &lt;a rel="nofollow" target="_blank" href="http://haacked.com/archive/2009/04/01/aspnetmvc-open-source.aspx"&gt;open source framework&lt;/a&gt; (yes MVC is on an open license) with a
            &lt;a rel="nofollow" target="_blank" href="http://codebetter.com/blogs/jeffrey.palermo/archive/2008/01/27/mvccontrib-now-offers-four-4-alternative-view-engines-for-asp-net-mvc.aspx"&gt;multitude of available view engines&lt;/a&gt;
            or even &lt;a rel="nofollow" target="_blank" href="http://www.coderjournal.com/2009/05/creating-your-first-mvc-viewengine/"&gt;create our own view engines&lt;/a&gt;.
          &lt;/p&gt;&lt;p&gt;Seemingly few people who dislike the idea of using Microsoft technologies are aware of the &lt;a rel="nofollow" target="_blank" href="http://www.mono-project.com/Main_Page"&gt;Mono Project&lt;/a&gt;.
            An open source .NET implementation with an IDE (&lt;a rel="nofollow" target="_blank" href="http://monodevelop.com/"&gt;Mono Develop&lt;/a&gt;).  For those of you who would like to know more
            I thoroughly recommend &lt;a rel="nofollow" target="_blank" href="http://blog.stackoverflow.com/2009/07/podcast-61/"&gt;Miguel de Icaza's appearance on the stackoverflow podcast&lt;/a&gt;.  Mono is
            also &lt;a rel="nofollow" target="_blank" href="http://arstechnica.com/microsoft/news/2009/07/microsoft-issues-patent-promise-dispels-mono-concerns.ars"&gt;not as open to legal attack from Microsoft&lt;/a&gt;
            as people may think.
          &lt;/p&gt;&lt;h2 id="title_howto"&gt;So how is it done?&lt;/h2&gt;&lt;p&gt;There are already many resources for learning .NET MVC, not least the &lt;a rel="nofollow" target="_blank" href="http://asp.net/mvc"&gt;asp.net/mvc&lt;/a&gt; site itself.  In brief a project
          will contain:&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;Views - Implementing IView (guaranteeing a Render() method)&lt;/dt&gt;&lt;dd&gt;&lt;p&gt;The default MVC project from Visual Studio includes a number of sample views.  These are instances of the ViewPage class.
            Data can be passed to these views by the controller through the ViewData property bag.  However if you change the type to ViewPage&amp;lt;T&amp;gt; these
            views become typed views.  For example you may have a 'CustomerViewModel' object (encapsulating view related information for a Customer entity/Customer 
            BO ) and so create a ViewPage&amp;lt;CustomerViewModel&amp;gt;.  In this case
            the View has access to a ViewData.Model which will be a typed customer view model instance.&lt;/p&gt;&lt;p&gt;In terms of team breakdown these '.aspx' pages will be where the html is and where designers may wish to make their mark.&lt;/p&gt;&lt;code&gt;
                &amp;lt;%@ Page="" Title="" Language="C#" 
                    MasterPageFile="~/Views/Shared/Cargowire.Master" Inherits="System.Web.Mvc.ViewPage&amp;lt;IEnumerable
                      &amp;lt;BlogPost&amp;gt;&amp;gt;" %&amp;gt;
              &lt;/code&gt;&lt;/dd&gt;&lt;dt&gt;Controllers - Implementing IController (guaranteeing an Execute() method) or generally inheriting from the Controller class&lt;/dt&gt;&lt;dd&gt;The Controllers job will be to direct the traffic based upon the request, including processing actions (using methods that return ActionResult)
            that map to the 'action' url part.
            &lt;code&gt;
              // GET: /Home/
              public ActionResult Index()
              {
                ... // e.g. Commands to return an IEnumerable&amp;lt;BlogPost&amp;gt;
              
                return View(blogPosts)  // returns ViewResult(IView) (Ultimately inherited from ActionResult)
              }
            &lt;/code&gt;&lt;/dd&gt;&lt;dt&gt;Models - Component(s) for maintaining state&lt;/dt&gt;&lt;dd&gt;Models can take many forms including business objects &lt;a rel="nofollow" target="_blank" href="http://www.asp.net/Learn/mvc/tutorial-10-cs.aspx"&gt;mapped to sql through linq to sql&lt;/a&gt;
            or of course a number of layers including services, repository and business object classes.&lt;/dd&gt;&lt;dt&gt;Routes defined in Global.asax&lt;/dt&gt;&lt;dd&gt;&lt;code&gt;
                routes.MapRoute(
                  "Default",                                              // Route name
                  "{controller}/{action}/{id}",                           // URL with parameters
                  new { controller = "Blog", action = "Index", id = "" }  // Parameter defaults
                );
              &lt;/code&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;h2 id="title_theprocess"&gt;The Process&lt;/h2&gt;&lt;p&gt;Figures 1.1 - 1.3 illustrate a simple example using .NET MVC.  In this example a route has been defined for the blog controller
          and the action 'Index'.  When a site visitor hits 'http://site.com/blog/index' the .NET MVC Framework will invoke the Blog Controller's
          Index method.  This method will ultimately retrieve an IEnumerable&amp;lt;BlogPost&amp;gt; instance which can then be displayed within
          the typed view.  For example the view content could be:&lt;/p&gt;&lt;code&gt;
            &amp;lt;% foreach (var post in Model) { %&amp;gt;
              &amp;lt;div&amp;gt;
                &amp;lt;h2&amp;gt;&amp;lt;%= ViewData.Model.Title %&amp;gt;&amp;lt;/h2&amp;gt;
                &amp;lt;p&amp;gt;&amp;lt;%= ViewData.Model.Body %&amp;gt;&amp;lt;/p&amp;gt;
              &amp;lt;/div&amp;gt;
            &amp;lt;% } %&amp;gt;
          &lt;/code&gt;&lt;p&gt;In this simple example the BlogPost class is a business object that could well map directly to a persistant storage entity.  However in a more
          fleshed out system it could be that the View is typed to a 'BlogPostsViewModel' that contains items that can be enumerated for listings, plus items
          for category description etc.&lt;/p&gt;&lt;h2 id="title_conclusion"&gt;Final Thoughts&lt;/h2&gt;&lt;p&gt;This article has attempted to do two things.  Firstly to act as a sequel to "Don't Hate me for my .NET" but secondly to introduce, at a basic
          level, .NET MVC.  The example given is to provide a flavour of MVC development on the .NET platform and could be expanded to cover a number of other
          currently favoured approaches and technologies including more detailed assessment of the Model and how the dependencies interact. 
          However, that may be for another day.&lt;/p&gt;&lt;p&gt;The community around .NET MVC is already thriving with a plethora resources, many of which I have linked to when possible above.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>New article posted! (Ubuntu gets inside Vista)</title>
            <link>http://cargowire.net/blog/ubuntuinvistaarticle</link>
            <description>&lt;p&gt;
            Just posted a new article covering how to get a previously installed dual boot of Ubuntu and Vista to work seamlessly inside VirtualBox running
            on Vista (check it out over in the articles section).  It's something I did a while back and have been meaning to finish
            the article on.  It has definately increased my usage of Ubuntu.
          &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/ubuntuinvistaarticle</guid>
            <pubDate>Sun, 09 Aug 2009 16:15:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
            Just posted a new article covering how to get a previously installed dual boot of Ubuntu and Vista to work seamlessly inside VirtualBox running
            on Vista (check it out over in the &lt;a rel="nofollow"&gt;articles&lt;/a&gt; section).  It's something I did a while back and have been meaning to finish
            the article on.  It has definately increased my usage of Ubuntu.
          &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Ubuntu gets inside Windows</title>
            <link>http://cargowire.net/articles/seamlessubuntuwindows</link>
            <description>A run down on my experiences of getting my pre-existing Ubuntu install to run inside VirtualBox on vista.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/seamlessubuntuwindows</guid>
            <pubDate>Sun, 09 Aug 2009 16:15:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;Some time ago, after building my PC and getting rather hard drive happy, I set up an install of Ubuntu
          on a dual boot (for all that native linux work I do...).  However I soon found that going back and forth between the
          two was putting me off making any active use of it.  And so the quest began...&lt;/p&gt;&lt;p&gt;Ok, so not really a quest but I did want to get to my ubuntu/vista holy grail :&lt;/p&gt;&lt;img class="featured"/&gt;&lt;p&gt;The above is a screenshot of my current set up.  Running Vista natively I use Sun's Virtual Box to access and use
          the Ubuntu install that I had previously been separately booting into.  This means I can avoid any migration of data
          from the separate disk into a VHD and I can still boot into Ubuntu natively if I need to.  In seamless mode I can even
          play around and make screenshots like the above where IE sits above an Ubuntu Firefox&lt;/p&gt;&lt;h2 id="title_dualboot"&gt;Step 1 (implied): Dual Boot Ubuntu and Vista&lt;/h2&gt;&lt;p&gt;Install Ubuntu onto a separate drive and get it to dual boot (Download Ubuntu, create bootable disk, install to new drive,
          &lt;a rel="nofollow" target="_blank" href="https://help.ubuntu.com/9.04/installation-guide/i386/module-details.html#di-make-bootable" title="Make Ubuntu Install bootable"&gt;setup booting&lt;/a&gt; etc).
          Depending on how you set it up you may find &lt;a rel="nofollow" target="_blank" href="http://download.eclipse.org/tools/pdt/updates/"&gt;Easy BCD&lt;/a&gt;
          a useful app (if you end up wanting to frig with the windows Boot Loader).&lt;/p&gt;&lt;h2 id="title_installvirtualbox"&gt;Step 2: Download and Install Virtual Box&lt;/h2&gt;&lt;p&gt;Nip over to &lt;a rel="nofollow" target="_blank" href="http://www.virtualbox.org/wiki/Downloads"&gt;Virtual Box&lt;/a&gt; and bag yourself a copy - currently 'VirtualBox 3.0.4 for Windows host'.&lt;/p&gt;&lt;p&gt;Bearing in mind the joy of Vistas UAC you may need to run this as admin.&lt;/p&gt;&lt;h2 id="title_readdocumentation"&gt;Step 3: Read the documentation - get scared&lt;/h2&gt;&lt;p&gt;Page 134 of the &lt;a rel="nofollow" target="_blank" href="http://download.virtualbox.org/virtualbox/3.0.4/UserManual.pdf"&gt;version 3.0.4 user manual&lt;/a&gt; describes the use of a complete
          physical hard disk as the source for the guest operating system.&lt;/p&gt;&lt;p&gt;Apart from scaring the bejesus out of you with talk of corruption and loss of data
          it identifies that you need to create a VMDK file and assign it to a virtual machine.&lt;/p&gt;&lt;h2 id="title_createvmdk"&gt;Step 4: Creating a VMDK file&lt;/h2&gt;&lt;p&gt;Section 9.10.1 provides us with the following code (to run in a dos command window - that is again being run as admin):&lt;/p&gt;&lt;blockquote&gt;VBoxManage.exe internalcommands createrawvmdk -filename /path/to/file.vmdk -rawrisk /dev/sda&lt;/blockquote&gt;&lt;p&gt;This will create a vmdk file named 'file.vmdk' from the disk '/dev/sda'.  Ultimately the example code translates for us 'Vista hosting
          Ubuntu' folk to something like:&lt;/p&gt;&lt;code&gt;
            C:&amp;#92;Program Files&amp;#92;Sun&amp;#92;xVM VirtualBox&amp;gt;VBoxManage.exe internalcommands createrawvmdk -filename C:&amp;#92;Tools&amp;#92;ubuntu.vmdk -rawdisk &amp;#92;&amp;#92;.&amp;#92;PhysicalDrive2 -partitions 1,5 -register
          &lt;/code&gt;&lt;p&gt;Note that two partitions are included in my VMDK creation script - unlike the example code.  The user manual doesn't 
          include partition specifiers.  However if you need to do so you can identify the partition numbers using the following command:&lt;/p&gt;&lt;code&gt;
            C:&amp;#92;Program Files&amp;#92;Sun&amp;#92;xVM VirtualBox&amp;gt;VBoxManage.exe internalcommands listpartitions -rawdisk &amp;#92;&amp;#92;.&amp;#92;PhysicalDrive2
          &lt;/code&gt;&lt;p&gt;This will result in a screen similar to below (you can see where I got 1,5 from for my createrawvmdk command):&lt;/p&gt;&lt;img class="featured"/&gt;&lt;p&gt;PhysicalDrive2 in the createvmdk command is in reference to the fact that my machine was/is running 3 HDs (Windows (0), Data (1), Ubuntu (2)).&lt;/p&gt;&lt;h2 id="title_boot"&gt;Step 5: How am I going to make it boot?&lt;/h2&gt;&lt;p&gt;The easiest way to boot the system is to create a bootable CD and mount that as part of the virtual machine startup. To create this, first
          boot into your Ubuntu install.&lt;/p&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.gnu.org/software/grub/manual/html_node/Making-a-GRUB-bootable-CD-ROM.html" title="GRUB Bootable CD"&gt;Gnu.org&lt;/a&gt;
          then provides a succinct description on how to create a bootable grub CD:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Create a place to store your source files for the bootable disk ([home folder]/iso/boot/)&lt;/li&gt;&lt;li&gt;Copy the 'stage2_eltorito' file from '/usr/lib/grub/i386-pc/stage2_eltorito'&lt;/li&gt;&lt;li&gt;Copy the menu.lst file from '/boot/grub/menu.lst'&lt;/li&gt;&lt;li&gt;
              Or just run:
              &lt;code&gt;
                ~$ mkdir iso
                ~$ mkdir -p iso/boot/grub
                ~$ cp /usr/lib/grub/i386-pc/stage2_eltorito iso/boot/grub
              &lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;At this point you may wish to edit the menu.lst file.  My original menu.lst file included menu options for Ubuntu and Vista.
          As the boot would be occuring within the VM with knowledge only of the physical disk I was booting in to I had to adjust the menu items.
          Removing the vista related boot options and changing the ubuntu options to use (hd0,0) instead of (hd2,0).&lt;/p&gt;&lt;p&gt;An ISO can then be created using mkisofs as below (assumes [home folder]/iso/boot as the location of the copied stage2_eltorito and menu.lst):
              &lt;code&gt;~$ mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o grub.iso iso&lt;/code&gt;&lt;/p&gt;&lt;div class="sub"&gt;&lt;p&gt;
              For more information on the mkisofs command check out the &lt;a rel="nofollow" target="_blank" href="http://linuxcommand.org/man_pages/mkisofs8.html" title="mkisofs Man Page"&gt;man page&lt;/a&gt;.
              In short: 
              &lt;ul&gt;&lt;li&gt;-b signifies an El Torito bootable media is being created from the path 'boot/grub/stage2_eltorito' (relative to the source path - the 'iso' at the end of the command).&lt;/li&gt;&lt;li&gt;-o signifies the filename of the iso output (grub.iso).&lt;/li&gt;&lt;li&gt;-no-emul-boot is included as this is not a floppy image&lt;/li&gt;&lt;li&gt;-boot-load-size 4 is recommended for backwards compatibility as some OS's will have problems if it is not a multiple of four&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Before returning to Ubuntu copy the ISO to somewhere accessible to windows (either direct to a shared HD or temporarily on to a USB etc).&lt;/p&gt;&lt;h2 id="title_startup"&gt;Step 6: Start it up&lt;/h2&gt;&lt;p&gt;Back in vista you should now be able to open up VirtualBox (running as admin to avoid permissions errors on disk access).&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Create a new virtual machine with whatever name you like as Linux Ubuntu&lt;/li&gt;&lt;li&gt;Choose an allocation of Memory.  I opted for 512MB of my total 4GB&lt;/li&gt;&lt;li&gt;Choose 'use an existing hard disk' and select the VMDK file you created earlier&lt;/li&gt;&lt;li&gt;Once created open the settings for the new virtual machine and choose 'CD/DVD-ROM'&lt;/li&gt;&lt;li&gt;Choose to Mount an ISO image file and choose the ISO you created within ubuntu&lt;/li&gt;&lt;li&gt;Ensure the boot order under 'System' has CD/DVD-ROM above Hard Disk&lt;/li&gt;&lt;li&gt;Start the Virtual Machine&lt;/li&gt;&lt;/ul&gt;&lt;h2 id="title_resolution"&gt;Step 7: Ok so I'm in.. but the resolution is tiny&lt;/h2&gt;&lt;p&gt;The first thing I noticed when I entered the VM was that I had a very low resolution and was unable to resize the window larger. This may not be
          an issue for you.  However if, like me, it was then you need to install VirtualBox Guest Additions.&lt;/p&gt;&lt;p&gt;Using the 'Devices -&amp;gt; Install Guest Additions' option on the VBox window attempts to mount the Guest Additions install as a CD within Ubuntu.  However when I tried this it kept
          getting confused between the grub.iso and the disk I was trying to mount.  Rather than faff around too much I found it easier to do the following:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Copy the VBoxGuestAdditions.iso from C:&amp;#92;Program Files&amp;#92;Sun&amp;#92;xVM VirtualBox&amp;#92; to somewhere accessible by Ubuntu (either USB or direct to the ubuntu drive
            from windows while VBox is closed and before booting normally in to ubuntu).&lt;/li&gt;&lt;li&gt;Within Ubuntu use something like gISOMount or simply extract the contents of the ISO&lt;/li&gt;&lt;li&gt;From the command line navivate to the extracted/mounted folder and run:
              &lt;code&gt;~$ sudo sh VBoxLinuxAdditions-x86.run&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Back into windows and start up your VM - you should find that you can now resize to your hearts content.  Choosing 'Machine -&amp;gt; Seamless Mode'
            will allow you to run Linux and Vista windows side by side as in the first screenshot.&lt;/li&gt;&lt;/ul&gt;</content:encoded>
          </item>
          <item>
            <title>I love the dev community for this reason:</title>
            <link>http://cargowire.net/blog/whyilovethedevcommunity</link>
            <description>&lt;p&gt;One of the reasons I've always enjoyed being part of the web is the fantastic people it attracts.  Rarely
          have I met someone in the industry that I couldn't get on with on some level... and today that view was reinforced.&lt;/p&gt;&lt;p&gt;Anyways on with the story... as with many others, when I first left University I signed up to a bunch of recruitment sites, as well as 
          applying to companies direct (in classic 'keep as many options open as possible stylé').  When doing so, I signed up to the unwritten
        law that I would thereafter receive more spam than actual e-mail - I was once even berated by some crazy recruiter
      for telling him I had a job (after he'd ran through a minute long rant about a job opportunity without stopping for breath).&lt;/p&gt;&lt;p&gt;Therefore I'm quite used to deleting a lot of e-mails from my inbox on a daily basis. So much so that I didn't stop to think about
          it until I saw that a couple of e-mails had the same subject line with 'RE:'...&lt;/p&gt;&lt;p&gt;It started with:&lt;/p&gt;&lt;p&gt;Addressed to a company address and copied to well over 500 possible applicants.  This was then succinctly followed by the first reply...&lt;/p&gt;&lt;p&gt;and this...&lt;/p&gt;&lt;p&gt;and finally...&lt;/p&gt;&lt;p&gt;Now it might just be me in a late Monday night computer stupor but that definately cheered up my day! I must then add
          (personal ad stylé) 'GSOH' as an extra point for Paul's recent post.&lt;/p&gt;&lt;p&gt;Cheers to the guys who I've quoted here!&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/whyilovethedevcommunity</guid>
            <pubDate>Mon, 20 Jul 2009 22:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;One of the reasons I've always enjoyed being part of the web is the fantastic people it attracts.  Rarely
          have I met someone in the industry that I couldn't get on with on some level... and today that view was reinforced.&lt;/p&gt;&lt;p&gt;Anyways on with the story... as with many others, when I first left University I signed up to a bunch of recruitment sites, as well as 
          applying to companies direct (in classic 'keep as many options open as possible stylé').  When doing so, I signed up to the unwritten
        law that I would thereafter receive more spam than actual e-mail - I was once even berated by some crazy recruiter
      for telling him I had a job (after he'd ran through a minute long rant about a job opportunity without stopping for breath).&lt;/p&gt;&lt;p&gt;Therefore I'm quite used to deleting a lot of e-mails from my inbox on a daily basis. So much so that I didn't stop to think about
          it until I saw that a couple of e-mails had the same subject line with 'RE:'...&lt;/p&gt;&lt;p&gt;It started with:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Good evening,&lt;/p&gt;&lt;p&gt;I specialise in placing IT Contractors across the UK and Europe and I have the following vacancy that you may be interested...&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Addressed to a company address and copied to well over 500 possible applicants.  This was then succinctly followed by the first reply...&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"This e-mail is confidential and is intended solely for the use of the individual or entity to whom it is addressed"&lt;/p&gt;&lt;p&gt;so that's all fucking 640 of us then?&lt;/p&gt;&lt;p&gt;Marked as spam for sharing people's email addresses and possibly breaking some sort of data protection law, though how you got these email addresses is questionable to begin with as I have never given mine to you.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;and this...&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;This amuses me.&lt;/p&gt;&lt;p&gt;Recruitment FAIL.&lt;/p&gt;&lt;p&gt;I’m sure if you’d like help developing a mail distribution system though Mr [.....], there’s 640 of us that could potentially help you.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;and finally...&lt;/p&gt;&lt;blockquote&gt;Dude - that was magnificent! I've never heard of [.....], [.....] and I've certainly never given anyone permission to give my email to them either.&lt;/blockquote&gt;&lt;p&gt;Now it might just be me in a late Monday night computer stupor but that definately cheered up my day! I must then add
          (personal ad stylé) 'GSOH' as an extra point for &lt;a rel="nofollow" target="_blank" href="http://boagworld.com/personal/the-wonder-of-the-web" title="The Wonder of the Web"&gt;Paul's recent post&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Cheers to the guys who I've quoted here!&lt;/p&gt;</content:encoded>
          </item>
        </channel>
      </rss>
    </barn>
  </page>
</cargowire>