Productive, results-focussed algorithms engineer and quantitative developer combining a strong software engineering background with a keen interest in image processing and statistical pattern recognition. Experience developing a range of machine vision and image processing applications, as well as “Big Data” analytics for the online advertising industry and quantitative models for the financial industry. I have experience working with very large datasets (Up to 1PB), as well as high-throughput “real-time” streaming data processing systems (>1BN messages per day). I have a reputation for producing high quality code, and for delivering simple, effective solutions. My my most recent development experience is with C, C++, MATLAB, Python, Bash and CMake. I have also used SQL, Java, Prolog in the past: Languages:
Tools:
February 2013 - Present - Continental Group - Research EngineerI 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.
November 2011 - January 2013 - EveryScreen Media - Sr. Data Engineer I worked on ESM Data Science Systems, connecting the data science team with the engineering team; turning prototype data science concepts (MATLAB) into working products, implementing statistical and graph processing algorithms, scaling our data science systems to handle > 1 billion requests per day, and implementing data cleaning, monitoring and reporting tools. I also have an occasional role supporting the development of ESM core production systems. It is 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.
August 2011 – October 2011 – British Consulate General, New York – IT Support Officer. In this temporary role, I provided first line technical support to approximately 150 users. May 2010 – June 2011 - Fidelity International Limited (FIL) - Quantitative Developer. 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.
May 2007 – May 2010 - Thales Optronics (UK) Plc - Algorithms Engineer. 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.
May 2006 – May 2007 - SOPHOS Plc. - Software Engineer. 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.
Jan 2006 – May 2006 - SmartSensors Ltd - Consultant Machine Vision Engineer. 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. Nov 2003 – Nov 2005 - Cambridge Research Systems Ltd. - Staff Scientist. 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.
September 2002 – January 2003 – GMPTE. - Project Management Assistant. I provided project management and administrative support for the Manchester public transport real-time passenger information project, acting as the point of contact in Manchester between GMPTE, the project management team and the prime contractor. May 2002 – August 2003 – M2002 Commonwealth Games. - Project Management Assistant. I provided administrative support to the security team, liaising with security contractors and venue security managers, using Excel to track security requirements and expenditures, to reconcile invoices with time-sheets & contractual records. Training
09/1999 – 06/2003 – Manchester University – Bsc(Hons) Artificial Intelligence. My final year project was a texture classification machine vision project, (segmenting out bundles of nerves in light microscopy sections of blowfly ganglia), utilising direction and spatial frequency sensitive filters, and a Bayesian classifier to inform the image segmentation algorithm. The Software was written in Java; designed and implemented using Object-Oriented techniques and methodology. I came top of my year (1:1) in my second year, and also scored highly (1:1) in my final year January exams. Informal Details. I work hard, and have been highly regarded at all of my previous positions. I spend most of my time working with high-level, high-productivity languages developing data-handling and statistical data-analysis algorithms, but I have a software-engineering “head”; like to know how things work "under the hood"; and produce nice, readable, pedagogically well-motivated "code". Since I have worked mainly on data analysis software of one sort or another, I have most experience writing in a somewhat functional, declarative manner, with lots of side-effect free functions, coroutines, etc... I have sufficiently good communications skills that I have often found myself "bridging the gap" between domain specialists and other (normally software) engineering disciplines. I enjoy making simple systems that solve complex problems. |