<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en">
  <title>Posts from Mark Ng</title>
  <link rel="alternate" href="http://www.markng.co.uk/blog" />
  <id>http://www.markng.co.uk/blog</id>
  <updated>2009-04-19T11:46:28Z</updated>
  <author>
    <name>Mark Ng</name>
  </author>
<link rel="self" href="http://feeds.feedburner.com/MarkNg" type="application/atom+xml" /><entry>
  <title>Startups - a competition ?</title>
  <link rel="alternate" href="http://feedproxy.google.com/~r/MarkNg/~3/3yzLe_xLM8s/startups---a-competition" />
  <updated>2009-04-19T11:46:28Z</updated>
  <author>
    <name>Mark</name>
  </author>
  <id>80</id>
  <summary type="text">
Image cc-licensed from flickr
So, on Thursday, I attended Bournemouth Startup Meetup, organised b[...]</summary>
  <content type="html">&lt;img src="http://farm3.static.flickr.com/2170/2129079829_56e4acf9bf.jpg?v=0" alt="Boot Strap" /&gt;
&lt;p style="font-size: 0.5em;"&gt;Image cc-licensed from &lt;a href="http://www.flickr.com/photos/tanpopo-himawari/2129079829/"&gt;flickr&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, on Thursday, I attended &lt;a href="http://www.startup-meetup.co.uk/" title="startup meetup"&gt;Bournemouth Startup Meetup&lt;/a&gt;, organised by &lt;a href="http://twitter.com/socialtech" title="Luke Williams (socialtech) on Twitter"&gt;Luke Williams&lt;/a&gt;.  I've been a regular attendee of these events since they started, and they've produced some interesting chatter and I've met some interesting people there.  This week, it was a small turnout, but that helped us focus on an agenda.  At barcamp bournemouth, &lt;a href="http://twitter.com/JonMarkwell" title="Jonathan Markwell (JonMarkwell) on Twitter"&gt;Jon Markwell&lt;/a&gt; spoke about his impending idea for a Brighton based startup competition, so our discussion was focussed on how we could do something similar for Bournemouth and the rest of Dorset.&lt;/p&gt;

&lt;p&gt;There was some very healthy and passionate debate about what shape a competition like this should take.  The idea that Jon presented at barcamp, tentatively titled "BrightHack" focussed away from money and much more towards mentoring and providing a framework for people working towards startups in their spare time.&lt;/p&gt;

&lt;p&gt;I've thought about this a bit.  I think there is a lot of value in a competition like this, and I've been working towards start-up ideas in my spare time, too (&lt;a href="http://twitfave.com/" title="Twitfave"&gt;twitfave&lt;/a&gt; being my most successful effort so far).  However, there's really a need for a &lt;a href="http://ycombinator.com/" title="Y Combinator"&gt;Y Combinator&lt;/a&gt; like entity in the UK, to enable people to take ideas to fruition full time.&lt;/p&gt;

&lt;p&gt;The debate at startup meetup split along two lines, which I think was mostly determined by the situations of the parties involved in the debate.  Those of us who have less long term commitments were a lot more interested in an event which required a full time commitment from the participants and gained a small amount of money from investors in order to pay living costs for the teams.  The others were more interested in an event which provided no funding for the startups, but concentrated on forming part time teams and providing a prize at the end.&lt;/p&gt;

&lt;p&gt;I was part of the former group, and so that's what I'm going to concentrate on talking about for the moment. That said, I think there's room for both of these things to happen, and they could share an awards event at the end of the projects.&lt;/p&gt;

&lt;p&gt;Here's what I'd like - an event focussed around getting teams and ideas together followed by a three month period (supported by an angel investor or similar) of building these applications leading up to a competition based on the work done by the teams over the three months.  At the end of the three months, hopefully, the competition will attract enough attention that the teams will attract further investment.&lt;/p&gt;

&lt;p&gt;I think the teams should be built of :&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;three people who work on the project full time, living and working in the same house&lt;/li&gt;
  &lt;li&gt;an involved and interested investor&lt;/li&gt;
  &lt;li&gt;mentors, available for advice for the team&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The required investment for the living costs of three people is not a particularly large amount - lets make an assumption that in Bournemouth, you could support three people for three months for about £7,000.  Even if you did this in Central London, I couldn't imagine it being more than twice that price.  If the event got enough exposure, I could well imagine that one of the more startup friendly hosting companies could be persuaded to provide hosting for all of these projects in return for sponsoring the event.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.com/tomharvey888" title="Tom Harvey (tomharvey888) on Twitter"&gt;Tom Harvey&lt;/a&gt; had the rather brilliant idea that if we hurried to make this happen, you could rent sections of a universities halls over the summer at a cheap price.  This has the advantage of potentially putting all of the startup teams in one place.&lt;/p&gt;

