<?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" />
    <company id="2" name="Bluesulphur" />
    <company id="3" name="Headscape" />
  </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-02-05</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-03-07 21:20</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/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/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="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="53">Basic authentication is not supported</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&amp;page=2" />
          <pubDate>Fri, 18 May 2012 18:30:26 +0000</pubDate>
          <generator>http://pipes.yahoo.com/pipes/</generator>
          <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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/9IMwy8ys7mU42FRNXekos-p0AFA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9IMwy8ys7mU42FRNXekos-p0AFA/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/9IMwy8ys7mU42FRNXekos-p0AFA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9IMwy8ys7mU42FRNXekos-p0AFA/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">06103148-F19A-4110-884D-CB4CB8966F0F</guid>
            <pubDate>Wed, 09 May 2012 10:02:42 +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>Developing a mobile strategy is really quite important</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/N4FiVsjwbyk/</link>
            <description>I was recently in Nottingham speaking at the Mobile Marketers Conference 2012 on why we should bother about mobile at all. Why does mobile matter? </description>
            <guid isPermaLink="false">http://www.robborley.com/?p=372</guid>
            <pubDate>Wed, 25 Apr 2012 15:07:01 +0000</pubDate>
            <content:encoded>&lt;div class="tweetmeme_button" style="float:right;margin-left:10px;"&gt;
			&lt;a rel="nofollow" target="_blank" href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.robborley.com%2Fdeveloping-a-mobile-strategy-is-really-quite-important%2F"&gt;&lt;br /&gt;
				&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.robborley.com%2Fdeveloping-a-mobile-strategy-is-really-quite-important%2F&amp;amp;source=bobscape&amp;amp;style=normal&amp;amp;service=ow.ly&amp;amp;b=2" height="61" width="50"/&gt;&lt;br /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;I was recently in Nottingham speaking at the Mobile Marketers Conference 2012 on why we should bother about mobile at all. Why does mobile matter? &lt;span id="more-372"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</content:encoded>
            <category>mobile</category>
          </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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/urYOOTIjKl7bKgw_0lnPH4ntY88/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/urYOOTIjKl7bKgw_0lnPH4ntY88/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/urYOOTIjKl7bKgw_0lnPH4ntY88/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/urYOOTIjKl7bKgw_0lnPH4ntY88/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">D021B6F3-516C-436A-9AD2-FA9F9E1E7EC0</guid>
            <pubDate>Wed, 25 Apr 2012 11:47:49 +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 Web Design</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/cIPIDkbOdKE/s03e01</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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/iu8C08BOmxsp6vh7OV02KcbInRc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iu8C08BOmxsp6vh7OV02KcbInRc/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/iu8C08BOmxsp6vh7OV02KcbInRc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iu8C08BOmxsp6vh7OV02KcbInRc/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/cIPIDkbOdKE" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">54AFEC5C-369B-4DA3-AB2E-45698DBF46BF</guid>
            <pubDate>Wed, 11 Apr 2012 09:36:41 +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 two most common questions asked of app developers</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/qARYA5_TmXc/</link>
            <description>In my role running an app agency I am frequently asked the same two questions by prospective clients. How much does it cost to build an app? How long does it take to build an app? My answer is, more often than not, enough to scare off the prospective new client and they are never [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=363</guid>
            <pubDate>Wed, 04 Apr 2012 10:11:48 +0000</pubDate>
            <content:encoded>&lt;div class="tweetmeme_button" style="float:right;margin-left:10px;"&gt;
			&lt;a rel="nofollow" target="_blank" href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.robborley.com%2Fthe-two-most-common-questions-asked-of-app-developers%2F"&gt;&lt;br /&gt;
				&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.robborley.com%2Fthe-two-most-common-questions-asked-of-app-developers%2F&amp;amp;source=bobscape&amp;amp;style=normal&amp;amp;service=ow.ly&amp;amp;b=2" height="61" width="50"/&gt;&lt;br /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;In my role &lt;a rel="nofollow" title="Dootrix - Business and Enterprise Apps" target="_blank" href="http://www.dootrix.com"&gt;running an app agency &lt;/a&gt;I am frequently asked the same two questions by prospective clients.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;How much does it cost to build an app?&lt;/li&gt;
&lt;li&gt;How long does it take to build an app?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;My answer is, more often than not, enough to scare off the prospective new client and they are never heard of again.&lt;/p&gt;
&lt;h3&gt;Apps are not websites!&lt;/h3&gt;
&lt;p&gt;Many such clients have had experience in running or commissioning web projects. This background tends to create a false expectation of both cost and timescales of an app project. Apps are fundamentally different to websites as they are real software. They are fundamentally more complex and require a more specialist skill set to design and build them. We have reached the stage with web technology that everybody has a brother, or an uncle, or a neighbour, or somebody that they know can knock them out a website in a few weeks for a couple of hundred pounds. Granted, a professional web agency will give you a better experience and an all round better end result for considerably more time and money but the cheap and cheerful option is available. This is not really the case when it comes to apps.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;How much does it cost to build an app?&lt;br /&gt;
Between £7.5k and £50k+ ;This is a typical custom developed app for your shop, sports club, school, college, news portal, music festival, organisation or whatever. This is the price for one platform. If you want you app to work on multiple platforms (windows, iOS, Android) then you need to multiply up the cost accordingly. The grand total will depend, obviously, on the complexity of the app and what other systems you might want to integrate with.&lt;/li&gt;
&lt;li&gt;How long does it take to build my app?&lt;br /&gt;
2 – 6 months ;1 – 3 weeks to develop the initial wireframes&lt;br /&gt;
2 – 4 weeks to complete the design&lt;br /&gt;
1 – 4 months to develop the beta version of your app&lt;br /&gt;
1 – 2 months to test and make it bug free.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;You have been warned&lt;/h3&gt;
&lt;p&gt;Be vary wary of freelancers who promise an app for a couple of thousand pounds in a few weeks. There are a large number of freelancers out there who are biting off more than they can chew and you may end up paying a lot more than you bargained for over a much longer period of time. If you get anything delivered at all.&lt;/p&gt;
&lt;p&gt;Consider yourself warned. *smile*&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This was originally posted on in-tracton.com. Join in the conversation &lt;a rel="nofollow" title="in-traction.com - common questions for app developers" target="_blank" href="http://www.in-traction.com/the-two-most-common-questions-asked-of-app-developers/"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content:encoded>
            <category>mobile</category>
          </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>Emotional about mobile</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/rpAPTOzSnn8/</link>
            <description>My mobile phone is an extension of me. Everything I do in my day to day life is through my phone in some form. It holds my photos, my music, my videos, my calendar, my email. I interact with my social networks through it, I answer life&amp;#8217;s little questions with it. I kill time with [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=354</guid>
            <pubDate>Thu, 08 Mar 2012 10:40:16 +0000</pubDate>
            <content:encoded>&lt;div class="tweetmeme_button" style="float:right;margin-left:10px;"&gt;
			&lt;a rel="nofollow" target="_blank" href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.robborley.com%2Femotional-about-mobile%2F"&gt;&lt;br /&gt;
				&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.robborley.com%2Femotional-about-mobile%2F&amp;amp;source=bobscape&amp;amp;style=normal&amp;amp;service=ow.ly&amp;amp;b=2" height="61" width="50"/&gt;&lt;br /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;My mobile phone is an extension of me. Everything I do in my day to day life is through my phone in some form. It holds my photos, my music, my videos, my calendar, my email. I interact with my social networks through it, I answer life&amp;#8217;s little questions with it. I kill time with it and I catch up with distant friends with it. I even make the occasional call. It&amp;#8217;s always on my person, never out of reach. And I&amp;#8217;m sorry to have to admit that it&amp;#8217;s the last thing I see at night and the first thing I see in morning. But I&amp;#8217;m guessing I&amp;#8217;m not alone.&lt;/p&gt;
&lt;h3&gt;This time it&amp;#8217;s personal&lt;/h3&gt;
&lt;p&gt;You must have had that sinking feeling when somebody, for whatever reason, asks to have a look at your phone. Or even worse, use it to &amp;#8220;check something&amp;#8221;. You know that you have to allow this. You have to pass your shiny device into the hands of another. There is no socially acceptable way to not. But as you do, you know that a little piece of you is now at the mercy of an outsider. They have access to your world!&lt;/p&gt;
&lt;p&gt;Because of the amount of time we spend with our smart devices, and the things that we use them for, we form an emotional connection with them. We are protective of them and do not tolerate lightly anything that may interfere with the normal running of them.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;When our tools don&amp;#8217;t work, we tend to blame ourselves, for being too stupid or not reading the manual or having too-fat fingers &amp;#8230;. When our tools are broken, we feel broken. And when somebody fixes one, we feel a tiny bit more whole. -&lt;em&gt;Steve Jobs&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;This is why your organisation must consider mobile when developing an online strategy. We are using mobile devices to access services and interact online with increasing regularity. Very soon (some estimates place it at 2014) there will be more people interacting online via a mobile device than via a traditional desktop / laptop. Our online behaviour is changing and this time it&amp;#8217;s personal.&lt;/p&gt;
&lt;p&gt;If I attempt to use your services or access your content and it doesn&amp;#8217;t play nicely with my smartphone it is quite possible that I will not only find it frustrating, but I will offended by it. How dare you break my shiny device? This may sound a little strong but the emotional connection that I have formed with my device, that is an extension of myself, could lead me to place a black mark against your organisation if you didn&amp;#8217;t deem it worth your time to consider me when providing your services.&lt;/p&gt;
&lt;h3&gt;Blue screen of death&lt;/h3&gt;
&lt;p&gt;If you are developing apps then they need to not crash my phone, access or share my data without permission, or negatively impact my experience of using my device in any way. When software produced a &amp;#8220;blue screen of death&amp;#8221; on windows then, no matter what happen or why, it was the stupid computers fault. If your app &amp;#8220;breaks&amp;#8221; my phone, no matter how or why, it&amp;#8217;s your fault!&lt;/p&gt;
&lt;p&gt;If your website is unreadable or unusable on my touch screen device then it shows that you were not interested in me. Forcing me to use a traditional internet access method (if I still have access to one) means that I am not important to you. And fobbing me off with a poorly implemented mobile alternative site that leaves me thinking that I&amp;#8217;m missing something and looking for the &amp;#8220;show full site link&amp;#8221; makes me feel like you just don&amp;#8217;t care.&lt;/p&gt;
&lt;h3&gt;It&amp;#8217;s been emotional&lt;/h3&gt;
&lt;p&gt;Mobile device use invokes an emotional reaction. This means that the damage that can be done to the image of your organisation is greatly increased. If you have not yet considered mobile in your online strategy then do so soon. Before you do any more damage.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This post was originally published on &lt;a rel="nofollow" title="Boagworld.com" target="_blank" href="http://boagworld.com/mobile-web/emotional-about-mobile/"&gt;boagworld.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</content:encoded>
            <category>mobile</category>
          </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>Dootrix has a brand new website</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/rq4HCPoLnTw/</link>
            <description>I thought that it was about time that I practised what I preached and so Dootrix (my mobile development agency) has a brand new responsive website. That is pretty much all there is to this story, other than, ooo, isn&amp;#8217;t it shiny and resizable! If you are in need of any mobile development work or just want to [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=345</guid>
            <pubDate>Wed, 29 Feb 2012 14:11:51 +0000</pubDate>
            <content:encoded>&lt;div class="tweetmeme_button" style="float:right;margin-left:10px;"&gt;
			&lt;a rel="nofollow" target="_blank" href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.robborley.com%2Fdootrix-has-a-brand-new-website%2F"&gt;&lt;br /&gt;
				&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.robborley.com%2Fdootrix-has-a-brand-new-website%2F&amp;amp;source=bobscape&amp;amp;style=normal&amp;amp;service=ow.ly&amp;amp;b=2" height="61" width="50"/&gt;&lt;br /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;I thought that it was about time that I practised what I preached and so &lt;a rel="nofollow" title="Dootrix - Mobile applications for business and enterprise" target="_blank" href="http://www.dootrix.com"&gt;Dootrix&lt;/a&gt; (my mobile development agency) has a brand new responsive website.&lt;/p&gt;
&lt;p&gt;That is pretty much all there is to this story, other than, ooo, isn&amp;#8217;t it shiny and resizable!&lt;/p&gt;
&lt;p&gt;If you are in need of any mobile development work or just want to have a chat about your mobile strategy then hop on over and &lt;a rel="nofollow" title="Contact Dootrix" target="_blank" href="http://www.dootrix.com/#contact"&gt;get in touch&lt;/a&gt;.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Building a website made ‘Simpl’</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/r8F3UwfnNl4/</link>
            <description>Dootrix have been working with the nice people at Simpl on their new website building app. The launch is not to far away now and they produced this little video to wet your apetite. I&amp;#8217;ll post more detail on what went into the project after it&amp;#8217;s launch early next month. Check out simpl.com for more [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=334</guid>
            <pubDate>Thu, 23 Feb 2012 16:17:56 +0000</pubDate>
            <content:encoded>&lt;div class="tweetmeme_button" style="float:right;margin-left:10px;"&gt;
			&lt;a rel="nofollow" target="_blank" href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.robborley.com%2Fbuilding-a-website-made-simpl%2F"&gt;&lt;br /&gt;
				&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.robborley.com%2Fbuilding-a-website-made-simpl%2F&amp;amp;source=bobscape&amp;amp;style=normal&amp;amp;service=ow.ly&amp;amp;b=2" height="61" width="50"/&gt;&lt;br /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;&lt;a rel="nofollow" title="Dootrix - My app agency" target="_blank" href="http://www.dootrix.com"&gt;Dootrix&lt;/a&gt; have been working with the nice people at Simpl on their new website building app. The launch is not to far away now and they produced this little video to wet your apetite.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll post more detail on what went into the project after it&amp;#8217;s launch early next month.&lt;/p&gt;
&lt;p&gt;Check out &lt;a rel="nofollow" title="Simpl" target="_blank" href="http://www.simpl.com"&gt;simpl.com&lt;/a&gt; for more information.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>The App Bubble</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/EkvgzVyG-oc/</link>
            <description>We are in an app bubble. Still. We have been since the launch of the iPhone 3G in 2008. This is something that I hear a lot in my role running an app development agency. Apps are a fad; the .com boom / gold rush of our time. Where will you be when the bubble [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=326</guid>
            <pubDate>Tue, 21 Feb 2012 14:24:23 +0000</pubDate>
            <content:encoded>&lt;div class="tweetmeme_button" style="float:right;margin-left:10px;"&gt;
			&lt;a rel="nofollow" target="_blank" href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.robborley.com%2Fthe-app-bubble%2F"&gt;&lt;br /&gt;
				&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.robborley.com%2Fthe-app-bubble%2F&amp;amp;source=bobscape&amp;amp;style=normal&amp;amp;service=ow.ly&amp;amp;b=2" height="61" width="50"/&gt;&lt;br /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;We are in an app bubble. Still. We have been since the launch of the iPhone 3G in 2008. This is something that I hear a lot in my role running an &lt;a rel="nofollow" title="Dootrix Ltd - We build apps" target="_blank" href="http://www.dootrix.com"&gt;app development agency&lt;/a&gt;. Apps are a fad; the .com boom / gold rush of our time. Where will you be when the bubble bursts in a year or two? One day we will all grow up and go back to mobile sites. etc etc etc.&lt;/p&gt;
&lt;p&gt;Well, it&amp;#8217;s now 2012. We are approaching four years of life in said bubble. So is there any truth in it? I think that the answer is yes. And no. We are in something of bubble, but rather than it bursting what we are seeing is a maturing of peoples approach to it.&lt;span id="more-326"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;The billion doller app&lt;/h3&gt;
&lt;p&gt;Every app developer wants to invent Angry Birds. Rovio, the company behind it, are now worth over a $1 billion. It was downloaded 6.5million times on Christmas day (2011) alone. That&amp;#8217;s a big number. But with over 500,000 different apps now in the apple app store alone (plus the windows and android apps that are out there) for every Angry Birds there are many many thousands of apps that you have never heard of and are rarely downloaded.&lt;/p&gt;
&lt;p&gt;Building apps is an expensive business too. Yes, you can find a freelancer to build an app for a couple of thousand pounds but you are taking your chances with what you end up with. I know many freelancers who are very reputable but there are also a large number who are after a quick buck or simply bite off more than they can chew. Building apps is not the same as building websites, as many prospective clients suppose. Software development is a more specialist and more expensive skill. The simplest of apps are going to cost you upwards of £7k. If you add any degree of complexity you need to be considering a budget of upwards of £30k. My point is, you can waste a lot of money seeking the next Angry Birds and chances are you will be one of the many who are either never downloaded or downloaded and used only once.&lt;/p&gt;
&lt;h3&gt;More smartphones than people&lt;/h3&gt;
&lt;p&gt;Sounds like a bubble then. We will soon all be wise to this and give up on apps. I think not. The growth in smart device technology take-up shows no sign of slowing down. By the end of 2012 some predictions suggest that there will be &lt;a rel="nofollow" target="_blank" href="http://mashable.com/2012/02/14/more-smartphones-than-humans/"&gt;more smartphones than people&lt;/a&gt; on planet earth! We heard from the Office of National Statistics late last year that 70% of people aged 16-25 access the internet on a smart device while out and about. Current estimates suggest that by 2014 use of a mobile smart device to access online services will over take that of traditional desktop / laptops.&lt;/p&gt;
&lt;p&gt;The picture is clear. Our behaviour online is changing because we are, increasingly, accessing services via this new breed of device. When using these devices the best experience in many (not all) circumstances is provided via a native app. And for this reason apps are not going away any time soon.&lt;/p&gt;
&lt;h3&gt;A maturing market&lt;/h3&gt;
&lt;p&gt;However, we will see a maturing in the market. The rush to join the app gold rush will give way to a more mature, considered approach. As an organisation you need to have clear goals for your app; both for yourselves and the intended users. Does this app have a purpose, does it meet a need? Do your users want or need an app? And, importantly, are you going to see a return on your investment?&lt;/p&gt;
&lt;p&gt;I am going to put myself out there and say that you are not going to invent Angry Birds. However, with careful, considered planning you can develop apps, as part of a wider mobile strategy that will include a mobile optimised website, that are of value to your users and provide a solid return on investment.&lt;/p&gt;
&lt;h3&gt;Get in touch&lt;/h3&gt;
&lt;p&gt;If developing such a web strategy is something that you are interested in why not get in touch.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a rel="nofollow" title="The App Bubble" target="_blank" href="http://www.in-traction.com/the-app-bubble/"&gt;in-traction.com&lt;/a&gt;. Head on over and join in the conversation.&lt;/em&gt;&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>Is a Tablet mobile or portable?</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/ciNrX8x3EAg/</link>
            <description>[box type="info"] This post was originally posted on in-traction.com. Head on over and join in the discussion.[/box] This is the question, it seems, that Facebook have been wrestling with for some time. I think that we can all learn from the journey that they appear to have been on. I use the word appear because I [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=308</guid>
            <pubDate>Thu, 24 Nov 2011 22:35:33 +0000</pubDate>
            <content:encoded>&lt;div class="tweetmeme_button" style="float:right;margin-left:10px;"&gt;
			&lt;a rel="nofollow" target="_blank" href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.robborley.com%2Fis-a-tablet-mobile-or-portable%2F"&gt;&lt;br /&gt;
				&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.robborley.com%2Fis-a-tablet-mobile-or-portable%2F&amp;amp;source=bobscape&amp;amp;style=normal&amp;amp;service=ow.ly&amp;amp;b=2" height="61" width="50"/&gt;&lt;br /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;[box type="info"] This post was originally posted on &lt;a rel="nofollow" title="Is a Tablet mobile or portable?" target="_blank" href="http://www.in-traction.com/is-a-tablet-mobile-or-portable/"&gt;in-traction.com&lt;/a&gt;. Head on over and join in the discussion.[/box]&lt;/p&gt;
&lt;p&gt;This is the question, it seems, that Facebook have been wrestling with for some time. I think that we can all learn from the journey that they appear to have been on. I use the word appear because I have no connection with Facebook, I have no inside knowledge. This is just as the situation appears to me; looking in from the outside.&lt;/p&gt;
&lt;h3&gt;The Facebook u-turn&lt;/h3&gt;
&lt;p&gt;Back in November 2010 Mark Zuckerberg, founder of Facebook, said that &lt;a rel="nofollow" target="_blank" href="http://www.tipb.com/2010/11/03/zuckerberg-facebook-app-ipad-mobile/"&gt;there would be no iPad app for Facebook as the iPad was not mobile&lt;/a&gt;. Yesterday, finally, saw the launch of the &lt;a rel="nofollow" target="_blank" href="http://gadgetwise.blogs.nytimes.com/2011/10/10/facebook-ipad-app-is-a-vast-improvement-on-web-site/"&gt;Facebook iPad app&lt;/a&gt;. So what has changed?&lt;span id="more-308"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It seems that Mark Zuckerberg had not grasped that a Tablet was more than just a small laptop. He was expecting users to be happy, and able, to use his fantastic application on their Tablet device in its current form. Either that, or, he was not expecting the Tablet&amp;#8217;s rise to be so profound.&lt;/p&gt;
&lt;p&gt;Understanding of new devices and what they can bring is growing. Content providers are increasingly aware that the way that you present your content or functionality for each device may need to be fundamentally different. Whether or not a Tablet is mobile or portable is debatable. The point is that it&amp;#8217;s different. A Tablet is not a laptop / desktop and neither is it a phone.&lt;/p&gt;
&lt;p&gt;Facebook seem to have now understood this. It&amp;#8217;s true that you could access the Facebook web site via your iPad. You could also access a touch optimised version via touch.facebook.com. You could even just use the iPhone app on your iPad. But none of these were quite right. A custom built version of the application, for the specific device, was the correct approach in this case. Observers are already saying that the iPad app provides a better experience that the standard website on a desktop / laptop.&lt;/p&gt;
&lt;h3&gt;What does this mean?&lt;/h3&gt;
&lt;p&gt;Facebook is the perfect site for a native app conversion. What is interesting is that they chose to take a working web app and make it native. Facebook have the advantage of seemingly bottomless pockets but this tells us that leading content providers are taking the Tablet, as a platform, seriously. In the coming months and years users will be not replacing their ageing laptops with a new laptop. But, instead, they will replace them with a Tablet.&lt;/p&gt;
&lt;p&gt;It is time to start considering the impact that this will have on services that you provide.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</content:encoded>
            <category>mobile</category>
          </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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/d8RWq7g-Wht6yY87nwnqrtomU40/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d8RWq7g-Wht6yY87nwnqrtomU40/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/d8RWq7g-Wht6yY87nwnqrtomU40/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d8RWq7g-Wht6yY87nwnqrtomU40/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">F55DB47D-930B-4AB7-87CC-B6DE7F5B6AD4</guid>
            <pubDate>Thu, 10 Nov 2011 23:16:45 +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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/bSBd-uq9ft6IxOJmutZO3Bzw-80/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bSBd-uq9ft6IxOJmutZO3Bzw-80/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/bSBd-uq9ft6IxOJmutZO3Bzw-80/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bSBd-uq9ft6IxOJmutZO3Bzw-80/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">6DA87834-F2C9-48CC-A4B5-BA35C2F6E7CE</guid>
            <pubDate>Wed, 26 Oct 2011 14:20:46 +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 modern web design</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/hY-0X0TEk58/</link>
            <description>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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/LqVrCnfZ6oP5y9IIqs9AUPUjOWo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LqVrCnfZ6oP5y9IIqs9AUPUjOWo/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/LqVrCnfZ6oP5y9IIqs9AUPUjOWo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LqVrCnfZ6oP5y9IIqs9AUPUjOWo/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">6E50457E-7817-45E4-B4D2-65B578402F45</guid>
            <pubDate>Wed, 12 Oct 2011 15:28:24 +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>Navigating The Mobile Maze – The Mobile Factsheet</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/cG_lTLmK9SQ/</link>
            <description>We all know how important the mobile web has become, but what is the right approach? Should we build an iPhone app or mobile website? This factsheet explores your options. &amp;#160; Open publication &amp;#8211; Free publishing The full post was recently published on boagworld.com or you the download The Mobile Factsheet here.</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=304</guid>
            <pubDate>Wed, 12 Oct 2011 07:47:50 +0000</pubDate>
            <content:encoded>&lt;div class="tweetmeme_button" style="float:right;margin-left:10px;"&gt;
			&lt;a rel="nofollow" target="_blank" href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.robborley.com%2Fnavigating-the-mobile-maze-the-mobile-factsheet%2F"&gt;&lt;br /&gt;
				&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.robborley.com%2Fnavigating-the-mobile-maze-the-mobile-factsheet%2F&amp;amp;source=bobscape&amp;amp;style=normal&amp;amp;service=ow.ly&amp;amp;b=2" height="61" width="50"/&gt;&lt;br /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;We all know how important the mobile web has become, but what is the right approach? Should we build an iPhone app or mobile website? This factsheet explores your options.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-304"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;embed type="application/x-shockwave-flash" src="http://static.issuu.com/webembed/viewers/style1/v2/IssuuReader.swf"&gt;&lt;/iframe&gt; &amp;nbsp;
&lt;div style="width:420px;text-align:left;"&gt;&lt;a rel="nofollow" target="_blank" href="http://issuu.com/boagworld/docs/mobilemaze/5"&gt;Open publication&lt;/a&gt; &amp;#8211; Free &lt;a rel="nofollow" target="_blank" href="http://issuu.com"&gt;publishing&lt;/a&gt;&lt;/div&gt;
&lt;div style="width:420px;text-align:left;"&gt;The full post was recently published on&lt;a rel="nofollow" target="_blank" href="http://boagworld.com/business-strategy/mobile-maze/"&gt; boagworld.com&lt;/a&gt; or you the &lt;a rel="nofollow" title="The Mobile Factsheet" target="_blank" href="http://dl.dropbox.com/u/228092/Factsheet%20-%20The%20Mobile%20Maze.pdf"&gt;download The Mobile Factsheet here.&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;</content:encoded>
            <category>mobile</category>
          </item>
          <item>
            <title>Boston Globe proves browser is king. Maybe….</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/CHzOPR81d2A/</link>
            <description>[box type="info"] This post was originally posted on in-traction.com. Head on over and join in the discussion.[/box] There has been quite a stir in recent weeks about Boston Globe. This American daily publication has shunned Apple and its in-app subscription model and decided instead to develop a new desktop browser based website  which is optimised for [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=300</guid>
            <pubDate>Thu, 06 Oct 2011 08:34:30 +0000</pubDate>
            <content:encoded>&lt;div class="tweetmeme_button" style="float:right;margin-left:10px;"&gt;
			&lt;a rel="nofollow" target="_blank" href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.robborley.com%2Fboston-globe-proves-browser-is-king-maybe%2F"&gt;&lt;br /&gt;
				&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.robborley.com%2Fboston-globe-proves-browser-is-king-maybe%2F&amp;amp;source=bobscape&amp;amp;style=normal&amp;amp;service=ow.ly&amp;amp;b=2" height="61" width="50"/&gt;&lt;br /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;[box type="info"] This post was originally posted on &lt;a rel="nofollow" title="Boston Globe proves browser is king. Maybe...." target="_blank" href="http://www.in-traction.com/boston-globe-proves-browser-is-king-maybe/"&gt;in-traction.com&lt;/a&gt;. Head on over and join in the discussion.[/box]&lt;/p&gt;
&lt;p&gt;There has been quite a stir in recent weeks about &lt;a rel="nofollow" title="Boston Globe" target="_blank" href="http://bostonglobe.com"&gt;Boston Globe&lt;/a&gt;. This American daily publication has shunned Apple and its in-app subscription model and decided instead to develop a new desktop browser based website  which is optimised for mobile browsers using a techniques called adaptive and reactive design. We are going to take a brief look at what they did, why it works for them, and whether or not you should care.&lt;span id="more-300"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Boston Globe have produced a fantastic example of adaptive and reactive design.  It is the first major site of its kind to receive such public acclaim and has been heralded as proof that apps are a  short lived blot on the landscape of browser dominance. While it is a very impressive piece of work and a very good solution for their needs I don&amp;#8217;t think we should be writing the obituary of the app just yet.&lt;/p&gt;
&lt;h3&gt;React&lt;/h3&gt;
&lt;p&gt;Reactive design is a technique where by the website reacts to the size of its containing browser. Resizing the browser will automatically adjust the layout of the website to optimise the content for its new surroundings.  This might mean making images smaller or changing column widths; even removing columns entirely.  The idea is that no matter what your reading preference you will have a view of the content that is optimised for you.&lt;/p&gt;
&lt;h3&gt;Adapt&lt;/h3&gt;
&lt;p&gt;Adaptive design is a similar technique in which there are 2 or more predefined states. The website adapts when it is loaded or resized to a predefined screen size. For example you might set an adapting point at iPhone screen size, or at iPad portrait screen size. This is useful in providing an optimised view of your content for specific target devices.&lt;/p&gt;
&lt;p&gt;Boston Globe combined these two approaches and produced a fully reactive adaptive site. This reacts and then, at specific points, adapts. It is a very good implementation and it goes some way to solving their major mobile problem. Post September 30th, when the pay wall goes online, they will not have to give 30% of their sales to Apple while still offering a mobile specific context to their users.&lt;/p&gt;
&lt;h3&gt;Emerging app use cases&lt;/h3&gt;
&lt;p&gt;Notice that I didn&amp;#8217;t say app like context. It&amp;#8217;s mobile specific but it&amp;#8217;s not app like. Clear use cases for browser technology and apps are emerging. If you are looking to provide a function or an interactive service; if your service requires users to &lt;em&gt;do &lt;/em&gt; something then you need to seriously consider an app. If you are providing traditional or corporate content then a mobile optimised web site is what you should be looking into.  Admittedly subscription news providers do fit somewhere in the middle but Apple&amp;#8217;s policy on in-app purchasing revenues have push this one way instead of the other. On the other hand news services providing free content have tended to go down the app route. The BBC News app is a great example of this.&lt;/p&gt;
&lt;p&gt;Boston Globe&amp;#8217;s approach hasn&amp;#8217;t, by any means, killed the app. However, what they have shown is that there is a viable alternative for content providers who are looking for mobile optimisation rather than mobile functionality.&lt;/p&gt;</content:encoded>
            <category>mobile</category>
          </item>
          <item>
            <title>Working With WordPress</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/C7GCM9WLSeI/</link>
            <description>WordPress has come a long way since its humble beginnings as a blogging tool. It’s now a fully fledged content management system. But is it still the right choice for a site like Boagworld?
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/fJE-k9m9sNgtVZ0l-AW3bGbVU78/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fJE-k9m9sNgtVZ0l-AW3bGbVU78/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/fJE-k9m9sNgtVZ0l-AW3bGbVU78/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fJE-k9m9sNgtVZ0l-AW3bGbVU78/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">39ECB6E0-926B-4699-9F69-5A6A87697310</guid>
            <pubDate>Wed, 28 Sep 2011 09:44:39 +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>Beyond the smart phone</title>
            <link>http://feedproxy.google.com/~r/robborleycom/~3/FkQw8umns5Q/</link>
            <description>[box type="info"] This post was originally posted on in-traction.com. Head on over and join in the discussion.[/box] Following on from last weeks post from Kev about how the size of the device really does matter I have found myself considering how I actually use my devices. While I was aware that use of my laptop had [...]</description>
            <guid isPermaLink="false">http://www.robborley.com/?p=291</guid>
            <pubDate>Thu, 22 Sep 2011 13:42:49 +0000</pubDate>
            <content:encoded>&lt;div class="tweetmeme_button" style="float:right;margin-left:10px;"&gt;
			&lt;a rel="nofollow" target="_blank" href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.robborley.com%2Fbeyond-the-smart-phone%2F"&gt;&lt;br /&gt;
				&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.robborley.com%2Fbeyond-the-smart-phone%2F&amp;amp;source=bobscape&amp;amp;style=normal&amp;amp;service=ow.ly&amp;amp;b=2" height="61" width="50"/&gt;&lt;br /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
&lt;p&gt;[box type="info"] This post was originally posted on &lt;a rel="nofollow" title="Beyond the smart phone" target="_blank" href="http://www.in-traction.com/beyond-the-smart-phone/"&gt;in-traction.com&lt;/a&gt;. Head on over and join in the discussion.[/box]&lt;/p&gt;
&lt;p&gt;Following on from last weeks post from Kev about how&lt;a rel="nofollow" title="Size Matters" target="_blank" href="http://www.in-traction.com/size-matters/"&gt; the size of the device really does matter&lt;/a&gt; I have found myself considering how I actually use my devices. While I was aware that use of my laptop had changed since I started using an iPhone I was quite surprised to realised that my usage of my iPhone had radically changed since I started using an iPad.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-291"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The arrival of smart phones and, more specifically, &amp;#8220;Apps&amp;#8221;, has led to the usage of mobile devices expanding far beyond even what happened with the initial arrival of the camera (feature) phone. Walk along any high street in any town and you will see people walking along, head down, tapping an a screen. However, it is emerging that while you can use your smart phone for many things, and that there is indeed an &amp;#8220;app for that&amp;#8221;, you may not want to use your smart phone when you have a viable alternative.&lt;/p&gt;
&lt;h3&gt;Smart phones are now number one&lt;/h3&gt;
&lt;p&gt;Smart phones, for the first time, have now &lt;a rel="nofollow" title="Smartphones out-ship feature phones in Europe, Samsung leads the way" target="_blank" href="http://www.engadget.com/2011/09/12/smartphones-out-ship-feature-phones-in-europe-samsung-leads-the/?a_dgi=aolshare_twitter"&gt;out shipped feature phones&lt;/a&gt;. They are well and truly mainstream tech. It&amp;#8217;s becoming increasingly difficult to not buy a smart phone. It&amp;#8217;s the default sale. Smart phones are now, simply, mobiles phones. Everybody will soon have one. You might think, therefore, that getting you services onto a phone is a must. But there is a newer arrival that is complicating the landscape.&lt;/p&gt;
&lt;p&gt;Tablets (such as iPad) have put a huge dent in the sales of other types of PC. For many light computer users they are a viable alternative to a PC while other, heavier users, are looking to augment their PC with a tablet. As one such user I own a smart phone, a tablet, and a laptop PC and I have found my usage of each device has changed as a result.&lt;/p&gt;
&lt;p&gt;When I first started using a smart phone I used it for everything. Web surfing, email, social network, games and reading the news. I found that it was much more convenient, not only when I was out and about, but when I was at home. Rather than turn on my laptop I could use my iPhone. It was better suited to some tasks that others; writing long emails could be a pain for example, but it was so much more convenient that using my laptop that I put up with it. Not any longer.&lt;/p&gt;
&lt;p&gt;Now I have a tablet. My iPad is much better suited to reading and writing email or taking notes in a meeting. Surfing the web on the sofa is a breeze with my tablet and would choose this experience every time over the inconvenience of switching on my laptop or the small screen of my iPhone. Reading books or magazines, again, is now a job for the iPad. The iPhone is now reserved for tasks when mobility is all important. Tweeting, posting photos, reading news, yes, but only on the move, maybe on public transport.&lt;/p&gt;
&lt;h3&gt;One device does not fit all&lt;/h3&gt;
&lt;p&gt;From one device fits all we have started the journey towards the use of specific devices being dependent on task and context. It is no longer good enough to simply publish a smart phone app. We need to think a little more deeply about it.&lt;/p&gt;
&lt;p&gt;My three devices have three very specific roles. My laptop is the work horse. Writing serious documents and any kind of creative work where I will be doing something for an extended period of time. My tablet is for day to day use. Reading, writing quick messages, taking notes, etc. My smart phone is used for convenience while on the go. It&amp;#8217;s becoming increasingly important to know and understand these device differences. Your apps can be tailored for each context and for each task. Apps for smart phones, tablets and increasingly desktop / laptop PCs with the arrival of the Mac App Store and forthcoming Windows 8 Market Place mean that you can tailor the experience for each device. Not only is your tablet not just a big smart phone, it&amp;#8217;s also not a small PC. They are different, and need to be treated as such.&lt;/p&gt;
&lt;p&gt;When considering app development for your organisation you will, of course, start with a smart phone in mind. However, it&amp;#8217;s worth being open to the possibility this may not be the right device for your customers.&lt;/p&gt;
&lt;h3&gt;Cross device winners and losers?&lt;/h3&gt;
&lt;p&gt;Do you have any thoughts on tablet apps that should have been redesigned when imported from the smart phone? Or have you come across any great examples of smart phone to tablet conversions?&lt;/p&gt;</content:encoded>
            <category>mobile</category>
          </item>
          <item>
            <title>Real Life Responsive Design: Ethan Marcotte</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/TFatD6f3O0Q/</link>
            <description>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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/QSaACnOVfnHjXA06WDus7I59bVU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QSaACnOVfnHjXA06WDus7I59bVU/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/QSaACnOVfnHjXA06WDus7I59bVU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QSaACnOVfnHjXA06WDus7I59bVU/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">E8344FE0-F210-4FA3-97DC-9CE712B1A632</guid>
            <pubDate>Wed, 14 Sep 2011 16:45:15 +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>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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/Vq89Ljm6tD54q4khX9iX-aXZ81A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vq89Ljm6tD54q4khX9iX-aXZ81A/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/Vq89Ljm6tD54q4khX9iX-aXZ81A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vq89Ljm6tD54q4khX9iX-aXZ81A/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">92531828-F96D-43B5-986B-D284F6210B32</guid>
            <pubDate>Wed, 31 Aug 2011 08:49:56 +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>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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/IQ0Leg7E15ZACauxpixQtH-fsM8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IQ0Leg7E15ZACauxpixQtH-fsM8/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/IQ0Leg7E15ZACauxpixQtH-fsM8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IQ0Leg7E15ZACauxpixQtH-fsM8/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">AC423AEC-C4C9-4F05-ACE1-86408A8B25CE</guid>
            <pubDate>Wed, 10 Aug 2011 20:14:21 +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>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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/cdO-8polaQNZgeyMn4xTHHtAynw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cdO-8polaQNZgeyMn4xTHHtAynw/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/cdO-8polaQNZgeyMn4xTHHtAynw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cdO-8polaQNZgeyMn4xTHHtAynw/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">9719A494-9523-430A-B311-DDA4DAF6B569</guid>
            <pubDate>Wed, 20 Jul 2011 08:25:36 +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>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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/_pwOl6p5YsQkVuXp2m8zppi-Kn4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_pwOl6p5YsQkVuXp2m8zppi-Kn4/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/_pwOl6p5YsQkVuXp2m8zppi-Kn4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_pwOl6p5YsQkVuXp2m8zppi-Kn4/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">2FBF38FF-59C4-4E94-A3F8-AF3A4CB63847</guid>
            <pubDate>Wed, 06 Jul 2011 12:27:43 +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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/G3gvQnCw6-0Eb3Xh50IS3AY5qxc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G3gvQnCw6-0Eb3Xh50IS3AY5qxc/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/G3gvQnCw6-0Eb3Xh50IS3AY5qxc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G3gvQnCw6-0Eb3Xh50IS3AY5qxc/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">EBDA119C-24EF-48F8-A982-6082173F169F</guid>
            <pubDate>Wed, 22 Jun 2011 09:11:02 +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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/u8DzZLQVVCs1wUVBx_foZeqaod4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u8DzZLQVVCs1wUVBx_foZeqaod4/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/u8DzZLQVVCs1wUVBx_foZeqaod4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u8DzZLQVVCs1wUVBx_foZeqaod4/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&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">6826B443-FEC4-4920-8F4A-04364C539D98</guid>
            <pubDate>Wed, 08 Jun 2011 14:39:05 +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/OKUm7FakWhA/</link>
            <description>To mark the end of season one of the Boagworld Show we recorded a live special from SXSW in Austin Texas.
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/v3J-SYuV6EUVXhtDIfFvYcb-ptQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v3J-SYuV6EUVXhtDIfFvYcb-ptQ/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/v3J-SYuV6EUVXhtDIfFvYcb-ptQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v3J-SYuV6EUVXhtDIfFvYcb-ptQ/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/OKUm7FakWhA" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">A858EB63-3CAC-4DDF-9923-A3A313ED4568</guid>
            <pubDate>Fri, 25 Mar 2011 12:06:31 +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/C1zyq43nAkA/</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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/FMbrwYwQDr_rkcIyMa4ZXPqCY8A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FMbrwYwQDr_rkcIyMa4ZXPqCY8A/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/FMbrwYwQDr_rkcIyMa4ZXPqCY8A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FMbrwYwQDr_rkcIyMa4ZXPqCY8A/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/C1zyq43nAkA" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">7E5278BA-F47C-4DF8-99C9-050AF3B89671</guid>
            <pubDate>Thu, 03 Mar 2011 12:03:04 +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/Uy9YOKfRnDA/</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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/8P6_TlA6IfFpWQ1BgZJqWz9BbNU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8P6_TlA6IfFpWQ1BgZJqWz9BbNU/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/8P6_TlA6IfFpWQ1BgZJqWz9BbNU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8P6_TlA6IfFpWQ1BgZJqWz9BbNU/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/Uy9YOKfRnDA" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">EAE50114-841B-412F-94CA-42D2BBB81286</guid>
            <pubDate>Thu, 24 Feb 2011 14:14:23 +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/MO6CxktWj1Y/</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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/mSYWiU48nER2Y0tizNBHGBSOcyA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mSYWiU48nER2Y0tizNBHGBSOcyA/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/mSYWiU48nER2Y0tizNBHGBSOcyA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mSYWiU48nER2Y0tizNBHGBSOcyA/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/MO6CxktWj1Y" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">7045F07C-DD86-4DB9-B808-0A6C2A78FCC9</guid>
            <pubDate>Thu, 17 Feb 2011 09:40:50 +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/06rs61CyAn8/</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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/cKHyXYLMYqfipLKqL1c-g0oU1Nc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cKHyXYLMYqfipLKqL1c-g0oU1Nc/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/cKHyXYLMYqfipLKqL1c-g0oU1Nc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cKHyXYLMYqfipLKqL1c-g0oU1Nc/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/06rs61CyAn8" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">C9D116E5-CC48-4532-A9B3-9BDC8007832B</guid>
            <pubDate>Thu, 10 Feb 2011 10:17:56 +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/j9Noy9H1Yis/</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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/KlG5U2vzAOrSBPYuFWen3RvT6wI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KlG5U2vzAOrSBPYuFWen3RvT6wI/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/KlG5U2vzAOrSBPYuFWen3RvT6wI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KlG5U2vzAOrSBPYuFWen3RvT6wI/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/j9Noy9H1Yis" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">B3493B5B-0C42-443B-A453-E08301C50392</guid>
            <pubDate>Thu, 03 Feb 2011 12:44:07 +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/Bf0YjvN7ZF8/</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;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/pCJhP9kuPT5uZjgCPdvhHgP5Oak/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pCJhP9kuPT5uZjgCPdvhHgP5Oak/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/pCJhP9kuPT5uZjgCPdvhHgP5Oak/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pCJhP9kuPT5uZjgCPdvhHgP5Oak/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/Bf0YjvN7ZF8" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">make-better-informed-decisions-about-your-site</guid>
            <pubDate>Thu, 27 Jan 2011 13:53:36 +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>
            <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>A Podcast Present</title>
            <link>http://feedproxy.google.com/~r/boagworldpodcast/~3/DRjyHJJBoKE/</link>
            <description>As it is Christmas we thought it was a good time to announce the return of the Boagworld podcast. In this special episode we introduce the new format being used when the show returns in January.
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/qtsi1Eoks7i5lN7XhWro84noOUo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qtsi1Eoks7i5lN7XhWro84noOUo/0/di" border="0" ismap&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/qtsi1Eoks7i5lN7XhWro84noOUo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qtsi1Eoks7i5lN7XhWro84noOUo/1/di" border="0" ismap&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/boagworldpodcast/~4/DRjyHJJBoKE" height="1" width="1"/&gt;</description>
            <author>paul@boagworld.com (Paul Boag)</author>
            <guid isPermaLink="false">a-podcast-present</guid>
            <pubDate>Thu, 09 Dec 2010 14:27:37 +0000</pubDate>
            <media:content fileSize="21892258" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/s1VM0ihjd_s/S00-E01.mp3" />
            <enclosure length="21892258" type="audio/mpeg" url="http://feedproxy.google.com/~r/boagworldpodcast/~5/s1VM0ihjd_s/S00-E01.mp3" />
          </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>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>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>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>
          <item>
            <title>10 Things I learnt from Glasto '09</title>
            <link>http://cargowire.net/blog/tenthingsilearntatglasto09</link>
            <description>&lt;p&gt;Back from glasto.. after getting tired/wet/sunburnt all at once I've made a list of ten... exciting huh...&lt;/p&gt;&lt;p&gt;Pick of the weekend? dan le sac Vs Scroobius Pip. So glad I finally got to see them.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/tenthingsilearntatglasto09</guid>
            <pubDate>Thu, 02 Jul 2009 21:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Back from glasto.. after getting tired/wet/sunburnt all at once I've made a list of ten... exciting huh...&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I can stop myself mid-sneeze with only an odd squeeky noise emanating out instead&lt;/li&gt;&lt;li&gt;I don't enjoy beard rubbing as a salutation&lt;/li&gt;&lt;li&gt;I should definitely stick to seeing bands I want to see, rather than bands I think I 'should' see&lt;/li&gt;&lt;li&gt;If I leave anything around the campsite I should expect it to be taken from me - but probably not too far from me&lt;/li&gt;&lt;li&gt;Extended time away from computers is definitely a good thing&lt;/li&gt;&lt;li&gt;If you eat too much junk food from the same vendor he will begin to learn your 'usual'&lt;/li&gt;&lt;li&gt;If a guy standing next to you dancing manically asks for a sip of your drink - it may not be to help a paracetamol go down&lt;/li&gt;&lt;li&gt;Feeling bad for someone can make you sit through something you really probably shouldn't&lt;/li&gt;&lt;li&gt;Leaving a gap in the middle of your tents, but not putting a gazebo in it will ultimately lead to someone else putting their tents in it&lt;/li&gt;&lt;li&gt;Wearing wellies in the sun, although stylish, is actually painful&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;Pick of the weekend? &lt;a rel="nofollow" target="_blank" href="http://lesacvspip.wordpress.com/"&gt;dan le sac Vs Scroobius Pip&lt;/a&gt;. So glad I finally got to see them.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>MVC is finally installed on my home PC!</title>
            <link>http://cargowire.net/blog/mvcfinallyinstalled</link>
            <description>&lt;p&gt;
            For those intrigued by my twitter activity tonight (OK, it was just Dave and I've already told him anyway), but still, I ambiguously cried out:
          &lt;/p&gt;&lt;p&gt;As a .NET developer who likes to complain about webforms I was pretty keen to get to grips with the
            MVC framework when it was available.  So, so I could play about with it at leisure I began a two step process:&lt;/p&gt;&lt;p&gt;
            Thus began a process of occasionally coming back to it, searching for a solution, failing to find it then giving up again for a bit.
          &lt;/p&gt;&lt;p&gt;
            The majority of sources refer to uninstalling VS addins,
            ensuring you have 3.5 SP1, ensuring you uninstall any betas etc.  I tried these things and failed... Eventually it was this post by 
            Phil Haack that was the spur that 
            led me to the solution.  As you'll see I even got to the point of commenting on the poor mans blog.
          &lt;/p&gt;&lt;p&gt;Several posts, including a response to another request I'd made on
            the asp.net forums, were even suggesting I reinstall everything, including windows, and
            start from scratch.  Now I really didn't want to do that, and to be honest, thought that should never be necessary to get something to install (imagine having to
            do that for every installation you undertake on your system).
          &lt;/p&gt;&lt;p&gt;Having attempted some of the ngen related activities proposed by Phil Haack without success I dug a little deeper into the log I was getting:&lt;/p&gt;&lt;p&gt;Now without really having any prior experience with these kind of problems I was perhaps naively believing that the MVC install would have catered for
          dependencies and that if I was getting this error clearly there was some kind of conflict or problem (the whole uninstall-reinstall stuff scenario).  This was reinforced by my attempts
          to run ngen ExecuteQueuedItems and ngen Update (and even an ngen delete at one point) all failing.  However tonight I seemingly lucked upon the 
          answer.&lt;/p&gt;&lt;p&gt;
            Having already previously identified I had the System.Data.Entity library sitting in the GAC (C:&amp;#92;Windows&amp;#92;Assembly) and the dll itself in
            C:&amp;#92;Program Files&amp;#92;Reference Assemblies&amp;#92;Microsoft&amp;#92;Framework&amp;#92;v3.5&amp;#92;System.Data.Entity.dll I was still looking for some other kind of problem. However I tried, virtually on the off chance, to directly
            ngen the dll myself rather than rely on the MVC installer to do everything for me.
          &lt;/p&gt;&lt;p&gt;Immediately after doing this I started an MVC install - it worked.&lt;/p&gt;&lt;p&gt;And so retrospectively I was annoyed as the action I took in relation to the error I was seeing seems pretty obvious!&lt;/p&gt;&lt;p&gt;Anyway it's all over, I'm off to reinstall my addins.  The nice thing about it though was I ended up getting a response from an asp.net team member on forums.asp.net, which reminded me how much
          I like the openness of Microsofts team i.e. bloggers, forum posters etc.&lt;/p&gt;&lt;p&gt;To save the jump heres some interesting info from Jacques:&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/mvcfinallyinstalled</guid>
            <pubDate>Thu, 04 Jun 2009 22:13:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
            For those intrigued by my twitter activity tonight (OK, it was just &lt;a rel="nofollow" target="_blank" href="http://www.davemcdermid.co.uk"&gt;Dave&lt;/a&gt; and I've already told him anyway), but still, I ambiguously cried out:
          &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;OMFG really was it that simple? I hate everything right now&lt;/p&gt;&lt;cite&gt;&lt;a rel="nofollow" target="_blank" href="http://twitter.com/cargowire/status/2034102008"&gt;http://twitter.com/cargowire/status/2034102008&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;As a .NET developer who &lt;a rel="nofollow"&gt;likes to complain about webforms&lt;/a&gt; I was pretty keen to get to grips with the
            &lt;a rel="nofollow" target="_blank" href="http://www.asp.net/mvc/"&gt;MVC framework&lt;/a&gt; when it was available.  So, so I could play about with it at leisure I began a two step process:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Step 1: &lt;/strong&gt;Install on work laptop - Done in seconds
            &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Step 2: &lt;/strong&gt;Install on home PC - Massive Fail
            &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;
            Thus began a process of occasionally coming back to it, searching for a solution, failing to find it then giving up again for a bit.
          &lt;/p&gt;&lt;p&gt;
            The majority of sources refer to &lt;a rel="nofollow" target="_blank" href="http://stackoverflow.com/questions/228997/aspmvc-beta-install-problems" title="Example of a post suggesting addin problems"&gt;uninstalling VS addins&lt;/a&gt;,
            ensuring you have 3.5 SP1, ensuring you uninstall any betas etc.  I tried these things and failed... Eventually it was this post by 
            &lt;a rel="nofollow" target="_blank" href="http://haacked.com/archive/2009/03/05/troubleshooting-installers.aspx" title="Phil Haack: Senior Program Manager at Microsoft"&gt;Phil Haack&lt;/a&gt; that was the spur that 
            led me to the solution.  As you'll see I even got to the point of commenting on the poor mans blog.
          &lt;/p&gt;&lt;p&gt;Several posts, including a response to another request I'd made on
            &lt;a rel="nofollow" target="_blank" href="http://forums.asp.net/p/1431141/3211599.aspx#3211599"&gt;the asp.net forums&lt;/a&gt;, were even suggesting I reinstall everything, including windows, and
            start from scratch.  Now I really didn't want to do that, and to be honest, thought that should never be necessary to get something to install (imagine having to
            do that for every installation you undertake on your system).
          &lt;/p&gt;&lt;p&gt;Having attempted some of the ngen related activities proposed by Phil Haack without success I dug a little deeper into the log I was getting:&lt;/p&gt;&lt;blockquote&gt;&lt;span&gt;ExecNetFx: Error compiling System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: Could not find or load a type. (Exception from HRESULT: 0x80131522)&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;Now without really having any prior experience with these kind of problems I was perhaps naively believing that the MVC install would have catered for
          dependencies and that if I was getting this error clearly there was some kind of conflict or problem (the whole uninstall-reinstall stuff scenario).  This was reinforced by my attempts
          to run ngen ExecuteQueuedItems and ngen Update (and even an ngen delete at one point) all failing.  However tonight I seemingly lucked upon the 
          answer.&lt;/p&gt;&lt;p&gt;
            Having already previously identified I had the System.Data.Entity library sitting in the GAC (C:&amp;#92;Windows&amp;#92;Assembly) and the dll itself in
            C:&amp;#92;Program Files&amp;#92;Reference Assemblies&amp;#92;Microsoft&amp;#92;Framework&amp;#92;v3.5&amp;#92;System.Data.Entity.dll I was still looking for some other kind of problem. However I tried, virtually on the off chance, to directly
            ngen the dll myself rather than rely on the MVC installer to do everything for me.
          &lt;/p&gt;&lt;code&gt;
            C:&amp;#92;Windows&amp;#92;Framework&amp;#92;v2.0.50727&amp;#92;ngen install "C:&amp;#92;Program Files&amp;#92;Reference Assemblies&amp;#92;Microsoft&amp;#92;Framework&amp;#92;v3.5&amp;#92;System.Data.Entity.dll"
          &lt;/code&gt;&lt;p&gt;Immediately after doing this I started an MVC install - it worked.&lt;/p&gt;&lt;p&gt;And so retrospectively I was annoyed as the action I took in relation to the error I was seeing seems pretty obvious!&lt;/p&gt;&lt;p&gt;Anyway it's all over, I'm off to reinstall my addins.  The nice thing about it though was I ended up getting a response from an asp.net team member on forums.asp.net, which reminded me how much
          I like the openness of Microsofts team i.e. bloggers, forum posters etc.&lt;/p&gt;&lt;p&gt;To save the jump heres some interesting info from Jacques:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;In the Beta we only added support to the installer to GAC the assemblies, but starting with the RCs we began to create native images as well.&lt;/p&gt;&lt;p&gt;When the MVC installer runs it automatically performs an ngen update and compiles any assembly that might be deemed to be out of date. Any failure
            during the ngen process is reported back and the installation will initiate a rollback.&lt;/p&gt;&lt;cite&gt;&lt;a rel="nofollow" target="_blank" href="http://forums.asp.net/p/1431141/3211599.aspx#3211599"&gt;Jacques Eloff&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;&lt;h3&gt;Further Reading for the Interested Reader&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.codeproject.com/KB/dotnet/demystifygac.aspx"&gt;Global Assembly Cache&lt;/a&gt; - Shared store for libraries
            &lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/6t9t5wcf(VS.80).aspx"&gt;Ngen.exe&lt;/a&gt; - Generates native processor specific machine code to avoid JITing the original assembly
            &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;</content:encoded>
          </item>
          <item>
            <title>New article posted! (don't hate me for my .net)</title>
            <link>http://cargowire.net/blog/thoughtsondotnetarticle</link>
            <description>&lt;p&gt;Yesterday I Posted a new article covering some of my thoughts on .NET (check it out over in the articles section).  It's in response to the many conversations I
                seem to have with people who are on the verge of being shocked and appalled that I use .NET. So I decided to get some of 
                that discussion down on paper.  It's not an intro to .NET or a comparison between .NET and the rest although aspects of both 
                can be found in my rambling, and I certainly don't think everyone views .NET in that way.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/thoughtsondotnetarticle</guid>
            <pubDate>Sun, 03 May 2009 13:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Yesterday I Posted a new article covering some of my thoughts on .NET (check it out over in the &lt;a rel="nofollow"&gt;articles&lt;/a&gt; section).  It's in response to the many conversations I
                seem to have with people who are on the verge of being shocked and appalled that I use .NET. So I decided to get some of 
                that discussion down on paper.  It's not an intro to .NET or a comparison between .NET and the rest although aspects of both 
                can be found in my rambling, and I certainly don't think everyone views .NET in that way.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Don't hate me for my .NET</title>
            <link>http://cargowire.net/articles/donthatemeformydotnet</link>
            <description>A quick airing of my thoughts on .NET after plenty of discussions with haters and lovers alike.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/donthatemeformydotnet</guid>
            <pubDate>Sat, 02 May 2009 17:30:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;I'm an outcast trying to fit in... at an event like FOWA I'll feel like working 
                with .NET is akin to admitting to owning the Rednex single 'cotton eye joe' from the glory days of '94... but then I'll go to a Microsoft event and feel
                like a pariah obsessed with miniscule details that I shouldn't worry about (unobtrusive javascript.. element ID and exact markup control...).&lt;/p&gt;&lt;p&gt;
                    A generalisation this may be but it highlights the difference in perception between languages such as PHP/Ruby and .NET in the world of web.
                    So much so that people often don't even list .NET when they reel off examples after the phrase 'your language of choice'.
                &lt;/p&gt;&lt;p&gt;I don't so much want to 'put the record straight' just to put forward my experience starting out with PHP and moving to .NET, with a sprinkling
                 of the stuff I usually hear against .NET.&lt;/p&gt;&lt;h2&gt;Background&lt;/h2&gt;&lt;p&gt;Following a pretty standard path I started out in web development with static HTML, moved on to being scared by CGI then dabbling with javascript 
                and later some PHP and Actionscript (with some VB6 and Java studying thrown in there for good measure too).  This led to my first full time role being as a PHP developer, which
                later evolved into a C# position.&lt;/p&gt;&lt;h2&gt;.NET WebForms vs. Everyone Else&lt;/h2&gt;&lt;p&gt;The first thing I (and many others) realise when moving to .NET (Webforms) is that it's really not the same paradigm.  In fact I'd go so far as to say that if
                you skipped straight to learning Webforms, you haven't learnt web development.  What you've learnt is winforms.  And the reason for this is that that was
                the intention of Webforms - to assist winforms developers in making the leap to the web and to mask the lack of state.&lt;/p&gt;&lt;p&gt;The 'innovation' therefore of postback/viewstate persisted server controls was that as a developer you didn't have to worry about working in a 
                stateless environment as you did with other languages. Nor did you really have to worry about the actual markup output (in the same way that
                 you wouldn't worry about how the pixels rendered for a button in a windows app).  Submit buttons and Select boxes can have server side
                 Click and IndexChanged events and before you know it you're well away without worrying about html or javascript or even css (if you went with some rather questionable
                 attributes available on server controls for presentation).&lt;/p&gt;&lt;p&gt;What this caused however was a largely negative view of .NET from the non .NET side of the tracks, and it's generally the sort of stuff I continue to hear.&lt;/p&gt;&lt;ol class="featured"&gt;&lt;li&gt;&lt;span&gt;Poor Markup&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Large amounts of encrypted &lt;a rel="nofollow" href="#viewstatedefinition" title="Viewstate Definition"&gt;'viewstate'&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Large amounts of generated javascript&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" href="#crazyiddefinition" title="Crazy IDs?"&gt;Crazy ID attributes&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;PHP (or misc web scripting language) is easier to use&lt;/span&gt;&lt;ul&gt;&lt;li&gt;.NET feels more like Application Programming rather than web scripting which can make it seem overkill for small tasks.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;However this is not an attack on .NET (whether people know it or not).  This is an attack on a particular way of coding in .NET webforms.  Yes,
                Microsoft pushed .NET to be used in those kind of ways but that doesn't mean you had to do it that way.&lt;/p&gt;&lt;p&gt;In the same way that developers don't use the visual interface of Dreamweaver to generate their markup .net developers
                don't need to use server controls and viewstate.  Just because it's there and assists some people in their needs doesn't mean
                everyone should use it.&lt;/p&gt;&lt;p&gt;Much of my recent work for example has relied heavily on generating Xml as the content and using Xsl to create the presentation, thus
                   bypassing the majority of asp.net server controls and their associated scripts/viewstate/long ids. &lt;/p&gt;&lt;p&gt;Without taking this approach you can still make your own user and custom controls, but be smart about how you make them. Turn off viewstate
                 when not needed, use standard html controls when you don't need the functionality provided by an asp server control and use repeaters with your
                 own standard html templates rather than .NET rendered gridviews.
                &lt;/p&gt;&lt;h2&gt;.NET or not .NET?&lt;/h2&gt;&lt;p&gt;It could be argued that doing these kinds of things is not '.net' but thats not true.  It may not be entirely '.net webforms' but you are
                still using the power of the .net frameworks class library. You are still using the, in my view currently unchallenged awesomeness of, Visual
                Studio (and yes I've used eclipse.. it's not as amazing as you might like to think) and you're still getting the ability to write in the same language
                for your website, windows services, silverlight, xbox and windows applications.&lt;/p&gt;&lt;p&gt;Admittedly it's unfortunate how long it has taken for the release of asp.net MVC (although lets be honest PHP weren't flying off the blocks with full
                 and complete OO support so no-ones perfect). However the key is, as with so many things, that the quality of your .net output is down to the quality of the
                 development.&lt;/p&gt;&lt;h2&gt;Wrap up&lt;/h2&gt;&lt;p&gt;I too, when I was asked to swap to .net from PHP, thought .net was an overcomplication.  "I want to just call the database and do a loop
                outputting html in my markup.  I don't want to put a GridView in the markup then in a 'code behind' 'load event' access the database and databind
                to the grid".&lt;/p&gt;&lt;p&gt;It's a leaning curve as with all things.  My early PHP was, going back on it, messy to read and understand as it was all mixed in with markup with include
                files all over the place.  Similarly my early .net work probably relied on an overuse of server controls. As you get in to something you get better at it.
                And although .NET seemed like a greater move away from static pages than PHP (which is probably why I saw it as an overcomplication) I now personally love working with
                it.&lt;/p&gt;&lt;p&gt;I'll wrap this article up briefly with some reasons I like .net that either I haven't found at all, or have found harder to do
                in other environments/languages.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Similar syntax to java/javascript/actionscript&lt;/li&gt;&lt;li&gt;Reusable classes across web applications, windows applications, windows services, IIS modules, xbox games&lt;/li&gt;&lt;li&gt;Very easy to cache with a large variety of inbuilt assistance&lt;/li&gt;&lt;li&gt;Extremely OO friendly&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;I'm not saying .NET is the best, or amazing, but its certainly not something to be looked down upon or avoided purely because it's Microsoft
                or because of a misunderstanding surrouding it.  Over the time I've been using it it's got better and although the picture I paint in the intro to this article
                is still true, it is less so nowadays.  Css Control Adapters have been around a long time to assist with poor rendering,
                MVC is upcoming, and along with things like ClientID mode the bad things are going or easily avoidable.&lt;/p&gt;&lt;p&gt;I'm not sure I've covered everything I would have wanted to in this post, as it is such a vast area and this was really just a one sided conversation
                from the POV of .NET not being quite as sucky as many people think. &lt;a rel="nofollow" target="_blank" href="http://twitter.com/cargowire" title="Tweet me up"&gt;Please fire any points gripes or questions at me&lt;/a&gt;.&lt;/p&gt;&lt;hr class="sectionbreak"/&gt;&lt;h2&gt;Mini Glossary (for those .net virgins among us)&lt;/h2&gt;&lt;dl&gt;&lt;dt id="oneformdefinition"&gt;One form to rule them all&lt;/dt&gt;&lt;dd&gt;Webforms asserts that each page has one form that contains all elements rather than multiple forms as and when necessary. Or to quote...
                    &lt;blockquote&gt;
                        For example, most ASP.NET Web pages contain a single server-side Web Form, with multiple Web controls inside the Web Form. The Web Form is an HTML control (System.Web.UI.HtmlControls.HtmlForm). Those Web controls inside the Web Form are children of the Web Form.
                    &lt;/blockquote&gt;&lt;/dd&gt;&lt;dt id="postbackdefinition"&gt;Postback&lt;/dt&gt;&lt;dd&gt;
                        Form field data is posted to the server and used to repopulate form field values automatically e.g. if you change an instance of a textbox server 
                        control before posting back .net maintains the value you posted from the first screen. Similar to the following manually achieved effect in PHP:
                        &lt;code&gt;
                            &amp;lt;textarea name="body" id="body" cols="40" rows="5"&amp;gt;
                                &amp;lt;?php echo htmlspecialchars(stripslashes($_POST['body'])); ?&amp;gt;
                            &amp;lt;/textarea&amp;gt;
                        &lt;/code&gt;&lt;/dd&gt;&lt;dt id="viewstatedefinition"&gt;Viewstate&lt;/dt&gt;&lt;dd&gt;
                        The encoded (and optionally encrypted) first hidden field used by .NET as a means to persist &lt;strong&gt;programatically set control properties&lt;/strong&gt;.
                        &lt;code&gt;
                            &amp;lt;input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTMwMTcxNDUyNmRk4HWhWoozWLYUelHWkPH2E67bXGo=" /&amp;gt;
                        &lt;/code&gt;
                        
                        A control will gain its final value after the following cascade: Initial declarative value, Posted value from Request.Form (if postback), ViewState
                        value (if changed via code after a postback).
                    &lt;/dd&gt;&lt;dt id="crazyiddefinition"&gt;Crazy IDs&lt;/dt&gt;&lt;dd&gt;Until the upcoming 4th version of .net developers were not trusted to know if there server control IDs were unique and because the built in viewstates, postbacks
                    etc relied on it someone decided to make damn sure that control IDs were unique and context based on their location in the control heirachy. This led to ids like
                    "ctl00_asp_menu_links_ctl03_contextLink". Which, if someone added a parent or reshifted markup slightly, would change.  Particularly helpful for clean client side
                    development.&lt;/dd&gt;&lt;/dl&gt;</content:encoded>
          </item>
          <item>
            <title>You really should know and use these... seriously...</title>
            <link>http://cargowire.net/blog/dotnetdev101</link>
            <description>&lt;p&gt;Simple things apparently annoy me a great deal...&lt;/p&gt;&lt;p&gt;.NET Developers should be aware of, and use, .NET constructs that have been around for ages:&lt;/p&gt;&lt;p&gt;Obviously it's up to you in the context of each situation you encounter, but to never use these at all is surely madness.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/dotnetdev101</guid>
            <pubDate>Tue, 28 Apr 2009 21:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Simple things apparently annoy me a great deal...&lt;/p&gt;&lt;p&gt;.NET Developers should be aware of, and use, .NET constructs that have been around for ages:&lt;/p&gt;&lt;ul class="featured"&gt;&lt;li&gt;&lt;strong&gt;String.Empty&lt;/strong&gt; - avoid creation of empty string references ("") use this built in single reference and the String.IsNullOrEmpty() method too.. the framework is there to help you!&lt;/li&gt;&lt;li&gt;&lt;strong&gt;String.Format&lt;/strong&gt; - avoid concatenation using + or &amp;amp;. Use string.format with the objects you intend to concatenate, it will also do the ToString for you and has formatting abilities.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;StringBuilder&lt;/strong&gt; - strings are immutable. String builders avoid the creation of new strings each time you do a &amp;amp; or + concatenation.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Using&lt;/strong&gt; - Wrapping IDisposable instances in Using statements will automatically call dispose immediately on End Using. Additionally, implement IDisposable on heavy classes so that your own code can be consumed this way.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Try Catch Finally&lt;/strong&gt; - No catch should be empty, either decorate the exception with an appropriate wrapper before throwing again or remedy whatever the problem was because just plain eating exceptions makes debugging particularly crappy. Also use Finally to ensure that even when exceptions are thrown references are disposed of appropriately.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;'As' (TryCast in VB)&lt;/strong&gt; - Should be used where appropriate to cast and return null if the cast fails (rather than throw a cast exception).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;TryParse&lt;/strong&gt; - Should be used instead of Try Catch blocks i.e. Integer.TryParse will return false if the parse failed, rather than throwing an exception.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Nullable Types&lt;/strong&gt; should be used for primitive types that can also be null i.e. int? or Nullable(Of Integer). This struct has a 'hasValue' property that can be accessed rather than building your own constructs such as -1 means no value, or 0 means no value etc.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Generics&lt;/strong&gt; - Do not use classes such as ArrayList or SortedList as they are object based and have the overhead of casting to and from object as well as forcing the user to do these casts. Compile time checking is also hindered. Instead use Generic Collections so that typing can be enforced i.e. Generic.SortedList&amp;lt;int, MyClass&amp;gt; or Generic.SortedList(Of Integer, MyClass).
                    Additionally look to use generics to create generalised code (avoid similar operations being redone in multiple specialised classes). Generics is not just applicable to classes. You can, and should if necessary, create Generic Methods e.g. ConfigurationSettings.GetValue&amp;lt;int&amp;gt;("keyName") allows casting and other checking to be encapsulated away from consuming code.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Obviously it's up to you in the context of each situation you encounter, but to never use these at all is surely madness.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Web Developer Day '09 [notes to be completed]</title>
            <link>http://cargowire.net/blog/webdd09</link>
            <description>&lt;p&gt;
                    The second ever Web DD is over and I'm finally home after a nice early start and lengthy drive.
                    However once again it proved to be a worthwhile event with interesting as well as exciting presentations.  Old school
                    talk breakdown coming up (These are preliminary, i'll add to it when I get a chance):
                &lt;/p&gt;&lt;p&gt;Hope to meet some new people there next time!&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/webdd09</guid>
            <pubDate>Sat, 18 Apr 2009 20:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    The second ever Web DD is over and I'm finally home after a nice early start and lengthy drive.
                    However once again it proved to be a worthwhile event with interesting as well as exciting presentations.  Old school
                    talk breakdown coming up (These are preliminary, i'll add to it when I get a chance):
                &lt;/p&gt;&lt;table id="dayone" class="fowa"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan="2"&gt;Web Developer Day '09: 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;Dan Maharry&lt;/td&gt;&lt;td rowspan="2"&gt;
                                Lightweight Test Framework
                                Some recapping over
                                It would be very easy to remember the period between the release of ASP.NET 3.5 and 4.0 as the time
                                when ASP.NET MVC was made. But it's worth remembering that ASP.NET 3.5 service pack 1 and several
                                out of band releases for ASP.NET and IIS came out as well. This presentation will cover as many of
                                the other additions to web development as can be fit into an hour.
                            &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;ASP.NET 3.5 - Miss Something?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Alex Mackey&lt;/td&gt;&lt;td rowspan="2"&gt;
                                Parallelisation
                                Oslo
                                We will take a look at some of the great new features available in Visual Studio 2010
                                and .net 4. I am currently writing "Beginning .NET 4.0 with supporting technologies"
                                for Apress and will share my discoveries and thoughts so far. The contents of this session
                                will be partly dependent on what Microsoft release in the coming months but will probably
                                include the more finished areas such as Azure, Language enhancements and Parallel programming.
                            &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;What's good in .NET 4 and Visual Studio 2010&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Barry Dorrans&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;ol&gt;&lt;li&gt;Cross Site Scripting&lt;/li&gt;&lt;li&gt;Injection Flaws&lt;/li&gt;&lt;li&gt;Malicious File Execution&lt;/li&gt;&lt;li&gt;Insecure Direct Object Reference&lt;/li&gt;&lt;li&gt;Cross Site Request Forgery&lt;/li&gt;&lt;li&gt;Information Leakage&lt;/li&gt;&lt;li&gt;Broken Authentication / Session Management&lt;/li&gt;&lt;li&gt;Insecure Cryptographic Storage&lt;/li&gt;&lt;li&gt;Insecure Communications&lt;/li&gt;&lt;li&gt;Failure to restrict URL access&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;P0wn3d! (Or how to redirect your friend's website to katyperry.com)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Phil Pursglove&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;ul&gt;&lt;li&gt;OutPut cache declarations&lt;/li&gt;&lt;li&gt;HttpRuntime.Cache&lt;/li&gt;&lt;li&gt;Compressing ViewState / storing viewstate in the session&lt;/li&gt;&lt;li&gt;Using ScriptManager to compress js files into single downloads&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;This one goes up to 11, or how to write scalable ASP.NET&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sebastian Lambla&lt;/td&gt;&lt;td rowspan="2"&gt;
                                MVC Rocks
                            &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;ASP.net MVC best practices&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mike Ormond&lt;/td&gt;&lt;td rowspan="2"&gt;
                                Mmmm control over Client Ids, Cache using a Provider Model, some good stuff here
                                In this session we take a wander through the landscape of ASP.NET, pausing briefly to admire what has been, before 
                                gazing longingly over the horizon and into the future of ASP.NET 4.0. As well as enhancements to Visual Studio and
                                 the design and development experience, we can expect to enjoy improvements in the core platform targeted at scale 
                                 and performance, significantly more control over WebForms apps, simplification and extensions of data controls and
                                  significant new innovations in ASP.NET AJAX. I might even squeeze in a mention of ASP.NET MVC and Dynamic Data as well
                            &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;ASP.NET 4.0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Hope to meet some new people there next time!&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>The Old Switcharoo</title>
            <link>http://cargowire.net/blog/styleswitcharoo</link>
            <description>&lt;p&gt;Having had only non-designer girls appreciate my design for cargowire I managed to cajole co-Headscapist Ed Merritt into creating an
                   alternative.&lt;/p&gt;&lt;p&gt;Ed provided me with a flat image source to work from (so I can be blamed for the ragged CSS implementation which will no doubt be fixed up over time) and I decided, instead of
                    throwing away my design, to implement a style chooser (based on the classic
                    'alternate stylesheet' ALA article).
                &lt;/p&gt;&lt;p&gt;This is all relatively simple stuff.  The main issue I had was that I was running sIFR which
                would already have run before a user switches styles.  This essentially throws away my ability to switch styles without a page refresh (whereby my JS
                can check for the style in use before running sIFR).&lt;/p&gt;&lt;p&gt;Additionally Eds design contained some slightly different content to my own, and this meant some markup changes, which I was kind of against. However I would rather
                add markup and modify my css for the original design to hide it, than add in content using jQuery for an alternate design.  If anything semantically speaking the changes
                added to the content anyway but it did highlight how coupled designs and content can be regardless of an abstracted presentation layer.&lt;/p&gt;&lt;p&gt;A Javascript switcher is available at the base of the page if you wish to check out the results.&lt;/p&gt;&lt;p&gt;I'm off to investigate a nice way to turn sIFR off dynamically...&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/styleswitcharoo</guid>
            <pubDate>Sun, 12 Apr 2009 21:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Having had only non-designer girls appreciate my design for cargowire I managed to cajole co-Headscapist Ed Merritt into creating an
                   alternative.&lt;/p&gt;&lt;p&gt;Ed provided me with a flat image source to work from (so I can be blamed for the ragged CSS implementation which will no doubt be fixed up over time) and I decided, instead of
                    throwing away my design, to implement a style chooser (based on the classic
                    &lt;a rel="nofollow" target="_blank" href="http://www.alistapart.com/stories/alternate/" title="Working With Alternate Style Sheets"&gt;'alternate stylesheet' ALA article&lt;/a&gt;).
                &lt;/p&gt;&lt;p&gt;This is all relatively simple stuff.  The main issue I had was that I was running &lt;a rel="nofollow" target="_blank" href="http://www.mikeindustries.com/blog/sifr/"&gt;sIFR&lt;/a&gt; which
                would already have run before a user switches styles.  This essentially throws away my ability to switch styles without a page refresh (whereby my JS
                can check for the style in use before running sIFR).&lt;/p&gt;&lt;p&gt;Additionally Eds design contained some slightly different content to my own, and this meant some markup changes, which I was kind of against. However I would rather
                add markup and modify my css for the original design to hide it, than add in content using jQuery for an alternate design.  If anything semantically speaking the changes
                added to the content anyway but it did highlight how coupled designs and content can be regardless of an abstracted presentation layer.&lt;/p&gt;&lt;p&gt;A Javascript switcher is available at the base of the page if you wish to check out the results.&lt;/p&gt;&lt;p&gt;I'm off to investigate a nice way to turn sIFR off dynamically...&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>SXSW - Fifth Day round up</title>
            <link>http://cargowire.net/blog/sxsw09dayfive</link>
            <description>&lt;p&gt;Finally finished my last post on SXSW! took a while (and I kinda tailed off on the later days), but I'm glad I followed through with making notes 
                and writing them up to help solidify thoughts in my mind, if nothing else... Day Five...&lt;/p&gt;&lt;p&gt;Again, it was as if the quality of talks to attend had decreased as the days went on.  However we stuck it out for the final day and visited
                a few talks that weren't necessarily directly related to us but could provide insight or inspiration.&lt;/p&gt;&lt;p&gt;This was a very media/journalism focused talk.  Essentially discussing the issues surrounding the vast amount of content out there and how
                providers are now competing for users time across such a wide space.  There was reference to how journalists often link to each other across
                competitor lines as well as how competitors can work together to make their own lives easier.  For example by standardising technical aspects
                (such as embedding ads in videos on web services), allowing easier entry to client markets.&lt;/p&gt;&lt;p&gt;As if I didn't feel geeky enough being at an interactive conference, I decided to attend a talk about Comic Books...&lt;/p&gt;&lt;p&gt;It's interesting, as they face, very explicitly, the problems of people emulating print on the web.  The idea of comic books on the web can be
                viewed as almost exactly this.  It's not surprising then that a lot of the solutions include RIA based page flicking or simple single page images
                with click to next.  However there were some interesting takes on other ways online graphic novels could be done.&lt;/p&gt;&lt;p&gt;My first and only taste of a 'core conversation' whereby the speakers provide an initial introduction and then open up the floor
                for debate and act as moderators.&lt;/p&gt;&lt;p&gt;There are obvious questions that need to be addressed.  Should providers (such as flickr) give over account details to spouses of the
                recently deceased? or just delete accounts as many do now.  In my view you should take care of backing up and archiving your own information.
                Companies don't last forever and if it is important enough for you to want to pass down through generations you should do so yourself.
                Especially as there may even be issues in proving ownership of online accounts (they aren't tied to bank accounts or government IDs when being
                created) and there are ongoing storage/maintenance cost to providers.  Which, even though it is getting cheaper, can't go on into infinity.&lt;/p&gt;&lt;p&gt;I didn't make notes as this was an interactive discussion but it was definitely worth attending to allow exploration of ideas and thoughts
                within a group in a very open way (unlike the panels and talks).&lt;/p&gt;&lt;p&gt;A long night out ended in breakfast at the IHOP... a seemingly traditional affair 'hosted' by Dustin Diaz
                before a long walk back to the hotel.&lt;/p&gt;&lt;p&gt;Overall SxSW was a brilliant experience.  The talks and panels were plentiful and thought provoking but further than that being surrounded
                by likeminded people and getting to meet such a variety within the trade was invaluable.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/sxsw09dayfive</guid>
            <pubDate>Tue, 17 Mar 2009 23:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Finally finished my last post on SXSW! took a while (and I kinda tailed off on the later days), but I'm glad I followed through with making notes 
                and writing them up to help solidify thoughts in my mind, if nothing else... Day Five...&lt;/p&gt;&lt;p&gt;Again, it was as if the quality of talks to attend had decreased as the days went on.  However we stuck it out for the final day and visited
                a few talks that weren't necessarily directly related to us but could provide insight or inspiration.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/panels?action=show&amp;amp;id=IAP0900125"&gt;Collabotition: Can Companies Work With Their Competitors?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/schedule?action=show&amp;amp;id=IAP0900236"&gt;Online Comic Books: The Future of Graphic Novels?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/schedule?action=show&amp;amp;id=IAP0900572"&gt;Who Will Check My Email After I Die?&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Collaboration with Competitors&lt;/h3&gt;&lt;p&gt;This was a very media/journalism focused talk.  Essentially discussing the issues surrounding the vast amount of content out there and how
                providers are now competing for users time across such a wide space.  There was reference to how journalists often link to each other across
                competitor lines as well as how competitors can work together to make their own lives easier.  For example by standardising technical aspects
                (such as embedding ads in videos on web services), allowing easier entry to client markets.&lt;/p&gt;&lt;h3&gt;Online Comic Books: The Future of Graphic Novels?&lt;/h3&gt;&lt;p&gt;As if I didn't feel geeky enough being at an interactive conference, I decided to attend a talk about Comic Books...&lt;/p&gt;&lt;p&gt;It's interesting, as they face, very explicitly, the problems of people emulating print on the web.  The idea of comic books on the web can be
                viewed as almost exactly this.  It's not surprising then that a lot of the solutions include RIA based page flicking or simple single page images
                with click to next.  However there were some interesting takes on &lt;a rel="nofollow" target="_blank" href="http://www.scifi.com/tinman/oz/"&gt;other ways online graphic novels could be done&lt;/a&gt;.&lt;/p&gt;&lt;h3&gt;Who Will Check My Email After I Die?&lt;/h3&gt;&lt;p&gt;My first and only taste of a 'core conversation' whereby the speakers provide an initial introduction and then open up the floor
                for debate and act as moderators.&lt;/p&gt;&lt;p&gt;There are obvious questions that need to be addressed.  Should providers (such as flickr) give over account details to spouses of the
                recently deceased? or just delete accounts as many do now.  In my view you should take care of backing up and archiving your own information.
                Companies don't last forever and if it is important enough for you to want to pass down through generations you should do so yourself.
                Especially as there may even be issues in proving ownership of online accounts (they aren't tied to bank accounts or government IDs when being
                created) and there are ongoing storage/maintenance cost to providers.  Which, even though it is getting cheaper, can't go on into infinity.&lt;/p&gt;&lt;p&gt;I didn't make notes as this was an interactive discussion but it was definitely worth attending to allow exploration of ideas and thoughts
                within a group in a very open way (unlike the panels and talks).&lt;/p&gt;&lt;h3&gt;Media Temple party and IHOP pancakes&lt;/h3&gt;&lt;p&gt;A long night out ended in breakfast at the IHOP... a seemingly traditional affair 'hosted' by &lt;a rel="nofollow" target="_blank" href="http://www.dustindiaz.com/breakfast-with-dustin-2008/"&gt;Dustin Diaz&lt;/a&gt;
                before a long walk back to the hotel.&lt;/p&gt;&lt;h3&gt;Overall?&lt;/h3&gt;&lt;p&gt;Overall SxSW was a brilliant experience.  The talks and panels were plentiful and thought provoking but further than that being surrounded
                by likeminded people and getting to meet such a variety within the trade was invaluable.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>SXSW - Fourth Day round up</title>
            <link>http://cargowire.net/blog/sxsw09dayfour</link>
            <description>&lt;p&gt;
                    Unfortunately after waking up early, quickly showering, grabbing breakfast and thinking about a taxi we realised there weren't any good
                    opening talks today.  So instead we hung back at the hotel for a bit and went in later.
                &lt;/p&gt;&lt;p&gt;Joomla vs Wordpress vs Drupal. Each were given the same project - to create a site for use by Community Leadership projects.  The task
                included a lot of functionality that is often found on sites.  Such as wiki pages, events, news and granular permissions. It was to be 
                run on shared hosting and creating using free tools within 100 hours.&lt;/p&gt;&lt;p&gt;There was little real insight really provided by the panel itself. However the subsites created are listed below:&lt;/p&gt;&lt;p&gt;Although not directly creating wireframes on a daily basis we sat down in this panel hoping to learn a thing or two.&lt;/p&gt;&lt;p&gt;Wireframes are primarily communication tools however the panel reminded us that they should always be targeted to, and therefore created
                in consideration to the audience i.e. designers for ideas and critique, how a solution will affect daily activity for business people,
                an overall approach for upper management and the nitty gritty 'how to implement' for developers.&lt;/p&gt;&lt;p&gt;Wireframes come in a variety of flavours over time, from low to high fidelity and from idea generation to concept selection.  Different types
                can also be classified as displaying Reference Zones (at an abstract level, the areas and major blocks), low fidelity (sketches etc), high
                fidelity (as much detail as the final output).&lt;/p&gt;&lt;p&gt;Storyboards can be used to communicate intended flows and states.  Each storyboard should also contain information about how the flow being
                described is both entered and exited.&lt;/p&gt;&lt;p&gt;A standalone wireframe should be able to be fully understood without any additional documentation.  This is especially true when you consider
                that in large organisations documents are often passed around, and not necessarily in sequence or all together.&lt;/p&gt;&lt;p&gt;A specification wireframe should be very detailed with sections for Triggers, Content, Actions etc to enable full implementation.&lt;/p&gt;&lt;p&gt;The best thing about this talk were the examples (as
                always - it's massively beneficial to see the way other people work.&lt;/p&gt;&lt;p&gt;After a general hello and round up there was a focus on education within the industry with reference to Interact.&lt;/p&gt;&lt;p&gt;This was followed up by a speaker from the Adobe Task force (formerly just dealing with dreamweaver, now with the whole suite) who spoke of steps
                having been taken to deprecate the use of non-standards items in Dreamweaver.&lt;/p&gt;&lt;p&gt;IE8's compatibility mode was also discussed, before we nipped out to make it to the Great British Booze up prep.&lt;/p&gt;&lt;p&gt;Boagworld (Headscape), Clear Left
                and Naklab got together and hosted the Great British Booze Up. Now in its third year.  The Rolling BBC and Top Gear
                added to the British Vibe and I look forward to the idea of it being there again next year.
            &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/sxsw09dayfour</guid>
            <pubDate>Mon, 16 Mar 2009 23:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    Unfortunately after waking up early, quickly showering, grabbing breakfast and thinking about a taxi we realised there weren't any good
                    opening talks today.  So instead we hung back at the hotel for a bit and went in later.
                &lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/panels?action=show&amp;amp;id=IAP0900113"&gt;Ultimate showdown of content management destiny&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/panels?action=show&amp;amp;id=IAP0901333"&gt;Wireframes for the Wicked&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/schedule?action=show&amp;amp;id=IAP0900617"&gt;2009 WaSP Annual Meeting&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Great Boo's Up&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Ultimate showdown of content management destiny&lt;/h3&gt;&lt;p&gt;Joomla vs Wordpress vs Drupal. Each were given the same project - to create a site for use by Community Leadership projects.  The task
                included a lot of functionality that is often found on sites.  Such as wiki pages, events, news and granular permissions. It was to be 
                run on shared hosting and creating using free tools within 100 hours.&lt;/p&gt;&lt;p&gt;There was little real insight really provided by the panel itself. However the subsites created are listed below:&lt;/p&gt;&lt;h4&gt;CMS Showdown Links&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.cmsshowdown.com"&gt;CMS Showdown&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.joomlashowdown.com/"&gt;joomlashowdown.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://drupalshowdown.com"&gt;drupalshowdown.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://wpshowdown.wordpress.com"&gt;wpshowdown.wordpress.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;Wireframes for the wicked&lt;/h3&gt;&lt;p&gt;Although not directly creating wireframes on a daily basis we sat down in this panel hoping to learn a thing or two.&lt;/p&gt;&lt;p&gt;Wireframes are primarily communication tools however the panel reminded us that they should always be targeted to, and therefore created
                in consideration to the audience i.e. designers for ideas and critique, how a solution will affect daily activity for business people,
                an overall approach for upper management and the nitty gritty 'how to implement' for developers.&lt;/p&gt;&lt;p&gt;Wireframes come in a variety of flavours over time, from low to high fidelity and from idea generation to concept selection.  Different types
                can also be classified as displaying Reference Zones (at an abstract level, the areas and major blocks), low fidelity (sketches etc), high
                fidelity (as much detail as the final output).&lt;/p&gt;&lt;p&gt;Storyboards can be used to communicate intended flows and states.  Each storyboard should also contain information about how the flow being
                described is both entered and exited.&lt;/p&gt;&lt;p&gt;A standalone wireframe should be able to be fully understood without any additional documentation.  This is especially true when you consider
                that in large organisations documents are often passed around, and not necessarily in sequence or all together.&lt;/p&gt;&lt;p&gt;A specification wireframe should be very detailed with sections for Triggers, Content, Actions etc to enable full implementation.&lt;/p&gt;&lt;p&gt;The best thing about this talk were &lt;a rel="nofollow" target="_blank" href="http://www.slideshare.net/nickf/wireframes-for-the-wicked"&gt;the examples&lt;/a&gt; (as
                always - it's massively beneficial to see the way other people work.&lt;/p&gt;&lt;h3&gt;WaSP Meeting&lt;/h3&gt;&lt;p&gt;After a general hello and round up there was a focus on education within the industry with reference to &lt;a rel="nofollow" target="_blank" href="http://interact.webstandards.org"&gt;Interact&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;This was followed up by a speaker from the Adobe Task force (formerly just dealing with dreamweaver, now with the whole suite) who spoke of steps
                having been taken to deprecate the use of non-standards items in Dreamweaver.&lt;/p&gt;&lt;p&gt;IE8's compatibility mode was also discussed, before we nipped out to make it to the Great British Booze up prep.&lt;/p&gt;&lt;h3&gt;Great British Booze Up&lt;/h3&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://boagworld.com"&gt;Boagworld&lt;/a&gt; (&lt;a rel="nofollow" target="_blank" href="http://headscape.co.uk"&gt;Headscape&lt;/a&gt;), &lt;a rel="nofollow" target="_blank" href="http://clearleft.com"&gt;Clear Left&lt;/a&gt;
                and &lt;a rel="nofollow" target="_blank" href="http://naklab.com/"&gt;Naklab&lt;/a&gt; got together and hosted the Great British Booze Up. Now in its third year.  The Rolling BBC and Top Gear
                added to the British Vibe and I look forward to the idea of it being there again next year.
            &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>SXSW - Third Day round up</title>
            <link>http://cargowire.net/blog/sxsw09daythree</link>
            <description>&lt;p&gt;Breakfast was taken, taxi driver wasn't a conspiracy theorist... seemingly we've got this whole SXSW thing down now.&lt;/p&gt;&lt;p&gt;With opening reference to WCAG2.0 and Section 508,
                it is clear that accessibility and consideration of assistive technologies is important.  This is why I was so impressed to see a Flash accessibility panel
                on the schedule.  Not only is it important for the users, it is important for developers to know that it is possible to make Flash accessible (and how you 
                can do it).&lt;/p&gt;&lt;p&gt;Accessibility for Flash and RIA's needs to consider:&lt;/p&gt;&lt;p&gt;The Fact that Flash has supported a level of accessibility since version 6 in 2002 was reiterated in addition to how Flex has also done so
                since version 1.5.  For example when demoing a zoom magnifier tool we were shown how flash could react and instead of auto playing a video
                wait for a user action (so they don't miss the beginning - when it is off screen).&lt;/p&gt;&lt;p&gt;
                    The panel also discussed how Adobe have released scripts for Jaws
                    to add support for things like Roles that are more specific to flash than standard HTML (such as TreeView).
                &lt;/p&gt;&lt;p&gt;Using the Accessibility panel in the Flash authoring environment alt text can be added as well as the tabindex.  This can be used to address text equivalents
                and meaningful sequence issues.&lt;/p&gt;&lt;p&gt;A demo of a card matching game showed all these techniques together.  The user could tab through the cards and hit enter to choose.  Each
                card identified itself through the alt text (which changed depending on if it was face up or down).  Audio feedback for 'correct' or 'incorrect' actions
                were used, with the sound being pre-played to the user at the beginning of the movie so they were aware of what to expect.  Accessibility.UpdateProperties()
                is utilised after any change to alt text to ensure that the UI responds with the new values while Accessibility.isActive() can be used to identify if the
                current user is using an assistive technology.&lt;/p&gt;&lt;p&gt;A slightly less realistic demo followed, with a whack-a-mole implementation using tabindex and audio 'mole' 'no mole'.  I guess this is where the realisation
                comes that you are not attempting to provide a directly equivalent experience, more that you are exposing the same level of functionality to a user.&lt;/p&gt;&lt;p&gt;Inappropriate naming of items (adding 'button' to a name when it is already read out, making names too long etc) and background music interfering
                with audio alternatives were listed as mistakes often made in developing accessible Flash. Use of the wmode attribute is also known to cause
                accessibility difficulties and SWFObject was described as the most appropriate method of embedding flash content.&lt;/p&gt;&lt;p&gt;Unfortunately the accessibility implementation appears to be limited to Flash and Flex on windows.  Adobe Air came up in Q&amp;A, with accessibility
                    coming soon for that (but again full support only coming to windows to start).&lt;/p&gt;&lt;p&gt;It was a shame that this panel was more business and law focused than I originally hoped it might be.  In fact so much so, that not only did I barely
                make any notes, I almost fell asleep.  Only to be woken by a heckler from the crowd taking issue with the statement that ownership issues "didn't matter"
                because as soon as something is online.. it's there and theres nothing but retrospective compensatory action that you can take.&lt;/p&gt;&lt;p&gt;Luckily for me the CSS3 panel didn't disappoint. With representatives from Microsoft, Mozilla and Opera (with the noted exception of an invited
                but uninterested Apple) we were bound to see some interesting stuff (Just a shame that Molly's over Americanness grated on me).&lt;/p&gt;&lt;p&gt;In terms of CSS 3 we were talking about nth Child selectors (with speed an issue but still faster than inserting classes using javascript),
                partial opacity, border images (currently in FF3.5 beta), multi column support, text shadow, box shadow, border radius, font size adjust,
                @font-face and @media based rules.  Many of which have appeared in some form in many of the release versions of current browsers (but under 
                different prefixed rule names).&lt;/p&gt;&lt;p&gt;The @media based rules were of particular interest.  For example:&lt;/p&gt;&lt;p&gt;This allows excellent control over display for various user agents (such as handhelds that do not explicitly identify themselves as media
                handheld).&lt;/p&gt;&lt;p&gt;Combining a number of these CSS3 abilities together Opera had managed to draw their logo using only spans and CSS.  On rollover it even
                animated across the screen.&lt;/p&gt;&lt;p&gt;According to the Microsoft representative IE8 will be the 
                most complete implementation of CSS 2.1 at time of release.
                IE 8 will reference a blacklist of 'requiring IE7 Compatibility' sites. These sites will be displayed using the compatibility mode. Compatibility mode can also be
                manually toggled using the button in the toolbar. After a set number of toggles a site will be flagged into the IE process to addition to the blacklist. When a 
                site is added to the black list it will be notified by Microsoft with instructions on how to run the site under IE8 standards mode to fix. The site can later be 
                submitted back for approval to be removed from the list.
                &lt;/p&gt;&lt;p&gt;I came away from this talk pretty positive that a simple App really isn't too difficult to create... Time to buy an intel based Mac and test that theory I guess!&lt;/p&gt;&lt;p&gt;Bypassing some rather inane descriptions of what a delegate is and why json is better than just using your own string (cheers random questioner guy for
                this unnecessaryness) this talk made clear that iPhone dev is quite different from web dev.  The hardware is 10 to 100 times slower in terms of processor/memory/capability
                than most web servers and memory management (garbage collection) is on you.  The differences also extend to latency cues; similar to AJAX you have to ensure
                you indicate progress and wait times yourself.&lt;/p&gt;&lt;p&gt;Cocoa, XCode and Interface Builder open up a variety of components for easy UI creation (things like scrollable lists etc come for free).  So for simple
                applications it's a matter of wiring up web service API calls to UI display components.&lt;/p&gt;&lt;p&gt;Mmmm Icon Cactus followed by meet on swords at Fogo de Chao in the evening was not only good in terms of food but also for meeting Richard Rutter and 
                Paul Annett of Clear Left.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/sxsw09daythree</guid>
            <pubDate>Sun, 15 Mar 2009 23:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Breakfast was taken, taxi driver wasn't a conspiracy theorist... seemingly we've got this whole SXSW thing down now.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/panels/?action=show&amp;amp;id=IAP0900302"&gt;Accessible Flash and Flex Applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/panels/?action=show&amp;amp;id=IAP0900382"&gt;OpenID, OAuth, Data Portability and the Enterprise&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/panels/?action=show&amp;amp;id=IAP0900767"&gt;CSS3: What's Now, What's New and What's Not?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/panels/?action=show&amp;amp;id=IAP0901123"&gt;iPhone Development for Experienced Web Developers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Meat on a stick&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Accessible Flash/Flex&lt;/h3&gt;&lt;p&gt;With opening reference to &lt;a rel="nofollow" target="_blank" href="http://www.w3.org/TR/WCAG20/"&gt;WCAG2.0&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://www.section508.gov/"&gt;Section 508&lt;/a&gt;,
                it is clear that accessibility and consideration of assistive technologies is important.  This is why I was so impressed to see a Flash accessibility panel
                on the schedule.  Not only is it important for the users, it is important for developers to know that it is possible to make Flash accessible (and how you 
                can do it).&lt;/p&gt;&lt;p&gt;Accessibility for Flash and RIA's needs to consider:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Non text based equivalent&lt;/li&gt;&lt;li&gt;Alternatives for time based media&lt;/li&gt;&lt;li&gt;Items placed in a meaningful sequence&lt;/li&gt;&lt;li&gt;Reasonable Contrast&lt;/li&gt;&lt;li&gt;Handling resizable text&lt;/li&gt;&lt;li&gt;Exposing Name (ensure the Name of the object makes sense to a user), Role (the type of UI control), Value (information from objects in the form of a string - not all have one)
                        and State's (a localized string that describes the state) to the browser&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The Fact that Flash has supported a level of accessibility since version 6 in 2002 was reiterated in addition to how Flex has also done so
                since version 1.5.  For example when demoing a zoom magnifier tool we were shown how flash could react and instead of auto playing a video
                wait for a user action (so they don't miss the beginning - when it is off screen).&lt;/p&gt;&lt;p&gt;
                    The panel also discussed how Adobe have released &lt;a rel="nofollow" target="_blank" href="http://www.adobe.com/accessibility/products/flex/jaws.html"&gt;scripts for Jaws&lt;/a&gt;
                    to add support for things like Roles that are more specific to flash than standard HTML (such as TreeView).
                &lt;/p&gt;&lt;h4&gt;Techniques&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;TabIndex&lt;/li&gt;&lt;li&gt;Alt Text&lt;/li&gt;&lt;li&gt;Audio Feedback&lt;/li&gt;&lt;li&gt;Accessible Welcome Text&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Using the Accessibility panel in the Flash authoring environment alt text can be added as well as the tabindex.  This can be used to address text equivalents
                and meaningful sequence issues.&lt;/p&gt;&lt;p&gt;A demo of a card matching game showed all these techniques together.  The user could tab through the cards and hit enter to choose.  Each
                card identified itself through the alt text (which changed depending on if it was face up or down).  Audio feedback for 'correct' or 'incorrect' actions
                were used, with the sound being pre-played to the user at the beginning of the movie so they were aware of what to expect.  Accessibility.UpdateProperties()
                is utilised after any change to alt text to ensure that the UI responds with the new values while Accessibility.isActive() can be used to identify if the
                current user is using an assistive technology.&lt;/p&gt;&lt;p&gt;A slightly less realistic demo followed, with a whack-a-mole implementation using tabindex and audio 'mole' 'no mole'.  I guess this is where the realisation
                comes that you are not attempting to provide a directly equivalent experience, more that you are exposing the same level of functionality to a user.&lt;/p&gt;&lt;h4&gt;Common Mistakes&lt;/h4&gt;&lt;p&gt;Inappropriate naming of items (adding 'button' to a name when it is already read out, making names too long etc) and background music interfering
                with audio alternatives were listed as mistakes often made in developing accessible Flash. Use of the wmode attribute is also known to cause
                accessibility difficulties and SWFObject was described as the most appropriate method of embedding flash content.&lt;/p&gt;&lt;p&gt;Unfortunately the accessibility implementation appears to be limited to Flash and Flex on windows.  Adobe Air came up in Q&amp;amp;A, with accessibility
                    coming soon for that (but again full support only coming to windows to start).&lt;/p&gt;&lt;h4&gt;Further Links&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.adobe.com/accessibility/products/flash/"&gt;Adobe Flash Accessibility Centre&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;OpenId, OAuth, Data Portability... Enterprise&lt;/h3&gt;&lt;p&gt;It was a shame that this panel was more business and law focused than I originally hoped it might be.  In fact so much so, that not only did I barely
                make any notes, I almost fell asleep.  Only to be woken by a heckler from the crowd taking issue with the statement that ownership issues "didn't matter"
                because as soon as something is online.. it's there and theres nothing but retrospective compensatory action that you can take.&lt;/p&gt;&lt;h3&gt;CSS3&lt;/h3&gt;&lt;p&gt;Luckily for me the CSS3 panel didn't disappoint. With representatives from Microsoft, Mozilla and Opera (with the noted exception of an invited
                but uninterested Apple) we were bound to see some interesting stuff (Just a shame that Molly's over Americanness grated on me).&lt;/p&gt;&lt;p&gt;In terms of CSS 3 we were talking about nth Child selectors (with speed an issue but still faster than inserting classes using javascript),
                partial opacity, border images (currently in FF3.5 beta), multi column support, text shadow, box shadow, border radius, font size adjust,
                @font-face and @media based rules.  Many of which have appeared in some form in many of the release versions of current browsers (but under 
                different prefixed rule names).&lt;/p&gt;&lt;p&gt;The @media based rules were of particular interest.  For example:&lt;/p&gt;&lt;code&gt;
                    &amp;lt;style type="text/css"&amp;gt;
                        /* no wider than 800px */
                        @media all and (max-width: 800px){
                        ...rules
                        }
                    &amp;lt;/style&amp;gt;
                &lt;/code&gt;&lt;p&gt;This allows excellent control over display for various user agents (such as handhelds that do not explicitly identify themselves as media
                handheld).&lt;/p&gt;&lt;p&gt;Combining a number of these CSS3 abilities together Opera had managed to draw their logo using only spans and CSS.  On rollover it even
                animated across the screen.&lt;/p&gt;&lt;h4&gt;IE 8&lt;/h4&gt;&lt;p&gt;According to the Microsoft representative IE8 will be the 
                &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx"&gt;most complete implementation of CSS 2.1 at time of release&lt;/a&gt;.
                IE 8 will reference a blacklist of 'requiring IE7 Compatibility' sites. These sites will be displayed using the compatibility mode. Compatibility mode can also be
                manually toggled using the button in the toolbar. After a set number of toggles a site will be flagged into the IE process to addition to the blacklist. When a 
                site is added to the black list it will be notified by Microsoft with instructions on how to run the site under IE8 standards mode to fix. The site can later be 
                submitted back for approval to be removed from the list.
                &lt;/p&gt;&lt;h3&gt;iPhone Dev&lt;/h3&gt;&lt;p&gt;I came away from this talk pretty positive that a simple App really isn't too difficult to create... Time to buy an intel based Mac and test that theory I guess!&lt;/p&gt;&lt;p&gt;Bypassing some rather inane descriptions of what a delegate is and why json is better than just using your own string (cheers random questioner guy for
                this unnecessaryness) this talk made clear that iPhone dev is quite different from web dev.  The hardware is 10 to 100 times slower in terms of processor/memory/capability
                than most web servers and memory management (garbage collection) is on you.  The differences also extend to latency cues; similar to AJAX you have to ensure
                you indicate progress and wait times yourself.&lt;/p&gt;&lt;p&gt;Cocoa, XCode and Interface Builder open up a variety of components for easy UI creation (things like scrollable lists etc come for free).  So for simple
                applications it's a matter of wiring up web service API calls to UI display components.&lt;/p&gt;&lt;h3&gt;Meat Sword Popsicles&lt;/h3&gt;&lt;p&gt;Mmmm Icon Cactus followed by meet on swords at Fogo de Chao in the evening was not only good in terms of food but also for meeting Richard Rutter and 
                Paul Annett of Clear Left.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>SXSW - Second Day round up</title>
            <link>http://cargowire.net/blog/sxsw09daytwo</link>
            <description>&lt;p&gt;
                    After hurriedly writing my round up of Day One we missed breakfast and grabbed a cab to rush in to our first
                    talk of the day.
                &lt;/p&gt;&lt;p&gt;
                    Without realising it (perhaps I should have read the description more) I walked into another REST discussion
                    (after seeing a similar talk at DevDevDev last year).  However it was an interesting talk marred only by a slightly
                    incessantly nit-picking Q&amp;A.  At least this time there was less constant direct referencing to 
                    Roy Fieldings dissertation.
                &lt;/p&gt;&lt;p&gt;
                    Gregg started by discussing other API possibilities such as SOAP before turning his attention to REST.
                    Essentially what we're talking about here is making full and correct use of the HTTP verbs i.e:
                &lt;/p&gt;&lt;p&gt;So that we can address the REST requirements of:&lt;/p&gt;&lt;p&gt;
                    A counter to something I'd often seen/considered using, was put forward.  In that, uris such as user/create/ should not exist
                    as the verb is being used as part of the resource locator.
                &lt;/p&gt;&lt;p&gt;
                    This strict use of the four HTTP methods however does sometimes lead to the need to
                    break down and analyse your RPCs i.e. play_game could be considered as a new verb (play) but could also be seen as 'create', and therefore post,
                    as you are creating an instance of a game.
                &lt;/p&gt;&lt;p&gt;
                    The latter half of the talk consisted of naming and shaming big name apis (YouTube gets REST, Flickr Doesn't, Myspace does, Amazon simple DB
                    doesn't, eBay doesn't, Rails 2.0 does, Google does etc.) followed by an interesting screencast of Ruby on Rails 2.0 making the appropriate REST
                    Verb Calls (although through the browser only get and post are used - with method type parameters)
                &lt;/p&gt;&lt;p&gt;
                    The key thing to take away from this talk however was the discussion of the future  (and essentially - 'why REST').  The Open Stack made up part
                    of this discussion, with the idea that Open Social, and more generally REST, could allow a standardisation of interaction between consumers and services whereby code is written
                    once; To take advantage of the Open Social standard interfaces allowing the consumer to use the same code across all open social compatible services.
                &lt;/p&gt;&lt;p&gt;
                    I always love to hear about Microformats and some of the stuff discussed in this talk was really exciting... if a little scary.  I took note that
                    Tantek regularly made clear that the information being displayed/parsed/used
                    by Microformats consumers was public information.  However, even so, it felt a little scary to realise how easy it is to pull together someones entire online 
                    identity by scraping/parsing Microformats enabled sites.
                &lt;/p&gt;&lt;p&gt;
                    An impressive demo of HuffDuffer by Jeremy Keith
                    started us off.  I urge you to try it out. After sign-up Jeremy makes use of the Google Social Graph API,
                    and therefore any rel="me" XFN Microformats on your provided homepage, to build up a list of 'elsewhere' sites.  In addition he even pulls in a relevant avatar from a
                    provided hcard.
                &lt;/p&gt;&lt;p&gt;After updating my 'Me' link on my homepage to include the rel="me" (I already had rel="me" links on my about page but nothing on my homepage to refer to it) I was
                    able to see my own results.  It included a link to my flickr and twitter as well as my twitter avatar being used.
                &lt;/p&gt;&lt;p&gt;Slightly scary stuff, but both a wake up call to users about exactly how much you are putting online and a contrast to the Open Social discussions
                that had taken place in the REST talk. Where Open Social relies on services using standard APIs to allow cross service 'write once' code the Google Social Graph
                works totally from the client side output that is found across the web.
                &lt;/p&gt;&lt;p&gt;
                    It wouldn't be a Microformats talk if the excellent Operator plugin wasn't mentionned but some people may be unaware of the
                    plugin available for IE.  It's called Oomph, but in my view the most useful aspect of this is that the jquery
                    behind it is also available directly.  This allows a site to use microformats and add value themselves (by including the javascript to output the Microformats widget).
                    Providing a good way of showing a return on the time investment.  Rather than having to say things like 'users may have a plugin' or 'other services may utilise it'.
                &lt;/p&gt;&lt;p&gt;Example required javascript below:&lt;/p&gt;&lt;p&gt;
                    As if that wasn't enough Glenn Jones had to trump it all with an intriguing set of demos.  Of particular interest is the
                    Identify plugin that pulls out and neatly displays virtually all Social
                    Graph information in a lightbox.  If any of this excites you be sure to also check out the Social Graph Explorer&lt;/p&gt;&lt;p&gt;In short people who aren't using Microformats should be.  There is no excuse, particularly with new projects. Often the areas that require
                Microformat classes will require classes for styling anyway.  Instead of making up your own, use the Microformats ones and add value. There have
                been some accessibility issues and these were discussed, for example with dates using the abbr element.  Possible fixes include separating the date
                and time elements or storing the 'title' info in a span that is styled away.  It is good to see such issues are being addressed.&lt;/p&gt;&lt;p&gt;
                    To kill some time and get away from rigidly sitting listening we paid a visit to the trade show whereby we were immediately dissed for being .net
                    developers by a Ruby based CMS producer before being subsequently let down by a WPF demo (by an AMD guy) complaining about the heat of his PC in a cabinet.  Enough said...
                &lt;/p&gt;&lt;p&gt;Unfortunately I didn't keep any notes on this (or I did, and they've got awol).  However in general what we were discussing was:&lt;/p&gt;&lt;p&gt;To recap over the legal issues; essentially if you provide a font for embedding on a website you are possibly opening it up for 
                free download to any user of the site.  This is why many font producers have difficulty with the idea of @font-face embedded fonts.&lt;/p&gt;&lt;p&gt;There are things you can do as a website owner (such as .htaccess protecting direct download of the font etc) however a determined user
                will be able to retrieve it.  The question is, if you take reasonable action, have you done enough in the eyes of font usage licenses 
                (some of which currently flat out prohibit online usage)?&lt;/p&gt;&lt;p&gt;Internet Explorer has taken one view of this problem and supports EOT's (kind of 'DRM'd fonts with only particular characters included).
                However this is not a perfectly secure solution and is not cross browser.&lt;/p&gt;&lt;p&gt;It was interesting to note that although the panel spoke about the abilities you would have with embedded fonts they also noted that
                there is a lot that can be done with typography online even now, with attention to detail and fine tuned usage of the standard 'web fonts'
                that we know so well.&lt;/p&gt;&lt;p&gt;Additionally, apparently Jeremy Keith caused a stir in the browser wars panel by asking "Does the panel believe that it's the job a browser to
                 uphold existing or outdated business models or should it remain true to the vision of the twenty year old web and just render the damn content 
                 it's given?"&lt;/p&gt;&lt;p&gt;An excellent panel with actual disagreement and debate rather than feeling like a staged group presentation. The questions covered IE6 support,
                use of JS and CSS frameworks, wireframing, and business anecdotes&lt;/p&gt;&lt;p&gt;
                    It can be downloaded here&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/sxsw09daytwo</guid>
            <pubDate>Sun, 15 Mar 2009 01:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    After hurriedly writing my round up of Day One we missed breakfast and grabbed a cab to rush in to our first
                    talk of the day.
                &lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/schedule?action=show&amp;amp;id=IAP0900147"&gt;How not to fail at web services&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/schedule?action=show&amp;amp;id=IAP0900913"&gt;Microformats: Quiet Revolution&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Trade Show&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/schedule?action=show&amp;amp;id=IAP0900555"&gt;Web Typography: Quit Bitchin' and Get Your Glyph On&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/schedule?action=show&amp;amp;id=IAP0901395"&gt;Boagworld Live Show Spectacular!&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;How not to fail at Web Services&lt;/h3&gt;&lt;p&gt;
                    Without realising it (perhaps I should have read the description more) I walked into another REST discussion
                    (after seeing a similar talk at DevDevDev last year).  However it was an interesting talk marred only by a slightly
                    incessantly nit-picking Q&amp;amp;A.  At least this time there was less constant direct referencing to 
                    &lt;a rel="nofollow" target="_blank" href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" title="Architectural Styles and the Design of Network-based Software Architectures"&gt;Roy Fieldings dissertation&lt;/a&gt;.
                &lt;/p&gt;&lt;p&gt;
                    Gregg started by discussing other API possibilities such as SOAP before turning his attention to REST.
                    Essentially what we're talking about here is making full and correct use of the HTTP verbs i.e:
                &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Get = Show&lt;/li&gt;&lt;li&gt;Post = Create&lt;/li&gt;&lt;li&gt;Put = Update&lt;/li&gt;&lt;li&gt;Delete = Delete&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So that we can address the REST requirements of:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Resources (nouns)&lt;/li&gt;&lt;li&gt;Uniquely Addressable Resources&lt;/li&gt;&lt;li&gt;Standard methods of interaction&lt;/li&gt;&lt;li&gt;Stateless&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
                    A counter to something I'd often seen/considered using, was put forward.  In that, uris such as user/create/ should not exist
                    as the verb is being used as part of the resource locator.
                &lt;/p&gt;&lt;p&gt;
                    This strict use of the four HTTP methods however does sometimes lead to the need to
                    break down and analyse your RPCs i.e. play_game could be considered as a new verb (play) but could also be seen as 'create', and therefore post,
                    as you are creating an instance of a game.
                &lt;/p&gt;&lt;p&gt;
                    The latter half of the talk consisted of naming and shaming big name apis (YouTube gets REST, Flickr Doesn't, Myspace does, Amazon simple DB
                    doesn't, eBay doesn't, Rails 2.0 does, Google does etc.) followed by an interesting screencast of Ruby on Rails 2.0 making the appropriate REST
                    Verb Calls (although through the browser only get and post are used - with method type parameters)
                &lt;/p&gt;&lt;p&gt;
                    The key thing to take away from this talk however was the discussion of the future  (and essentially - 'why REST').  The Open Stack made up part
                    of this discussion, with the idea that Open Social, and more generally REST, could allow a standardisation of interaction between consumers and services whereby code is written
                    once; To take advantage of the Open Social standard interfaces allowing the consumer to use the same code across all &lt;a rel="nofollow" target="_blank" href="http://code.google.com/apis/opensocial/"&gt;open social&lt;/a&gt; compatible services.
                &lt;/p&gt;&lt;h3&gt;Microformats: Quiet Revolution&lt;/h3&gt;&lt;p&gt;
                    I always love to hear about Microformats and some of the stuff discussed in this talk was really exciting... if a little scary.  I took note that
                    &lt;a rel="nofollow" target="_blank" href="http://twitter.com/t" title="Tantek's Twitter Feed"&gt;Tantek&lt;/a&gt; regularly made clear that the information being displayed/parsed/used
                    by Microformats consumers was public information.  However, even so, it felt a little scary to realise how easy it is to pull together someones entire online 
                    identity by scraping/parsing Microformats enabled sites.
                &lt;/p&gt;&lt;p&gt;
                    An impressive demo of &lt;a rel="nofollow" target="_blank" href="http://huffduffer.com/"&gt;HuffDuffer&lt;/a&gt; by &lt;a rel="nofollow" target="_blank" href="http://twitter.com/adactio" title="Jeremy's Twitter Feed"&gt;Jeremy Keith&lt;/a&gt;
                    started us off.  I urge you to try it out. After sign-up Jeremy makes use of the &lt;a rel="nofollow" target="_blank" href="http://code.google.com/apis/socialgraph/"&gt;Google Social Graph API&lt;/a&gt;,
                    and therefore any rel="me" XFN Microformats on your provided homepage, to build up a list of 'elsewhere' sites.  In addition he even pulls in a relevant avatar from a
                    provided hcard.
                &lt;/p&gt;&lt;p&gt;After updating my 'Me' link on my homepage to include the rel="me" (I already had rel="me" links on my about page but nothing on my homepage to refer to it) I was
                    able to see my own results.  It included a link to my flickr and twitter as well as my twitter avatar being used.
                &lt;/p&gt;&lt;p&gt;Slightly scary stuff, but both a wake up call to users about exactly how much you are putting online and a contrast to the Open Social discussions
                that had taken place in the REST talk. Where Open Social relies on services using standard APIs to allow cross service 'write once' code the Google Social Graph
                works totally from the client side output that is found across the web.
                &lt;/p&gt;&lt;p&gt;
                    It wouldn't be a Microformats talk if the excellent &lt;a rel="nofollow" target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/4106"&gt;Operator plugin&lt;/a&gt; wasn't mentionned but some people may be unaware of the
                    plugin available for IE.  It's called &lt;a rel="nofollow" target="_blank" href="http://visitmix.com/Lab/Oomph"&gt;Oomph&lt;/a&gt;, but in my view the most useful aspect of this is that the jquery
                    behind it is also available directly.  This allows a site to use microformats and add value themselves (by including the javascript to output the Microformats widget).
                    Providing a good way of showing a return on the time investment.  Rather than having to say things like 'users may have a plugin' or 'other services may utilise it'.
                &lt;/p&gt;&lt;p&gt;Example required javascript below:&lt;/p&gt;&lt;code&gt;
                    &amp;lt;script type="text/javascript" src="https://visitmix.com/labs/oomph/1.0/Client/jquery-1.2.6.min.js"&amp;gt;&amp;lt;/script&amp;gt;
                    &amp;lt;script type="text/javascript" src="https://visitmix.com/labs/oomph/1.0/Client/oomph.min.js"&amp;gt;&amp;lt;/script&amp;gt;
                &lt;/code&gt;&lt;p&gt;
                    As if that wasn't enough Glenn Jones had to trump it all with an intriguing set of demos.  Of particular interest is the
                    &lt;a rel="nofollow" target="_blank" href="http://lab.madgex.com/identify/"&gt;Identify&lt;/a&gt; plugin that pulls out and neatly displays virtually all Social
                    Graph information in a lightbox.  If any of this excites you be sure to also check out the &lt;a rel="nofollow" target="_blank" href="http://lab.madgex.com/socialgraph/socialgraphexplorer.aspx"&gt;Social Graph Explorer&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In short people who aren't using Microformats should be.  There is no excuse, particularly with new projects. Often the areas that require
                Microformat classes will require classes for styling anyway.  Instead of making up your own, use the Microformats ones and add value. There have
                been some accessibility issues and these were discussed, for example with dates using the abbr element.  Possible fixes include separating the date
                and time elements or storing the 'title' info in a span that is styled away.  It is good to see such issues are being addressed.&lt;/p&gt;&lt;h4&gt;Further Links&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://code.google.com/p/hkit/"&gt;HKit: A PHP Microformats Parser&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;Trade Show&lt;/h3&gt;&lt;p&gt;
                    To kill some time and get away from rigidly sitting listening we paid a visit to the trade show whereby we were immediately dissed for being .net
                    developers by a Ruby based CMS producer before being subsequently let down by a WPF demo (by an AMD guy) complaining about the heat of his PC in a cabinet.  Enough said...
                &lt;/p&gt;&lt;h3&gt;Web Typography&lt;/h3&gt;&lt;p&gt;Unfortunately I didn't keep any notes on this (or I did, and they've got awol).  However in general what we were discussing was:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;@font-face&lt;/li&gt;&lt;li&gt;Legal issues surrounding font ownership/licensing/usage&lt;/li&gt;&lt;li&gt;Microsoft's EOT, everyone else's OTF font embedding support&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;To recap over the legal issues; essentially if you provide a font for embedding on a website you are possibly opening it up for 
                free download to any user of the site.  This is why many font producers have difficulty with the idea of @font-face embedded fonts.&lt;/p&gt;&lt;p&gt;There are things you can do as a website owner (such as .htaccess protecting direct download of the font etc) however a determined user
                will be able to retrieve it.  The question is, if you take reasonable action, have you done enough in the eyes of font usage licenses 
                (some of which currently flat out prohibit online usage)?&lt;/p&gt;&lt;p&gt;Internet Explorer has taken one view of this problem and supports EOT's (kind of 'DRM'd fonts with only particular characters included).
                However this is not a perfectly secure solution and is not cross browser.&lt;/p&gt;&lt;p&gt;It was interesting to note that although the panel spoke about the abilities you would have with embedded fonts they also noted that
                there is a lot that can be done with typography online even now, with attention to detail and fine tuned usage of the standard 'web fonts'
                that we know so well.&lt;/p&gt;&lt;p&gt;Additionally, apparently Jeremy Keith caused a stir in the browser wars panel by asking "Does the panel believe that it's the job a browser to
                 uphold existing or outdated business models or should it remain true to the vision of the twenty year old web and just render the damn content 
                 it's given?"&lt;/p&gt;&lt;h3&gt;Boagworld: Live Spectacular!&lt;/h3&gt;&lt;p&gt;An excellent panel with actual disagreement and debate rather than feeling like a staged group presentation. The questions covered IE6 support,
                use of JS and CSS frameworks, wireframing, and business anecdotes&lt;/p&gt;&lt;p&gt;
                    It can be &lt;a rel="nofollow" target="_blank" href="http://boagworld.com/podcast/157/"&gt;downloaded here&lt;/a&gt;&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>SXSW - Travel and First Day round up</title>
            <link>http://cargowire.net/blog/sxsw09dayone</link>
            <description>&lt;p&gt;
                    After Car, Coach, Plane, Plane, Car we finally arrived in Austin (2 Hours ahead of Marcus
                    and Paul - clearly we're connecting flight geniuses).  A quick jaunt to the convention
                    center to collect passes before the melee that was collecting them on Friday, followed by an excellent (if not slightly cliche texan?)
                    chilli cheese burger meal with Paul and a multitude of people I've never met before (including
                    Aral Balkan who did an excellent talk on Friday afternoon) pretty much rounded up the first day.
                &lt;/p&gt;&lt;p&gt;My day one visit list covered:&lt;/p&gt;&lt;p&gt;
                    Along with pretty much the entire audience I sat and played with my iPhone throughout the first panel, although rather than
                    twittering like the cool kids (Question 1: "What's the hash tag for this panel?") I was making notes... which was lucky as without
                    them there probably wasn't too much memorable stuff to take away from this talk.
                &lt;/p&gt;&lt;p&gt;
                    The discussion spanned a few key areas of UGC, mainly Monetization and Getting (+maintaining) good quality user content.  On
                    the monetization side there was discussion of ad revenue as the main model seen but also pointers to how companies like LinkedIn monetize
                    by targeting different audiences (such as recruitment agencies etc) on top of their free user base.
                &lt;/p&gt;&lt;p&gt;
                    Ways of getting good content were things such as setting an overall tone of positivity within your application (and even maybe yourself
                    as the person behind the application - the example given being craigs list).  And although it was noted by one of the panel that
                    the killer app for the internet may well be 'bitching' there were pointers to the variety of ways to maintain good content.
                    For example simple user flagging of inappropriate content, reputation based user permission schemes, user ratings, and even the
                    different ways that social apps work i.e. twitter and facebook can be controlled by the user to be inclusive only of their own
                    inner circle where their content is trusted anyway without the need for over powering control/censure of content.
                &lt;/p&gt;&lt;p&gt;
                    The Questions explored these ideas further with a rather surreal back and forth about the name 'User Generated Content' being followed
                    by ideas on how to gain that critical mass needed to make your UGC based application really take off.  Ideas thrown around included
                    rewards (that are not always financial), giving the user a way to self promote/express and even things like charging for use that leads only
                    to more personal, rather than community content.
                &lt;/p&gt;&lt;p&gt;
                    Having recently started using StackOverflow a lot of this rung true to their reputation
                    and badge schemes in terms of generating a positive atmosphere and rewarding users for good quality content.
                &lt;/p&gt;&lt;p&gt;
                    It was a quick dash to the opposite end of the conference centre to catch Aral's talk but in my opinion it was definitely worth it.  Although
                    brief (about 20minutes) it was insightful and funny and left me wanting to pick up his book as I moved on to the next Panel (back
                    at the other end of the centre handily!).  I would recommend Aral's talk to the many people who balk at use of Flash. Particularly in regard
                    to his discussion of the amount of Open Source resources that are available and the idea that Usability is not inherently down to
                    the platform but due to the particular implementation.
                &lt;/p&gt;&lt;p&gt;
                    As with the rest of Headscape I showed some Clear Left love and went down
                    to see Paul's talk.  Overall, and in agreement with Marcus, this was a
                    good example of what talks at SXSW should be like.  It was entertaining and thought provoking with Paul relating the web
                    side of his life to his interest in magic very smoothly.  The key message I took from the talk reminded my of 
                    Maslow's hierarchy of needs. Whereby a certain level
                    of satisfaction is required to avoid dissatisfaction, but that once something causes satisfaction adding more of it (in
                    Paul's example toilet paper) doesn't increase enjoyment.  Something else is needed, and Paul related this well to hidden
                    easter egg's you get on sites - such as Silverbacks parallax 3D effect vines.
                &lt;/p&gt;&lt;p&gt;
                    These clever tricks and hidden bonuses create a feeling of inclusion and perhaps even smugness that you are 'in the know'
                    somehow.  It's the kind of things that make you send on a page link to a friend to point out what you've found.  The
                    difficulty, as highlighted and accepted during Q&amp;A, is selling this kind of addition/viral marketing idea to clients.
                    Which, with a majority of more 'serious' projects may be a very difficult task, especially as any possible metrics for ROI are
                    difficult to create/measure.
                &lt;/p&gt;&lt;p&gt;
                    An evening that included Texan burgers and Pool can't be bad.  A good number of people showed up to Paul's open invite for dinner at the
                    Iron Cactus with a few then continuing over to Buffalo Billiards. Overall an excellent first day.
                &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/sxsw09dayone</guid>
            <pubDate>Sat, 14 Mar 2009 09:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    After Car, Coach, Plane, Plane, Car we finally arrived in Austin (2 Hours ahead of &lt;a rel="nofollow" target="_blank" href="http://twitter.com/marcus67" title="Marcus' Twitter Feed"&gt;Marcus&lt;/a&gt;
                    and &lt;a rel="nofollow" target="_blank" href="http://twitter.com/boagworld" title="Paul's Twitter Feed"&gt;Paul&lt;/a&gt; - clearly we're connecting flight geniuses).  A quick jaunt to the convention
                    center to collect passes before the melee that was collecting them on Friday, followed by an excellent (if not slightly cliche texan?)
                    chilli cheese burger meal with Paul and a multitude of people I've never met before (including
                    &lt;a rel="nofollow" target="_blank" href="http://twitter.com/aral"&gt;Aral Balkan&lt;/a&gt; who did an excellent talk on Friday afternoon) pretty much rounded up the first day.
                &lt;/p&gt;&lt;h2&gt;Day One &lt;/h2&gt;&lt;p&gt;My day one visit list covered:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/schedule/?action=show&amp;amp;id=IAP0901401"&gt;User Generated Content: State of the Union&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/schedule?action=show&amp;amp;id=IAP0901353"&gt;The Essential Guide to Open Source Flash Development&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://sxsw.com/interactive/talks/schedule/?action=show&amp;amp;id=IAP0900363"&gt;Oooh That's Clever&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Drinks with random people&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.flickr.com/photos/davemcdermid/3353298602/"&gt;Passing out on the bed with laptop and phone in hand&lt;/a&gt; (cheers for documenting this dave!)
                    &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt; UGC&lt;/h3&gt;&lt;p&gt;
                    Along with pretty much the entire audience I sat and played with my iPhone throughout the first panel, although rather than
                    twittering like the cool kids (Question 1: "What's the hash tag for this panel?") I was making notes... which was lucky as without
                    them there probably wasn't too much memorable stuff to take away from this talk.
                &lt;/p&gt;&lt;p&gt;
                    The discussion spanned a few key areas of UGC, mainly Monetization and Getting (+maintaining) good quality user content.  On
                    the monetization side there was discussion of ad revenue as the main model seen but also pointers to how companies like LinkedIn monetize
                    by targeting different audiences (such as recruitment agencies etc) on top of their free user base.
                &lt;/p&gt;&lt;p&gt;
                    Ways of getting good content were things such as setting an overall tone of positivity within your application (and even maybe yourself
                    as the person behind the application - the example given being craigs list).  And although it was noted by one of the panel that
                    the killer app for the internet may well be 'bitching' there were pointers to the variety of ways to maintain good content.
                    For example simple user flagging of inappropriate content, reputation based user permission schemes, user ratings, and even the
                    different ways that social apps work i.e. twitter and facebook can be controlled by the user to be inclusive only of their own
                    inner circle where their content is trusted anyway without the need for over powering control/censure of content.
                &lt;/p&gt;&lt;p&gt;
                    The Questions explored these ideas further with a rather surreal back and forth about the name 'User Generated Content' being followed
                    by ideas on how to gain that critical mass needed to make your UGC based application really take off.  Ideas thrown around included
                    rewards (that are not always financial), giving the user a way to self promote/express and even things like charging for use that leads only
                    to more personal, rather than community content.
                &lt;/p&gt;&lt;p&gt;
                    Having recently started using &lt;a rel="nofollow" target="_blank" href="http://stackoverflow.com"&gt;StackOverflow&lt;/a&gt; a lot of this rung true to their reputation
                    and badge schemes in terms of generating a positive atmosphere and rewarding users for good quality content.
                &lt;/p&gt;&lt;h3&gt;Open Source Flash&lt;/h3&gt;&lt;p&gt;
                    It was a quick dash to the opposite end of the conference centre to catch Aral's talk but in my opinion it was definitely worth it.  Although
                    brief (about 20minutes) it was insightful and funny and left me wanting to pick up his book as I moved on to the next Panel (back
                    at the other end of the centre handily!).  I would recommend Aral's talk to the many people who balk at use of Flash. Particularly in regard
                    to his discussion of the amount of Open Source resources that are available and the idea that Usability is not inherently down to
                    the platform but due to the particular implementation.
                &lt;/p&gt;&lt;h3&gt;Oooh That's Clever&lt;/h3&gt;&lt;p&gt;
                    As with the rest of &lt;a rel="nofollow" target="_blank" href="http://headscape.co.uk"&gt;Headscape&lt;/a&gt; I showed some Clear Left love and went down
                    to see &lt;a rel="nofollow" target="_blank" href="http://twitter.com/nicepaul" title="Paul's Twitter Feed"&gt;Paul's&lt;/a&gt; talk.  Overall, and in agreement with Marcus, this was a
                    good example of what talks at SXSW should be like.  It was entertaining and thought provoking with Paul relating the web
                    side of his life to his interest in magic very smoothly.  The key message I took from the talk reminded my of 
                    &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Maslow's_hierarchy_of_needs"&gt;Maslow's hierarchy of needs&lt;/a&gt;. Whereby a certain level
                    of satisfaction is required to avoid dissatisfaction, but that once something causes satisfaction adding more of it (in
                    Paul's example toilet paper) doesn't increase enjoyment.  Something else is needed, and Paul related this well to hidden
                    easter egg's you get on sites - such as Silverbacks parallax 3D effect vines.
                &lt;/p&gt;&lt;p&gt;
                    These clever tricks and hidden bonuses create a feeling of inclusion and perhaps even smugness that you are 'in the know'
                    somehow.  It's the kind of things that make you send on a page link to a friend to point out what you've found.  The
                    difficulty, as highlighted and accepted during Q&amp;amp;A, is selling this kind of addition/viral marketing idea to clients.
                    Which, with a majority of more 'serious' projects may be a very difficult task, especially as any possible metrics for ROI are
                    difficult to create/measure.
                &lt;/p&gt;&lt;h3&gt;Evening time&lt;/h3&gt;&lt;p&gt;
                    An evening that included Texan burgers and Pool can't be bad.  A good number of people showed up to Paul's open invite for dinner at the
                    Iron Cactus with a few then continuing over to Buffalo Billiards. Overall an excellent first day.
                &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Sitewatcher AIR App</title>
            <link>http://cargowire.net/blog/sitewatcher</link>
            <description>&lt;p&gt;
                    Blog post now up over at Boagworld discussing
                    our first foray in to the world of Adobe AIR.  Would be great to hear any feedback, both on the app and the article itself.
                    So please do let me know your thoughts.
                &lt;/p&gt;&lt;p&gt;
                    We're aware of a few little tweaks that could be made
                    and minor bugs that could be fixed but I encourage anyone using it to take a look into their 'Program Files&amp;#92;Sitewatcher' folder
                    to check out how it was made.  Hopefully doing so will add to the article and possibly enable you to add your own customisations,
                    I'd love to hear about them.
                &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Dave has already blogged about the app and we tried to pitch
                    the boagworld post at AIR first timers, to give you a feel as to how easy it is to use and what you can achieve.  Hopefully
                    the post has whetted your appetite.
                &lt;/p&gt;&lt;p&gt;Check out the above links for some good beginners references for AIR.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/sitewatcher</guid>
            <pubDate>Fri, 13 Feb 2009 20:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    Blog post now up over at &lt;a rel="nofollow" target="_blank" href="http://boagworld.com/technology/our_first_air_app/"&gt;Boagworld&lt;/a&gt; discussing
                    our first foray in to the world of Adobe AIR.  Would be great to hear any feedback, both on the app and the article itself.
                    So please do &lt;a rel="nofollow"&gt;let me know your thoughts&lt;/a&gt;.
                &lt;/p&gt;&lt;p&gt;
                    We're aware of a few little tweaks that could be made
                    and minor bugs that could be fixed but I encourage anyone using it to take a look into their 'Program Files&amp;#92;Sitewatcher' folder
                    to check out how it was made.  Hopefully doing so will add to the article and possibly enable you to add your own customisations,
                    I'd love to hear about them.
                &lt;/p&gt;&lt;p&gt;&lt;a rel="nofollow" class="imagelink"&gt;&lt;img class="featured" width="400" height="164" alt="Screenshot of Sitewatcher Application"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.davemcdermid.co.uk/2009/01/air-time/"&gt;Dave has already blogged&lt;/a&gt; about the app and we tried to pitch
                    the boagworld post at AIR first timers, to give you a feel as to how easy it is to use and what you can achieve.  Hopefully
                    the post has whetted your appetite.
                &lt;/p&gt;&lt;h4&gt;Some Useful Links&lt;/h4&gt;&lt;ul class="featured"&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://www.adobe.com/devnet/air/" title="AIR DevNet"&gt;Air DevNet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://ajaxian.com/archives/adobe-air-for-javascript-developers-pocketguide" title="Air For Javascript Developers Pocket Guide"&gt;Pocket AIR Guide&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Check out the above links for some good beginners references for AIR.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Our First AIR App</title>
            <link>http://cargowire.net/articles/ourfirstairapp</link>
            <description>A Boagworld post on the experiences of Dave McDermid and I in creating a simple AIR application.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/ourfirstairapp</guid>
            <pubDate>Fri, 13 Feb 2009 15:00:00 +0000</pubDate>
          </item>
          <item>
            <title>Headscapers</title>
            <link>http://cargowire.net/blog/thebarn</link>
            <description>&lt;p&gt;
                    You may or may not know that I recently created an aggregated feed for people from #theBarn.
                    This can be seen over at cargowire.net/theBarn.  If you are of the persuasion you can also consume
                    this in a variety of formats.  These include HTML, XML
                    and RSS (as does most of this site in fact).  I may add more in the future... but let's be
                    honest it's probably only me viewing it as HTML at the moment anyway.  Let alone anything or anyone else.
                &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/thebarn</guid>
            <pubDate>Thu, 12 Feb 2009 22:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    You may or may not know that I recently created an aggregated feed for people from &lt;a rel="nofollow" target="_blank" href="http://search.twitter.com/search?q=%23theBarn"&gt;#theBarn&lt;/a&gt;.
                    This can be seen over at &lt;a rel="nofollow" title="Headscape Blogger Feed"&gt;cargowire.net/theBarn&lt;/a&gt;.  If you are of the persuasion you can also consume
                    this in a variety of formats.  These include &lt;a rel="nofollow" title="HTML Headscape Blogger Feed"&gt; HTML&lt;/a&gt; , &lt;a rel="nofollow" title="XML Headscape Blogger Feed"&gt; XML&lt;/a&gt; 
                    and &lt;a rel="nofollow" title="RSS Headscape Blogger Feed"&gt; RSS&lt;/a&gt; (as does most of this site in fact).  I may add more in the future... but let's be
                    honest it's probably only me viewing it as HTML at the moment anyway.  Let alone anything or anyone else.
                &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Seasonal Branding?</title>
            <link>http://cargowire.net/blog/seasonalbranding</link>
            <description>&lt;p&gt;Ok, I admit it this is a repost of something I commented on about 2 years ago on my old blog, but still...&lt;/p&gt;&lt;p&gt;
                    Whenever a holiday event occurs (Halloween, Easter, Christmas) sites will modify their design to reflect the season.  This can be anything from snow
                    effects to cartoon characters appearing on top of the usual design.  We’ve all seen it.. pumpkins and bats on halloween, snow, trees and santas at
                    christmas and egg hoarding rabbits at Easter.
                &lt;/p&gt;&lt;p&gt;
                    I'd be interested in seeing stats or empirical findings into whether that temporary re-branding
                    has an effect on visitors i.e. whether it has an off-putting effect in the vein of "popups are annoying and so is this downpour of snow over my content".
                    Or indeed the alternative that people feel more connected to the site that seems to be in some way 'human' by celebrating/recognising an external event.
                &lt;/p&gt;&lt;p&gt;
                    I guess there's a relation to 'real life' situations (if that's even a valid label, as so much of our lives are now online) whereby shops will put
                    up decorations, change storefront windows etc.  It not only acts as a way of bonding with possible clients but gives the indication that something's changed or been updated, even if it
                    hasn't.
                &lt;/p&gt;&lt;p&gt;
                    However I wonder how much the opposite is true? In that it reflects upon your professionalism, or even that people think you must have free time on your hands
                    or worse, are not spending time on their work!
                &lt;/p&gt;&lt;p&gt;Maybe it is best reserved for a particular subset of websites.  I'd probably categorise it as follows: &lt;/p&gt;&lt;p&gt;
                    The main difference in my view being the level of desire to anthropomorphise a company/organisation with the semi-parallel desire for a perception of
                    professionalism.
                &lt;/p&gt;&lt;p&gt;
                    I'd be interested to know other peoples thoughts on this.
                &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/seasonalbranding</guid>
            <pubDate>Sat, 13 Dec 2008 08:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;Ok, I admit it this is a repost of something I commented on about 2 years ago on my old blog, but still...&lt;/p&gt;&lt;p&gt;
                    Whenever a holiday event occurs (Halloween, Easter, Christmas) sites will modify their design to reflect the season.  This can be anything from snow
                    effects to cartoon characters appearing on top of the usual design.  We’ve all seen it.. pumpkins and bats on halloween, snow, trees and santas at
                    christmas and egg hoarding rabbits at Easter.
                &lt;/p&gt;&lt;p&gt;
                    I'd be interested in seeing stats or empirical findings into whether that temporary re-branding
                    has an effect on visitors i.e. whether it has an off-putting effect in the vein of "popups are annoying and so is this downpour of snow over my content".
                    Or indeed the alternative that people feel more connected to the site that seems to be in some way 'human' by celebrating/recognising an external event.
                &lt;/p&gt;&lt;p&gt;
                    I guess there's a relation to 'real life' situations (if that's even a valid label, as so much of our lives are now online) whereby shops will put
                    up decorations, change storefront windows etc.  It not only acts as a way of bonding with possible clients but gives the indication that something's changed or been updated, even if it
                    hasn't.
                &lt;/p&gt;&lt;p&gt;
                    However I wonder how much the opposite is true? In that it reflects upon your professionalism, or even that people think you must have free time on your hands
                    or worse, are not spending time on their work!
                &lt;/p&gt;&lt;p&gt;Maybe it is best reserved for a particular subset of websites.  I'd probably categorise it as follows: &lt;/p&gt;&lt;dl&gt;&lt;dt&gt;Ok to perform Seasonal Branding?&lt;/dt&gt;&lt;dd&gt;Personal Sites&lt;/dd&gt;&lt;dd&gt;Freelancer Sites&lt;/dd&gt;&lt;dd&gt;Traditional 'shop' sites... i.e. amazon, tesco etc&lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;Not so ok to perform Seasonal Branding?&lt;/dt&gt;&lt;dd&gt;Strictly regulated industries... i.e. legal, accounting, 'serious' places&lt;/dd&gt;&lt;dd&gt;Government sites&lt;/dd&gt;&lt;dd&gt;Corporate sites&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;
                    The main difference in my view being the level of desire to anthropomorphise a company/organisation with the semi-parallel desire for a perception of
                    professionalism.
                &lt;/p&gt;&lt;p&gt;
                    I'd be &lt;a rel="nofollow" target="_blank" href="http://cargowire.net/about#stalk"&gt;interested to know other peoples thoughts on this&lt;/a&gt;.
                &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Why you should make your own site</title>
            <link>http://cargowire.net/articles/whyyoushouldmakeyourownsite</link>
            <description>A developers view: Thoughts on the benefits of starting from scratch</description>
            <guid isPermaLink="false">http://cargowire.net/articles/whyyoushouldmakeyourownsite</guid>
            <pubDate>Sun, 30 Nov 2008 14:30:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
                  Many people spend time creating a personal website but what really is the point?
              &lt;/p&gt;&lt;p&gt;
                  Unless it is your base of operations for freelance work or tightly linked to your company profile it may be just an exercise in narcissism.
                  However that doesn't have to be the case.  It is my firm belief that the main purpose of having a personal website is to create it yourself.
              &lt;/p&gt;&lt;p&gt;
                  If you are a designer you may opt to use an open source blog &lt;em&gt;but spend time creating your own skin/template&lt;/em&gt;.  If you are a developer you may
                  download one of the many free design templates and &lt;em&gt;code functionality for yourself&lt;/em&gt;.  &lt;strong&gt;The point is that you do some of the work yourself&lt;/strong&gt;.
              &lt;/p&gt;&lt;h2&gt;But there's so much already out there&lt;/h2&gt;&lt;p&gt;
                  OK, so this can mean you 'reinvent the wheel' but is this necessarily a problem?  A personal site is probably the only place where you
                  have total free reign in terms of design/content and functionality, so it is your place to experiment and try new things.  Yes you could install
                  an off the shelf blog with various plugins and set it up in a day, but that's not going to help you.  It will only help your susbcribers (if you
                  even have any at this point ...and if you write any decent content).  Why should your personal site be focussed only on the readers.
                  &lt;strong&gt;You, the author, should take something from it&lt;/strong&gt;.
              &lt;/p&gt;&lt;p&gt;
                  Jeffrey Zeldman has written about &lt;a rel="nofollow" target="_blank" href="http://www.zeldman.com/2008/04/27/content-outsourcing-and-the-disappearing-personal-site/"&gt;
                  content outsourcing causing the disappearance of the personal site&lt;/a&gt;. This may be very true, and why not, if you want to host images flickr 
                  provides a great place to do that.  If you want to store your bookmarks online delicious is excellent. You can even get plugins for blogs and browsers.
                  But what do you personally learn from that?
              &lt;/p&gt;&lt;p&gt;
                  With this site I have used third party services.  My links are from delicious, my status is from twitter and my location is a combination of brightkite
                  and google maps.  But instead of just plugging this into a blog platform I have dealt with all the code myself. Crazy maybe? A waste of time? but definately a good
                  learning experience. Did I do this because I really thought people cared where I was? or what I'd just said on twitter? No.
                  Particularly as a young developer I need to keep up to date and 'hone my skills' and I was able to explore the use of restful apis, caching, providing
                  multiple response content types and much more.
              &lt;/p&gt;&lt;p&gt;
                  How would a free blog install with other developers plugins have helped me?  Maybe I could get involved with developing plugins myself? but I would
                  be restricted by user need, platform etc.  It may even be a big jump to get to a public plugin release standard of code, especially if you are just
                  starting out.
              &lt;/p&gt;&lt;p&gt;That is not to say you shouldn't participate in a community.  A conference doesn't go by without speakers espousing the benefits of such activity.&lt;/p&gt;&lt;h2&gt;So why do it?&lt;/h2&gt;&lt;p&gt;
                  Developing your own system is outside of the constraints of work (where platform or versions may be restricted) or even other peoples needs (where you can't
                  just do something to learn a technique, it must have a purpose).  It is your sandbox for you to create and recreate.
              &lt;/p&gt;&lt;p&gt;
                  There are further benefits...  you may want to blog (after all everyone's doing it).  What are you going to write about? Maybe you're a student or
                  your employed work is under confidentiality agreements? Time spent building, experimenting and updating your personal site is an excellent source of
                  content. And it's based on real life development (not trivial examples) to explain something you've learnt or read about recently.
              &lt;/p&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;p&gt;Spending time developing your own site gives you the chance to try knew things, reinvent how you did them before, and make use of things you may not 
              yet need for clients or work but might do in the future.  It is a real project that is live that needs to be treated as such and yet at the same time
              is totally within your control.&lt;/p&gt;&lt;p&gt;Code you write can be ported almost immediately into blog posts describing your process without fear of breaking confidentiality or forcing your
              explanations into trivial examples.&lt;/p&gt;&lt;p&gt;Personal sites often cover multimedia, feeds, downloads, interaction with visitors, interaction with web services.  Almost any knew technique
              can be applied in some way, giving you the chance to learn in a non time pressured environment at your own pace on a real live project.&lt;/p&gt;&lt;p&gt;A personal site should help you as well as your visitors.&lt;/p&gt;&lt;p&gt;Catch &lt;a rel="nofollow" target="_blank" href="http://twitter.com/cargowire"&gt;me on twitter&lt;/a&gt; with your thoughts.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Developer Day 7</title>
            <link>http://cargowire.net/blog/ddd7</link>
            <description>&lt;p&gt;
                    Back from Developer Day! and once again inspired to code.  It's a great day for getting you excited
                    about technology and web development even if you don't necessarily bring away specific
                    techniques that you want to try out.  So here's a breakdown of the talks I went to:
                &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/ddd7</guid>
            <pubDate>Sun, 23 Nov 2008 13:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    Back from Developer Day! and once again inspired to code.  It's a great day for getting you excited
                    about technology and web development even if you don't necessarily bring away specific
                    techniques that you want to try out.  So here's a breakdown of the talks I went to:
                &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;Alan Dean (Charteris)&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;p&gt;
                                    Essentially a detailed discussion of what is
                                    and is not valid REST.  The talk was labelled as discussing why REST might
                                    be important to you.  However that aspect did not seem to come through over the more pedagoguish
                                    yes and no's of REST.  The yes' detailed via the following 6 points:
                                &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Style = nil&lt;/li&gt;&lt;li&gt;Style += Client/Server&lt;/li&gt;&lt;li&gt;Style += Stateless&lt;/li&gt;&lt;li&gt;Style += Caching&lt;/li&gt;&lt;li&gt;Style += Uniform Interface&lt;/li&gt;&lt;li&gt;Style += Layered System&lt;/li&gt;&lt;li&gt;Style += Code on Demand&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The no's detailed as anything that does not subscribe to those six.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Separating REST Facts from Fallacies&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mike Hadlow (Freelancer)&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;p&gt;
                                    A talk with a lot of code, which is both a benefit and a small downside.  It's always more helpful to see
                                    the use of a technique in a real world example but at the same time it can be difficult to get to grips
                                    with the code as it is being displayed on screen between slides. Akin to sight reading music you need to get
                                    hold of the code yourself and have a play.
                                &lt;/p&gt;&lt;p&gt;
                                    Given that, this was an engaging talk particularly in regard to the use of Generic
                                    Repositories using extension methods.
                                &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Using an Inversion of Control Container in a real world application&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dave Sussman &amp;amp; Phil Winstanley (ASP.NET Insiders)&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;p&gt;
                                    Unfortunately this talk opened with the disclaimer that some things that were intended
                                    for the talk had to be removed as Microsoft had decided not to release certain information yet. However the
                                    information on VS2010 was enough to keep my interest.  In brief:
                                &lt;/p&gt;&lt;ul&gt;&lt;li&gt;
                                        VB and C# are to be equal so anything you can do in VB you should be able to do in C# and vice
                                        versa (including loss of the VB line continuation character in 90% of cases!).
                                    &lt;/li&gt;&lt;li&gt;
                                        Built in parallel processing support so you can run loops and linq statements across processors very
                                        simply
                                    &lt;/li&gt;&lt;li&gt;
                                        Cleaner HTML output! let's hope it's as clean as clean can be (there was also a warning of blanket upgrading
                                        prior .net projects as the HTML output will be different)
                                    &lt;/li&gt;&lt;li&gt;
                                        HTML Snippets - bringing the snippetness of vb and c# into the markup window.  Didn't really excite me but I
                                        can see some minor productivity gains
                                    &lt;/li&gt;&lt;li&gt;
                                        Client ID Control! OMG I almost wet myself (Ok I'm not that sad, but from my point of view this was excellent news).  One
                                        of the biggest stumbling blocks I found when I moved from PHP to asp.NET was losing that control over client IDs if you wanted
                                        to take advantage of the server control goodness.  Being able to set client id behaviour to static is a big bonus in
                                        terms of no longer limiting your css/javascript to unnecessary html containers (that could use normal IDs) or targetting
                                        classes alone.
                                    &lt;/li&gt;&lt;li&gt;
                                        A number of small but nice changes to VS such as fast quick search and full page variable highlighting when the cursor is placed
                                        on one
                                    &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;ASP.NET 4.0 - TOP SECRET&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ben Hall (RedGate)&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;p&gt;
                                    A discussion and demo of a Microsoft Research project is always worth a go, and this
                                    didn't disappoint.
                                &lt;/p&gt;&lt;p&gt;
                                    The best summery of Pex comes from the talk description itself:
                                &lt;/p&gt;&lt;p&gt;
                                    "Pex is a project from Microsoft Research which automatically generates a traditional unit
                                    testing suite with high code coverage from hand-written parameterised unit tests."
                                &lt;/p&gt;&lt;p&gt;
                                    Thoroughly interesting and impressive in equal measures the Pex VS Plugin will explore
                                    your code based upon a hand written test and return tabular results including the ability for you to
                                    include business rule based assertions.
                                &lt;/p&gt;&lt;p&gt;This shouldn't be used to the exclusion of other testing but looks like it can/will provide an excellent toolkit addition.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Microsoft Pex - The future of unit testing?&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;
                                    It's a shame this talk came at the end of the day as tiredness had caught up with me
                                    making it tricky to keep up with Jon's blistering pace through re-creating LINQ to Objects
                                    himself using generics and extension methods including the awesome (although seemingly unknown
                                    by some) yield keyword.
                                &lt;/p&gt;&lt;p&gt;
                                    Theres little to say without trying to redescribe how this implementation was done, which would
                                    increase the size of this post dramatically! However the power of Generics and Extension methods
                                    was clear to see.  As Jon said the implemention is simple because of this.  It is the design of linq
                                    that is so impressive.
                                &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Implementing LINQ to Objects in 60 minutes&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</content:encoded>
          </item>
          <item>
            <title>Wordle</title>
            <link>http://cargowire.net/blog/wordle</link>
            <description>&lt;p&gt;
                    Late night recommendations have led me to Wordle, an app that will create word clouds based upon
                    text, feeds or tags.  So obviously I immediately chose a long standing interesting blog to test it with... rather than self satisfyingly submitting my own article feed...
                    Ok, so here's the cloud of my article feed:
                &lt;/p&gt;&lt;p&gt;...Pretty don't you think&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/wordle</guid>
            <pubDate>Sat, 22 Nov 2008 23:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    Late night recommendations have led me to &lt;a rel="nofollow" target="_blank" href="http://www.wordle.net/create" title="Wordle - Word Clouds"&gt;Wordle&lt;/a&gt;, an app that will create word clouds based upon
                    text, feeds or tags.  So obviously I immediately chose a long standing interesting blog to test it with... rather than self satisfyingly submitting my own article feed...
                    Ok, so here's the cloud of my article feed:
                &lt;/p&gt;&lt;a rel="nofollow" target="_blank" href="http://cargowire.net/content/images/articlewordcloud.png" class="imagelink"&gt;&lt;img class="featured" width="421.5" height="220" src="http://cargowire.net/content/images/articlewordcloud.png" alt="Wordle Page Content Word Cloud"/&gt;&lt;/a&gt;&lt;p&gt;...Pretty don't you think&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Brightkite</title>
            <link>http://cargowire.net/blog/brightkite</link>
            <description>&lt;p&gt;
                    Unnecessary info? you got it Now you can see where I am by using my little brightkite/google maps universe pinpointer thingy (it's under the menu
                    over there). Additionally I've added to my RESTlessness with the '.rss' extension on my articles list if you fancy a quick subscribe.  The most recent
                    article discusses the issues surrounding Caching API request calls.
                &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/brightkite</guid>
            <pubDate>Tue, 28 Oct 2008 21:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    Unnecessary info? you got it Now you can see where I am by using my little brightkite/google maps universe pinpointer thingy (it's under the menu
                    over there). Additionally I've added to my RESTlessness with the '.rss' extension on my articles list if you fancy a quick subscribe.  The most recent
                    article discusses the issues surrounding Caching API request calls.
                &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Cheap Scheduling with Cache Expiration</title>
            <link>http://cargowire.net/articles/cacheexpirationscheduling</link>
            <description>Need scheduled activities but don't or can't create a service?</description>
            <guid isPermaLink="false">http://cargowire.net/articles/cacheexpirationscheduling</guid>
            <pubDate>Sat, 25 Oct 2008 21:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
                  Often there's a need to do some activity independent of page requests.  Windows service creation or even old school
                  vbscript task scheduling can provide the answer.  However there is another way...
              &lt;/p&gt;&lt;p&gt;
                  When building this site I always intended to hook into an abundance of APIs.  Already on this site delicious, twitter, brightkite
                  and google maps can be seen.  However with their usage comes a number of issues.
              &lt;/p&gt;&lt;p&gt;
                  Continuing with the cargowire example, if a user
                  were to hit the interesting links page they would be requesting information from Twitter for the header status, Delicious for the links
                  and brightkite + google for the map under the nav.  This of course is all wrapped up in the request for images/css/content direct
                  from cargowire.
              &lt;/p&gt;&lt;h2&gt;Caching is the Answer&lt;/h2&gt;&lt;p&gt;
                  The obvious approach therefore is to cache the api responses.  This not only helps in terms of speed of page response but also avoids breaking
                  any api limits on requests if your site gains a lot of attention.
              &lt;/p&gt;&lt;p&gt;
                  In the example below I'm using a static property as the accessor to a cached XPath document.  RandomApi is merely a placeholder
                  for what could be any API wrapper (twitter etc) that returns the XML after accessing the web service.
              &lt;/p&gt;&lt;code&gt;
                  private static XPathDocument CachedXPath
                  {
                      get
                      {
                          XPathDocument xpathCache = HttpContext.Current.Cache[CacheKey] as XPathDocument;

                          if (xpathCache == null)
                          {
                              xpathCache = new RandomAPI(ConfigSettings.RandomAPIUsername,
                              ConfigSettings.RandomAPIPassword).ToXML();

                              HttpContext.Current.Cache.Add(CacheKey, xpathCache, null,
                                              DateTime.Now.AddMinutes(ConfigSettings.RandomAPITimeoutMinutes),
                                              Cache.NoSlidingExpiration,
                                              CacheItemPriority.Default, null);
                          }
                          return xpathCache;
                      }
                  }
              &lt;/code&gt;&lt;p&gt;
                  The code implements a relatively well used pattern whereby the cache item is attempted to be accessed, if available it is returned,
                  if not it is created and put in the cache for the next request.  The cache expiration is absolute to ensure that no matter the frequency
                  of visitors the cache will expire at regular intervals (ensuring up to date content is retrieved from the web service).  If sliding expiration
                  was used the cache may never expire as each visitor restarts the timer.
              &lt;/p&gt;&lt;h2&gt;Problems with Caching&lt;/h2&gt;&lt;p&gt;
                  However even caching has its problems, particularly if your site has low regularity of traffic.  Consider the following example:
                  &lt;ol&gt;&lt;li&gt;A user hits your site.&lt;/li&gt;&lt;li&gt;The site requires delicious, twitter and brightkite but no-one has been to the site since the last cache expired.&lt;/li&gt;&lt;li&gt;
                          All three are requested from the relevant services and stored in the cache for the next user. An expiration time is set
                          for each so that they are kept up to date (for example 5 minutes for twitter or maybe a day for delicious).
                      &lt;/li&gt;&lt;li&gt;No user comes within the expiration time.&lt;/li&gt;&lt;li&gt;
                          A user comes after the expiration time - the cache is useless as it's non existant - so all items are requested again meaning
                          the user has to wait for delicious, twitter and brightkite before getting their page. Your caching strategy has given no real benefits.
                      &lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;&lt;h2&gt;Scheduled caching is the real answer&lt;/h2&gt;&lt;p&gt;
                  Ideally then what is needed is a scheduled job that refreshes the cache independently from the page requests. So that when a page request
                  comes in the cache is already there and the server can respond immediately...
              &lt;/p&gt;&lt;p&gt;
                  At the point of considering some kind of cron job or windows scheduled task/service we should probably stop and take a step back.
              &lt;/p&gt;&lt;p&gt;
                  In my view it's best to keep things within asp.NET if possible.  Not necessarily for a specific technical reason but why skip out
                  of a single project if you don't need to?
              &lt;/p&gt;&lt;h2&gt;Cache Expiration&lt;/h2&gt;&lt;p&gt;
                  If we look again at the Cache.Add function we can see a null final parameter.  This parameter enables you to define a
                  &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.web.caching.cacheitemremovedcallback.aspx"&gt;CacheItemRemovedCallback&lt;/a&gt;.
                  Essentially we're talking about an event handler that is fired when the .net process removes the item from the cache.
              &lt;/p&gt;&lt;p&gt;
                  Below is a reorganised code sample.  A CacheItemRemovedCallback delegate is created and passed in to the Cache.Add function.  When the cache item is
                  removed the expiration handler is then called.  If the reason is that it was invalided or expired due to time/usage then it seems viable to attempt to recreate
                  it. If it was manually removed then you may not wish to recreate it (otherwise you don't leave yourself any option to get rid of it!).  There's also
                  the &lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/tess/archive/2006/11/27/asp-net-crash-bad-cacheitemremovedcallback-part-ii.aspx"&gt;possibility of stack
                  overflow issues with recreating a cache item after manual removal&lt;/a&gt;.
              &lt;/p&gt;&lt;p&gt;Essentially if you reinsert the item when the reason was 'Removed' the re-insert
                  will overwrite the currently existing item (that is removed when this event finishes) before re-adding it.  This removal will of course fire the item removed
                  callback, which will remove/add it back again causing an infinite loop.                    
              &lt;/p&gt;&lt;code&gt;
                  private static XPathDocument CachedXPath
                  {
                      get
                      {
                          XPathDocument xpathCache = WebCache.Cache[CacheKey] as XPathDocument;

                          if (xpathCache == null)
                          {
                              CacheItemRemovedCallback expired = new CacheItemRemovedCallback(Expired);
                              xpathCache = new RandomAPI(ConfigSettings.RandomAPIUsername,
                                                          ConfigSettings.RandomAPIPassword).ToXML();
                              WebCache.Cache.Add(CacheKey, xpathCache, null,
                                              DateTime.Now.AddMinutes(ConfigSettings.RandomAPITimeoutMinutes),
                                              System.Web.Caching.Cache.NoSlidingExpiration,
                                              System.Web.Caching.CacheItemPriority.Default, expired);
                          }
                          return xpathCache;
                      }
                  }
                  private static void Expired(string key, object val, CacheItemRemovedReason reason)
                  {
                      if (reason == CacheItemRemovedReason.DependencyChanged
                          || reason == CacheItemRemovedReason.Expired
                              || reason == CacheItemRemovedReason.Underused)
                      {
                          XPathDocument xp = CachedXPath;
                      }
                  }
              &lt;/code&gt;&lt;p&gt;
                  There is another difference to note.  Lines 5 and 11 both reference a WebCache static class instead of the HttpContext.Current.Cache
                  used in the first example.  This is for one reason only.  The cache can expire at any point during the application i.e. outside of a request
                  for the page.  This is by design, and it helps us refresh the cache without forcing a user to wait for us to do so.  However there's no
                  HttpContext outside of a page request so a call to CachedXPath will throw an exception (one that will not be seen by a site visitor but an exception
                  none the less causing the cache refresh to fail).
              &lt;/p&gt;&lt;p&gt;
                  One way around this is to ensure that there is a static way of accessing the application cache.  An ideal time to store this is before
                  there is any possibility that the cache will be requested.  By simply adding a few lines to the Global.asax a static variable can be set for use
                  throughout the application.
              &lt;/p&gt;&lt;code&gt;
                  protected void Application_BeginRequest(object sender, EventArgs e)
                  {
                      if(WebCache.Cache == null)
                          WebCache.Cache = Context.Cache;
                  }
              &lt;/code&gt;&lt;p&gt;&lt;strong&gt;[Edit]&lt;/strong&gt; You can also make use of the HttpRuntime.Cache accessor to Cache, which will be available outside of the page request.&lt;/p&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;p&gt;
                  This article describes just one way to take advantage of the caching abilities of .NET.  A regular refresh is valid if you need to keep data
                  almost always in memory but regularly updated...  a twitter cache that never refreshes would render it's output irrelevant.
              &lt;/p&gt;&lt;p&gt;
                  The .NET implementation of expiration handling would allow you to run any kind of scheduled activity.  Merely by calling the required function
                  on cache item expiration, before refreshing the cache with the desired timeout you can begin and cause a pseudo timer based process.
              &lt;/p&gt;&lt;p&gt;However, using caching in this way is not always appropriate.  A windows service will have higher local privileges and can be set to auto start
              and be manually started.  The cache timeout will only begin after the first request for that cache item,  and a further request will be required if 
              the app pool recycles for any reason.&lt;/p&gt;&lt;p&gt;
                  Please do catch &lt;a rel="nofollow" target="_blank" href="http://twitter.com/cargowire"&gt;me on twitter&lt;/a&gt; if you have any thoughts/feedback before I get any
                  proper commenting online.
              &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Dateformatting in XML</title>
            <link>http://cargowire.net/articles/dateformattinginxml</link>
            <description>Simple way to format dates using .net objects and xml/xslt.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/dateformattinginxml</guid>
            <pubDate>Sat, 18 Oct 2008 13:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;Formatting dates is something we do all the time and .NET provides some really easy to use methods to format based on a string.  However
              for human readable situations we so often want the day suffixes.&lt;/p&gt;&lt;p&gt;
                  Some time ago I was looking into finding a 'nice' way to format dates with the suffixes on the day i.e. 'st', 'nd', 'rd' and 'th'. I ended up coming across a 
                  &lt;a rel="nofollow" target="_blank" href="http://www.codeproject.com/KB/cs/Formatting.aspx" title="How To Append 'st', 'nd', 'rd' or 'th' To Day Numbers in Dates"&gt;Codeproject Article by Mark Gwilliam&lt;/a&gt;
                  that discussed an interesting approach.
              &lt;/p&gt;&lt;p&gt;A particular point he made was:&lt;/p&gt;&lt;blockquote&gt;
                  ...if you're considering adding some functionality, it's worth checking to see if you can extend the framework in some way. This allows developers to consume your code more easily and hopefully &lt;strong&gt;expands your knowledge of .NET&lt;/strong&gt; along the way...
                  &lt;cite&gt;Mark Gwilliam&lt;/cite&gt;&lt;/blockquote&gt;&lt;p&gt;So, with this in mind, and without wanting to extend my never ending list of usernames/passwords I decided I would just take what was discussed in the article and create
                  my own solution based on his approach rather than download his source.  The plan was to create an ICustomFormatter:&lt;/p&gt;&lt;code&gt;
                  // To go from
                  string.Format("{0:dd MMMM yyyy}", DateTime.Now);
                  //Outputs: 18 October 2008

                  // To
                  string.Format(new BritishDateTimeFormatter(), "{0:ddx MMMM yyyy}", DateTime.Now);
                  // Outputs: 18th October 2008
              &lt;/code&gt;&lt;p&gt;This ICustomFormatter would provide a Format method that could understand the 'x' char as a placeholder for the day suffix.  It would also
                  need a way of identifying which suffix to put in its place.&lt;/p&gt;&lt;p&gt;An easy way to achieve this is to create an array of the suffixes
              referencable by the day of the month value (as below).  This could also be a relatively minor algorithm to decide on suffix, it's personal
              preference (especially when you consider how small an effect we're talking about), but I quite like the simplicity of a static array.&lt;/p&gt;&lt;code&gt;
                  namespace Formatting
                  {
                      /// &amp;lt;summary&amp;gt;&amp;lt;/summary&amp;gt;
                      public class BritishDateTimeFormatter : IFormatProvider, ICustomFormatter
                      {
                          // Member containing day suffixes // Usage:  extensions[dateInstance.Day];
                          #region Members
                          private static string[] extensions =
                          //0     1     2     3     4     5     6     7     8     9
                          { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th",
                          //10    11    12    13    14    15    16    17    18    19
                          "th", "th", "th", "th", "th", "th", "th", "tn", "th", "th",
                          //20    21    22    23    24    25    26    27    28    29
                          "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th",
                          //30    31
                          "th", "st" };
                          #endregion
                          
                          #region IFormatProvider Implementation
                          public object GetFormat(Type formatType)
                          {
                              if (formatType == typeof(ICustomFormatter))
                                  return this;
                              else
                                  return null;
                          }
                          #endregion
                          
                          ...
     
                      }
                  }
              &lt;/code&gt;&lt;p&gt;Included above is also the IFormatProvider implementation.  Theres nothing too complicated here, merely returning the instance as the
              formatter.&lt;/p&gt;&lt;p&gt;The ICustomFormatter implementation of the Format function can then be filled in.  As you can see the short format strings are manually
              re-represented to ensure that they continue to work using the default behaviour.  Some minor string manipulation allows the suffix to be
              added when and where necessary.&lt;/p&gt;&lt;p&gt;The default behaviour of the switch on format string is to attempt to replace the x wherever it appears in the string (except when it is escaped
              by a '&amp;#92;'. This is achieved by a cascade of formats and regex replaces that ensure that the escaped x remains as a normal x and a non-escaped
              x gets transformed into the appropriate suffix.&lt;/p&gt;&lt;code&gt;
                          public string Format(string fmt, object arg, IFormatProvider formatProvider)
                          {
                              string ret = arg.ToString();

                              DateTime date;
                              if (DateTime.TryParse(ret, out date))
                              {
                                  switch (fmt) // Switch on all single character style format rules
                                  {
                                      case "ddx":
                                          ret = string.Format("{0}{1}", date.ToString("dd"), extensions[date.Day]);
                                      break;
                                      case "dx": // Doesn't make sense to add extensions to: 08/22/2006
                                          ret = date.ToString("d");
                                      break;
                                      case "Dx":
                                          ret = date.ToString("D");
                                          ret = ret.Insert(ret.IndexOf(" "), extensions[date.Day]);
                                      break;
                                      case "Fx":
                                          ret = date.ToString("F");
                                          ret = ret.Insert(ret.IndexOf(" "), extensions[date.Day]);
                                      break;
                                      case "fx":
                                          ret = date.ToString("f");
                                          ret = ret.Insert(ret.IndexOf(" "), extensions[date.Day]);
                                      break;
                                      case "gx": // Doesn't make sense to add extensions to: 08/22/2006 06:30
                                          ret = date.ToString("g");
                                      break;
                                      case "Gx": // Doesn't make sense to add extensions to: 08/22/2006 06:30:07
                                          ret = date.ToString("G");
                                      break;
                                      case "mx":
                                          ret = date.ToString("m");
                                          ret = ret.Insert(ret.IndexOf(" "), extensions[date.Day]);
                                      break;
                                      case "Rx":
                                          ret = date.ToString("R");
                                          ret = ret.Insert(ret.IndexOf(" ", ret.IndexOf(", ") + 2), extensions[date.Day]);
                                      break;
                                      case "rx":
                                          ret = date.ToString("r");
                                          ret = ret.Insert(ret.IndexOf(" ", ret.IndexOf(", ") + 2), extensions[date.Day]);
                                      break;
                                          case "sx": // Doesn't make sense to add extensions to: 2006-08-22T06:30:07
                                          ret = date.ToString("s");
                                      break;
                                          case "ux": // Doesn't make sense to add extensions to: 2006-08-22 06:30:07Z
                                          ret = date.ToString("u");
                                      break;
                                          case "Ux":
                                          ret = date.ToString("U");
                                          ret = ret.Insert(ret.IndexOf(" "), extensions[date.Day]);
                                      break;
                                          case "yx": // Doesn't make sense to add extensions to: 2006 August
                                          ret = date.ToString("y");
                                      break;
                                      case "x":
                                          ret = extensions[date.Day];
                                      break;
                                      default: // Attempt a format with 'x's included
                                          System.Text.RegularExpressions.Regex addExtraEscape = new System.Text.RegularExpressions.Regex("(&amp;#92;&amp;#92;&amp;#92;&amp;#92;)(x)");
                                          fmt = addExtraEscape.Replace(fmt, "&amp;#92;&amp;#92;&amp;#92;&amp;#92;$2");

                                          System.Text.RegularExpressions.Regex replaceUnescaped = new System.Text.RegularExpressions.Regex("([^&amp;#92;&amp;#92;&amp;#92;&amp;#92;])(x)");
                                          ret = replaceUnescaped.Replace(date.ToString(fmt), string.Format("$1{0}", extensions[date.Day]));

                                          System.Text.RegularExpressions.Regex removeExtraEscape = new System.Text.RegularExpressions.Regex("(&amp;#92;&amp;#92;&amp;#92;&amp;#92;)(x)");
                                          ret = removeExtraEscape.Replace(ret, "$2");
                                      break;
                                  }
                              }
                              return ret;
                          }
                      }
                  }
              &lt;/code&gt;&lt;h2&gt;How can I use this in XML?&lt;/h2&gt;&lt;p&gt;By simply adding an instance method that takes the date and the format we can then &lt;a rel="nofollow" target="_blank" href="http://cargowire.net/articles/dotnetobjectsinxml"&gt;add the BritishDateTimeFormatter
              as an extension object&lt;/a&gt;:&lt;/p&gt;&lt;code&gt;
                  public string FormatDate(object arg, string fmt)
                  {
                      return Format(fmt, arg, this);
                  }
              &lt;/code&gt;&lt;p&gt;...and call it direct from the XSL.&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"
                      xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl date"
                      xmlns:date="urn:BritishDateFormatter"&amp;gt;
                      
                      ...
                      
                      &amp;lt;xsl:value-of select="date:FormatDate(string(@time),$formatString)"/&amp;gt;
              &lt;/code&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;p&gt;An example of this article can be found within the &lt;a rel="nofollow" target="_blank" href="http://cargowire.net/interesting"&gt;Links&lt;/a&gt; section of this site
              where XML is the source and a BritishDateFormatter extension object is used to format the dates using "'dx MMM &amp;#92;&amp;amp;#8217;yy'" as
              the format string.&lt;/p&gt;&lt;p&gt;This solution is obviously very british/english language specific.  A further step could be to look into support for localisation.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Twitter</title>
            <link>http://cargowire.net/blog/twitter</link>
            <description>&lt;p&gt;
                    I've followed the current 'hip trend' of adding a twitter feed to my site (see upper right if you've not noticed it yet) and added the 1st draft of
                    my date formatting article (I say first draft because I kinda rushed it this morning before heading out for the weekend).  I'll probably return to it
                    to polish and add some more explanation.
                &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/twitter</guid>
            <pubDate>Sat, 18 Oct 2008 13:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    I've followed the current 'hip trend' of adding a twitter feed to my site (see upper right if you've not noticed it yet) and added the 1st draft of
                    my date formatting article (I say first draft because I kinda rushed it this morning before heading out for the weekend).  I'll probably return to it
                    to polish and add some more explanation.
                &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>The Boag Effect</title>
            <link>http://cargowire.net/blog/boageffect</link>
            <description>&lt;p&gt;
                    So today Mr Boag himself helpfully twittered this site address.  The image below shows what shall now be known as 'the boag effect'.
                    As you can see there was a 'slight' change in visitors this afternoon.  I'd like to attribute that to my excellent content, exciting design and general awesomeness
                &lt;/p&gt;&lt;p&gt;However I must concede that Paul may have had a minor effect.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/boageffect</guid>
            <pubDate>Thu, 16 Oct 2008 23:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    So today &lt;a rel="nofollow" target="_blank" href="http://boagworld.com/" title="Boagworld | Web design podcast"&gt;Mr Boag&lt;/a&gt; himself helpfully twittered this site address.  The image below shows what shall now be known as 'the boag effect'.
                    As you can see there was a 'slight' change in visitors this afternoon.  I'd like to attribute that to my excellent content, exciting design and general awesomeness
                &lt;/p&gt;&lt;img src="http://cargowire.net/content/images/boageffect.gif" alt="The Boag Effect" class="featured"/&gt;&lt;p&gt;However I must concede that Paul may have had a minor effect.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>.NET objects in XML</title>
            <link>http://cargowire.net/articles/dotnetobjectsinxml</link>
            <description>Need to get extra functionality into your xsl transforms?</description>
            <guid isPermaLink="false">http://cargowire.net/articles/dotnetobjectsinxml</guid>
            <pubDate>Sun, 12 Oct 2008 18:30:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
                  Many people use XSL functions to enhance the abilities of their XML transforms.  Although not everyone may be aware
                  of a nice (and simple) way of achieving this.
              &lt;/p&gt;&lt;p&gt;
                  XSL provides a large number of ways to manipulate and display data through constructs such as for-each, apply-templates, choose/when etc.
                  However this does not always cover all possible requirements of a transform. Sometimes there is a need to run code, and this is often
                  performed in the following way:
              &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"
                      xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl cargowire"
                      xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:cargowire="http://cargowire.net/XSL"&amp;gt;

                      &amp;lt;ms:script language="C#" implements-prefix="cargowire"&amp;gt;
                      &amp;lt;![CDATA[
                          public string MakePointlessStatement() {
                              // This could actually be done without code but what the hey...
                              return "Hello World!";
                          }
                      ]]&amp;gt;
                      &amp;lt;/ms:script&amp;gt;

                      &amp;lt;xsl:template match="/"&amp;gt;
                          &amp;lt;xsl:value-of select="cargowire:MakePointlessStatement()" /&amp;gt;
                      &amp;lt;/xsl:template&amp;gt;

                  &amp;lt;/xsl:stylesheet&amp;gt;
              &lt;/code&gt;&lt;p&gt;
                  The problem is that this not only looks and feels messy but mixes C# code (incidently this can be a number of languages… javascript and vb
                  for example) with XSL files leading to a loss of intellisense in Visual Studio, less ease of deploying with your usual common code
                  libraries and less ease of integration with your existing classes.
              &lt;/p&gt;&lt;p&gt;So what's the better way?&lt;/p&gt;&lt;h2&gt;Extension Objects&lt;/h2&gt;&lt;p&gt;
                  Luckily for us (and with a quick look at the first intellisense item on an XsltArgumentList instance) .net enables us to pass in
                  an object instance…
              &lt;/p&gt;&lt;p&gt;First we need a class that might be useful to have inside an XSL document.&lt;/p&gt;&lt;code&gt;
                  using System;
                  using System.Web;

                  namespace ExtensionObjects
                  {
                      public class XslWebPage
                      {
                          public string GetExtensionlessAbsolutePath()
                          {
                              int length = HttpContext.Current.Request.Url.AbsolutePath.LastIndexOf('.');
                              return HttpContext.Current.Request.Url.AbsolutePath.Substring(0, (length &amp;gt; -1) ?
                                  length : HttpContext.Current.Request.Url.AbsolutePath.Length);
                          }
                      }
                  }
              &lt;/code&gt;&lt;p&gt;
                  Ok, so you may find little use for such a class but it's used on this site as part of the URL creation within XSL generated pages.
                  It's intended to act as a wrapper for the usual 'Page' object to enable any request type operations.
              &lt;/p&gt;&lt;p&gt;
                  Lets pretend we have an &amp;lt;asp:Xml ID="myXML" runat="server" /&amp;gt; control in the markup of a page and a pre-populated XmlDocument
                  instance called xDoc.  The following code would create a new XsltArgumentList before adding an XslWebPage instance and binding the translated
                  XML to the control.
              &lt;/p&gt;&lt;code&gt;
                  myXML.XPathNavigator = xDoc.CreateNavigator();

                  System.Xml.Xsl.XsltArgumentList xtal = new System.Xml.Xsl.XsltArgumentList();

                  xtal.AddExtensionObject("urn:XslWebPage", new XslWebPage());

                  myXML.TransformSource = Server.MapPath("/transform.xsl");
                  myXML.TransformArgumentList = xtal;
                  myXML.DataBind();
              &lt;/code&gt;&lt;p&gt;
                  To use this object within your transform is simple.  First you must register the namespace to match what was specified when the
                  object was added to the argument list.
              &lt;/p&gt;&lt;code&gt;
                  &amp;lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                      exclude-result-prefixes="msxsl cargowire page"
                      xmlns:ms="urn:schemas-microsoft-com:xslt"
                      xmlns:cargowire="urn:http://cargowire.net/XSL"
                      xmlns:page="urn:XslWebPage"&amp;gt;
              &lt;/code&gt;&lt;p&gt;Then it can be used whenever needed:&lt;/p&gt;&lt;code&gt;
                  &amp;lt;xsl:value-of select="page:GetExtensionlessAbsolutePath()" /&amp;gt;
              &lt;/code&gt;&lt;p&gt;Simple as that.&lt;/p&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;p&gt;
                  This is quite a simple addition to your XML/XSL armoury but one that I've found to be incredibly helpful particularly in
                  avoiding an abundance of Xsl Parameters being passed here there and everywhere for things like URLs.
              &lt;/p&gt;&lt;p&gt;
                  The plus side is that your XSL functions can be grouped into your common code libraries under a shared namespace (or even in
                  one huge xsl utility if you want to go there!). You may even wish to go further and create a subclass of XslTransform overriding transform() to always submit
                  your required utility classes as extension objects.  This could have the added bonus of saving the hassle of maintaining xsl includes of
                  functions files.
              &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>FOWA!</title>
            <link>http://cargowire.net/blog/fowaexpo2008</link>
            <description>&lt;p&gt;FOWA Rocked! Heres the run down of talks I saw (to be updated/added to):&lt;/p&gt;&lt;p&gt;This jquery slide down/up seemingly breaks in IE8 and FF2... doh I'll look into a fix or change&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/fowaexpo2008</guid>
            <pubDate>Sat, 11 Oct 2008 22:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;FOWA Rocked! Heres the run down of talks I saw (to be updated/added to):&lt;/p&gt;&lt;table id="dayone" class="fowa"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan="2"&gt;Day One: 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;Kevin Rose&lt;/td&gt;&lt;td rowspan="2"&gt;
                                IMO a suprisingly good and interesting talk mainly about the future of digg rather than the future of news. However
                                the talk of servicing niche interests via a combination of clustering like minded people together in a more personalised
                                recommendation system + encouraging participation through increased impact visiblity was a thoroughly interesting listen.
                            &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;The Future of News&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Edwin Aoki&lt;/td&gt;&lt;td rowspan="2"&gt;

                                I didn't feel like I took much away from this talk.  However Edin did reinforce the point that successful web apps should, and generally
                                are, based on a passion being turned into an application with the thought of money coming later.
                            &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Web apps are dead, long live web apps&lt;/td&gt;&lt;/tr&gt;&lt;tr class="grok"&gt;&lt;td&gt;Mike Ormand&lt;/td&gt;&lt;td rowspan="2"&gt;Another round of good silverlight demos. Difficult to know when and where I would put this into practice. Flash is still the winner for me.&lt;/td&gt;&lt;/tr&gt;&lt;tr class="grok"&gt;&lt;td class="sub"&gt;What's all this Silverlight stuff?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Blaine Cook and Joe Stump&lt;/td&gt;&lt;td rowspan="2"&gt;
                                Insightful and engaging these two probably provided the best talks.  Often verging close to a rant against language fanboys they highlighted
                                the core issue of IO in scaling situations.
                            &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Languages, don't scale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Kevin Marks&lt;/td&gt;&lt;td rowspan="2"&gt;
                                Lots of that 'cloud' word (although quite a nice intro to it's usage). Kevin also spoke of the transition from email as a publically accessible
                                end point that is increasingly used only formally, with social networks becoming far more intrinsic to the personal web experience.  I particularly identified
                                with his negative view of unnecessary web form info (I now tell most forms that I live at a well known London landmark).
                            &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;The Future of Enterprise Web Apps&lt;/td&gt;&lt;/tr&gt;&lt;tr class="grok"&gt;&lt;td&gt;Andrew Shorten&lt;/td&gt;&lt;td rowspan="2"&gt;An excellent intro to Adobe AIR + a free book.&lt;/td&gt;&lt;/tr&gt;&lt;tr class="grok"&gt;&lt;td class="sub"&gt;Taking web based applications to the desktop with Adobe AIR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Alvin Woon&lt;/td&gt;&lt;td rowspan="2"&gt;
                                An interesting perspective on UI design. Adaptive UI (changes in UI based on context etc).  Unfortunately not the best speaker
                                in terms of clarity and engaging the audience with rather 'traditional' slides.
                            &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;The future of social app interface design&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Blaine Cook&lt;/td&gt;&lt;td rowspan="2"&gt;This guy is scary clever, but also cool in equal measure.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Colliding Worlds: Using Jabber to make awesome web sites&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;David Recordon&lt;/td&gt;&lt;td rowspan="2"&gt;
                                Another talk that's given me &lt;a rel="nofollow" target="_blank" href="http://www.flickr.com/photos/56624456@N00/2869986857/" title="The Open Stack"&gt;something to read up on.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Blowing up social networks with Open Tech&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Francisco Tolmasky&lt;/td&gt;&lt;td rowspan="2"&gt;A clearly intelligent guy with some crazy javascript app work going on, and yet I'm still put off by javascript being taken that far.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Building Desktop Caliber Web Applications with Objective-J and Cappucino&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Crick Waters&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Web will heal itself&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mike Butcher&lt;/td&gt;&lt;td rowspan="2"&gt;Essentially half an hour of Jason calacanis scaring the hell out of startups.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;TechCrunch Pitch! @ FOW&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Media Temple&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Party @Fox&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table id="daytwo" class="fowa"&gt;&lt;caption&gt;FOWA Expo 2008 (Uni Talks in grey)&lt;/caption&gt;&lt;thead&gt;&lt;tr&gt;&lt;th colspan="2"&gt;Day Two: 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;Tim Bray&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;The Fear Factor: What to be Frightened of in Building A Web Application&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Adam Gross&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Cloud Computing in the Enterprise - How Businesses are Taking Advantage of the Future of the Web&lt;/td&gt;&lt;/tr&gt;&lt;tr class="grok"&gt;&lt;td&gt;Andrew Shorten&lt;/td&gt;&lt;td rowspan="2"&gt;This talk really highlighted to me the large similarities between Silverlight and Flex. Air/Flash and MXML are strikingly similar to Silverlight and XAML.&lt;/td&gt;&lt;/tr&gt;&lt;tr class="grok"&gt;&lt;td class="sub"&gt;Building Rich Internet Applications using Adobe Flex&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chris Messina&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;How oAuth and portable data can revolutionise your web app&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bret Taylor&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;The future of your online presence&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jason Calacanis&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Work/life balance or Blood, sweat and tears: Which is the startup way?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Elaine Wherry&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Scaling the Synchronous Web&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jeremy Baines&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;How to build a desktop app for your web app&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Michael Galpert&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;How to survive outside of Silicon valley&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dave Morin&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Making the web more social with Facebook Connect&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Andrew Shorten&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Adobe AIR Competition Finals&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mark Zuckerberg&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Fireside chat&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Kathy Sierra&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;How to grow and nurture your community&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Alex Albrecht and Kevin Rose&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Diggnation!&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Digg and Facebook&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="sub"&gt;Wrap party @Fox&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;This jquery slide down/up seemingly breaks in IE8 and FF2... doh I'll look into a fix or change&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>RSS</title>
            <link>http://cargowire.net/blog/rss</link>
            <description>&lt;p&gt;
                    RESTless? The beginnings of the delicious article have been started over in articles.  To coincide with this I've reorganised
                    my url structure a bit so that now an extension of '.xml' will return the data in xml format.  I'll eventually add to this (the sneaky of those among you
                    may find that I'm already using '.ajax' for my ajax calls - to identify that a partial should be returned).
                &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/rss</guid>
            <pubDate>Fri, 03 Oct 2008 20:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    RESTless? The beginnings of the delicious article have been started over in &lt;a rel="nofollow" target="_blank" href="http://cargowire.net/articles"&gt;articles&lt;/a&gt;.  To coincide with this I've reorganised
                    my url structure a bit so that now an extension of '.xml' will return the data in xml format.  I'll eventually add to this (the sneaky of those among you
                    may find that I'm already using '.ajax' for my ajax calls - to identify that a partial should be returned).
                &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Code Highlighting</title>
            <link>http://cargowire.net/blog/codehighlighting</link>
            <description>&lt;p&gt;
                    Recently the portfolio content has been fleshed out slightly and a rough timeline for the articles I intend to write planned out. I've also plucked for a
                    javascript syntax highlighter for any code examples I include.  Heres an example of it in action:
                &lt;/p&gt;&lt;p&gt;On a side note I'm massively Looking forward to the Future Of Web Apps in london next week.&lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/codehighlighting</guid>
            <pubDate>Sun, 28 Sep 2008 12:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    Recently the portfolio content has been fleshed out slightly and a rough timeline for the articles I intend to write planned out. I've also plucked for a
                    &lt;a rel="nofollow" target="_blank" href="http://code.google.com/p/syntaxhighlighter/"&gt;javascript syntax highlighter&lt;/a&gt; for any code examples I include.  Heres an example of it in action:
                &lt;/p&gt;&lt;code&gt;
                    public class HelloWorld : StatementMaker {

                    public override void MakeStatement() {
                    HttpContext.Current.Response.Write("Hello World!");
                    }
                    }
                &lt;/code&gt;&lt;p&gt;On a side note I'm massively Looking forward to the Future Of Web Apps in london next week.&lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Where Was I?</title>
            <link>http://cargowire.net/blog/wherewasi</link>
            <description>&lt;p&gt;
                    After losing all data in July I'm finally back up and running and should be continuing with the site as soon as poss.  Portfolio
                    has now been migrated.
                &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/wherewasi</guid>
            <pubDate>Wed, 20 Aug 2008 22:30:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    After losing all data in July I'm finally back up and running and should be continuing with the site as soon as poss.  Portfolio
                    has now been migrated.
                &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Fixes</title>
            <link>http://cargowire.net/blog/fixes</link>
            <description>&lt;p&gt;
                    Updates tonight included javascript fixes for ie7 and css fixes for ie6.. at least now you should be able to see the same
                    design in most browsers! ...just one ie6 bug left now! I've not got any contact stuff setup yet so if you have any comments please head over to here and try and find some way of tracking
                    me down.
                &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/fixes</guid>
            <pubDate>Sun, 08 Jun 2008 14:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    Updates tonight included javascript fixes for ie7 and css fixes for ie6.. at least now you should be able to see the same
                    design in most browsers! ...just one ie6 bug left now! I've not got any contact stuff setup yet so if you have any comments please head over to &lt;a rel="nofollow" target="_blank" href="http://cargowire.net/about#stalk"&gt;here&lt;/a&gt; and try and find some way of tracking
                    me down.
                &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>Designed?</title>
            <link>http://cargowire.net/blog/designed</link>
            <description>&lt;p&gt;
                    After a couple of attempts I've settled on a design.  I'm yet to add the relevant css / javascript for IE 6 support, and
                    also I understand the sIFR may not be working correctly.  I'll be looking into these points as soon as possible as well as the
                    odd crashing you get in IE7 when the ajax on the links page is used.
                &lt;/p&gt;</description>
            <guid isPermaLink="false">http://cargowire.net/blog/designed</guid>
            <pubDate>Sun, 01 Jun 2008 12:00:00 +0000</pubDate>
            <content:encoded>&lt;p&gt;
                    After a couple of attempts I've settled on a design.  I'm yet to add the relevant css / javascript for IE 6 support, and
                    also I understand the sIFR may not be working correctly.  I'll be looking into these points as soon as possible as well as the
                    odd crashing you get in IE7 when the ajax on the links page is used.
                &lt;/p&gt;</content:encoded>
          </item>
          <item>
            <title>3D Knowledge Representation [Dissertation]</title>
            <link>http://cargowire.net/articles/threedimensionalknowledgerepresentation</link>
            <description>An investigation into, and prototyping of, a multimedia solution to the representation of a field of study.</description>
            <guid isPermaLink="false">http://cargowire.net/articles/threedimensionalknowledgerepresentation</guid>
            <pubDate>Thu, 29 Sep 2005 09:00:00 +0000</pubDate>
            <content:encoded>&lt;p class="intro"&gt;
                  This report details and discusses the creation and proof of concept of a multimedia 3Dimensional
                  knowledge map driven application for the representation of the concepts within a field of study.
              &lt;/p&gt;&lt;p&gt;
                  The example field of study is that of ‘Information Systems’. The report discusses the issues
                  surrounding such a representation, moving onto possible solutions, concluding with the creation and
                  discussion of the implementation of a 3Dimensional interactive multimedia artefact.
              &lt;/p&gt;&lt;p&gt;
                  To begin, the variety of investigations into learning and the benefits of multimedia are briefly presented.
                  This is followed by a discussion of the problem area connecting the two areas of marketing and
                  learning in the context of higher education course information. A focus on and analysis of mind
                  mapping, concept mapping and interactivity is made and followed by a competitor analysis before a
                  user interface design and discussion of the many issues surrounding a 3D interface. The choice of
                  development tool and the final outcome is then evaluated for its effectiveness in meeting the problem.
                  Concluding points are drawn on the basis of the current application and the scope for future
                  development.
              &lt;/p&gt;&lt;p&gt;[Information Systems Dissertation Project: Abstract Only]&lt;/p&gt;</content:encoded>
          </item>
        </channel>
      </rss>
    </barn>
  </page>
</cargowire>
