Jon Atkinson

I'm a technologist, with a long and varied history in high-end technical delivery and infrastructure management. I'm particularly interested in managing software teams, rapid application development, and scalability challenges.


Notebook: create-react-native-app on High Sierra in 2018

March 2018

A really quick guide to getting started with `react-native` in 2018. Let's see what we're dealing with: $ uname -a Darwin hostname.local 17.4.0 Darwin Kernel Version ...

Notebook: Listing ElasticBeanstalk applications with the aws CLI tool.

January 2018

You can easily list EB applications in your default AWS account with the following query. $ aws elasticbeanstalk describe-applications --query 'Applications[*].{Name:ApplicationName}' --output=text

Django coverage reports without unit tests

October 2017

I was recently working on a Django project which had a lot of development effort spent over a wide range of features which never made it to launch. We wanted ...

Restaurant: Grafene

October 2017

I've visited Grafene several times since it's opened. I've had dinner alone and with friends, and I've sampled the tasting menu a few times, so I ...

Restaurant: WOOD Manchester

September 2017

During a recent day at DjangoGirls Manchester, I was around the corner from the newly opened WOOD Manchester, so a quick solo lunch was in order. The starter of butternut ...

Notebook: Recursively updating S3 bucket permissions

September 2017

If you want to recursively apply a permission to an S3 bucket (for example, to add the `public-read` permission), then you can use the `aws` CLI tool to copy from ...

Notebook: Copying to S3 with awscli

December 2016

Copying to S3 with `awscli` is essentially the same syntax as SCP. This assumes you have a correctly configures `awscli` (if not, run `aws configure` beforehand). First, simulate the transfer ...

Setting up a DevPi server

July 2016

Downloading 3rd party packages is an important part of our build and deployment process. While PyPI is generally excellent, it does present some risks for us: - PyPI does go down ...

Bitbucket Pipelines

June 2016

We're heavy users of the Atlassian product suite at FARM, and that includes their powerful but obtuse CI system, Bamboo. Our workflow consists of an automated pipeline from BitBucket ...

Recycling, reuse, and codebase heuristics

July 2015

Did you know that people tend to recycle _unused_ sheets of paper, but tend to throw used paper in the bin? Or that people are more likely to throw away ...

Blackbox - Automated Website Quality Checks

December 2014

Like many agencies, at FARM we host and maintain a broad estate of web sites and applications. For all these sites, you can usually mix and match any of the ...

2014 Show Podcast

April 2014

On Monday night, I was on episode 12 of the 2014 Show, with Mark Steadman. We talked nonsense about tech news, game engines, and TV shows. It was a lot ...

Remote Working

January 2012

There was a great discussion today on Hacker News, about experiences with remote working. I thought I'd re-post our experiences here, as my comments on the original question seem ...

Talent Spotting

December 2011

There has been a common theme at work recently; talent. This coincided with a spate of "how we hire people" posts on Hacker News, so I wanted to write about ...

Leeds Hack 2

August 2011

Leedshack 2 was brilliant. I'm going to write a more technical teardown on the Testled blog in the next few days, but I thought I'd just blurt out ...


July 2010

I rather enjoyed Barcamp Blackpool this weekend. I've been to a lot of conferences and Barcamps this year, but I did particularly enjoy a Barcamp on my home soil ...

Obtaining GeoIP location with YQL using Python

April 2010

I've a few projects coming up for 84labs which required location awareness. Location awareness works great with any recent phone, but for traditional clients, I needed to fall-back to ...

asbo.org.uk, CakePHP and data.gov.uk

January 2010

Yesterday, I wrote asbo.org.uk, a site which provides really basic visualisation of the UK's anti-social behaviour order data from 1999-2007. This data was recently released by data ...

Sikuli desktop automation

January 2010

There's quite a lot of buzz around Project Sikuli at the moment, so I spent time today playing with it. Sikuli is a GUI automation engine which uses a ...

Django Project Base

January 2010

"This is my project base. There are many like it, but this one is mine." Today I finally got around to putting my Django project base on Github. I've ...

Headless Virtualbox on OSX

January 2010

When I'm developing, I try to continuously deploy to a realistic environment as often as possible. This means a Debian server running a stack as close to production as ...

New Years Resolution: Stop switching tools

January 2010

Like nearly everyone else on the planet, I've spent some of today thinking about how I can do better next year. My resolutions are roughly split into two categories ...

Barcamp London

October 2009

I've just finished at Barcamp London. It was worth going, but very busy, probably a little too busy. There were so many rooms that I had to choose between ...

Barcamp Blackpool

October 2009