&lt;p&gt;I have a couple of ideas I'd love to work on if we could make something like this happen - who else would be interested in it ?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkNg/~4/3yzLe_xLM8s" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.markng.co.uk/blog/2009/04/19/startups---a-competition</feedburner:origLink></entry>
<entry>
  <title>Travelodge FAIL</title>
  <link rel="alternate" href="http://feedproxy.google.com/~r/MarkNg/~3/-oe4Q0gZYaM/travelodge-fail" />
  <updated>2008-07-28T16:44:54Z</updated>
  <author>
    <name>Mark</name>
  </author>
  <id>79</id>
  <summary type="text">So, after a fantastic time at the Eden Sessions, I turned up at my pre-paid, prebooked Travelodge ro[...]</summary>
  <content type="html">&lt;p&gt;So, after a fantastic time at the &lt;a href="http://www.edenproject.com/" title="The Eden Project - Home"&gt;Eden Sessions&lt;/a&gt;, I turned up at my pre-paid, prebooked &lt;a href="http://www.travelodge.co.uk/" title="Travelodge" rel="nofollow"&gt;Travelodge&lt;/a&gt; room in Plymouth.  Or so I thought.  Upon arriving in the small hours, I was told that there was no room for me.  Obviously, quite angry, I demanded that the staff fix the situation somehow.&lt;/p&gt;
&lt;p&gt;After they called around for a while, they called their manager, Hannah Dennis.  I was told that because the only other hotel they could find (the &lt;a href="http://www.newcontinental.co.uk/"&gt;New Continental&lt;/a&gt; - which was fine) refused to take a purchase order from the Travelodge for the room, that I was expected to &lt;strong&gt;pay for the second room myself !&lt;/strong&gt; At this point, I was offered a refund of my room, but told that they couldn’t pay me the difference for the more expensive room that they had found.  I refused a refund at this point, because I expected to talk to the manager the next morning and gain a full refund, the difference and some form of compensation.&lt;/p&gt;
&lt;p&gt;The next morning, after being treated much better by the staff of the other hotel, I came back to sort out what was happening with my compensation.  I was told by the manager that she was very sorry, but that it was all the fault of the head office team who overbook the rooms.  I told her that someone could and should have phoned me, as my mobile number was on the booking.  She also apologised for that.  I told her what I expected in terms of compensation.  She told me that it was up to head office to deal with that, as it was their fault for overbooking and not booking me into another hotel room earlier. I asked for at least the cost of their room back on my card, and was told it would be "easier" to deal with the refund and the compensation all at once.  I was assured that the team dealing with my complaint would fix this on Monday morning, on their return to the office.&lt;/p&gt;
&lt;p&gt;On Monday, I called Hannah again, who had stopped being her apologetic and helpful self, and was instead belligerent and rude.  She told me that the only way I could get in contact with the people who were dealing with my complaint was by email or post, and that it could take 7 - 10 days to process my refund.  I told her that that wasn’t good enough, and that I expected a refund that day.  She told me that I was offered a refund when I was outbooked, and that she wouldn’t be able to process a refund then - this despite me asking &lt;strong&gt;her directly&lt;/strong&gt; for the refund on the Saturday morning, when I was told it would be "easier" to get a refund from the head office department (who I was told I was not allowed to talk to).&lt;/p&gt;
&lt;p&gt;Travelodge - there are a couple of lessons you need to learn.  Many other corporates could do with learning these lessons, too.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;"Head Office" is not an excuse.  When a complaint needs to be escalated, the people dealing with that complaint should be &lt;strong&gt;available to the customer&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Treating your customers like they are too insignificant when they have a major complaint is &lt;strong&gt;bad for business&lt;/strong&gt;.  In the age in which we are &lt;strong&gt;all hyperconnected&lt;/strong&gt;, word travels fast and one pissed off consumer can do major harm to your business. I guarantee you that this blog post has done ten times more financial damage to your company than dealing with my complaint quickly and efficiently, at the point of the problem would have.&lt;/li&gt;
  &lt;li&gt;When you cock something up, you fix it then and there.  Don’t sit in your corporate ivory towers and promise a "7-10 day resolution time". It’s not acceptable - you wouldn’t stand for it and neither will I.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, I ponder my next course of action should the email I sent to customer services (which is the only way I am apparently allowed to contact travelodge) not achieve a correct response.  Should I talk to the OFT ?  Should I talk to my bank about a chargeback ? Should I call the local press ? Your answers are welcome and indeed solicited..&lt;/p&gt;

&lt;img src="http://feeds.feedburner.com/~r/MarkNg/~4/-oe4Q0gZYaM" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.markng.co.uk/blog/2008/07/28/travelodge-fail</feedburner:origLink></entry>
<entry>
  <title>dotdorset launch and new tool playtime (django and git)</title>
  <link rel="alternate" href="http://feedproxy.google.com/~r/MarkNg/~3/J_9bHHUgK1A/dotdorset-launch-and-new-tool-playtime-django-and-git" />
  <updated>2008-07-23T00:57:30Z</updated>
  <author>
    <name>Mark</name>
  </author>
  <id>78</id>
  <summary type="text">So, amongst several meetings with fellow dorset web types, we discussed starting a portal to act as [...]</summary>
  <content type="html">&lt;p&gt;So, amongst several meetings with &lt;a href="http://groups.google.com/group/dotdorset"&gt;fellow dorset web types&lt;/a&gt;, we discussed starting a portal to act as a gathering point for people like us.  The result of which led to a &lt;a href="http://groups.google.com/group/dotdorset"&gt;google group&lt;/a&gt;, an &lt;a href="http://upcoming.yahoo.com/group/4604/"&gt;upcoming group&lt;/a&gt;, a &lt;a href="http://twitter.com/dotdorset"&gt;presence on twitter&lt;/a&gt; and finally, &lt;a href="http://dotdorset.org/"&gt;&lt;strong&gt;the portal itself, dotdorset.org&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Because this was a non-paying non-client project, I took the opportunity to use a selection of tools I hadn't used for anything significant and wanted some more experience with.  It's nice to have these projects from time to time, where you can &lt;strong&gt;take risks&lt;/strong&gt; you wouldn't otherwise be able to take with client work.  The new tools I used for this project were :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.python.org/" title="Python Programming Language -- Official Website"&gt;Python&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.djangoproject.com/" title="Django | The Web framework for perfectionists with deadlines"&gt;Django&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://git.or.cz/" title="Git - Fast Version Control System"&gt;Git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm lying when I say Python is new to me.  &lt;strong&gt;I've had a fear of it for a long time&lt;/strong&gt;.  Upon entering a job some years ago, I was handed two failing projects written using &lt;a href="http://www.zope.org/" title="Zope.org"&gt;Zope&lt;/a&gt; and &lt;a href="http://plone.org/" title="Plone CMS: Open Source Content Management"&gt;Plone&lt;/a&gt;.  This was my first significant experience with Python, and it was so bad that whenever I saw Python code afterwards, &lt;strong&gt;it made me shudder&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;Django&lt;/h3&gt;

