Test Group Leader, 2014 - present
I support the development of machine vision algorithms for automotive surround view systems.
My main focus is to build confidence across the business unit and to accelerate algorithm development by providing highly-automated test systems to the algorithm and software development teams.
These systems are intended to provide continuous visibility of development progress and system performance to stakeholders across the organisation; and to provide continuous integration, continuous testing, classifier training, and algorithm parameter tuning functionality to the research and development teams.
This responsibility extends to the collection, storage, analysis and exploitation of extremely large quantities of representative video data, gathered across a wide variety of environmental conditions; vehicle dynamics; platform and scene geometries, as well as the support of a range of "real-world" testing and performance evaluation activities.
Research Engineer, 2013 - 2014
I work on machine vision systems for advanced driver assistance and automated driving products; splitting my time between work on collision warning related algorithms and our cross-platform automated build & test systems.
My machine vision software is written in C++ and MATLAB. My build-system is written in Python; Bash and CMake. Our version control and configuration management is done with Git. Continuous integration and code review are implemented using Jenkins and Gerritt. I use GCC; CppCheck; CCCC & PC-Lint for static analysis; Valgrind; GDB & DDD for debugging & profiling.
As with most of my past roles, I wear the software engineering hat in a multidisciplinary research team, providing help and support with issues involving Git, GCC, profiling & static analysis.
Senior Data Engineer, 2011 - 2013
I developed ESM's Data Science Systems, bridging the gap between ESM's academic advisers and the engineering team. I turned prototype data science concepts (MATLAB) into working products, implemented statistical and graph processing algorithms and scaled the data science systems to handle > 1 billion requests per day. I implemented data cleaning, monitoring and reporting tools. I also supported the development of ESM core production systems. It was a hands-on role, with most development done in Python, occasionally pitching in to support C++ and PHP development where required. Most of our data science systems sit on top of Linux/QPID/MongoDB/Python infrastructure.
Foreign & Commonwealth Office
IT Support Officer, 2011 - 2011
In this temporary role, I provided first line technical support to approximately 150 users.
Quantitative Developer, 2010 - 2011
In this role, I provided MATLAB expertise to the “Equity Applied Research” (Quant.) team; promoting software development best practice through periodic “brown bag” sessions; writing MATLAB libraries for data handling & cleaning, statistics, distributed computing, graphing, report generation, testing, deployment, logging & fault reporting.
I managed the team's production environment, as well as the development automation tool-chain, from source & configuration management through continuous integration, test & deployment automation. I implemented stock screens and charts; data quality screens and exception reports. I worked closely with quantitative analysts and gained a reputation for code quality, reliability and trustworthiness.
Algorithms Engineer, 2007 - 2010
In this role, I acted as a technical lead in a technical demonstrator programme: researching, proposing, securing funding for and implementing original machine vision (IRST) and image enhancement algorithms.
I built relationships with experts from the customer community, obtained feedback and gathered requirements, carried out data analysis, proposed, designed & implemented original target detection, tracking, classification and image enhancement algorithms, whilst effecting change in the development process, successfully introducing iterative development, continuous integration and testing/performance evaluation using large scale video libraries.
I gained an excellent reputation for enthusiastic engagement with problems, for effecting organisational change to improve our development processes, and for a pragmatic approach: identifying conceptually simple and computationally feasible algorithms, and driving development to get the job done.
I implemented algorithms in MATLAB, Simulink, C and C++, using my software engineering background to understand how C code generated from Simulink models performed on an embedded target, advising on algorithm ease of implementation and performance issues, and prioritising algorithm development based on a solid understanding of the problem domain.
Whilst in this role, I gained experience designing and implementing novel signal processing; target detection; tracking; image enhancement; navigation and machine vision algorithms. I also designed & implemented automated test & performance measurement systems, video ground-truth mark-up & ROI selection tools. I also consistently achieved the highest possible rating in all performance reviews undertaken.
Software Engineer, 2006 - 2007
In this role, I worked on Sophos Anti-Virus 7 Windows client program as part of a large development team. I carried out low-level development work on run-time code modification and analysis functionality as well as higher level work on configuration, upgrading & messaging systems, including the development of multi-threaded OO C++ code. Working in a large team on a complex and evolving software system, I gained experience using test-driven development & continuous integration techniques, carrying out code reviews & pair programming, writing unit tests & build scripts.
Consultant Machine Vision Engineer, 2006 - 2006
In this role, I productised a prototype iris recognition system, developing iris image extraction and image quality estimation algorithms. I worked closely with researchers and the customer to reimplement MATLAB prototypes in C, proposing novel alternative algorithms where required to meet run-time performance and robustness guarantees.
I gained experience developing image processing algorithms, translating complex mathematical and statistical concepts into code, writing optimisation & signal processing algorithms; developing embedded image processing code and developing portable embedded C code.
Cambridge Research Systems Ltd
Staff Scientist, 2003 - 2005
In this role, I developed a large MATLAB toolbox for Visual Stimulus Generation, experimental control, data calibration, collection and analysis. I built relationships with members of the customer community, providing demonstration code, advice, training and technical support for a range of visual stimulators, eye-trackers and assorted related scientific products. I developed data capture, analysis and visualisation applications in MATLAB, C and Java, as well as a CRT saccade contingent display, as part of a PhD researching adaptive control of saccades.
I built up an understanding of the practicalities of experimental control and measurement in vision science, psychophysics and neuroscience; excellent MATLAB programming skills, an understanding of filtering, noise control, artefact detection and removal.