John Lawrence Aspden

Contract Programmer (Verilog, Assembler, Embedded C, Java, Python, R, OCaml, Lisp, Clojure)
Cambridge, England

phone: (+44) 794 315 5029

I'm a contractor / consultant programmer living and working in Cambridge, UK. I like challenges.

I'm good at understanding and solving difficult problems. Having solved them I'm good at explaining the answers.

I've programmed commercially in many languages, from assembler on the bare metal to LISP on the JVM. I can see computer programs in terms of high level abstractions and in terms of nanosecond by nanosecond machine instructions shuffling bits. I can work at various levels of abstraction, and I can translate fluently between levels.

I'm talkative, literate, lucid and friendly. I'm a good communicator and I write programs that are intended to be read by others.

I have a degree in mathematics from King's College Cambridge. I'm very interested in Machine Learning techniques (especially from a Bayesian perspective).

I've been fascinated by computers since I was a child. In my spare time I program for fun. Recently I've been interested in the new language Clojure, which I've been blogging about here: Slightly to my amazement, this seems to get about 25,000 readers every month.

I've twice been one of the 'language gurus' for the dev8d academic developer's conference in London.

Currently I'm interested in Artificial Intelligence issues, and the subfield of statistics and computer science known variously as Machine Learning, Data Mining, and Big Data.

I run my own limited company (J.L. Aspden Ltd) and can be hired through it. Please get in touch if you have something difficult to do!

My favourite computer books are: The C Programming Language, Structure and Interpretation of Computer Programs, Structured Analysis and System Specification, The C++ Programming Language, The Mythical Man-month, Peopleware, The Practical Guide to Structured Systems Design, Dive into Python and the 1979 TRS80 Basic manual. For Machine Learning I also love Information Theory, Inference and Learning Algorithms, and my current bedtime reading is Machine Learning: a Probabilistic Perspective

My latest hobby project is an intelligence test which aims to 'benchmark the brain': It's written in clojure, and lives on heroku. It's at Please forgive it if it takes a few seconds to spin up. It goes to sleep when no-one is looking at it.

Commercial Contracts

2011-2012 Solarflare Communications

embedded C, encryption, IPSEC, verilog, system verilog, verdi

I wrote software to control the Authentec EIP-190 encryption core in Solarflare's latest very-high-speed networking silicon. I also ended up diving into the chip design itself to correct problems with the way that the core had been wired into the chip, invented a new way of getting the chip simulation to sanity check its internals in minutes rather than weeks, and redesigned the scheduling algorithm in a way that speeded up the simulations without impacting on the real performance.

2010 Cambridge Temperature Concepts
Clojure, R, data mining, graphical report generation

I wrote a script to generate odf documents, with graphs, from statistical input. I also allowed the two halves of the company to continue using their favourite tools by making a data mining tool to find inconsistencies between a CRM database and an ad-hoc hand-maintained Excel spreadsheet.

2010 Chemistry Department, University of Cambridge
Clojure, Java, Maven, DVCS, Mercurial, Git

I acted as consultant for a team using Clojure as a language to glue together their vast amount of legacy Java code.

I advised on setting up and using the language, and on functional programming and modern DVCS, and particularly on the design of the Lensfield project, and I wrote a library for finding files and transforming filenames according to simple user-specifiable patterns.

I prepared and gave some talks on the language for the dev8d academic developer's conference in London.

2007-2008 Xensource
Python, OCaml, R, Java, PLT scheme, lisp, C#, bash, expect, make
Xen API,metaprogramming, code generation, mercurial, XMLRPC, UNIX (daemons, .rpm and .deb packaging, networking, nagios, mail), text UIs (curses, newt & snack), apt, yum
I made Java bindings to the Xen API, automatically generating them from the XenServer OCaml code.

I wrote examples of how to use the bindings, which I re-used as automatic regression tests. Once I'd done this I wrote corresponding examples for Python, and made them into a tutorial introduction to the Xen API.

I wrote various little Python scripts to do useful things for a VM farm, including a pool monitoring plugin for nagios, and daemons to monitor hosts, and if necessary to restart them as gently as possible. I packaged these daemons for Debian and Red Hat Linux together with a curses based configuration UI.

2007 Brain Mapping Unit, University of Cambridge R, littler, small world network analysis, wavelets, HTML generation
I wrote asystem of interoperating programs to take brain scanner data, perform small-world analysis and wavelet transforms, and produce web sites detailing the processed data with pretty pictures. As part of this I wrote an option parsing library for R.