I attended Barcamp Blackpool this weekend, it was great. There was a really wide diversity of speakers and sessions (I attended sessions on sign language, writing Android apps and geocaching ...

Local SMTP server with Python and Django

September 2009

Like most things, I'm probably the last to know about this, but it's very useful. When I'm locally developing Django applications which use SMTP, I usually get ...

yasnippet bundles for Django and FSF licenses

September 2009

I've been working on a couple of snippet collections for yasnippet recently, which I never got around to writing about. First is yasnippet-licenses, which contains a set of short ...

YSlow, expires header and compression

September 2009

Every time I need to raise a pitiful YSlow score, I follow the same recipe, and every time I do so, I realise I've not written it down anywhere ...

More on Paypal/Django

March 2009

I get quote a lot of traffic to my entry on encrypting Paypal buttons with Django. I was pleased to see that John Boxall has created django-paypal, a nice clean ...

Creating a read only backup user with MySQL

January 2009

I always have to look up which permissions a user needs to just run mysqldump successfully. This creates a new backup user, without a password, and gives them the least ...

The biggest mistakes of my career

December 2008

I've just finished reading this post about horrible experiences in software development, by Eric Spiegel. I've been working in the web industry for quite a while now, and ...

Disabling comments

December 2008

I've disabled comments for now due to a crazy amount of blog spam; the only reason I regret writing my own blog system is that I can't just ...

SSH on multiple ports with OSX 10.5

December 2008

I want my Mac Mini running Leopard to listen for SSH connections on multiple ports. This proved to be far more difficult that it should have been. For the sake ...

Using the hash key in Emacs with a UK keyboard

November 2008

I've been using Emacs recently, and it took me a while to figure out how to make option-3 produce a hash symbol like other Cocoa applications. This assumes you ...

Joining PDFs with Ghostscript

November 2008

If you need to join together a large amount of PDF files, but don't particularly want to pay for Acrobat Pro, Ghostscript can do the same. First, download Ghostscript ...

Removing the toolbar in MacVim

October 2008

I'm sure this is nothing new to anyone, but I only just discovered how to hide the toolbar in MacVim (and the associated guioptions preferences). In .vimrc:

if has ...

Installing M2Crypto on OSX

October 2008

I really like M2Crypto, but it is difficult to install on OSX without a few annoying prerequisites. Assuming you are running Leopard (or, I guess, newer), this is what you ...

Paypal encrypted buttons with Django

October 2008

Update (13/03/09): If you're reading this, you should probably also read this. I'm currently writing an invoicing application for Mampi, and we decided to use Paypal ...


October 2008

I blogged the other day about FileMerge. Changes is a good, modern replacement, even if the web site recommends 512mb of RAM. For a glorified diff app. Times have changed.

Django's user_passes_test and generic views

September 2008

Previously, I've often used a combination of django.contrib.auth and the login_required decorator as a simple way of controlling access to certain parts of an application. However, I ...

Djangocon 2008

September 2008

I realise I'm ridiculously late to this party, but I'm just catching up with the videos from DjangoCon 2008. I've seen quite a few amusing talks this ...

FileMerge keyboard shortcuts

September 2008

I really like Apple's FileMerge. I like it because it is simple, and I like it because the interface is apparently unchanged since NeXTSTEP. It feels like using a ...

Fixing RubyGems out of memory errors

September 2008

I run Debian Etch on a 256MB Xen instance (provided by Mampi). For quite a long time I've been running into out of memory errors when using RubyGems. The ...

Acid Brass

September 2008

My delightful thing of the day is Acid Brass:

Acid Brass was a musical collaboration between Turner-Prize-winning artist Jeremy Deller and the Williams Fairey Brass Band. The project was based ...

dConstruct 2008

September 2008

I attended dConstruct 2008 at the weekend. I was only there for the day of the conference, and didn't attend either of the parties, but I did enjoy it ...


September 2008

So I figured I'd get the old blog content back here. I have a couple of articles I'm planning on writing in the next few days.

December 2007

I'm currently using my T-Mobile 3G connection to do most of my web browsing, what with it being Christmas, and that I've been travelling around a lot without ...

Creating Xen DomU's, now with actual connectivity

November 2007

xen-tools is a useful connection of scripts. However, when you're creating a new Xen guest, don't forget to specify the correct gateway and netmask. Otherwise, you may end ...

Importing python modules, avoiding namespace clashes

October 2007

Python does dumb things when importing modules. The scenario; one local source file called 'calendar.py', and one Python module (part of the standard libraries), 'calendar'. If, within calendar.py ...


October 2007

I've been making some good progress recently on a few of my projects. We're in the final stages of getting Mampi Hosting ready for launch. We've bought ...

Reading List

September 2007

Rob and I were talking about our reading lists expanding into good business and marketing blogs the other day, and I mentioned a few but didn't really come up ...

Removing .svn folders recursively

September 2007

If you want to recursively delete all the Subversion folders from a working copy (for deployment or whatnot), this works well:

rm -rf `find . -type d -name .svn`