&lt;p&gt;However, I've been meaning to get over that and give Django a try for some time now.  I've noticed quite a few clever people I know trying it out and being happy, and I've also been lucky enough to see &lt;a href="http://simonwillison.net/" title="Simon Willison’s Weblog" rel="contact"&gt;Simon Willison&lt;/a&gt; present on it (very clever chap who is one of the creators of Django).  Also, it's from a publishing background, and some of my clients are in that arena, and earlier parts of my career were spent working for publishing companies.&lt;/p&gt;

&lt;p&gt;I had a real easy time getting Django set up on my macbook.  However, other people checking out the code to contribute bits and pieces had a lot less fun than I did.  I'm still not sure what caused their problems.&lt;/p&gt;

&lt;p&gt;Developing in Django was, for the most part, &lt;strong&gt;a real pleasure&lt;/strong&gt;.  It became obvious that significant portions of &lt;a href="http://www.symfony-project.org/" title="symfony | Web PHP Framework"&gt;Symfony&lt;/a&gt; was either inspired by Django or inspired Django (I suspect the former).  This made things alot easier for me, as the learning curve was made somewhat smaller.  However, the model layer was a lot more lightweight and easy to work with than &lt;a href="http://propel.phpdb.org"&gt;Propel&lt;/a&gt; (though I like that Propel is so easy to reverse engineer because of the way it generates base classes).&lt;/p&gt;

&lt;p&gt;I also really liked the way Django templates work.  Their concept of extending base templates worked very nicely.  I did find the way that template directories are organised by default to be a little weird, but as the settings files accept python, you're able to change that default behaviour quite easily yourself.&lt;/p&gt;

&lt;p&gt;The Django admin interface is a &lt;strong&gt;work of genius&lt;/strong&gt;.  I'm going to say no more on this topic, as this is all you need to know.&lt;/p&gt;

&lt;p&gt;I was &lt;strong&gt;much less impressed&lt;/strong&gt; with deploying Django into a production environment using mod_python though.  I've become so used to mod_php just working that I was surprised how much messing around with interpreters and locations for egg files and environment variables there was.  And then, when we finally deployed live, the whole server ran out of memory and died (still not sure what caused this).  I've been recommended &lt;a href="http://code.google.com/p/modwsgi/" title="modwsgi - Google Code"&gt;mod_wsgi&lt;/a&gt; and &lt;a href="http://www.modrails.com/" title="Overview — Phusion Passenger™ (a.k.a. mod_rails / mod_rack)"&gt;phusion passenger&lt;/a&gt; as possible alternatives for deploying to.  I'd really love to hear some more opinions and tips about how to deploy Django well (both from a what servers point of view and also what deployment tool - maybe &lt;a href="http://www.capify.org/" title="Capistrano:  Home"&gt;capistrano&lt;/a&gt; ?)&lt;/p&gt;

&lt;h3&gt;Python&lt;/h3&gt;

&lt;p&gt;Django is a much nicer introduction to using Python than hacking around Zope was.  The concise syntax is nicer to read than PHP, however, I don't think I've really yet understood what it means to be &amp;quot;&lt;a href="http://faassen.n--tree.net/blog/view/weblog/2005/08/06/0" title="What is Pythonic?"&gt;Pythonic&lt;/a&gt;&amp;quot;.  I wonder how much a Python veteran would scream at my code.&lt;/p&gt;

&lt;h3&gt;Git&lt;/h3&gt;

&lt;p&gt;Git is a distributed version control system.  For the workflow on this project, there were only two remarkable things - it was much faster than svn and it was easier to hold repositories in multiple places.  I haven't quite worked out which of the methods I'll use to replace svn:externals yet, though.&lt;/p&gt;

&lt;p&gt;Overall, this project as a chance to try out new tools has been a great success.  What new tools have you introduced recently, and was it a positive experience ?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkNg/~4/J_9bHHUgK1A" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.markng.co.uk/blog/2008/07/23/dotdorset-launch-and-new-tool-playtime-django-and-git</feedburner:origLink></entry>
<entry>
  <title>Opentech 2008 - &lt;- revolution this way</title>
  <link rel="alternate" href="http://feedproxy.google.com/~r/MarkNg/~3/h81YUAAbhC0/opentech-2008-----revolution-this-way" />
  <updated>2008-07-06T15:01:50Z</updated>
  <author>
    <name>Mark</name>
  </author>
  <id>77</id>
  <summary type="text">
