The small iPad

It sill amuses me, the way the iPhone feeds like this amazing tiny iPad when you switch to it after a few hours of reading on the iPad. And for a moment it feels like the iPad must’ve come first, because of that.

From AppEngine to Cloudant and Linode

The last rewrite of the code which runs this site was in 2009, when I changed from a static site generator I’d written in ruby to an AppEngine site I wrote when I was first learning python. In the main I was very happy with AppEngine: I’d not paid them a cent but they’d happily hosted my site for five years.

Lately, however, I’d begun to want a better understanding of the technologies the site runs on. AppEngine’s abstractions were becoming to much. I’ve wanted a server of my own for a while; I chose Linode (referral URL) because my friends using it haven’t had many bad words to say about it. I chose Cloudant because I work there and wanted to have an app I — sort of! — depend on running there.

While Linode and Cloudant are more abstract than running everything on a single physical server, they are at a lower-level. For Linode, I can make decent guesses as to the stack; it feels more graspable. Working at Cloudant, I’ve a decent understanding of the stack Cloudant use, and have contributed code across the service.

Overall the migration was very smooth, and proceeded in two stages:

  1. Continue running on AppEngine, but migrate the data layer to use Cloudant.
  2. Migrate the web app to run on Ubuntu on Linode.

Step 1 was the more complicated one, and I’ll probably write up something of the model and views I use for the site. For now, it suffices to say that, aside from when editing posts, every page on the site is driven by one or more Cloudant views rather than pulling the documents directly. While my data is miniscule — around two or three megabytes — the Couch model is a good fit, so I’m happy with that choice.

Step 2 was straightforward as the site didn’t use much AppEngine-specific functionality. It’s a cherrypy web app, using mako templates along with a few other libraries like markdown. The main change was choosing how to authenticate myself to the backend, as this was the main place I’d tied myself to Google’s infrastructure. For now, I’m just using HTTP basic-auth, with the site’s config file containing a username and hashed&salted password, and have removed multi-author support.

AppEngine also has an automated deployment tool, so there was also a bit of work in moving the source code to a private GitHub repository and setting up keys so the Linode server can check the code out. Once I’ve given the code a once over, I’ll probably make the repository public so the server doesn’t need any credentials for my GH account.

The actual sysadmin work on the Linode server was minimal, basic security steps followed by installing nginx and supervisord from the package manager. This stuff really isn’t hard if you’re just running a website or two, though I confess to relying on the assumption that the Ubuntu packages provide a secure installation.

Divided 1.7

Top top off the weekend’s app update bonanza, I just submitted an new version of Divided to the App Store. 1.7 has a bunch of iOS 7 interface tweaks. I’ve been sitting on these since September 2013. I’d intended to neaten them up, but clearly never got around to it, so thought it best to release them while I’m in the mood to take screenshots and jump through hoops.

My cafetiere coffee brewing process

This is an abridged version of the Clifton Coffee Company’s brewing guide. The method is the same, I’ve just put it into a form I find easier to refer to.


  • 60g of ground coffee per 1L of water.
  • 2 cups is about 600ml


Grind, weigh and add the coffee grounds to the cafetiere while the kettle boils.

00:00   Kettle boils; let it sit to allow the water to cool slightly.
01:30   Pour the water from the kettle into the cafetiere. Allow coffee to bloom.
02:30   Use a dessert spoon to push the coffee down into the water; a single stir. At this point I usually use leftover water in the kettle to warm the cups.
05:30   Add the lid to the cafetiere, plunge the plunger, serve.

I wrote my own timer app to help with this. The main differentiator is that it counts up rather than down. If you’d pay 69p for such a thing, drop me an email.

Updates to Drinktrack and One to Watch

I submitted updates for Drinktrack and One to Watch to the App Store today.

In One to Watch, I made a small tweak to how you swap between the lists of watched and unwatched films. I think switching to a segmented control both makes the process simpler and exposes the feature more prominently.

The changes to Drinktrack are more worthwhile:

  • You can now elect to use 0.5% increments of AbV.
  • U.S. measures are included. For U.S. users, they are put at the beginning of the list of measures. For the rest of the world, they’re appended.
  • A few extra measures. 75ml glasses of wine, ⅔ and ⅓ of a pint for fancy-pants craft beer bars.
  • Quicker way to move drinks between days: little buttons to go forward and back.
  • General design tweaks to fit in with iOS 7, which I thought I released ages ago, but it turned out I didn’t. Ooops.

Expect them to be on the App Store within the week.