Notes


25
Jan 11

History Hack Day

My officemate Matt has spent the past few weeks putting together the inaugural History Hack Day, which took place at the Guardian offices last weekend. I was only able to attend for the kick-off talks, but they were great, with Matt Sheret‘s exhortation to be timelords fitting especially well.

Jeremy Keith has done a great job of writing up the various hacks that emerged from the weekend and I’m gradually working my way through them. I’ve very much enjoyed watching Simon’s geStation which plots the openings of Britain’s railway stations onto a google map. As Jeremy says:

On the face of it, it sounds like just another mashup of datetimes and lat-long coordinates. But when you run it, you can see the story of the industrial revolution emerge on the map.

I initially opened it in a rather overloaded browser and everything ran very slowly. Switching to a different browser sped things up a lot, but I realised I’d enjoyed the slow pace rather a lot more – there was something quietly engaging about watching each station pin emerge in turn and spending several minutes seeing the country gradually connecting up.


25
Jan 11

Thoughts on the state of the "East London Tech City" initiative

Last Monday I was at the Department for Business, Innovation and Skills to explore the government’s “Tech City” scheme to do something to do with the technology industry in an area loosely defined as “East London”.

I’d been wondering before sitting down to write this how best to sum up my reservations about the scheme, not really realising that just writing that first sentence would actually begin to draw them out quite quickly. An initiative has been announced, a name has been given, but very few people seem to actually be sure what is being proposed, or where or at whom it’s targeted. That made it very hard to work out how to engage with the event.

There were a range of different interests represented, small development shops like ours, a couple of early stage startups, some academics, a few folks who’d been through the startup experience and emerged with successful firms, civil servants, VCs/bankers, and quite a few big tech vendors. It wasn’t hard to discern who fell into each group as time and again it became clear that there were quite distinct agendas in play, not to mention significantly different interpretations of the dress code. And it was a clear a number of those present could do with reading Alex’s politician’s handbook to East London, with requests for “free wifi to enable cafe working” suggesting people hadn’t spent much time in the current crop of cafes around Shoreditch.

There were a few stimulating conversations in the breakout groups but it’s sad that one of the most positive outcomes was that the lack of focus so quickly became apparent! Are we talking about encouraging tech firms to take over the Olympic Park post-2012, or are we talking about changes in Shoreditch? Are we looking to bring in foreign tech giants who are well capitalised and need a European office, or is the primary focus supporting the establishment and growth of indigenous companies?

Those are all valid questions to be asking when exploring what government can be doing to support the British tech sector, but it feels like they’re the questions that come before an initiative is announced with much fanfare and a variety of “commitments.”

It feels like the whole thing is starting on very poor footing. Early on there was a statement (which I’m not meant to attribute because we were under Chatham House Rules) that the name “Silicon Roundabout” had been dropped because “it doesn’t translate around the world.” That was indicative for me that there was no real commitment to exploring the uniqueness of London and the myriad tech communities that thrive within it. I’ve a certain fondness for the Roundabout moniker, though no deep commitment to it, and its key attributes in this context are that it emerged from the community of small tech companies in the Old Street area, and that it relates a certain commitment to and humour about the place. The idea of dropping it didn’t go down well among the locals I was attending with.

Understandably, the consultants from McKinsey running the event were at pains to push those of us there for some concrete answers to “what should the government do?” And given that the initiative is already under way we probably need to come up with some answers… I don’t have many specifics as yet, but I know I’d like them to start by:

  • splitting the initiative along geographical lines: East London isn’t a single entity and different neighbourhoods have different needs. Pick a couple of areas and produce tailored plans for each.
  • acknowledging that small companies generally generate more jobs than big ones (and that “rapid growth” isn’t the only way to be successful): where there’s an existing ecosystem of small companies ask them what they need without the implicit addition of “in order to become big companies”

24
Jan 11

News Sauce

One of the projects that occupied the latter half of my 2010 was the build and launch of News Sauce. It’s an aggregator product that we’ve built on drupal and initially launched to pull together news coming out of the UK government.

It’s been ticking along very nicely for a couple of months now and has been very well received. Which is nice. Over the weekend there was a little surge of attention as a result of UK Gov Camp and that prompted me to write a blog entry I’ve been promising for a couple of months. So if you want to know a little more about the tech behind the site you can now find my first notes over on the News Sauce blog.

There are all manner of new features planned, and a few more “editions” to launch. I’ll try to be a little better about posting updates here.


24
Jan 11

Seen through devices

I’ve been musing on Mike Kuniavsky’s notes from his Microsoft Social Computing Symposium for a few days. While his focus is ostensibly on physical products and our focus remains very much on web products it’s a helpful read since that distinction is an increasingly flexible one.

because these things are now connected, their value moves from the device to the service it represents, and the actual objects become secondary. They become what I call service avatars. A camera becomes a really good appliance for taking photos for Flickr, while a TV becomes a nice place to run a high res Flickr widget, and a phone becomes a convenient way to take your Flickr widget on the road. People see “through” each device to the service it represents, devaluing the device to nearly nothing.

and

The upshot of all this is that we’re about to see a precambrian explosion of device-types that span uses, scales, and continents as we collectively stumble around and try to figure out what it means when many people have many devices and they’re telling many interwoven stories with them simultaneously. We’ll yearn for the clarity when all we had to do was figure out where the pixels went or how to make style sheets render correctly on two browsers.

That’s a pretty vital thing for those designing and making physical objects to bear in mind, but it’s also something those of us building web products need to bear in mind. The future’s a lot more than a set of websites that look good on an iPhone.


7
Jan 11