So, I went to opentech 2008 yesterday.  There was quite a lot of exciting stuff going on there, an[...]</summary>
  <content type="html">&lt;img src="http://farm4.static.flickr.com/3069/2640334628_564fdfff48_m_d.jpg" alt="Picture - Marxism is not here (toward SOAS), revolution this way, however (toward Opentech)" /&gt;
&lt;p&gt;So, I went to &lt;a href="http://www.ukuug.org/events/opentech2008/" title="Open Tech 2008 - 5th July in London."&gt;opentech 2008&lt;/a&gt; yesterday.  There was quite a lot of exciting stuff going on there, and I got to see quite a few people I know !&lt;/p&gt;

&lt;p&gt;Most interesting speaker I hadn't seen before was the somewhat legendary &lt;a href="http://www.oblomovka.com/" title="Danny O'Brien's Oblomovka"&gt;Danny O'Brien&lt;/a&gt; talking about the formation of the &lt;a href="http://www.openrightsgroup.org/" title="The Open Rights Group"&gt;open rights group&lt;/a&gt; and his "Living on the Edge" presentation.&lt;/p&gt;

&lt;p&gt;I also got to meet Ben Goldacre, whose work at his &lt;a href="http://www.badscience.net/" title="Ben Goldacre" rel="contact"&gt;Bad Science blog&lt;/a&gt; I admire alot.&lt;/p&gt;

&lt;p&gt;Lunch with &lt;a href="http://www.snowblink.co.uk" rel="contact"&gt;Jon Lim&lt;/a&gt; and &lt;a href="http://tommorris.org/" rel="contact"&gt;Tom Morris&lt;/a&gt; and some others was great.&lt;/p&gt;

&lt;p&gt;The most interesting thing at the conference for me was getting more information about &lt;a href="http://showusabetterway.co.uk" title="Show Us a Better Way"&gt;show us a better way&lt;/a&gt;, which I became aware of in the last week or two.  This is an initiative by the &lt;a href="http://powerofinformation.wordpress.com/" title="Power of Information Task Force"&gt;Power of Information Taskforce&lt;/a&gt;.  They've gotten lots of sources of data from different parts of government, and made them available for people like myself to make mashups with.  The most interesting data set to me was the &lt;a href="http://www.gazettes-online.co.uk/home.aspx?geotype=London" title="London Gazette"&gt;London Gazette&lt;/a&gt; - a sample set of which was available as zipped XML, but there is an ongoing project to make the current site include &lt;a href="http://www.w3.org/TR/xhtml-rdfa-primer/" title="RDFa Primer"&gt;RDFa&lt;/a&gt;, which &lt;a href="http://www.jenitennison.com/" rel="contact"&gt;Jeni Tennison&lt;/a&gt; and John Sheridan are working on.&lt;/p&gt;

&lt;p&gt;Also, John mentioned the &lt;a href="http://www.opsi.gov.uk/unlocking-service/OPSIpage.aspx?page=UnlockIndex"&gt;Public Sector Information Unlocking Service&lt;/a&gt;, which is a service to help people get information in the right formats or with the right licensing where they're entitled to it.  It's really good to see government slowly catching up with providing data for re-use.&lt;/p&gt;

