John Lawrence Aspden

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've been fascinated by computers since I was a child. In my spare time I
program for fun.

When it first came out, I was really interested in the new language
Clojure, and started putting programs I found instructive on a blog: http://www.learningclojure.com. Slightly to my amazement, this used to get about 25,000 readers every month, and made me a name in the community.

I've twice been one of the 'language gurus' for the dev8d academic developer's conference in London, and I regularly give lectures on computer science to bright teenagers at Villiers Park (http://www.villierspark.org.uk)

Currently I'm interested in Artificial Intelligence issues, existential risk, 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!

Personal Recommendations

"John recoded some of our research algorithms for brain imaging almost a decade ago that are still in use today. Without doubt, outstanding value for money." -- Professor John Suckling, Brain Mapping Unit, University of Cambridge

"I've had the good fortune to work with some very gifted people over the years and he is certainly one, a fine mind." -- Tony Purnell, Head of Technical Research, British Cycling

"Very passionate and very knowledgeable" -- Anonymous student feedback from one of my courses at Villiers Park

Commercial Contracts

2018 Knowledge Leaps Disruption INC

machine learning, R, gradient boosting, Python, xgboost

Engaged to explain and then implement the gradient boosting algorithm, I taught them how it worked, wrote several demonstration programs, and instead showed them how to use a perfect existing open-source library which did everything they needed much better than I could ever have hoped to do. A couple of weeks' work that will have saved them hundreds of thousands of dollars by now.

I designed, implemented, tested and debugged a line-rate packet timestamp reconstruction module for a new Cisco switch, the mathematics of which turned out to have many weird subtleties, as part of the SolarCapture network traffic capturing application. I also wrote a custom packet dissector for wireshark.

Investigated a new silicon implementation of the Precision Timing Protocol, which turned out to be broken and bug-ridden. I fixed it. At one point I found a subtle bug in all the computers in the world, and sent Synopsys a patch, which after much discussion was accepted verbatim, and should be somewhere in your computer today.

Initially hired to investigate the possibility of using vendor-defined PCI messages to allow network cards to communicate with other PCIe devices in servers. Ended up proving beyond doubt that it couldn't be made to work, hunting down the various problems, and fixing in silicon the ones that were under our control. All is now well.

I advised Kemuri on various aspects of their web server and database, and wrote some code for them to use as a basis for further work, including writing a library to communicate securely with their online accounting package, Quickbooks.

2015 Knowledge Transmission

Clojure, webserver, rapid prototyping

Knowledge Transmission urgently needed a small gui to allow teachers worldwide to enter exercises, and their development team had quoted them six months. I made them a prototype in three days, and spent a couple of weeks hacking it around until they liked it. They seemed happy.

2015 hobby project

Clojure, webserver, heroku

I had an idea for an intelligence test that aimed to
'benchmark the brain', while correcting several obvious defects with standard IQ tests. It seemed to work very well for measuring abstract thinking ability. It's at iqtest.aspden.com.

Please forgive it if it takes a few seconds to spin up. It goes to sleep when no-one is looking at it.

2014-2015 Engineering Department, University of Cambridge / English Institute of Sport

MATLAB, Octave, Python, Physical/Mathematical Modelling

I helped the Engineering Department to 'turn the Manchester Velodrome into a Wind Tunnel', creating a physics model and an associated program to interpret live telemetry from races and training sessions. British Cycling's startlingly good and somewhat unexpected performance at the Rio Olympics was directly enabled by this work.

2013-2014 University of Cambridge (Guest Lecturer)

maxima, MATLAB, Octave, teaching, public speaking.

I taught the course "Mathematics for Natural Sciences" as a long series of seminars for the department of Computer Science and the department of Psychology. My group of students did extremely well, and I got personal thank-you letters from around half of them.

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.

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 a system 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.

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.

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.

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.

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.

Education

All courses offered by Stanford, except for Model Thinking and Music Theory from the University of Michigan, and Mythology from the University of Pennsylvania

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.