Adding actions to Devise controllers

Adding Actions to Devise Controllers

It wasn’t the most fun I could imagine having during a “holiday season” but while holed up in Chicagoland over Christmas I spent a couple of days porting a few of my older Rails apps to use a more up to date stack: Rails 3, Devise, Inherited Resources, Formtastic, etc. The idea is that if the apps are on a stack I use every day, I’ll spend less of my time reloading old tools into my head when the inevitable tweaks are required. We’ll see how that goes.

Anyway…

Two of the apps I was working on include member profile pages. Having carefully chosen my devise model names to match the language of my app I wanted to use the same controller that’s used for registrations for other member actions. Initially I tried just extending the relevant controller and updating the route:

config/routes.rb

  devise_for :members, :controllers => { :registrations => "members" }

app/controllers/members_controller.rb

class MembersController < Devise::RegistrationsController
  def show
    ...
  end
end

but I kept getting ActionController::UnknownAction exceptions when I tried to request a member profile page.

It turns out that Devise runs a before_filter called is_devise_resource? in its controllers and that wasn’t recognising any actions that aren’t included in the core devise controllers. It also runs authenticate_scope! for relevant actions.

With that discovered it was easy enough to update my controller to

class MembersController  [:index, :show, :edit, :update]
  skip_before_filter :authenticate_scope!, :o nly => [:edit, :update, :destroy]

  def show
    ...
  end
end

and everything fell into place.


21
Aug 10

Week 152

This is always a strange week in my annual calendar.

So much of my work is focussed around Greenbelt—which is now less than a week away—that many, many projects are approaching their culmination. Good news this week is that we’ve got a little of the funding we need for this year’s newspaper, that the GPD is once again paying off as preparations to sell talks online were easier by several orders of magnitude than any time in the past decade, and that the festival iPhone app was approved and is now on sale.

This year the week was that little bit stranger because of a rush project that came in on Monday, was due at 9am on Thursday, and the launch of which has now been pushed back to Monday. It’s for a very exciting client, and even though in the end we didn’t get nearly the freedom that we were initially led to expect I’m delighted that we’re associated with it.

Other than that, one of the long lingering projects finally seems to be signed off (note to self: in future don’t agree to support installation before knowing the server platform being used), another had a successful client demo mid-week and we now move on to a workshop and planning for a second phase of work, and I found someone to take over working with a client who need more time than I can offer.

Quite a good strange week, really.


13
Aug 10

Week 151

A calmer week at last. I tend to find that I’m especially prone to procrastination in weeks like this one, when there’s finally some breathing room after an intense period. I guess that’s okay, but it can lead to nasty surprises.

It’s largely been a week of “tidying up”. We got a whole range of small fixes made to a range of client sites and deployed them for testing. That led to some server wrangling, and in one case to lots of back-and-forth with a client’s internal IT person as we tried to figure out their rather complex Windows/IIS server setup and an awkward API that required an interface script be placed at a very specific URL.

I invested a good chunk of Monday getting the iPhone/iPad app that pab has built for Greenbelt packaged up and submitted for approval. Now that I’ve completed battle with iTunes Connect, we simply have to wait (watching the clock impatiently) and see what Apple say.

It’s been great to see the way that the Programming Database (referred to last week, generating contracts) can quickly feed the iPhone app and can be used to generate updates that can be downloaded over-the-air. For years we’ve talked about automating these sorts of systems, and this year we’ve made significant progress. The programming database/iPhone app combo is feeling quite compelling, and it’s becoming clear that they could be adapted and applied to a wide range of events. That deserves more consideration in the coming months.


13
Aug 10

Bundler and Monit playing nicely together

I’ve been setting monit up to keep an eye on the various parts associated with a Rails app (2.3.x but patched to use Bundler for gem management) and ran into a problem getting my Gemfile recognised properly.

The essential piece I’d missed was the BUNDLE_GEMFILE environment variable. So for, say, delayed_job what was needed was:

start program = "/usr/bin/env RAILS_ENV=production \
BUNDLE_GEMFILE=/var/www/my_app/current/Gemfile \
PATH=/opt/ruby/bin:$PATH \
/var/www/my_app/current/script/delayed_job  start"

Hopefully that’ll save someone a few minutes.


8
Aug 10

Week 150

Another week down and once again I can’t quite remember what was achieved. Uppermost in my mind is a client meeting from Wednesday that seemed very positive — everyone on the same page, clear targets and achievable (if tight) deadlines — but was shortly followed by an email that threw the whole project into confusion. The coming week will require that we resolve that.

There’s a new look in place for the the Ninja XX site that better fits with the print design they’ve recently had completed. The arrangements for our increasingly popular office are tidied up. My team of Greenbelt volunteers are all in place and the Programming Database we built for them is churning out contracts, saving people lots of time. We have Suite 4 in progress. Our new standard Ts&Cs are being finalised by the solicitor. Other projects are moving along. I’ve begun on plans to hand others over to new teams who could drive them forward over a longer term.

That second paragraph really helps offset the frustration of the first. More that to come, I hope.


3
Aug 10

Delayed Job dying silently

I’ve just completed migrating a client site from BackgrounDRb to delayed_job (which is a huge relief on several levels). I had hoped to complete the process this morning, but the delayed_job process kept dying on me without any apparent explanation in the usual logs.

Thankfully the RPM log in my app turned out to be capturing one vital detail — the MySQL server had “gone away”, Armed with that knowledge I was able to find this thread on github and from that Brandon’s pointer to the ‘reconnect’ option in database.yml. Setting that appears to have solved that last lingering problem.

And since it took a while to track down, it seemed worth sharing.