&lt;p&gt;Interestingly, they also have a prize fund available to help build ideas (of which there &lt;a href="http://www.showusabetterway.co.uk/call/ideas/index.html"&gt;already a large number !&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;In the evening, I had the pleasure of eating at Strada with a bunch of people including &lt;a href="http://twitter.com/rainycat" rel="contact"&gt;Rain&lt;/a&gt;, &lt;a href="http://www.cubicgarden.com" rel="contact"&gt;Ian Forrester&lt;/a&gt;, &lt;a href="http://www.emmapersky.com/"&gt;Emma Persky&lt;/a&gt;, &lt;a href="http://tommorris.org"&gt;Tom Morris&lt;/a&gt;, &lt;a href="http://www.jenitennison.com/" rel="contact"&gt;Jeni Tennison&lt;/a&gt;, &lt;a href="http://www.coldclimate.co.uk/" rel="contact"&gt;coldclimate&lt;/a&gt;, David McBride, Glyn Wintle, &lt;a href="http://twitter.com/sheilaellen"&gt;Sheila Thomson&lt;/a&gt; and some others, which was a perfect end to the day (and the less mentioned about having to sleep for three hours in my car at Fleet services on the way home, the better.)&lt;/p&gt;

&lt;p&gt;Photo courtesy of "rooreynolds" on flickr ( &lt;a href="http://flickr.com/photos/rooreynolds/2640334628/"&gt;http://flickr.com/photos/rooreynolds/2640334628/&lt;/a&gt; ) creative commons&lt;/a&gt; &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkNg/~4/h81YUAAbhC0" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.markng.co.uk/blog/2008/07/06/opentech-2008-----revolution-this-way</feedburner:origLink></entry>
<entry>
  <title>timelapse screencasting + isight</title>
  <link rel="alternate" href="http://feedproxy.google.com/~r/MarkNg/~3/RJ-BYqZsmgM/timelapse-screencasting-isight" />
  <updated>2008-07-04T03:34:20Z</updated>
  <author>
    <name>Mark</name>
  </author>
  <id>76</id>
  <summary type="text">DISCLAIMER: All of this is a horrid hack. Don't blame me if it pees in your cornflakes.
				Test ti[...]</summary>
  <content type="html">&lt;p&gt;&lt;strong&gt;DISCLAIMER: All of this is a horrid hack. Don't blame me if it pees in your cornflakes.&lt;/strong&gt;&lt;/p&gt;
&lt;object width="400" height="300"&gt;	&lt;param name="allowfullscreen" value="true" /&gt;	&lt;param name="allowscriptaccess" value="always" /&gt;	&lt;param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1278276&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /&gt;	&lt;embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1278276&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://www.vimeo.com/1278276?pg=embed&amp;sec=1278276"&gt;Test timelapse&lt;/a&gt; from &lt;a href="http://www.vimeo.com/user581051?pg=embed&amp;sec=1278276"&gt;Mark Ng&lt;/a&gt; on &lt;a href="http://vimeo.com?pg=embed&amp;sec=1278276"&gt;Vimeo&lt;/a&gt;.

&lt;p&gt;So, alot of you will have seen the &lt;a href="http://www.carsonified.com/matt/a-whole-day-of-web-app-development-in-four-minutes"&gt;Carsonified timelapse videos&lt;/a&gt; showing their team developing their new web application &lt;a href="http://www.themattinator.com/"&gt;Matt&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When I saw this, the first thing I thought about was using this as a means of tracking my productivity.  Looking back on a days work after you've done it can give you a lot of hints as to where you're wasting your time.  So, I set about working out how to make these myself.&lt;/p&gt;

&lt;p&gt;I butchered some bits and pieces of Applescript floating around the internet to take the pictures during the day.  Note: I work with my laptop screen and a desktop monitor, and chose to record both of those (screen1 and screen2).  The applescript is below :&lt;/p&gt;

  &lt;pre&gt;
    &lt;code&gt;
    set save_location to  ¬
      (choose folder with prompt "Choose where to save screenshots")

    on quit
        display dialog "Stop recording?"
            buttons {"No", "Quit"}
        if the button returned of the result is "Quit" then
            continue quit
        end if
    end quit

    repeat with shotcount from 1 to 1440
      do shell script "screencapture -C -tjpg -x " &amp; ¬
      quoted form of POSIX path of save_location ¬
      &amp; "screen1-`date '+%y%m%d.%H%M'`.jpg "&amp; quoted form of POSIX path of save_location &amp;"screen2-`date '+%y%m%d.%H%M'`.jpg"
      do shell script "/Applications/isightcapture "&amp; quoted form of POSIX path of save_location &amp;"face.`date '+%y%m%d.%H%M'`.jpg"
      delay (60 * 1) -- delay 1 minute
    end repeat
    &lt;/code&gt;
  &lt;/pre&gt;

&lt;p&gt;This expects a freeware program &lt;a href="http://www.macupdate.com/info.php/id/18598"&gt;isightcapture&lt;/a&gt; to be in your /Applications/ directory, and you'll need to compile this script into an application and run it (it's also a bit flaky and doesn't quit properly - I don't know applescript at all and built this script in about 15 minutes.)&lt;/p&gt;

&lt;p&gt;So, after running this for a whole day, you'll have a folder full of timestamped images.  For the next part, you'll need imagemagick and mplayer/mencoder installed.  I got both of these from &lt;a href="http://www.macports.org/"&gt;macports&lt;/a&gt;, but you may choose to get them in some other manner.&lt;/p&gt;

&lt;p&gt;To process the folder, first you need to merge the images together so that the screens and face appear in the same image.  I did this with a shell script like this :&lt;/p&gt;

  &lt;pre&gt;
    #!/bin/bash
    mkdir processed
    for time in `ls face*.jpg | awk -F"." '{ print $2 "." $3 }'`; do
      montage -geometry '600x600' -shadow -background none -tile 2x face.$time.jpg screen1-$time.jpg screen2-$time.jpg processed/montage.$time.jpg
    done
  &lt;/pre&gt;

&lt;p&gt;You may wish to mess around with the geometry and tiling, background, etc.  You can take a look at &lt;a href="http://www.imagemagick.org/Usage/montage/"&gt;this page about the montage tool in ImageMagick&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Finally, you need to use mencoder to make a movie !  Optionally, you can add an MP3 or ogg file for background music.  Inside the processed image folder, run the following (Messing around with the fps can be helpful.) :&lt;/p&gt;

  &lt;pre&gt;
    mencoder mf://*.jpg -mf w=1280:h=800:fps=4.3:type=jpg -ovc x264 -x264encopts pass=1:bitrate=256 -audiofile /path/to/music.mp3 -oac mp3lame -o timelapse.avi
  &lt;/pre&gt;

&lt;p&gt;You'll be left with an video file.  I built one for the afternoon of that day.  Interestingly, it was a day that I had to go out and pick my car up from servicing and also get my hair cut, which shows me some good productivity drains right there !&lt;/p&gt;

&lt;img src="http://feeds.feedburner.com/~r/MarkNg/~4/RJ-BYqZsmgM" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.markng.co.uk/blog/2008/07/04/timelapse-screencasting-isight</feedburner:origLink></entry>
<entry>
  <title>Dorset Web BBQ</title>
  <link rel="alternate" href="http://feedproxy.google.com/~r/MarkNg/~3/ox-Y_yxfzBw/dorset-web-bbq" />
  <updated>2008-05-18T10:26:49Z</updated>
  <author>
    <name>Mark</name>
  </author>
  <id>75</id>
  <summary type="text">Since moving to Bournemouth, I've not noticed much in the way of web community events going on here [...]</summary>
  <content type="html">&lt;p&gt;Since moving to Bournemouth, I've not noticed much in the way of web community events going on here or in the rest of Dorset, despite the fact that there do actually appear to be some talented people down here.  In an effort to remedy this, I'm having a barbeque to try and get some people together.  Hopefully, I'll get a chance to meet some new people and we can organise some more events !  If you're interested in coming along, &lt;a href="http://upcoming.yahoo.com/event/696045/"&gt;find details and sign up here.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkNg/~4/ox-Y_yxfzBw" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.markng.co.uk/blog/2008/05/18/dorset-web-bbq</feedburner:origLink></entry>
<entry>
  <title>Feedshaver - categorize your RSS feeds using opencalais</title>
  <link rel="alternate" href="http://feedproxy.google.com/~r/MarkNg/~3/TIo7GjBY80Q/feedshaver---categorize-your-rss-feeds-using-opencalais" />
  <updated>2008-05-07T21:11:08Z</updated>
  <author>
    <name>Mark</name>
  </author>
  <id>74</id>
  <summary type="text">The application I built for the telegraph developer weekend (which won second prize) is live on the [...]</summary>
  <content type="html">&lt;p&gt;The application I built for the telegraph developer weekend (which won second prize) is &lt;a href="http://feedshaver.com/"&gt;live on the internet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedshaver.com"&gt;Feedshaver&lt;/a&gt; is an application written in &lt;a href="http://www.symfony-project.org/"&gt;symfony&lt;/a&gt; that utilizes Reuters &lt;a href="http://www.opencalais.com/"&gt;OpenCalais&lt;/a&gt; service to automatically tag RSS feeds and allow you to follow only certain subjects in a feed (or all of the feeds in the system).  Eventually, I intend on adding feed groups, the ability to opt out of subjects instead of opt in and many other things, but for now, a slightly tidied version of the app I built in 4 hours is live.  Hopefully, it'll be of use to someone.&lt;/p&gt;

&lt;p&gt;Oh, I might even get a design for it, too.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkNg/~4/TIo7GjBY80Q" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.markng.co.uk/blog/2008/05/07/feedshaver---categorize-your-rss-feeds-using-opencalais</feedburner:origLink></entry>
<entry>
  <title>Over the Air conference summary</title>
  <link rel="alternate" href="http://feedproxy.google.com/~r/MarkNg/~3/SbEL-VnKXbs/over-the-air-conference-summary" />
  <updated>2008-04-05T23:19:08Z</updated>
  <author>
    <name>Mark</name>
  </author>
  <id>73</id>
  <summary type="text">updated : added links to octobastard video and PrimeSky slides

I'm back in Bournemouth after 2 da[...]</summary>
  <content type="html">&lt;p&gt;&lt;strong&gt;updated :&lt;/strong&gt; added links to &lt;a href="http://www.youtube.com/watch?v=O7N94S7BcHA"&gt;octobastard video&lt;/a&gt; and &lt;a href="http://www.slideshare.net/bryanrieger/prime-sky"&gt;PrimeSky slides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm back in Bournemouth after 2 days in London at &lt;a href="http://overtheair.org/" title="Over The Air"&gt;overtheair&lt;/a&gt; at &lt;a href="http://www3.imperial.ac.uk/" title="Imperial College London"&gt;Imperial College&lt;/a&gt;.  overtheair was an interesting change in conference formats, as it was a hybrid of a more traditional speaker led conference, followed by a hack day, combined with the sleep-over common to &lt;a href="http://barcamp.org/" title="BarCamp wiki"&gt;Barcamps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;overtheair was, overall an excellent conference.  I saw some excellent talks - in particular a UX panel which I found interesting.  I also got the chance to get the new &lt;a href="http://www.s60.com/webruntime"&gt;Nokia Web Runtime&lt;/a&gt; running on my N95.&lt;/p&gt;

&lt;h2&gt;Mobile and the Web&lt;/h2&gt;
&lt;p&gt;I really believe that as applications based on web technologies (HTML, Javascript, CSS, SVG, et al) become first class citizens on mobile devices, there will be more and more crossover between people working in web and mobile.  I have directly experienced this working on a new astronomical web and mobile calendar service for the &lt;a href="http://www.rog.nmm.ac.uk/" title="Royal Observatory : What's on : NMM"&gt;Royal Observatory&lt;/a&gt; with &lt;a href="http://www.futureplatforms.com/" title="Future Platforms"&gt;Future Platforms&lt;/a&gt;.  I was excited that &lt;a href="http://www.tomhume.org/" title="Tom Hume" rel="friend met colleague"&gt;Tom Hume&lt;/a&gt; and &lt;a href="http://bryanrieger.com/" title="Bryan Rieger — on design, devices and distractions…" rel="friend met colleague"&gt;Bryan Rieger&lt;/a&gt; got a chance to &lt;a href="http://www.slideshare.net/bryanrieger/prime-sky"&gt;present on our experiences building this application&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Their presentation went really well, and it was nice that afterwards lots of people came and spoke to us with their questions about the project.  I hope that some people left inspired to create web applications that work equally well on mobile, and start designing with mobile in mind.&lt;/p&gt;

&lt;p&gt;I spent the night hacking around with the web runtime, starting to build a twitter client (isn't this like mobile "Hello World" now ?) and playing werewolf - where I was a seer for the first time!&lt;/p&gt;

&lt;h2&gt;Octobastard&lt;/h2&gt;

&lt;p&gt;In the morning, I saw that the Future Platforms crew had been working hard on their competition entry all night and needed help killing a few problems at the end.  I helped them out a bit.&lt;/p&gt;

&lt;p&gt;Some more on their evil creation.  Thom Hopper has quite a penchant for hardware hacking - I've seen some crazy things he's bought into the office.  A nintendo DS with bits of circuit board hanging out of the back of it running his own games, for example.  So, when he was introduced to &lt;a href="http://www.arduino.cc/" title="Arduino - HomePage"&gt;Arduino&lt;/a&gt;, he decided to do what any of us would do - make a robot arm !&lt;/p&gt;

&lt;p&gt;They somehow went from a robot arm controlled by a wii nunchuk to a robot arm with a camera on it &lt;a href="http://www.youtube.com/watch?v=O7N94S7BcHA"&gt;controlled by a Sony Ericsson phone with accelerometers&lt;/a&gt; via a J2ME app via several hops of port forwarding and tunneling to a Java servlet telling the Arduino to move the robot arm based upon the orientation of the phone then taking a photo and uploading it to yet another server whereupon a flash lite client or a web browser could see an image that the robot had taken after it had moved. phew.&lt;/p&gt;

&lt;p&gt;Just for fun, I added an &lt;a href="http://www.flickr.com/photos/25367320@N06/page7/"&gt;automated flickr stream&lt;/a&gt;, nokia web runtime and iPhone clients to the mix.  At some point it was noticed that we had 8 distinct parts of this project, and Tom christened the robot "octobastard".  Afterwards, we decided to add more distinct parts, but the name stuck.&lt;/p&gt;

&lt;p&gt;This was shown to everyone, and we rather expected we might win the "over-engineered" prize category.  Much to our surprise, we won the best overall prototype instead (despite the utterly excellent "phone fight" application the guys from lastminute labs made - and, in fact, the general high quality of many of the entries).&lt;/p&gt;

&lt;p&gt;I met a lot of interesting unfamiliar and familiar faces at overtheair (and somehow ended up going home with 8 beanbags that various attendees couldn't be bothered to carry home in my car !).  I'd encourage anyone I met there to &lt;a href="http://www.markng.co.uk/"&gt;stay in touch.&lt;/a&gt;  Also, if I can get links to some of the video and slides to do with these, I will add them later.&lt;/p&gt;

&lt;p&gt;As a side note - a couple of friends of mine made an utterly silly and &lt;a href="http://torchwoodswede.wordpress.com/"&gt;hilarious torchwood parody&lt;/a&gt; while at the conference.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkNg/~4/SbEL-VnKXbs" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.markng.co.uk/blog/2008/04/05/over-the-air-conference-summary</feedburner:origLink></entry>
<entry>
  <title>XHTML-MP and mobile hCard - Barcamp Brighton Presentation</title>
  <link rel="alternate" href="http://feedproxy.google.com/~r/MarkNg/~3/xU1TOh8lAp0/xhtml-mp-and-mobile-hcard---barcamp-brighton-presentation" />
  <updated>2008-03-15T01:54:11Z</updated>
  <author>
    <name>Mark</name>
  </author>
  <id>72</id>
  <summary type="text">These following code notes accompany my Barcamp Brighton presentation, and have example code to use [...]</summary>
  <content type="html">These following code notes accompany my Barcamp Brighton presentation, and have example code to use my WURFL API to create part of an hCard that enables mobile users to call and SMS directly from webpages.

&lt;h3&gt;Controller section&lt;/h3&gt;
&lt;pre&gt;
$ua = $_SERVER[&amp;#x27;HTTP_USER_AGENT&amp;#x27;];
if(array_key_exists(&amp;#x27;HTTP_X_DEVICE_USER_AGENT&amp;#x27;,$_SERVER) AND $_SERVER[&amp;#x27;HTTP_X_DEVICE_USER_AGENT&amp;#x27;]) $ua = $_SERVER[&amp;#x27;HTTP_X_DEVICE_USER_AGENT&amp;#x27;];
$device = unserialize(file_get_contents(&amp;quot;http://www.markng.co.uk/wurfl/php/product_info.is_wireless_device,xhtml_ui/$ua&amp;quot;));

&lt;/pre&gt;

&lt;h3&gt;View section&lt;/h3&gt;
&lt;pre&gt;
&amp;lt;div class=&amp;quot;tel&amp;quot;&amp;gt;
  &amp;lt;span class=&amp;quot;type&amp;quot;&amp;gt;Mobile&amp;lt;/span&amp;gt;
  &amp;lt;?php if ($device[&amp;#x27;product_info&amp;#x27;][&amp;#x27;is_wireless_device&amp;#x27;]): ?&amp;gt;
    &amp;lt;a href=&amp;quot;&amp;lt;?php echo $device[&amp;#x27;xhtml_ui&amp;#x27;][&amp;#x27;xhtml_make_phone_call_string&amp;#x27;] ?&amp;gt;+447828794899&amp;quot; class=&amp;quot;value&amp;quot;&amp;gt;07828 794899&amp;lt;/a&amp;gt; 
    &amp;lt;a href=&amp;quot;&amp;lt;?php if (!$device[&amp;#x27;xhtml_ui&amp;#x27;][&amp;#x27;xhtml_send_sms_string&amp;#x27;] OR $device[&amp;#x27;xhtml_ui&amp;#x27;][&amp;#x27;xhtml_send_sms_string&amp;#x27;] == &amp;#x27;none&amp;#x27;): ?&amp;gt;sms:&amp;lt;?php else: 
echo $device[&amp;#x27;xhtml_ui&amp;#x27;][&amp;#x27;xhtml_send_sms_string&amp;#x27;] ?&amp;gt;&amp;lt;?php endif ?&amp;gt;+447828794899&amp;quot;&amp;gt;(sms)&amp;lt;/a&amp;gt;
  &amp;lt;?php else: ?&amp;gt;
    &amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;07828 794899&amp;lt;/span&amp;gt;
  &amp;lt;?php endif ?&amp;gt;
&amp;lt;/div&amp;gt;

&lt;/pre&gt;

&lt;p&gt;A slideshare or similar link will follow when the actual presentation has been done !&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkNg/~4/xU1TOh8lAp0" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.markng.co.uk/blog/2008/03/15/xhtml-mp-and-mobile-hcard---barcamp-brighton-presentation</feedburner:origLink></entry>
<entry>
  <title>Populating sfSimpleBlogPlugin from RSS</title>
  <link rel="alternate" href="http://feedproxy.google.com/~r/MarkNg/~3/loGnUQDNZAw/populating-sfsimpleblogplugin-from-rss" />
  <updated>2008-03-05T21:03:21Z</updated>
  <author>
    <name>Mark</name>
  </author>
  <id>71</id>
  <summary type="text">Finally, I've moved my personal site to Symfony.  I've been using the framework extensively professi[...]</summary>
  <content type="html">&lt;p&gt;Finally, I've moved my personal site to &lt;a href="http://www.symfony-project.org/" title="symfony Web PHP Framework"&gt;Symfony&lt;/a&gt;.  I've been using the framework extensively professionally for a bit more than a year.  I decided to use &lt;a href="http://trac.symfony-project.com/wiki/sfSimpleBlogPlugin" title="sfSimpleBlogPlugin - symfony - Trac"&gt;sfSimpleBlogPlugin&lt;/a&gt; to handle the blogging requirements on the site.  I could have spent a while fiddling with databases to get the old data from my site off, but instead I decided to follow a different route by pulling all of my data from my old RSS feed.&lt;/p&gt;

&lt;p&gt;Symfony provides the excellent &lt;a href="http://trac.symfony-project.com/wiki/sfFeed2Plugin" title="sfFeed2Plugin - symfony - Trac"&gt;sfFeed2Plugin&lt;/a&gt; for producing and parsing various feed formats.  I used this outside of the controllers in a batch task to do import my old data in.  Here is the code :&lt;/p&gt;

&lt;pre&gt;
  &amp;lt;?php

  // set up a the symfony environment for batch 
  define(&amp;#x27;SF_ROOT_DIR&amp;#x27;,    realpath(dirname(__FILE__).&amp;#x27;/..&amp;#x27;));
  define(&amp;#x27;SF_APP&amp;#x27;,         &amp;#x27;frontend&amp;#x27;);
  define(&amp;#x27;SF_ENVIRONMENT&amp;#x27;, &amp;#x27;prod&amp;#x27;);
  define(&amp;#x27;SF_DEBUG&amp;#x27;,       false);

  require_once(SF_ROOT_DIR. DIRECTORY_SEPARATOR.&amp;#x27;apps&amp;#x27; .DIRECTORY_SEPARATOR.SF_APP. DIRECTORY_SEPARATOR.&amp;#x27;config&amp;#x27;. DIRECTORY_SEPARATOR. &amp;#x27;config.php&amp;#x27;);

  sfContext::getInstance();

  // get the RSS
  $feed = sfFeedPeer::createFromWeb(&amp;#x27;http://www.markng.co.uk/rss.php?c=blog&amp;#x27;);

  // delete all posts in the posts table (remove this if not doing an initial import)
  sfSimpleBlogPostPeer::doDeleteAll();

  // get items from the feed and then loop through and save
  $items = $feed-&amp;gt;getItems();
  foreach ($items as $key =&amp;gt; $post) 
  {
    $importPost = new sfSimpleBlogPost();
    $importPost-&amp;gt;setAuthorId(1);
    $importPost-&amp;gt;setTitle($post-&amp;gt;getTitle());
    $importPost-&amp;gt;setStrippedTitle($post-&amp;gt;getUniqueId());
    $importPost-&amp;gt;setContent($post-&amp;gt;getDescription());
    $importPost-&amp;gt;setIsPublished(1);
    $importPost-&amp;gt;setAllowComments(1);
    $importPost-&amp;gt;setCreatedAt($post-&amp;gt;getPubDate(&amp;#x27;U&amp;#x27;));
    $importPost-&amp;gt;setPublishedAt($post-&amp;gt;getPubDate(&amp;#x27;U&amp;#x27;));
    $importPost-&amp;gt;save();
  }
&lt;/pre&gt;

&lt;p&gt;If you were to use this, you may need to change the stripped titles to unique Id - I changed my old CMS slightly to output slugs as unique ID's so that it would be easy for me to do redirects for my old URL structure.  I put this in the batch folder, and then ran it from the root of the project using :&lt;/p&gt;

&lt;pre&gt;
  php batch/rss_import.php
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkNg/~4/loGnUQDNZAw" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://www.markng.co.uk/blog/2008/03/05/populating-sfsimpleblogplugin-from-rss</feedburner:origLink></entry>
</feed>
