Public projects

I use Git in my personal development, but I rarely use public repositories on my GitHub account. I support open source development but most of my historic projects are not really of public interest.

Source code for my OpenCL based simulator of a large-scale neuronal network, with synaptic plasticity, is available in a zip file. I can be persuade to open up a git repository, with much more up-to-date code and without the comments removed, upon request. There is a scientific paper which demonstrates the most basic functionality of this code, available via open access, at PLoS Computational Biology. I should point out that this code is far faster than comparable MPI based approaches (try it and find out!).

My main contribution to software and science before my PhD was in Sports Science.

To avoid an orphan page, on my aging website, here are some search plugins which I previously wrote for Firefox.

History and Ongoing Projects

I have been involved in programming computers since I was a child. My first computer was an Acorn which was a copy of the BBC micro computer. Beginning with BASIC, I progressed through HTML, and Linux scripting to C by the time I was in my early teens. I'm lucky enough to have had internet (not web) access since the late 1980's, and was either too young or too naive to have made money from it.

From my memory, I've used Linux on and off since 1993 and I learned Java some time around 1996. In recent years I have had access to high-performance clusters and have enjoyed using OpenCL to develop high-performance numerical simulations which can be retargetted to run on any system.

Since moving to Berlin in late 2014, I have become an active Julia user and began and continue to organise the Berlin Julia Users Group. Julia is a language which strongly resembles both Python and Matlab at the text level, but which is compiled using llvm and which contains numerical types as native (python doesn't, which does not make it a bad language but it does make its use by numerical scientists highly suspect), and is focused on high speed numerical computing.

I teach a course on Advanced Scientific Programming at TU Berlin. The format of the course (originally conceived by Tiziano Zito) begins with an intensive week on basic software carpentry skills, using Python as the base language, culminating in the submission of a pull request to a major collaborative scientific project (eg. Numpy). The semester then continues with a long term group project, which the students must project manage themselves, in order to produce a product which has some scientific value. I lead them through the project section using techniques from Agile development, meaning that the final product may be quite different from what we define initially.

In 2016, we produced a query engine with handwritten database backend (I apologise to the students, I lied for pedagogic reasons when I said that an SQL database would not work) which could report on actual meteorological records going back through 150 years in Germany and also on meteorological website-based predictions scraped throughout the duration of the semester. As an example of the Agile nature of the product development, one aspect of the final product was a connection with Wit.ai via a Slack interface to produce natural language querying of our engine. A repository of the code from the project is available on GitHub.

In 2017, I was interested in asking the class to produce a modelling engine similar to that used by 538 in order to predict the outcome of the German federal elections. The experience was quite different from the previous year, due to the level of the students when they began the course, but they did succeed in producing a generic modelling system. And to my delight, they also got it running in a Docker container on Amazon AWS, providing daily updated predictions in the run-up to the elections. I am currently writing a more detailed description of the project here.