Employment History
2023-present - Good Growth
Head of Development at Good Growth, a data and technology business. Continuing the work started at Amigo, combined with Good Growth's data expertise.
2015-22 - Amigo
Head of Development at Amigo, a software start-up powering changes on sites such as Hertz, and Virgin Media-O2. Role included everything from database design, becoming a Google Cloud Tech partner, to algorithm design and scaling, to DevOps, to team management. Merged with Good Growth.
2013-15 - Apical (now part of ARM)
Senior Software Developer / Project Lead at Apical Ltd, a company specializing in advanced image processing. During low-level ASIC software, algorithms, leading and managing teams, advanced tooling, to high-level tech demos integrating multiple backend systems. Now acquired by ARM.
2010-13 - PostDoc
Recipient of a research fellowship from the Royal Commission for the Exhibition of 1851 - 'Automated key generation in texture coding' - Lay Statement [pdf]
2007-10 - PhD
2004-07 - Degree
First-class BEng in Mathematics and Electronic Engineering from the University of Nottingham in 2007 (final-year average 95.3% )
Skills
Personal Skills
Management
In my current job I lead a team that works on both R&D as well as ensuring timely deliverables to customers. As well as managing individuals and reporting to the board.
Working in a team
I have worked on projects on my own and as part of a team, and I definitely enjoy the later. I am personable, friendly and have on many occasions seen that talking through ideas in a group leads to better end results.
Communication
I have given a variety of presentations to a wide range of audiences, a number of which involved speaking about technical subjects with a non-technical audience.
Programming
Javascript/Node.js
I have built several large javascript applications and node.js is my default scripting language. Projects have ranged from a ray-optics demonstration, to image encoding and numerous GUI control systems for different projects.
C/C++
C has been my main high-performance languages for the last 10 years, I have experience using the GNU debugger, optimizing code, and using numerical libraries such as the GNU software library
Go
I have used Go for a number of years in production environments, and enjoy it's balance and its natural push to think about and code for the erroring paths.
Python
Python used to be my main language and I still think highly of it. It's great for getting out of the way and letting you think about what you actually want to achieve.
Databases
Knowledge of SQL language including database design, UML, recursion, as well as some NoSQL solutions and where they might be appropriate. The main databases engines I have experience with are PostgreSQL, Redis and Cassandra, although I have also worked with map/reduce systems such as CouchDB.
Haskell
Haskell is a recent addition to this cv, however in grappling with some of its fundamental concepts it has altered the way I approach some code problems, for example chaining of map/bind/reduce, the advantages of immutable data and seeing monads everywhere.
Others
Other languages I have had experience with: Java, C#, Perl, Fortran, PHP and Bash script.
OSes
I have experience programing in all three major OS's: Linux (10+ years), Mac (4 years) and Windows (10+ years). Both my work and home computers run linux as their primary OS. I have set up several LAMP and node.js (on linux and mac) servers and am competent at both the terminal and shell scripting.
High Performance Computing
CUDA
I have created and deployed large scale genetic algorithm computations on GPUs through the CUDA environment. This involved consideration of architecture and utilising different memory types to achieve a 308x speed-up over a comparable CPU solution.
Monte-Carlo Simulations
My largest Monte-Carlo simulation to date was in calculating the statistics of light in a media due to roughness at its surface, which was investigated using the university of Nottingham's high performance computing (hpc) clusters. As well as running the several million individual processes, the results had to be collated, transferred, analysed and visualized.
Large data sets
I have worked on a number of larger data projects, both in absolute size of data and incoming data rates. A recent project involved the collect of large amounts of continuous streaming data, which was then pre-processed and stored in an append-only amenable manner. Visualizing results from large data sets has been a particularly interesting challenge.
Mathematics
Mathematica
Mathematica was, for a number of years, my day-to-day programming environment. I have wide ranging experience with Mathematica, including image processing, prototyping code, multi-core deployment, data visualisation and data-mining
Matlab
Experience with Matlab centers around multi-dimensional-scaling, the problem of determining a collection of objects' positions when given only the distances between them
Publication history
Enhanced twinkling in left-handed media , Optics Letters, Vol. 35, Issue 22, pp. 3802-3804
Perfect lens with not so perfect boundaries , Optics Letters, vol. 34, Issue 7, pp. 1015-1017
Negative refraction and rough surfaces: A new regime for lensing , Optics Communications, Volume 283, Issue 6, 15 March 2010, pp. 1188-1191
Direct Computation of Statistical Variations in Electromagnetic Problems , Transactions on Electromagnetic Compatibility, vol. 50, Issue 2, pp. 325-332 (which came second in the IEEE EMC Best Paper Awards)
Between right- and left-hand media , Optics Communications, vol. 282, Issue 5, pp. 1020-1027
Power-law-distributed level crossings define fractal behavior , Physical Review E, vol. 76, Issue 3, id. 031134