<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Code Train &#187; barcamp</title>
	<atom:link href="http://thecodetrain.co.uk/tag/barcamp/feed/" rel="self" type="application/rss+xml" />
	<link>http://thecodetrain.co.uk</link>
	<description>Where Neil Crosby talks about coding on the train...</description>
	<lastBuildDate>Sun, 03 Apr 2011 18:15:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Geolocation &amp; Beer: Part 1 &#8211; Finding the user</title>
		<link>http://thecodetrain.co.uk/2010/05/geolocation-and-beer-part-1-finding-the-user/</link>
		<comments>http://thecodetrain.co.uk/2010/05/geolocation-and-beer-part-1-finding-the-user/#comments</comments>
		<pubDate>Wed, 05 May 2010 22:10:37 +0000</pubDate>
		<dc:creator>Neil Crosby</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[barcamb]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[beer]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[w3c]]></category>

		<guid isPermaLink="false">http://thecodetrain.co.uk/?p=389</guid>
		<description><![CDATA[<p>I recently attended <a href="http://barcamb.ltheobald.co.uk/">BarCamb3</a>, a BarCamp held at the lovely <a href="http://www.red-gate.com/">Red Gate Software</a> offices in Cambridge.  My main contribution to the event was talking about a silly little weekend learning project I&#8217;ve been working on &#8211; <a href="http://beernear.me/">Beer Near Me</a>.  </p>

<p>I&#8217;ve split the presentation I gave up into three separate blog posts, which I&#8217;ll be putting up over the next few days.  This one will cover basic use of the <code>navigator.geolocation</code> API, with the next two showing you how to use the data that gives you to <a href="http://thecodetrain.co.uk/2010/05/geolocation-and-beer-part-2-telling-the-user-where-they-are/">find out where the user actually is</a>, and to <a href="http://thecodetrain.co.uk/2010/05/geolocation-and-beer-part-3-static-maps/">plot that data using Google&#8217;s static maps API</a>.</p>

<p>To start, I should explain that Beer Near Me was only ever intended to be used as a platform to be used to help me learn about the <a href="http://dev.w3.org/geo/api/spec-source.html"><code>navigator.geolocation</code> API</a> and how it works.  All the data that gets shown by the site was initially kind of secondary to me, as was the map that I use to show it off.</p>

<p><img src="http://thecodetrain.co.uk/images/geolocation/geolocation.001.png" alt="GeoLocation &#038; Beer"> <img src="http://thecodetrain.co.uk/images/geolocation/geolocation.009.png" alt="What will I talk about?"></p>

<p>Of course, <code>navigator.geolocation</code> turned out to be far easier to work with than I expected.</p>

<h2>Support for navigator.geolocation</h2>

<p>The first thing to be aware of is that right now, support for <code>navigator.geolocation</code> is pretty poor.  If you&#8217;re using Firefox 3.5+ or Mobile Safari you can use it out of the box, and you can <a href="http://www.wait-till-i.com/2010/03/04/google-chrome-getting-navigator-geolocation/">turn on geolocation support in Chrome</a>, but apart from that you&#8217;re plain out of luck.  Since the idea behind Beer Near Me was to learn about <code>navigator.geolocation</code> that means that right now I&#8217;m not supporting any other APIs.</p>

<p><img src="http://thecodetrain.co.uk/images/geolocation/geolocation.011.png" alt="navigator.geolocation support"> <img src="http://thecodetrain.co.uk/images/geolocation/geolocation.012.jpg" alt="Other APIs are available"></p>

<p>It&#8217;s not all doom and gloom though.  There are implementations of the API available for use in other browsers as plugins &#8211; for example <a href="http://en.wikipedia.org/wiki/Mozilla_Geode">Geode</a> will get you support in earlier versions of Firefox 3, and Google Gears opens up the ability to play with geolocation in some other browsers.  There&#8217;s also <a href="http://www.loki.com">Loki</a> (a Skyhook based plugin) that will get you support over a whole bunch of browsers but uses a differently specified API. Of course, I&#8217;ve not actually used any of these, so your guess is as good as mine as to whether they are any good or not.  I seem to remember Loki looking interesting a couple of years ago.</p>

<h2>Finding a location</h2>

<p>So, how to actually use <code>navigator.geolocation</code>?  Well, a good place to start would be checking whether the browser supports it.  We&#8217;ll do this in JavaScript, since that&#8217;s the only place we can reliably perform the check.</p>

<pre><code>if (navigator.geolocation) {
    // do geolocation
} else {
    // say sorry to the user
}
</code></pre>

<p>Pretty simple.  It&#8217;s your standard JavaScript functionality check.  If we have the functionality available then we can actually do something with it.</p>

<pre><code>navigator.geolocation.getCurrentPosition(
    foundLocation, // a user generated function
    noLocation,    // yup, user generated too
    {
        enableHighAccuracy: true,
        maximumAge: 1800,
        timeout: 30
    }
);
</code></pre>

<p>Here, we&#8217;re calling <code>getCurrentLocation()</code> with two callback functions and some options.  Once the browser (and the user) has decided whether or not to return a location, either the <code>foundLocation</code> or <code>noLocation</code> functions that you get to write are called, and the user&#8217;s location is passed into them.</p>

<p><img src="http://thecodetrain.co.uk/images/geolocation/geolocation.013.jpg" alt="GeoLocation check"> <img src="http://thecodetrain.co.uk/images/geolocation/geolocation.014.jpg" alt="getCurrentPosition"></p>

<p>Before we get to those callback functions though, lets talk for a minute about the options we&#8217;re passing into <code>getCurrentPosition()</code>.  Essentially, what we&#8217;re saying in the code above is:</p>

<blockquote>
  <p>Try to give me highly accurate positioning if possible. I&#8217;d like to actually know where I am.</p>
  
  <p>Oh, and if you have a position cached that&#8217;s no older than 30 minutes, could you give me that immediately please?  I know that kind of contradicts what I said a moment ago, but I know better than you.</p>
  
  <p>And one more thing &#8211; if it takes you longer than 30 seconds to work out where you are, just give up.  There&#8217;s a good fellow.</p>
</blockquote>

<p>And that&#8217;s it really, with that little bit of code we&#8217;ve set up the browser to do some magic and try and work out where it is.</p>

<h2>Watching for changes to the user&#8217;s location</h2>

<p>The only problem with this is that the iPhone in particular seems a bit rubbish at following these instructions.  The first result it sends back seems to be uniformly Not Good, and generally quite old.  So what can we do about that?  Thankfully, there&#8217;s an easy answer provided to us in the API &#8211; the <code>watchPosition()</code> function.  This uses exactly the same parameters as <code>getCurrentLocation()</code> and can simply be dropped in as a replacement for it.</p>

<p><img src="http://thecodetrain.co.uk/images/geolocation/geolocation.015.jpg" alt="Keep finding the user"> <img src="http://thecodetrain.co.uk/images/geolocation/geolocation.016.jpg" alt="You've got a location!"></p>

<p><code>watchPosition</code> does what you&#8217;d expect it to do.  Instead of finding a location once, it will keep watching the user&#8217;s location and call the success function whenever the location changes.  The thing that <code>watchPosition()</code> is most useful for though, is getting more accurate locations as the user&#8217;s device tries different location finding techniques.</p>

<p>You see, different devices will try and locate themselves in different ways.  Some of the techniques they&#8217;ll use will be be quick, some slow, and some very expensive when it comes to battery life.  For example, here&#8217;s what the iPhone does, as I understand it:</p>

<ol>
<li><p>First, the iPhone will look to see if there&#8217;s a location cached in its memory and give you that if available.</p></li>
<li><p>If you&#8217;re still watching for new locations, it will then try and grab a general location from the cell towers it knows about.</p>

<p>Depending on the number of towers available, this might give you really good, or really bad accuracy.  For example, in Bedford (where I live), using cell tower triangulation I get an accuracy which basically covers the entire town.  Not particularly useful.  It is quick though, and doesn&#8217;t really cost much in terms of power.</p></li>
<li><p>If the cell tower triangulation wasn&#8217;t awesome then the iPhone will gather information about all the WIFI hotspots it can see.  </p>

<p>This data gets sent to Skyhook, which does a whole bunch of triangulation and sends back a result.  This is obviously slower than just hitting the cell towers, but it can give you a really accurate result depending on where you are (better than GPS in some built up areas).</p></li>
<li><p>Finally, if you&#8217;re still looking for a location, the iPhone will fire up the GPS.  </p>

<p>This is expensive, slow, and drains the battery, so is left as a last resort.  It generally gives the best quality results though.</p></li>
</ol>

<p>So, you see, things aren&#8217;t necessarily as simple as asking for a position.  A whole bunch of stuff can be going on in the background, and grabbing the best location the user&#8217;s device knows about as time goes on can be very useful.</p>

<h2>Using the location we&#8217;ve found</h2>

<p>So, now that we&#8217;re requesting a location, what do we do once we actually get one?  Lets have a look.</p>

<pre><code>foundLocation = function(position) {
    // position.coords.latitude
    // position.coords.longitude
    // position.coords.accuracy
    // and more…
}
</code></pre>

<p>As you can see, the function we call on location finding success gets passed a single parameter &#8211; <a href="http://dev.w3.org/geo/api/spec-source.html#position_interface"><code>position</code></a>.  This object contains a <code>coords</code> object, and a <code>timestamp</code> representing the time the location was determined.  It&#8217;s the <code>coords</code> object we&#8217;re interested in right now, since that contains the latitude, longitude and accuracy (measured in metres) of the user&#8217;s current location &#8211; all the information a grown chap could need for finding some beer.  Other applications might make use of the altitude, heading and speed information, but that&#8217;s not vital when looking for beer, so I&#8217;m ignoring it for now.</p>

<h2>Putting it all together</h2>

<p>Quickly putting all this together, here&#8217;s some JavaScript you can copy and paste into a page to see this all in action.</p>

<pre><code>/*global document, navigator */
var beerLocation = {
    foundLocation: function (position) {
        beerLocation.setPara(
            "Lat = " + position.coords.latitude + 
            ", lon = " + position.coords.longitude + 
            ", accuracy = " + position.coords.accuracy + "m");
    },

    noLocation: function () {
        beerLocation.setPara("Boo! You didn't share your location!");
    },

    noGeoLocation: function () {
        beerLocation.setPara(
            "Sorry, but your browser doesn't support geolocation.");
    },

    setPara: function (text) {
        var p = document.getElementById('location-info');
        if (!p) {
            p = document.createElement('p');
            p.id = 'location-info';
            document.body.appendChild(p);
        }

        p.innerHTML = text;
    }
};

if (navigator.geolocation) {
    navigator.geolocation.watchPosition(
        beerLocation.foundLocation, 
        beerLocation.noLocation,
        {
            enableHighAccuracy: true,
            maximumAge: 120000
        }
    );
} else {
    beerLocation.noGeoLocation();
}
</code></pre>

<p>Alternatively, take a look at it in situ and in action on my <a href="http://projects.thecodetrain.co.uk/geolocation/">geolocation test page</a>.  The location shown by this page will keep updating as you move around or your device&#8217;s accuracy improves.  For best results, try it out on an iPhone.</p>

<h2>And finally</h2>

<p>And that&#8217;s how easy it is to find a user&#8217;s location and keep updating it.  You just need to do something with the latitude and longitude once you&#8217;ve found it.</p>

<p>In <a href="http://beernear.me/">Beer Near Me</a> I do two things with the location once it&#8217;s been found &#8211; I <a href="http://thecodetrain.co.uk/2010/05/geolocation-and-beer-part-2-telling-the-user-where-they-are/">tell the user the street address of the location</a>, and I display it on a map.  And, of course, I&#8217;ll be writing about how I&#8217;m doing that in the next couple of posts.</p>
<div style="display:block"><small><em><a href="http://neilcrosby.com">Neil Crosby</a> also blogs at about t-shirts at <a href="http://iwearcotton.com">I Wear Cotton</a>, writes <a href="http://thetenwordreview.com/users/workingwithme">Ten Word Reviews</a>, and uploads <a href="http://www.flickr.com/photos/thevoicewithin/">photos</a> to flickr.  You can follow a combined feed of posts at <a href="http://neilcrosby.com/">NeilCrosby.com</a>.</em></small></div>]]></description>
			<content:encoded><![CDATA[<p>I recently attended <a href="http://barcamb.ltheobald.co.uk/">BarCamb3</a>, a BarCamp held at the lovely <a href="http://www.red-gate.com/">Red Gate Software</a> offices in Cambridge.  My main contribution to the event was talking about a silly little weekend learning project I&#8217;ve been working on &#8211; <a href="http://beernear.me/">Beer Near Me</a>.  </p>

<p>I&#8217;ve split the presentation I gave up into three separate blog posts, which I&#8217;ll be putting up over the next few days.  This one will cover basic use of the <code>navigator.geolocation</code> API, with the next two showing you how to use the data that gives you to <a href="http://thecodetrain.co.uk/2010/05/geolocation-and-beer-part-2-telling-the-user-where-they-are/">find out where the user actually is</a>, and to <a href="http://thecodetrain.co.uk/2010/05/geolocation-and-beer-part-3-static-maps/">plot that data using Google&#8217;s static maps API</a>.</p>

<p>To start, I should explain that Beer Near Me was only ever intended to be used as a platform to be used to help me learn about the <a href="http://dev.w3.org/geo/api/spec-source.html"><code>navigator.geolocation</code> API</a> and how it works.  All the data that gets shown by the site was initially kind of secondary to me, as was the map that I use to show it off.</p>

<p><img src="http://thecodetrain.co.uk/images/geolocation/geolocation.001.png" alt="GeoLocation &#038; Beer"> <img src="http://thecodetrain.co.uk/images/geolocation/geolocation.009.png" alt="What will I talk about?"></p>

<p>Of course, <code>navigator.geolocation</code> turned out to be far easier to work with than I expected.</p>

<h2>Support for navigator.geolocation</h2>

<p>The first thing to be aware of is that right now, support for <code>navigator.geolocation</code> is pretty poor.  If you&#8217;re using Firefox 3.5+ or Mobile Safari you can use it out of the box, and you can <a href="http://www.wait-till-i.com/2010/03/04/google-chrome-getting-navigator-geolocation/">turn on geolocation support in Chrome</a>, but apart from that you&#8217;re plain out of luck.  Since the idea behind Beer Near Me was to learn about <code>navigator.geolocation</code> that means that right now I&#8217;m not supporting any other APIs.</p>

<p><img src="http://thecodetrain.co.uk/images/geolocation/geolocation.011.png" alt="navigator.geolocation support"> <img src="http://thecodetrain.co.uk/images/geolocation/geolocation.012.jpg" alt="Other APIs are available"></p>

<p>It&#8217;s not all doom and gloom though.  There are implementations of the API available for use in other browsers as plugins &#8211; for example <a href="http://en.wikipedia.org/wiki/Mozilla_Geode">Geode</a> will get you support in earlier versions of Firefox 3, and Google Gears opens up the ability to play with geolocation in some other browsers.  There&#8217;s also <a href="http://www.loki.com">Loki</a> (a Skyhook based plugin) that will get you support over a whole bunch of browsers but uses a differently specified API. Of course, I&#8217;ve not actually used any of these, so your guess is as good as mine as to whether they are any good or not.  I seem to remember Loki looking interesting a couple of years ago.</p>

<h2>Finding a location</h2>

<p>So, how to actually use <code>navigator.geolocation</code>?  Well, a good place to start would be checking whether the browser supports it.  We&#8217;ll do this in JavaScript, since that&#8217;s the only place we can reliably perform the check.</p>

<pre><code>if (navigator.geolocation) {
    // do geolocation
} else {
    // say sorry to the user
}
</code></pre>

<p>Pretty simple.  It&#8217;s your standard JavaScript functionality check.  If we have the functionality available then we can actually do something with it.</p>

<pre><code>navigator.geolocation.getCurrentPosition(
    foundLocation, // a user generated function
    noLocation,    // yup, user generated too
    {
        enableHighAccuracy: true,
        maximumAge: 1800,
        timeout: 30
    }
);
</code></pre>

<p>Here, we&#8217;re calling <code>getCurrentLocation()</code> with two callback functions and some options.  Once the browser (and the user) has decided whether or not to return a location, either the <code>foundLocation</code> or <code>noLocation</code> functions that you get to write are called, and the user&#8217;s location is passed into them.</p>

<p><img src="http://thecodetrain.co.uk/images/geolocation/geolocation.013.jpg" alt="GeoLocation check"> <img src="http://thecodetrain.co.uk/images/geolocation/geolocation.014.jpg" alt="getCurrentPosition"></p>

<p>Before we get to those callback functions though, lets talk for a minute about the options we&#8217;re passing into <code>getCurrentPosition()</code>.  Essentially, what we&#8217;re saying in the code above is:</p>

<blockquote>
  <p>Try to give me highly accurate positioning if possible. I&#8217;d like to actually know where I am.</p>
  
  <p>Oh, and if you have a position cached that&#8217;s no older than 30 minutes, could you give me that immediately please?  I know that kind of contradicts what I said a moment ago, but I know better than you.</p>
  
  <p>And one more thing &#8211; if it takes you longer than 30 seconds to work out where you are, just give up.  There&#8217;s a good fellow.</p>
</blockquote>

<p>And that&#8217;s it really, with that little bit of code we&#8217;ve set up the browser to do some magic and try and work out where it is.</p>

<h2>Watching for changes to the user&#8217;s location</h2>

<p>The only problem with this is that the iPhone in particular seems a bit rubbish at following these instructions.  The first result it sends back seems to be uniformly Not Good, and generally quite old.  So what can we do about that?  Thankfully, there&#8217;s an easy answer provided to us in the API &#8211; the <code>watchPosition()</code> function.  This uses exactly the same parameters as <code>getCurrentLocation()</code> and can simply be dropped in as a replacement for it.</p>

<p><img src="http://thecodetrain.co.uk/images/geolocation/geolocation.015.jpg" alt="Keep finding the user"> <img src="http://thecodetrain.co.uk/images/geolocation/geolocation.016.jpg" alt="You've got a location!"></p>

<p><code>watchPosition</code> does what you&#8217;d expect it to do.  Instead of finding a location once, it will keep watching the user&#8217;s location and call the success function whenever the location changes.  The thing that <code>watchPosition()</code> is most useful for though, is getting more accurate locations as the user&#8217;s device tries different location finding techniques.</p>

<p>You see, different devices will try and locate themselves in different ways.  Some of the techniques they&#8217;ll use will be be quick, some slow, and some very expensive when it comes to battery life.  For example, here&#8217;s what the iPhone does, as I understand it:</p>

<ol>
<li><p>First, the iPhone will look to see if there&#8217;s a location cached in its memory and give you that if available.</p></li>
<li><p>If you&#8217;re still watching for new locations, it will then try and grab a general location from the cell towers it knows about.</p>

<p>Depending on the number of towers available, this might give you really good, or really bad accuracy.  For example, in Bedford (where I live), using cell tower triangulation I get an accuracy which basically covers the entire town.  Not particularly useful.  It is quick though, and doesn&#8217;t really cost much in terms of power.</p></li>
<li><p>If the cell tower triangulation wasn&#8217;t awesome then the iPhone will gather information about all the WIFI hotspots it can see.  </p>

<p>This data gets sent to Skyhook, which does a whole bunch of triangulation and sends back a result.  This is obviously slower than just hitting the cell towers, but it can give you a really accurate result depending on where you are (better than GPS in some built up areas).</p></li>
<li><p>Finally, if you&#8217;re still looking for a location, the iPhone will fire up the GPS.  </p>

<p>This is expensive, slow, and drains the battery, so is left as a last resort.  It generally gives the best quality results though.</p></li>
</ol>

<p>So, you see, things aren&#8217;t necessarily as simple as asking for a position.  A whole bunch of stuff can be going on in the background, and grabbing the best location the user&#8217;s device knows about as time goes on can be very useful.</p>

<h2>Using the location we&#8217;ve found</h2>

<p>So, now that we&#8217;re requesting a location, what do we do once we actually get one?  Lets have a look.</p>

<pre><code>foundLocation = function(position) {
    // position.coords.latitude
    // position.coords.longitude
    // position.coords.accuracy
    // and more…
}
</code></pre>

<p>As you can see, the function we call on location finding success gets passed a single parameter &#8211; <a href="http://dev.w3.org/geo/api/spec-source.html#position_interface"><code>position</code></a>.  This object contains a <code>coords</code> object, and a <code>timestamp</code> representing the time the location was determined.  It&#8217;s the <code>coords</code> object we&#8217;re interested in right now, since that contains the latitude, longitude and accuracy (measured in metres) of the user&#8217;s current location &#8211; all the information a grown chap could need for finding some beer.  Other applications might make use of the altitude, heading and speed information, but that&#8217;s not vital when looking for beer, so I&#8217;m ignoring it for now.</p>

<h2>Putting it all together</h2>

<p>Quickly putting all this together, here&#8217;s some JavaScript you can copy and paste into a page to see this all in action.</p>

<pre><code>/*global document, navigator */
var beerLocation = {
    foundLocation: function (position) {
        beerLocation.setPara(
            "Lat = " + position.coords.latitude + 
            ", lon = " + position.coords.longitude + 
            ", accuracy = " + position.coords.accuracy + "m");
    },

    noLocation: function () {
        beerLocation.setPara("Boo! You didn't share your location!");
    },

    noGeoLocation: function () {
        beerLocation.setPara(
            "Sorry, but your browser doesn't support geolocation.");
    },

    setPara: function (text) {
        var p = document.getElementById('location-info');
        if (!p) {
            p = document.createElement('p');
            p.id = 'location-info';
            document.body.appendChild(p);
        }

        p.innerHTML = text;
    }
};

if (navigator.geolocation) {
    navigator.geolocation.watchPosition(
        beerLocation.foundLocation, 
        beerLocation.noLocation,
        {
            enableHighAccuracy: true,
            maximumAge: 120000
        }
    );
} else {
    beerLocation.noGeoLocation();
}
</code></pre>

<p>Alternatively, take a look at it in situ and in action on my <a href="http://projects.thecodetrain.co.uk/geolocation/">geolocation test page</a>.  The location shown by this page will keep updating as you move around or your device&#8217;s accuracy improves.  For best results, try it out on an iPhone.</p>

<h2>And finally</h2>

<p>And that&#8217;s how easy it is to find a user&#8217;s location and keep updating it.  You just need to do something with the latitude and longitude once you&#8217;ve found it.</p>

<p>In <a href="http://beernear.me/">Beer Near Me</a> I do two things with the location once it&#8217;s been found &#8211; I <a href="http://thecodetrain.co.uk/2010/05/geolocation-and-beer-part-2-telling-the-user-where-they-are/">tell the user the street address of the location</a>, and I display it on a map.  And, of course, I&#8217;ll be writing about how I&#8217;m doing that in the next couple of posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://thecodetrain.co.uk/2010/05/geolocation-and-beer-part-1-finding-the-user/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Why did I go to Social Media Camp?</title>
		<link>http://thecodetrain.co.uk/2009/05/why-did-i-go-to-social-media-camp/</link>
		<comments>http://thecodetrain.co.uk/2009/05/why-did-i-go-to-social-media-camp/#comments</comments>
		<pubDate>Fri, 01 May 2009 08:41:24 +0000</pubDate>
		<dc:creator>Neil Crosby</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[smclondon]]></category>
		<category><![CDATA[social media camp]]></category>

		<guid isPermaLink="false">http://thecodetrain.co.uk/?p=236</guid>
		<description><![CDATA[<p>It&#8217;s been almost a week now, so I thought I&#8217;d better write down my thoughts about <a href="http://www.socialmediacamp.co.uk/">Social Media Camp London &#8217;09</a> now before they all vanish from my head.</p>

<p>I didn&#8217;t go to last year&#8217;s Social Media Camp.  I only heard about it a couple of days before it was due to happen, and frankly at the time I was dissuaded from going by the general murmurment of my peers that anything to do with social media would be &#8220;gash&#8221;.  That said, the blog posts that I read afterwards sounded like the talks and presentations that happened would have been very relevant to my interests, so I made a promise to myself that I would do my very best to go next time.</p>

<p>So I went.</p>

<p>Now, Social Media Camp London &#8217;09 was only the second *Camp that I&#8217;ve been to that was focussed around a niche subject (the first was <a href="http://www.guardian.co.uk/technology/gamecamp">GameCamp</a> &#8211; I hope there&#8217;s another one of those this year).  One of the things that I loved about SMC was that there were very few people there whom I already knew.  I like to try and talk to new people at these events, which can be a bit of a problem when everyone already knows each other.  No such problem here!</p>

<p>The talks themselves were universally great, with each one offering their own insight into an area that the speaker felt strongly about.  I must admit, I felt really quite bad about my &#8220;<a href="http://thecodetrain.co.uk/2009/04/how-to-make-awesome-broken-biscuit-cake/">How to make awesome broken biscuit cake</a>&#8221; presentation — whilst the cake was well received, I didn&#8217;t think the presentation fit that well into the topic at hand.  If I&#8217;d made more of the &#8220;if you offer people something, they will come&#8221; angle, then I&#8217;d have been happier with things — as it was, the presentation felt like it would have been more at home at a standard BarCamp.  </p>

<p>But enough with the self-flaggelation&#8230;</p>

<p>There were two things which stuck out at Social Media Camp as &#8220;not good&#8221; things — the number of no-shows and the number of empty slots on the grid.</p>

<p>As Vero pointed out in <a href="http://www.thatcanadiangirl.co.uk/blog/2009/04/29/socialmediacamp-london-09-a-few-lessons-learned/">her post</a>, there were a lot of no-shows.  She did the sensible (but scary) thing of overbooking the event, but there were still a good few spaces available on the day.  No-shows are something that happen at every *Camp, and it&#8217;s been <a href="http://thecodetrain.co.uk/2008/10/had-a-ticket-but-didnt-come-to-barcamp-london-5-for-shame/">talked about</a> many times before.  People not showing up means that other people that would have liked to have come couldn&#8217;t, which is no fun for anyone.  That said, I personally liked the numbers at this event — it didn&#8217;t feel overly crowded, but likewise it didn&#8217;t feel too small.</p>

<p>One of the important things to note about Social Media Camp was the number of people there who&#8217;d never been to a *Camp event before.  From experience, I know that they can be a nerve-wracking experience the first time.  &#8220;Will people like what I have to talk about?  Will I get jeered off-stage?  Will everyone already know what I have to say?&#8221;  I signed up for the first two London-based BarCamps, got a ticket, and then handed it back a few days before the events for those very reasons.  It was scary.  I finally made it to BarCampLondon3 though, presented, and loved it.  I&#8217;ve now been to pretty much every BarCamp I&#8217;ve been able to get to, presenting at each one.  That first hurdle is a difficult one to get over, but once you&#8217;re over it you feel great.</p>

<p>So, with all the newcomers to *Camps at Social Media Camp it was unsurprising that there would be a few people who felt unconfident to present.  That&#8217;s okay, but there are some extra things that could have been done to help combat this (Kat has written a <a href="http://www.safetygoat.co.uk/2009/04/social-media-camp-london-97-awesome/">post</a> about this already, and the excellent comments are well worth reading through).</p>

<p>The first thing that could be done (which Vero says happened more for the first Social Media Camp than this one), is to educate about the presentations before the Camp itself.  By making a firm but friendly assertion that everyone should present, that if no-one presents there will be no *Camp, and by giving examples of a range of different presentations that people have made in the past the whole thing can be made a lot less scary.</p>

<p>The other simple thing to do is to provide a slot for lightning talks (5 minute talks, rather than the normal half-hour slot), and let people know about it before the event.  This then gives newcomers who are less confident about their presentations an easy way to contribute something small and less scary than a full half-hour&#8217;s amount of material.  At most of the BarCamps I&#8217;ve been to recently, someone has taken it upon themselves to take over one of the rooms for a session or two to run lightning talks.  Unfortunately, I only remembered about this towards the end of the event this time, when it was far too late to do anything about it.</p>

<p>One other possible way to combat non-presenters that&#8217;s been mooted is to have a special room that&#8217;s just for newcomers to give them a &#8220;safe area&#8221;.  My only worry with this suggestion is that it could lead to a feeling of segregation and that newcomers <em>have</em> to present there, rather than it being a place they can present if they want to.</p>

<p>Overall, Social Media Camp London &#8217;09 was a great event.  I&#8217;ll definitely be back next time.  I met a whole bunch of great new people who I just wouldn&#8217;t have met otherwise, and I came away feeling re-invigorated.  Roll on the next one.</p>

<p>Which reminds me — I haven&#8217;t actually answered the question in the title of this post — why did I go?</p>

<p>It was pointed out to me a couple of times during the day that I am primarily a developer.  In my day job I don&#8217;t try and build communities, and I don&#8217;t interact with users.  At home though, I very much do (or at least I should).  I run <a href="http://thetenwordreview.com">The Ten Word Review</a>, a site where you can review anything you want as long as you do it in exactly ten words.  Usage of the site has primarily grown organically, and I&#8217;m obviously interested in looking after the community that&#8217;s grown around the site.  So that&#8217;s why I came, and I&#8217;m glad I did.</p>
<div style="display:block"><small><em><a href="http://neilcrosby.com">Neil Crosby</a> also blogs at about t-shirts at <a href="http://iwearcotton.com">I Wear Cotton</a>, writes <a href="http://thetenwordreview.com/users/workingwithme">Ten Word Reviews</a>, and uploads <a href="http://www.flickr.com/photos/thevoicewithin/">photos</a> to flickr.  You can follow a combined feed of posts at <a href="http://neilcrosby.com/">NeilCrosby.com</a>.</em></small></div>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been almost a week now, so I thought I&#8217;d better write down my thoughts about <a href="http://www.socialmediacamp.co.uk/">Social Media Camp London &#8217;09</a> now before they all vanish from my head.</p>

<p>I didn&#8217;t go to last year&#8217;s Social Media Camp.  I only heard about it a couple of days before it was due to happen, and frankly at the time I was dissuaded from going by the general murmurment of my peers that anything to do with social media would be &#8220;gash&#8221;.  That said, the blog posts that I read afterwards sounded like the talks and presentations that happened would have been very relevant to my interests, so I made a promise to myself that I would do my very best to go next time.</p>

<p>So I went.</p>

<p>Now, Social Media Camp London &#8217;09 was only the second *Camp that I&#8217;ve been to that was focussed around a niche subject (the first was <a href="http://www.guardian.co.uk/technology/gamecamp">GameCamp</a> &#8211; I hope there&#8217;s another one of those this year).  One of the things that I loved about SMC was that there were very few people there whom I already knew.  I like to try and talk to new people at these events, which can be a bit of a problem when everyone already knows each other.  No such problem here!</p>

<p>The talks themselves were universally great, with each one offering their own insight into an area that the speaker felt strongly about.  I must admit, I felt really quite bad about my &#8220;<a href="http://thecodetrain.co.uk/2009/04/how-to-make-awesome-broken-biscuit-cake/">How to make awesome broken biscuit cake</a>&#8221; presentation — whilst the cake was well received, I didn&#8217;t think the presentation fit that well into the topic at hand.  If I&#8217;d made more of the &#8220;if you offer people something, they will come&#8221; angle, then I&#8217;d have been happier with things — as it was, the presentation felt like it would have been more at home at a standard BarCamp.  </p>

<p>But enough with the self-flaggelation&#8230;</p>

<p>There were two things which stuck out at Social Media Camp as &#8220;not good&#8221; things — the number of no-shows and the number of empty slots on the grid.</p>

<p>As Vero pointed out in <a href="http://www.thatcanadiangirl.co.uk/blog/2009/04/29/socialmediacamp-london-09-a-few-lessons-learned/">her post</a>, there were a lot of no-shows.  She did the sensible (but scary) thing of overbooking the event, but there were still a good few spaces available on the day.  No-shows are something that happen at every *Camp, and it&#8217;s been <a href="http://thecodetrain.co.uk/2008/10/had-a-ticket-but-didnt-come-to-barcamp-london-5-for-shame/">talked about</a> many times before.  People not showing up means that other people that would have liked to have come couldn&#8217;t, which is no fun for anyone.  That said, I personally liked the numbers at this event — it didn&#8217;t feel overly crowded, but likewise it didn&#8217;t feel too small.</p>

<p>One of the important things to note about Social Media Camp was the number of people there who&#8217;d never been to a *Camp event before.  From experience, I know that they can be a nerve-wracking experience the first time.  &#8220;Will people like what I have to talk about?  Will I get jeered off-stage?  Will everyone already know what I have to say?&#8221;  I signed up for the first two London-based BarCamps, got a ticket, and then handed it back a few days before the events for those very reasons.  It was scary.  I finally made it to BarCampLondon3 though, presented, and loved it.  I&#8217;ve now been to pretty much every BarCamp I&#8217;ve been able to get to, presenting at each one.  That first hurdle is a difficult one to get over, but once you&#8217;re over it you feel great.</p>

<p>So, with all the newcomers to *Camps at Social Media Camp it was unsurprising that there would be a few people who felt unconfident to present.  That&#8217;s okay, but there are some extra things that could have been done to help combat this (Kat has written a <a href="http://www.safetygoat.co.uk/2009/04/social-media-camp-london-97-awesome/">post</a> about this already, and the excellent comments are well worth reading through).</p>

<p>The first thing that could be done (which Vero says happened more for the first Social Media Camp than this one), is to educate about the presentations before the Camp itself.  By making a firm but friendly assertion that everyone should present, that if no-one presents there will be no *Camp, and by giving examples of a range of different presentations that people have made in the past the whole thing can be made a lot less scary.</p>

<p>The other simple thing to do is to provide a slot for lightning talks (5 minute talks, rather than the normal half-hour slot), and let people know about it before the event.  This then gives newcomers who are less confident about their presentations an easy way to contribute something small and less scary than a full half-hour&#8217;s amount of material.  At most of the BarCamps I&#8217;ve been to recently, someone has taken it upon themselves to take over one of the rooms for a session or two to run lightning talks.  Unfortunately, I only remembered about this towards the end of the event this time, when it was far too late to do anything about it.</p>

<p>One other possible way to combat non-presenters that&#8217;s been mooted is to have a special room that&#8217;s just for newcomers to give them a &#8220;safe area&#8221;.  My only worry with this suggestion is that it could lead to a feeling of segregation and that newcomers <em>have</em> to present there, rather than it being a place they can present if they want to.</p>

<p>Overall, Social Media Camp London &#8217;09 was a great event.  I&#8217;ll definitely be back next time.  I met a whole bunch of great new people who I just wouldn&#8217;t have met otherwise, and I came away feeling re-invigorated.  Roll on the next one.</p>

<p>Which reminds me — I haven&#8217;t actually answered the question in the title of this post — why did I go?</p>

<p>It was pointed out to me a couple of times during the day that I am primarily a developer.  In my day job I don&#8217;t try and build communities, and I don&#8217;t interact with users.  At home though, I very much do (or at least I should).  I run <a href="http://thetenwordreview.com">The Ten Word Review</a>, a site where you can review anything you want as long as you do it in exactly ten words.  Usage of the site has primarily grown organically, and I&#8217;m obviously interested in looking after the community that&#8217;s grown around the site.  So that&#8217;s why I came, and I&#8217;m glad I did.</p>
]]></content:encoded>
			<wfw:commentRss>http://thecodetrain.co.uk/2009/05/why-did-i-go-to-social-media-camp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How to make Awesome Broken Biscuit Cake</title>
		<link>http://thecodetrain.co.uk/2009/04/how-to-make-awesome-broken-biscuit-cake/</link>
		<comments>http://thecodetrain.co.uk/2009/04/how-to-make-awesome-broken-biscuit-cake/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 18:15:09 +0000</pubDate>
		<dc:creator>Neil Crosby</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[biscuit]]></category>
		<category><![CDATA[broken biscuit]]></category>
		<category><![CDATA[butter]]></category>
		<category><![CDATA[cake]]></category>
		<category><![CDATA[chocolate]]></category>
		<category><![CDATA[fridge]]></category>
		<category><![CDATA[golden syrup]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[recipe]]></category>
		<category><![CDATA[social media camp]]></category>
		<category><![CDATA[social media camp london 09]]></category>

		<guid isPermaLink="false">http://thecodetrain.co.uk/?p=229</guid>
		<description><![CDATA[<p>I know, this isn&#8217;t code and it isn&#8217;t anything I&#8217;ve done on the train, but it is something I&#8217;ve made several times over the last few weeks now.  The last time I made it was for yesterday&#8217;s <a href="http://www.socialmediacamp.co.uk/">Social Media Camp</a> in London, organised wonderfully by <a href="http://www.thatcanadiangirl.co.uk/about-me/welcome/">Vero</a>.  But I&#8217;m not going to talk about Social Media Camp — I&#8217;m going to talk about making Broken Biscuit Cake!</p>

<p><a href="http://www.flickr.com/photos/thevoicewithin/3456952008/" title="All ready to take to the office by Neil Crosby, on Flickr"><img src="http://farm4.static.flickr.com/3567/3456952008_581a0dee91.jpg" width="500" height="375" alt="All ready to take to the office" /></a></p>

<p>Some of you might know Broken Biscuit Cake by its alternative name, Fridge Cake (or by its posh name, Tiffin), but whatever you call it you quite probably made it way back when you were at school.  That&#8217;s when I first came across it, and it soon became a favourite to make when we had a few biscuits left over in the biscuit tin that didn&#8217;t seem to be getting eaten.</p>

<p>After my presentation yesterday, lots of people asked me how I made the cake, and whilst there&#8217;s a <a href="http://www.flickr.com/photos/thevoicewithin/sets/72157617052880026/">photo set on flickr</a> with the instructions, I thought it would be nice to condense them all down into a little broken biscuit cake recipe here as well.  So, here goes.</p>

<p>To make Broken Biscuit Cake, you&#8217;ll need the following (but don&#8217;t forget to hack it to make it nommy to your own tastes):</p>

<ol>
<li>250g biscuits.  I like chocolate covered ones, but you can use anything.  It&#8217;s good to have a mix of types and textures.</li>
<li>300g milk chocolate.</li>
<li>150g dark chocolate.</li>
<li>100g unsalted butter.</li>
<li>150g golden syrup.</li>
<li>75g raisins.</li>
</ol>

<p>And that&#8217;s all you need.  Making the cake is as simple as combining the ingredients together like this (and it only takes about 20 minutes all told):</p>

<ol>
<li><p>Put the biscuits in the sandwich bag, seal, and hit with a rolling pin until broken.  It&#8217;s important to <a href="http://www.flickr.com/photos/thevoicewithin/3456824858/">scream whilst you do this</a>.  </p>

<p>Make sure the pieces are broken up nicely — you&#8217;ll want lots of crumbs and a few pieces about half the size of your finger nail.  The crumbs are important to make sure that everything binds together later, and the larger pieces give you a little bit of extra texture in the finished cake.</p>

<p>I find it&#8217;s a good idea to hit the bag on one side for a bit, then turn it over and try the other side too.</p></li>
<li><p>Break up 150g of the milk chocolate and all of the dark chocolate and place it into a mixing bowl.  Chop the butter into pieces and add that to the bowl too.  Finally, take the golden syrup (it&#8217;s about a third of a tin) and add that to the bowl too.  </p>

<p>Run the spoon you use to add the golden syrup under a hot tap first to heat it up and make the golden syrup slide right off it.</p></li>
<li><p>Whack the mixing bowl into your microwave on high for a minute or two.  When it comes out the chocolate and butter will have started to melt and the golden syrup will have degenerated into a thin liquid.  It won&#8217;t look particularly pleasant.  That&#8217;s okay though.</p></li>
<li><p>Use a spoon to mix the chocolatey, buttery, syrupy mixture together.  Just keep stirring it for a couple of minutes.</p>

<p>Don&#8217;t stop once everything&#8217;s combined into a simple liquid though.  If the mixture looks <a href="http://www.flickr.com/photos/thevoicewithin/3456839732/">liquidy</a> then you need to keep stirring.  Once the mixture begins to come together and take on the consistency of a sloppy warm fudge then you&#8217;re done.</p></li>
<li><p>Pour the broken biscuit bits into the mix, along with the raisins.  Mix everything together until you get a nice <a href="http://www.flickr.com/photos/thevoicewithin/3456031059/">gooey chocolatey mess</a>.</p></li>
<li><p>Grab a baking tray and <a href="http://www.flickr.com/photos/thevoicewithin/3456034403/">cover it in clingfilm</a>.</p>

<p>Make sure you get the clingfilm as smooth as possible.  If it&#8217;s a bit kinky then it&#8217;ll get trapped inside the cake and you&#8217;ll have difficulty getting it out when you come to take it out of the fridge later.</p></li>
<li><p>Place the cake mix into the baking tray.</p>

<p>My advice here is to not dump it all into the tray in one go.  Instead, try putting a few blobs of the mixture around the tray.  The less you have to move around when you press it down in a minute, the less the clingfilm will get kinked up.</p></li>
<li><p>Once the cake mix is all in the baking tray, press it down with the back of the spoon.  Make sure the cake is nice and compacted, and that it properly fills the tray.</p></li>
<li><p>Put the cake in the fridge.  It would probably be sensible to cover it so that nothing else contaminates it.</p></li>
<li><p>Break up the remaining 150g of milk chocolate into a bowl, and melt it in the microwave as before.</p></li>
<li><p>Remove the cake from the fridge and pour your melted chocolate on top.  Smooth it over the top to cover everything.  You wouldn&#8217;t want to upset someone by giving them a slice that wasn&#8217;t covered in chocolate, would you?</p></li>
<li><p>Put the cake back in the fridge and walk away.</p></li>
<li><p>Let a couple of hours pass.</p></li>
<li><p>Turn out the cake.  The clingfilm will be stuck to the bottom, so pull it off, making sure none is left behind.</p>

<p>My technique for removing the clingfilm is to pull it vertically, rather than horizontally.  I find this helps to stop it from tearing and leaving bits behind.</p></li>
<li><p>Cut the cake into little pieces.  I find that each cake makes about 30-40 pieces, and that due to its density, a bit heavy knife is preferable for cutting it.</p></li>
<li><p>Put all the slices into a nice tub, and put that back in your fridge for nomming at your leisure.  Reward yourself with a slice now.</p>

<p>Due to the nature of this cake, I advise keeping it in the fridge.  Chocolate, golden syrup and butter melt at low temperatures, and the cake gets pretty sticky if you leave it out in a warm place.</p></li>
</ol>

<p>And that&#8217;s that — it&#8217;s all pretty easy really, and really tasty too.  The scary part though, and probably something that everyone at Social Media Camp won&#8217;t want to hear is the number of calories this cake contains.  An entire cake contains roughly 5800 calories, making each slice 145 calories of awesome chocolatey goodness.</p>

<p>Om nom nom.</p>
<div style="display:block"><small><em><a href="http://neilcrosby.com">Neil Crosby</a> also blogs at about t-shirts at <a href="http://iwearcotton.com">I Wear Cotton</a>, writes <a href="http://thetenwordreview.com/users/workingwithme">Ten Word Reviews</a>, and uploads <a href="http://www.flickr.com/photos/thevoicewithin/">photos</a> to flickr.  You can follow a combined feed of posts at <a href="http://neilcrosby.com/">NeilCrosby.com</a>.</em></small></div>]]></description>
			<content:encoded><![CDATA[<p>I know, this isn&#8217;t code and it isn&#8217;t anything I&#8217;ve done on the train, but it is something I&#8217;ve made several times over the last few weeks now.  The last time I made it was for yesterday&#8217;s <a href="http://www.socialmediacamp.co.uk/">Social Media Camp</a> in London, organised wonderfully by <a href="http://www.thatcanadiangirl.co.uk/about-me/welcome/">Vero</a>.  But I&#8217;m not going to talk about Social Media Camp — I&#8217;m going to talk about making Broken Biscuit Cake!</p>

<p><a href="http://www.flickr.com/photos/thevoicewithin/3456952008/" title="All ready to take to the office by Neil Crosby, on Flickr"><img src="http://farm4.static.flickr.com/3567/3456952008_581a0dee91.jpg" width="500" height="375" alt="All ready to take to the office" /></a></p>

<p>Some of you might know Broken Biscuit Cake by its alternative name, Fridge Cake (or by its posh name, Tiffin), but whatever you call it you quite probably made it way back when you were at school.  That&#8217;s when I first came across it, and it soon became a favourite to make when we had a few biscuits left over in the biscuit tin that didn&#8217;t seem to be getting eaten.</p>

<p>After my presentation yesterday, lots of people asked me how I made the cake, and whilst there&#8217;s a <a href="http://www.flickr.com/photos/thevoicewithin/sets/72157617052880026/">photo set on flickr</a> with the instructions, I thought it would be nice to condense them all down into a little broken biscuit cake recipe here as well.  So, here goes.</p>

<p>To make Broken Biscuit Cake, you&#8217;ll need the following (but don&#8217;t forget to hack it to make it nommy to your own tastes):</p>

<ol>
<li>250g biscuits.  I like chocolate covered ones, but you can use anything.  It&#8217;s good to have a mix of types and textures.</li>
<li>300g milk chocolate.</li>
<li>150g dark chocolate.</li>
<li>100g unsalted butter.</li>
<li>150g golden syrup.</li>
<li>75g raisins.</li>
</ol>

<p>And that&#8217;s all you need.  Making the cake is as simple as combining the ingredients together like this (and it only takes about 20 minutes all told):</p>

<ol>
<li><p>Put the biscuits in the sandwich bag, seal, and hit with a rolling pin until broken.  It&#8217;s important to <a href="http://www.flickr.com/photos/thevoicewithin/3456824858/">scream whilst you do this</a>.  </p>

<p>Make sure the pieces are broken up nicely — you&#8217;ll want lots of crumbs and a few pieces about half the size of your finger nail.  The crumbs are important to make sure that everything binds together later, and the larger pieces give you a little bit of extra texture in the finished cake.</p>

<p>I find it&#8217;s a good idea to hit the bag on one side for a bit, then turn it over and try the other side too.</p></li>
<li><p>Break up 150g of the milk chocolate and all of the dark chocolate and place it into a mixing bowl.  Chop the butter into pieces and add that to the bowl too.  Finally, take the golden syrup (it&#8217;s about a third of a tin) and add that to the bowl too.  </p>

<p>Run the spoon you use to add the golden syrup under a hot tap first to heat it up and make the golden syrup slide right off it.</p></li>
<li><p>Whack the mixing bowl into your microwave on high for a minute or two.  When it comes out the chocolate and butter will have started to melt and the golden syrup will have degenerated into a thin liquid.  It won&#8217;t look particularly pleasant.  That&#8217;s okay though.</p></li>
<li><p>Use a spoon to mix the chocolatey, buttery, syrupy mixture together.  Just keep stirring it for a couple of minutes.</p>

<p>Don&#8217;t stop once everything&#8217;s combined into a simple liquid though.  If the mixture looks <a href="http://www.flickr.com/photos/thevoicewithin/3456839732/">liquidy</a> then you need to keep stirring.  Once the mixture begins to come together and take on the consistency of a sloppy warm fudge then you&#8217;re done.</p></li>
<li><p>Pour the broken biscuit bits into the mix, along with the raisins.  Mix everything together until you get a nice <a href="http://www.flickr.com/photos/thevoicewithin/3456031059/">gooey chocolatey mess</a>.</p></li>
<li><p>Grab a baking tray and <a href="http://www.flickr.com/photos/thevoicewithin/3456034403/">cover it in clingfilm</a>.</p>

<p>Make sure you get the clingfilm as smooth as possible.  If it&#8217;s a bit kinky then it&#8217;ll get trapped inside the cake and you&#8217;ll have difficulty getting it out when you come to take it out of the fridge later.</p></li>
<li><p>Place the cake mix into the baking tray.</p>

<p>My advice here is to not dump it all into the tray in one go.  Instead, try putting a few blobs of the mixture around the tray.  The less you have to move around when you press it down in a minute, the less the clingfilm will get kinked up.</p></li>
<li><p>Once the cake mix is all in the baking tray, press it down with the back of the spoon.  Make sure the cake is nice and compacted, and that it properly fills the tray.</p></li>
<li><p>Put the cake in the fridge.  It would probably be sensible to cover it so that nothing else contaminates it.</p></li>
<li><p>Break up the remaining 150g of milk chocolate into a bowl, and melt it in the microwave as before.</p></li>
<li><p>Remove the cake from the fridge and pour your melted chocolate on top.  Smooth it over the top to cover everything.  You wouldn&#8217;t want to upset someone by giving them a slice that wasn&#8217;t covered in chocolate, would you?</p></li>
<li><p>Put the cake back in the fridge and walk away.</p></li>
<li><p>Let a couple of hours pass.</p></li>
<li><p>Turn out the cake.  The clingfilm will be stuck to the bottom, so pull it off, making sure none is left behind.</p>

<p>My technique for removing the clingfilm is to pull it vertically, rather than horizontally.  I find this helps to stop it from tearing and leaving bits behind.</p></li>
<li><p>Cut the cake into little pieces.  I find that each cake makes about 30-40 pieces, and that due to its density, a bit heavy knife is preferable for cutting it.</p></li>
<li><p>Put all the slices into a nice tub, and put that back in your fridge for nomming at your leisure.  Reward yourself with a slice now.</p>

<p>Due to the nature of this cake, I advise keeping it in the fridge.  Chocolate, golden syrup and butter melt at low temperatures, and the cake gets pretty sticky if you leave it out in a warm place.</p></li>
</ol>

<p>And that&#8217;s that — it&#8217;s all pretty easy really, and really tasty too.  The scary part though, and probably something that everyone at Social Media Camp won&#8217;t want to hear is the number of calories this cake contains.  An entire cake contains roughly 5800 calories, making each slice 145 calories of awesome chocolatey goodness.</p>

<p>Om nom nom.</p>
]]></content:encoded>
			<wfw:commentRss>http://thecodetrain.co.uk/2009/04/how-to-make-awesome-broken-biscuit-cake/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Had a ticket but didn&#8217;t come to BarCamp London 5?  For shame&#8230;</title>
		<link>http://thecodetrain.co.uk/2008/10/had-a-ticket-but-didnt-come-to-barcamp-london-5-for-shame/</link>
		<comments>http://thecodetrain.co.uk/2008/10/had-a-ticket-but-didnt-come-to-barcamp-london-5-for-shame/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 20:25:37 +0000</pubDate>
		<dc:creator>Neil Crosby</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[barcamplondon]]></category>
		<category><![CDATA[barcamplondon5]]></category>

		<guid isPermaLink="false">http://thecodetrain.co.uk/?p=57</guid>
		<description><![CDATA[<p>This weekend was BarCamp London 5 (I know, this is the third post on the subject, but keep with me on this) at Ebay&#8217;s office in Richmond.  It was a great weekend, with some very high quality talks.  In fact, I don&#8217;t think I went to a single session that I didn&#8217;t thoroughly enjoy.</p>

<p>As with all the London-based BarCamps that have occurred so far, this one was heavily oversubscribed.  When signup opened, tickets vanished in the blink of an eye and plenty of people were upset that they hadn&#8217;t managed to get a place.  Eagerness to be involved was so high that the first ever <a href="http://barcamp.pbwiki.com/BarcampLondon5%3A-Spillover">BarCamp London Spillover</a> was organised as a one day event to let some of the people who had wanted to be there have their own mini event.</p>

<p>Then the day of BarCamp London 5 came, and a lot of people who had managed to get tickets didn&#8217;t bother showing up.  Anecdotally, between 40 and 75 people just didn&#8217;t come.  If those people had handed back their tickets prior to the event that could have let a lot of the people who went to Spillover come to the main event.  Not turning up is just not cricket.  Part of the fun of a BarCamp is the diverse number of people who attend and contribute to the event.  Not turning up just dilutes that horribly.</p>

<p>I&#8217;m not the only person who feels this way.  In fact, chatting to people over the weekend it was a common theme.  Various people were mentioned who have done this on more than one occasion, and the general feeling seemed to be that something should be done about this trend before it continues.  Maybe that would involve naming and shaming.  Maybe a blacklist to stop no-showers from signing up during the first couple of rounds of tickets for the next BarCamp?  Maybe charging a nominal fee to attend, like <a href="http://bathcamp.org/bc/">BathCamp</a> did, would be a way to make sure people turned up?  I don&#8217;t know what the answer is, but I really don&#8217;t want this trend to continue.</p>

<p>What I do need to applaud the organisers of BarCamp London 5 for though was the large number of newbie tickets.  New people and diversity are the lifeblood of BarCamps, so it was fantastic seeing them going the extra mile to bring new people in.  Likewise, the sponsors were great and a special &#8220;shout out&#8221; has to go to <a href="http://uk.mymuesli.com/">MyMuesli</a> who provided some awesome custom muesli for breakfast on the Sunday morning which seemed to go down incredibly well.</p>

<p>I had a great time at BarCamp London 5, and I look forward to the next one.  The only thing that could make it better would be if everyone turned up next time!</p>
<div style="display:block"><small><em><a href="http://neilcrosby.com">Neil Crosby</a> also blogs at about t-shirts at <a href="http://iwearcotton.com">I Wear Cotton</a>, writes <a href="http://thetenwordreview.com/users/workingwithme">Ten Word Reviews</a>, and uploads <a href="http://www.flickr.com/photos/thevoicewithin/">photos</a> to flickr.  You can follow a combined feed of posts at <a href="http://neilcrosby.com/">NeilCrosby.com</a>.</em></small></div>]]></description>
			<content:encoded><![CDATA[<p>This weekend was BarCamp London 5 (I know, this is the third post on the subject, but keep with me on this) at Ebay&#8217;s office in Richmond.  It was a great weekend, with some very high quality talks.  In fact, I don&#8217;t think I went to a single session that I didn&#8217;t thoroughly enjoy.</p>

<p>As with all the London-based BarCamps that have occurred so far, this one was heavily oversubscribed.  When signup opened, tickets vanished in the blink of an eye and plenty of people were upset that they hadn&#8217;t managed to get a place.  Eagerness to be involved was so high that the first ever <a href="http://barcamp.pbwiki.com/BarcampLondon5%3A-Spillover">BarCamp London Spillover</a> was organised as a one day event to let some of the people who had wanted to be there have their own mini event.</p>

<p>Then the day of BarCamp London 5 came, and a lot of people who had managed to get tickets didn&#8217;t bother showing up.  Anecdotally, between 40 and 75 people just didn&#8217;t come.  If those people had handed back their tickets prior to the event that could have let a lot of the people who went to Spillover come to the main event.  Not turning up is just not cricket.  Part of the fun of a BarCamp is the diverse number of people who attend and contribute to the event.  Not turning up just dilutes that horribly.</p>

<p>I&#8217;m not the only person who feels this way.  In fact, chatting to people over the weekend it was a common theme.  Various people were mentioned who have done this on more than one occasion, and the general feeling seemed to be that something should be done about this trend before it continues.  Maybe that would involve naming and shaming.  Maybe a blacklist to stop no-showers from signing up during the first couple of rounds of tickets for the next BarCamp?  Maybe charging a nominal fee to attend, like <a href="http://bathcamp.org/bc/">BathCamp</a> did, would be a way to make sure people turned up?  I don&#8217;t know what the answer is, but I really don&#8217;t want this trend to continue.</p>

<p>What I do need to applaud the organisers of BarCamp London 5 for though was the large number of newbie tickets.  New people and diversity are the lifeblood of BarCamps, so it was fantastic seeing them going the extra mile to bring new people in.  Likewise, the sponsors were great and a special &#8220;shout out&#8221; has to go to <a href="http://uk.mymuesli.com/">MyMuesli</a> who provided some awesome custom muesli for breakfast on the Sunday morning which seemed to go down incredibly well.</p>

<p>I had a great time at BarCamp London 5, and I look forward to the next one.  The only thing that could make it better would be if everyone turned up next time!</p>
]]></content:encoded>
			<wfw:commentRss>http://thecodetrain.co.uk/2008/10/had-a-ticket-but-didnt-come-to-barcamp-london-5-for-shame/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Ten Word Moo Card</title>
		<link>http://thecodetrain.co.uk/2008/10/ten-word-moo-card/</link>
		<comments>http://thecodetrain.co.uk/2008/10/ten-word-moo-card/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 08:32:44 +0000</pubDate>
		<dc:creator>Neil Crosby</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[barcamplondon]]></category>
		<category><![CDATA[barcamplondon5]]></category>
		<category><![CDATA[mashup]]></category>
		<category><![CDATA[moo]]></category>
		<category><![CDATA[thetenwordreview]]></category>

		<guid isPermaLink="false">http://thecodetrain.co.uk/?p=64</guid>
		<description><![CDATA[<p>One of the sessions I attended at <a href="http://barcamp.org/BarCampLondon5">BarCamp London 5</a> this weekend was Stefan Magdalinski&#8217;s talk about the <a href="http://www.moo.com/api/">Moo API</a>.  Ever since I made my first <a href="http://www.flickr.com/search/?q=thetenwordreview%20moo&amp;w=36778932%40N00">The Ten Word Review Moo Cards</a> by hand I&#8217;ve been wanting to automate the process, but lack of time and incentive has always let me down.</p>

<p>So, what changed?  </p>

<p>Firstly, moo has an API now.  Previously if I&#8217;d automated the image creation process for the Ten Word Moo Cards that&#8217;s all I would have been able to do, and then I would have had to upload them all myself.  So, having an API allows me to press a button in one place and magically have a set of cards created for me.  Awesome.</p>

<p>Secondly, in his talk, Stefan mentioned that the revenue sharing for cards, stickers etc that people bought would be set at 15%.  Now that&#8217;s pretty damn high.  Not only that, but it will be applied retroactively, since they&#8217;ve not actually got the payment stuff working yet.</p>

<p>The final thing that&#8217;s pushed me into finally making the cards is that there&#8217;s a prize for the best hack on the Moo API that came out of the BarCamp &#8211; a little handheld camcordery device.  Obviously, I&#8217;d quite like to win that.</p>

<p>So, I made a &#8220;Ten Word Moo Card Creator&#8221;.  It takes the best rated reviews from <a href="http://thetenwordreview.com">The Ten Word Review</a> (where you can review anything you like as long as you do it in exactly ten words) and creates moo cards from them.  If you want to create cards purely based on the reviews that you have written, you type your username into the textbox below.  That&#8217;s it, simple really.</p>

<form method="get" action="http://thecodetrain.co.uk/code/ten-word-moo-card/redirector.php">
    <p>
        <label for="username">Username (optional):</label>
        <input type="text" name="username" id="username" value="">
    </p>
    <p>
        <input type="submit" value="Lets make some Moo cards">
        <input type="hidden" name="buy" value="yes please">
    </p>
</form>

<p>There are, of course, a couple of caveats.  The first is that it might take a little while getting to Moo&#8217;s website after pressing that button.  That&#8217;s because up to 30 images are being created, and each one needs to determine the optimal font-size for the review it contains.  We&#8217;re not talking hours here, but it might take a few seconds.</p>

<p>The second caveat is that I haven&#8217;t set any default text for the back of the cards or set a default crop.  The reason for this that if you set a crop then Moo steps straight over the cropping step of its wizard, which unfortunately is also the place where you choose whether you&#8217;d like to discard any of the images that you&#8217;ve chosen.  Likewise, if I set some default text on the back of the card, then Moo seems to take this as a directive that the user wouldn&#8217;t want to edit that themselves and puts the cards straight into the user&#8217;s basket.  In this instance the user hasn&#8217;t even been able to see what the cards look like on Moo&#8217;s site before they arrive in their basket.</p>

<p>Of course, if I&#8217;m wrong about these caveats, and I can add default text to the cards whilst still allowing the user to enter the flow on Moo&#8217;s website at the image cropper stage, that would be fantastic.</p>

<p>Overall, the Moo API is pretty easy to use.  There are rough edges, but it isn&#8217;t a finished thing, and it&#8217;s not at a 1.0 release yet, so it&#8217;s utterly forgivable (as long as developer comments are taken onboard, and I&#8217;m convinced that they will be).  Hack around at it like I did, and see what you can make.</p>

<p>Hmmm, I just remembered that I while back I wrote a <a href="http://www.workingwith.me.uk/moostickers/">Moo Sticker Speech Bubble Generator</a>.  I should really hook that into the API too, shouldn&#8217;t I?  One day.  One day&#8230;</p>
<div style="display:block"><small><em><a href="http://neilcrosby.com">Neil Crosby</a> also blogs at about t-shirts at <a href="http://iwearcotton.com">I Wear Cotton</a>, writes <a href="http://thetenwordreview.com/users/workingwithme">Ten Word Reviews</a>, and uploads <a href="http://www.flickr.com/photos/thevoicewithin/">photos</a> to flickr.  You can follow a combined feed of posts at <a href="http://neilcrosby.com/">NeilCrosby.com</a>.</em></small></div>]]></description>
			<content:encoded><![CDATA[<p>One of the sessions I attended at <a href="http://barcamp.org/BarCampLondon5">BarCamp London 5</a> this weekend was Stefan Magdalinski&#8217;s talk about the <a href="http://www.moo.com/api/">Moo API</a>.  Ever since I made my first <a href="http://www.flickr.com/search/?q=thetenwordreview%20moo&amp;w=36778932%40N00">The Ten Word Review Moo Cards</a> by hand I&#8217;ve been wanting to automate the process, but lack of time and incentive has always let me down.</p>

<p>So, what changed?  </p>

<p>Firstly, moo has an API now.  Previously if I&#8217;d automated the image creation process for the Ten Word Moo Cards that&#8217;s all I would have been able to do, and then I would have had to upload them all myself.  So, having an API allows me to press a button in one place and magically have a set of cards created for me.  Awesome.</p>

<p>Secondly, in his talk, Stefan mentioned that the revenue sharing for cards, stickers etc that people bought would be set at 15%.  Now that&#8217;s pretty damn high.  Not only that, but it will be applied retroactively, since they&#8217;ve not actually got the payment stuff working yet.</p>

<p>The final thing that&#8217;s pushed me into finally making the cards is that there&#8217;s a prize for the best hack on the Moo API that came out of the BarCamp &#8211; a little handheld camcordery device.  Obviously, I&#8217;d quite like to win that.</p>

<p>So, I made a &#8220;Ten Word Moo Card Creator&#8221;.  It takes the best rated reviews from <a href="http://thetenwordreview.com">The Ten Word Review</a> (where you can review anything you like as long as you do it in exactly ten words) and creates moo cards from them.  If you want to create cards purely based on the reviews that you have written, you type your username into the textbox below.  That&#8217;s it, simple really.</p>

<form method="get" action="http://thecodetrain.co.uk/code/ten-word-moo-card/redirector.php">
    <p>
        <label for="username">Username (optional):</label>
        <input type="text" name="username" id="username" value="">
    </p>
    <p>
        <input type="submit" value="Lets make some Moo cards">
        <input type="hidden" name="buy" value="yes please">
    </p>
</form>

<p>There are, of course, a couple of caveats.  The first is that it might take a little while getting to Moo&#8217;s website after pressing that button.  That&#8217;s because up to 30 images are being created, and each one needs to determine the optimal font-size for the review it contains.  We&#8217;re not talking hours here, but it might take a few seconds.</p>

<p>The second caveat is that I haven&#8217;t set any default text for the back of the cards or set a default crop.  The reason for this that if you set a crop then Moo steps straight over the cropping step of its wizard, which unfortunately is also the place where you choose whether you&#8217;d like to discard any of the images that you&#8217;ve chosen.  Likewise, if I set some default text on the back of the card, then Moo seems to take this as a directive that the user wouldn&#8217;t want to edit that themselves and puts the cards straight into the user&#8217;s basket.  In this instance the user hasn&#8217;t even been able to see what the cards look like on Moo&#8217;s site before they arrive in their basket.</p>

<p>Of course, if I&#8217;m wrong about these caveats, and I can add default text to the cards whilst still allowing the user to enter the flow on Moo&#8217;s website at the image cropper stage, that would be fantastic.</p>

<p>Overall, the Moo API is pretty easy to use.  There are rough edges, but it isn&#8217;t a finished thing, and it&#8217;s not at a 1.0 release yet, so it&#8217;s utterly forgivable (as long as developer comments are taken onboard, and I&#8217;m convinced that they will be).  Hack around at it like I did, and see what you can make.</p>

<p>Hmmm, I just remembered that I while back I wrote a <a href="http://www.workingwith.me.uk/moostickers/">Moo Sticker Speech Bubble Generator</a>.  I should really hook that into the API too, shouldn&#8217;t I?  One day.  One day&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://thecodetrain.co.uk/2008/10/ten-word-moo-card/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WikiSlurp: Slurping Data from Wikipedia for Fun and Profit</title>
		<link>http://thecodetrain.co.uk/2008/09/wikislurp-slurping-data-from-wikipedia-for-fun-and-profit/</link>
		<comments>http://thecodetrain.co.uk/2008/09/wikislurp-slurping-data-from-wikipedia-for-fun-and-profit/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 14:00:29 +0000</pubDate>
		<dc:creator>Neil Crosby</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[barcamplondon5]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[isneilannoyedby]]></category>
		<category><![CDATA[mediawiki]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[scratching an itch]]></category>
		<category><![CDATA[thetenwordreview]]></category>
		<category><![CDATA[wikipedia]]></category>
		<category><![CDATA[wikislurp]]></category>

		<guid isPermaLink="false">http://thecodetrain.co.uk/?p=15</guid>
		<description><![CDATA[<p>This last weekend I attended <a href="http://barcamp.org/BarCampLondon5">BarCamp London 5</a>, where I talked about WikiSlurp, my technique for accessing the wealth of data held within Wikipedia.  I currently use WikiSlurp on both <a href="http://isneilannoyedby.com">Is Neil Annoyed By</a> and <a href="http://thetenwordreview.com">The Ten Word Review</a> as a way to pull in additional information about the things described on individual pages.</p>

<p>These are the slides I put together for my talk:</p>

<div style="width:425px;text-align:left" id="__ss_622769"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/neilcrosby/mining-wikipedia-for-awesome-data-presentation?type=powerpoint" title="Mining Wikipedia For Awesome Data">Mining Wikipedia For Awesome Data</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=mining-wikipedia-for-awesome-data-1222603282334492-9&#038;stripped_title=mining-wikipedia-for-awesome-data-presentation" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=mining-wikipedia-for-awesome-data-1222603282334492-9&#038;stripped_title=mining-wikipedia-for-awesome-data-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/neilcrosby/mining-wikipedia-for-awesome-data-presentation?type=powerpoint" title="View Mining Wikipedia For Awesome Data on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/wikislurp">wikislurp</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/wikipedia">wikipedia</a>)</div></div>

<p>If you just want to <a href="http://thecodetrain.co.uk/downloads/wikislurp-0.1.zip">download the Code</a>, go right ahead.  If you want to know more about the project, read the <a href="http://thecodetrain.co.uk/code/wikislurp/">WikiSlurp Project page</a>.</p>
<div style="display:block"><small><em><a href="http://neilcrosby.com">Neil Crosby</a> also blogs at about t-shirts at <a href="http://iwearcotton.com">I Wear Cotton</a>, writes <a href="http://thetenwordreview.com/users/workingwithme">Ten Word Reviews</a>, and uploads <a href="http://www.flickr.com/photos/thevoicewithin/">photos</a> to flickr.  You can follow a combined feed of posts at <a href="http://neilcrosby.com/">NeilCrosby.com</a>.</em></small></div>]]></description>
			<content:encoded><![CDATA[<p>This last weekend I attended <a href="http://barcamp.org/BarCampLondon5">BarCamp London 5</a>, where I talked about WikiSlurp, my technique for accessing the wealth of data held within Wikipedia.  I currently use WikiSlurp on both <a href="http://isneilannoyedby.com">Is Neil Annoyed By</a> and <a href="http://thetenwordreview.com">The Ten Word Review</a> as a way to pull in additional information about the things described on individual pages.</p>

<p>These are the slides I put together for my talk:</p>

<div style="width:425px;text-align:left" id="__ss_622769"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/neilcrosby/mining-wikipedia-for-awesome-data-presentation?type=powerpoint" title="Mining Wikipedia For Awesome Data">Mining Wikipedia For Awesome Data</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=mining-wikipedia-for-awesome-data-1222603282334492-9&#038;stripped_title=mining-wikipedia-for-awesome-data-presentation" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=mining-wikipedia-for-awesome-data-1222603282334492-9&#038;stripped_title=mining-wikipedia-for-awesome-data-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/neilcrosby/mining-wikipedia-for-awesome-data-presentation?type=powerpoint" title="View Mining Wikipedia For Awesome Data on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/wikislurp">wikislurp</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/wikipedia">wikipedia</a>)</div></div>

<p>If you just want to <a href="http://thecodetrain.co.uk/downloads/wikislurp-0.1.zip">download the Code</a>, go right ahead.  If you want to know more about the project, read the <a href="http://thecodetrain.co.uk/code/wikislurp/">WikiSlurp Project page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://thecodetrain.co.uk/2008/09/wikislurp-slurping-data-from-wikipedia-for-fun-and-profit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

