An experienced and highly technical solution architect and software engineer with a wide range of skills, specializing in the design of high-level tools such as compilers for domain-specific languages. Adept at building software for parallel and concurrent systems, and the use of prototypes to help companies de-risk future technologies. A background in research and lecturing, with project management and mentoring skills.
Technical Expertise
Many years of software development experience at all levels and in numerous languages and environments.
Programming language implementation | Lexers, parsers, type systems, compilers, runtimes, memory management, design & implementation of domain-specific languages and IDEs (e.g. using NetBeans Platform, Microsoft VMSDK, Eclipse Xtext), logics, natural language processing |
---|---|
Parallel and distributed systems | Development of tools, frameworks and languages to help users build parallel and distributed programs and systems |
Algorithms | From artificial intelligence to signal processing |
Prototyping | Building prototypes to help companies evaluate and de-risk adoption of new technologies |
Presenting | An experienced lecturer and report writer |
Skills
A representative, but not exhaustive, list...Languages
C#, Java, C++, Objective C, Vivado HLS, Matlab, Simulink, Python, SML, Haskell, Lisp, Prolog
Platforms
Visual Studio, NetBeans, Eclipse, WebStorm, XCode under Windows 7, OSX, Linux and IOS
Parallelism
OpenCL, CUDA, Thrust, Threading Building Blocks, TPP, TPL, MPI, Hadoop, EC2
Web
HTML, XML, CSS, JavaScript, TypeScript, jQuery, jQuery Mobile, Node, Express, Ruby/Rails
Database Technologies
Oracle, MySQL, JDO, EJB
Career History
Agilent Labs
Project Scientist 06/2000 - 10/2013
A member of Agilent’s central research labs and technical lead on a wide range of applied research projects to support the company’s R&D divisions. The primary purpose of such projects was to identify future trends and technologies that may be of use to the company, and the development of tools and prototypes to help de-risk their adoption by the product divisions. Whilst much of this work is still commercially sensitive, a few projects have been made externally visible, and the Sample Works section describes some of these. The main languages used for these projects were C#, Java and C++.
Quality Systems & Software (QSS)
Principal Architect 04/1999 - 06/2000
- Designed and prototyped a three-tier architecture for the company’s next generation of requirements management products.
- Designed and implemented a COM component to allow DOORS, a requirements tool, to be accessed and scripted from external applications.
Harlequin
Software Group Manager 01/1998 - 03/1999
Led a team developing Harlequin’s implementation of the SML programming language.- Responsible for the management of the team, including project scheduling and man-management.
- Acted as a software consultant and developer for the group.
- Collaborated on the design of a CORBA IDL binding for ML.
- Responsible for the product marketing and management of this software.
Senior Software Engineer 07/1996 - 12/1997
Part of a team developing a compiler and IDE for Dylan, a dynamic object-oriented language.- Developed a flow-based typist for the compiler.
- Designed and built a colouring editor to provide feedback on compiler dispatching optimisations.
- Developed the condition handling code for the Dylan compiler.
- Rewrote the run-time code to improve efficiency and support threads.
The University of Edinburgh
Lecturer 08/1986 - 06/1996
- Developed and delivered courses for undergraduates and postgraduates on a range of topics, including
- Programming in Pascal, C, C++ and ML
- Algorithms and data structures
- Compiling techniques
- Program specification languages
- Concurrency and protocol verification
- Programming language semantics
- Presented courses to Industry on a number of topics including formal specification languages, concurrency theory and functional programming.
- Served on the teaching and syllabus committees, advising on course structure and contents.
- Co-ordinated the Department’s highly successful submission to the University Funding Council’s 1992 Research Assessment Exercise.
- Served as a Director of Studies advising students on both academic and personal matters.
- Seconded by the International Office to represent the University in overseas recruitment exhibitions.
- Managed a series of SERC grants developing a distributed implementation of ML.
- Supervised numerous undergraduate, postgraduate and group projects.
Research Associate 10/1983 - 08/1986
- Team leader of a group developing the first compiler for the Standard ML programming language.
- Developed software and theory to support CCS, a specification language for concurrent systems.
Scicon
Software Engineer 01/1976 - 10/1976 & 06/1979 - 10/1979
- Seconded to EuroControl, Brussels, to work on an experimental air traffic control system.
- Developed code for a simulation of the IKARA anti-submarine missile for the MoD.
Education
The University of Edinburgh1979 - 1983
PhD in Computer Science.
Doctoral advisor: Robin Milner.
The thesis analysed some of the theoretical and implementation difficulties associated with various
message passing primitives in concurrent programming languages.
Imperial College London 1976 - 1979
BSc(Eng) in Computer Science.
First class honours.
The final year project involved the development of an operating system kernel in Prolog.
Sample Works
S#
S# is a domain-specific language allowing fine-grained streaming algorithms, for example those found in digital signal processing applications, to be embedded within a C# program.- Designed and implemented the language.
- Used decompilation techniques to guarantee safety and produce high-quality executable code.
- In addition to compiling to parallel x86 code the system can also generate code suitable for running on an FPGA, with >500x speedup compared to the multicore implementation in some examples.
- Produced a wide range of examples, including traditional DSP algorithms, and a short-read gene sequence matching example.
- Here is a paper describing this work with some preliminary results for the FPGA backend.
The Agilent Protocol Encoder (APE)
The APE was a domain-specific language for specifying bit-level protocols.- Designed and implemented the language, a development environment, and debugger.
- One novel feature was the use of action-directed decoding. This allowed multiple decoders, with differing performance, to be generated from the same specification depending on the actions attached to the specification.
- Used a dependent-type system, and multi-method dispatching, to capture relationships such as the value of one field and the structure of another.
- Here is a report describing the design of the APE, and its implementation.
Weasel
In my own time I have been working on an open-source project for remotely interacting with SCPI-based instruments using off-the-shelf web technology including Node.js, Web Sockets, XMPP and jQuery Mobile.
I've also been experimenting with generating OpenCL kernels using decompilation techniques.
Awards and Accomplishments
Whilst at Agilent I've received more than twenty invention disclosure awards, patent applications and patents, including- Method of Decoding A Bit Sequence, Network Element Apparatus And PDU Specification Tool Kit (US2008256337, 2008)
- Historical data management (US2008208888, 2008)
- Method of optimizing routing of demands in a network (CN101035069, 2007)
- Location determination system and method of location determination (EP1887313, 2008)
- Data packet decoding (US2007013563, 2007)
- Generation of data packet decoding instructions (GB2438455, 2007)
- Monitoring traffic in a packet switched network (EP1643683, 2006)
- Modifying an aggregate test in a network probe (GB2419255, 2006)
- Method of generating a monitoring datagram (CN1710888, 2005)
- Transmission of data about the use of spectrum according to the geographical position (CN1665333, 2005)
- Method of translating computer program code, communications system and network management entity therefor (EP1548588, 2005)
- Monitoring communications networks (US2003043755, 2003)
Speaker at the last two Agilent Technology Conferences. This conference occurs once every three years and showcases the best of technology and research being developed within the company.
Industrial member of the European Network of Excellence on High Performance and Embedded Architecture and Compilation (HiPEAC)
Part of the team that won the BCS Award for Technical Excellence for work on Standard ML.
Interests
- Boats, both sailing and building
- Hillwalking
- House renovation