2006 Brain Mapping Unit, University of Cambridge Python, C, SWIG, Signal Processing (wavelets, Hurst exponent), MATLAB, Octave
I wrote software to calculate various statistics on the output of a brain scanner.
The prototyping and tests were in python for speed of development, and then I translated the core of the main program into a C library, using SWIG to keep the original unit test framework and aid the correctness of the translation.
2005 Sepura
( 3 separate contracts )
Embedded C, Python, Visual C++, make, Subversion, CVS, Frontpage, Windows Comms, Unicode, CJK fonts, LGPL
I solved some mysterious bugs in a project to split DSP code across several code pages, and then automated the build process and dependency generation. I debugged, modified and version controlled a browser-based error tracking/change control system. I converted an ancient program to use Windows Comms and work with Chinese, Korean and Japanese scripts.
2004 Alphamosaic Embedded C, Assembler, SIMD/Vector Processor, VideoCore, WMV9, Video Codecs

I ported the Microsoft WMV9 Codec to run on 'VideoCore', an embedded parallel graphics chip that eventually found its way into the video iPod.

2003 Sepura Embedded C, Assembler, AVR, Mega128, Codevision, High Speed Serial Comms, Device Drivers, Delphi
I wrote the software for an AVR chip embedded in a dashboard mounted police radio console, as well as a PC test harness in Delphi. Part of this involved writing a 900kb serial link protocol to work over a 10 metre cable in conditions of heavy interference (lots of fun with oscilloscopes!). This software is currently in most British police cars, as well as in many other countries, and no bugs have ever been found.
2001 Simoco Digital Systems
( 2 separate contracts )
ClearCase, HTML, UI Design, Toolbook Instructor

I was engaged to implement a new user interface for a portable radio used by the emergency services. Intuiting from the design documents that the new interface might be worse than the old, I wrote a PC simulation first, so that marketing could work out whether they really wanted it. The project was cancelled, saving the company approximately £20,000,000, partly at my own expense.

In an unconnected second contract I evaluated the ClearCase version control system, recommended against it, was overruled, wrote recommendations for its use, wrote an html tutorial and gave some training.
2000 European Telecom/ET Voice Java, Swing, MATLAB, Mathematica, Speech Recognition Research, TESPAR

I ran a small research project into embedded speech recognition using TESPAR, a newly discovered signal processing technique.

1999 Advantra Delphi, UI Design
I designed and wrote a GUI application to test and configure pagers in shops.
1999 CLMP Software Research Java, Solaris
I wrote a library of graphical java objects to display financial time series data in a project for Salomon Brothers.
1998 Green Cathedral C++, HTML, Linux
I wrote a program to translate very large web server log files into readable html statistics and graphs.
1997-98 Philips Paging Keil C and Assembler for 8051, Structured Analysis & Design, Protocols, Tight Time and Space Constraints
I helped design the software architecture for a pager. I implemented the store manager component (A tiny filesystem which was considered for patent.), and then shrank it from 6k to 2k of compiled code. In my own time I wrote a memory map and stack analyzer for the Keil C compiler which saved the project.

[It shortened the software development time by several months by directing our optimization efforts, and allowed us to use the CPU we'd originally planned to use, avoiding prohibitively expensive redesign and re-tooling. When I'd originally suggested it, it had been vetoed as impossibly speculative and difficult, so I wrote it as a hobby project and then sold it to the company for the time-only cost.]

I'm told they made millions of copies of my store manager code, and never found a single bug.
1996-97 Philips Telecom
Borland C, Serial and Wireless Comms, ClearCase
I maintained and extended a vast, undocumented C program. I introduced automated regression testing and version control.
1989-96 King's College Cambridge dBase IV

I designed and implemented databases for the college hardship fund, teaching activity (including my own) and admissions as three separate fixed price contracts over six years, while I was still a student.They were in constant use for something like fifteen years, until the University centralized its accounts.


2013 CourseraProbabilistic Graphical Models, Algorithm Design, Model Thinking
1992-96 Imperial College London Finite Element Analysis, Financial Analysis, C, Fortran

I investigated computer solution of non-linear diffusion problems in Fluid Mechanics and Financial Analysis, using Functional Analysis and the Finite Element method. I taught mathematics and Fortran in London and microeconomics in Cambridge.

1988-91 King's College Cambridge
Degree in Pure and Applied Mathematics (2:1)
1981-86 Abbeydale Grange School 8 O Levels, 5 A Levels (AAAAB), 3 S Levels Maths(1) Physics (1) Further Maths(1). The usual stuff with TRS80s, ZX81s, Spectrums, BBCs and Amstrad 1640s.