Charles Keepax CV

Atom Feed

Profile

I have been programming professionally for over 10 years now, the majority of which has been development of embedded systems in C and C++. I have worked extensively with the Linux kernel and have numerous upstream contributions. Obviously, I am no stranger to assembly language and being in the embedded world I have picked up a fair amount of rudimentary electronics skills and consider myself quite handy with a soldering iron or an oscilloscope. Much of the work I have done has involved fairly intensive signal processing, from designing complex digital filters through to full control system design.

I enjoy working at the boundry of hardware and software and especially value the opportunity to make upstream contributions as part of my job.

Employment History

Cirrus Logic Inc., Edinburgh, Scotland

Senior Software Engineer
August 2014 - Present

Cirrus Logic acquired Wolfson in August 2014. My role continues to be the development and maintenance of Linux kernel drivers for their mixed signal electronics.

Wolfson Microelectronic Limited, Edinburgh, Scotland

Senior Software Engineer
March 2014 - August 2014

Software Engineer II
September 2012 - March 2014

My work at Wolfson Microelectronics is primarily focused on the development of Linux kernel drivers to support Wolfson's market leading audio CODECs and DSPs, as well as supporting the integration engineers. Naturally, I have accumulated numerous upstream kernel contributions as part of this work. Additionally, I have had some exposure to the Android end of the audio stack.

Wolfson has an excellent focus on research and development, taking maintaining its position as a major innovator in the audio space very seriously.

Reactec Limited, Edinburgh, Scotland

Lead Software Engineer
February 2007 - September 2012

As a result of our consultancy work Reactec envisioned a new product, the HAVmeter. The HAVmeter is a health and safety focused small vibration exposure monitor and has since become the main focus of the company's activities. I produced all the firmware and DSP algorithms for the system, assisted on the electronics design and managed the outsourced development of the PC software that accompanies the product. It has been especially rewarding to see an idea all the way through from the back of a napkin to a market leading product.

Software Engineer
September 2003 - February 2007

I joined Reactec as the programmer on the Intelligent Control Unit project. The ICU was a small, low cost, low power, adaptive controller for the magnetorheological damper Reactec had developed. In addition to writing the firmware and some PC based configuration software, I was heavily involved in the design and simulation of the control algorithms. I thoroughly enjoyed learning about control theory and attempting to model the non-linearity of the magnetorheological fluid.

For a short while after the completion of the ICU I worked primarily on engineering consultancy projects at Reactec, putting the vibration and control theory I had learned into practice. This involved solving complex vibration problems for numerous blue-chip clients.

University of Edinburgh, Edinburgh, Scotland

Research Assistant
June 2003 - July 2003

My work at the university continued on from my final year dissertation, which centred on an analysis of the Micronet-based Asynchronous Processor architecture. I made some additional improvements to the COMPASS design environment myself and the other researchers had been using; COMPASS was a compiler and simulator for the Micronet, written in C++. Then, in cooperation with my supervisor, published a paper based on a subset of the results of my dissertation.

Kvaerner Professional Services Limited, Aberdeen, Scotland

Software Engineer
July 1999 - October 1999

My responsibilities during my summer job at Kvaerner were to analyse functions from specific SMACKS5 (an oil-field control system) projects and create a standard library based on commonality between the user interface components. The library I created eliminated the need for a lot of bespoke code that was being created on a project by project basis.

Having programmed exclusively in imperative programming languages until Kvaerner I particularly enjoyed learning the unusal, heavily dataflow based language they used. I recently happened upon ANI, which is incredibily similar, albeit with rather different syntax.

Education

University of Edinburgh, Edinburgh, Scotland

First Class, BSc(Hon) Computer Science and Artificial Intelligence
October 1999 - May 2003

  1. Graduated Top of class
  2. Class Representative

Publications

Wind Turbine Support Tower with Pendulum-Damping Means
August 2008

Patent, Buckingham, Keepax et al.

Monitoring Apparatus and Method
December 2006

Patent, Buckingham, Keepax et al.

Vibration Control System
August 2004

Patent, Buckingham, Keepax et al.

Limits on ILP in Micronet-based Architectures
July 2003

Proceedings of 14th Asynchronous Forum, D.K. Arvind and C. Keepax

Technologies

  1. C++ — Very Experienced, completed several large projects using it.
  2. C — Very Experienced, completed several large projects using it.
  3. Assembly Language — Very experienced, since I have done a fair bit of embedded work I have spent plenty of time using various flavours of assembly language.
  4. Java — Experienced, used it heavily at university and have completed several small projects with it since.
  5. Go — Proficient, completed a few small hobby projects using it.
  6. PHP — Proficient, completed a few small hobby projects using it.
  7. Perl — Proficient, I use it fairly regularly for processing text files.
  1. HTML/CSS — Proficient, have completed a few small hobby projects using it.
  2. SQL — Basic, I am familiar with the basic concepts, but have only used it very lightly.
  3. Matlab — Very Experienced, used it fairly regularly for numerical modelling and simulation.
  4. Latex — Proficient, used it quite a few times but would hardly call myself a power user.
  1. Linux Driver Development — Experienced, significant work completed developing and maintain audio drivers in the Linux kernel.
  2. Google Web Toolkit — Proficient, developed a small AJAX web application using GWT.
  3. Microsoft Foundation Classes — Basic, developed a couple of small Windows application in C++ using MFC.

References

Available on request.