Aug 2001 -- present
Massachusetts Institute of Technology -- PhD candidate
I joined the Program Analysis Group (in the Laboratory of Computer
Science) in the fall of 2001, to pursue research into algorithms,
techniques and tools with the aim of aiding programmers in the
tasks of software design, maintenance, understanding,
documentation, and debugging.
Fall 2001: Designed and implemented an extension to the
Daikon dynamic invariant detector, to permit the detection
of context-sensitive invariants, i.e. those in which the identity
of the caller of a function affects the invariants observed over
calls to that function.
Spring 2002:
Designed and implemented a new Daikon front-end
(using the JVM Debug Interface) that operates on ordinary
uninstrumented class files, and executes the entire Daikon process
in a single, pipelined step.
Summer 2002: IBM T.J.Watson Research Center, Hawthorne NY:
Worked with Dr. David Bacon on Kava,
a compatible variant of Java that aims to solve many of the
shortcomings identified by the Java Grande Numerics Working Group,
by introducing enumerated types, immutable types, and overloaded
operators to the language, and by removing the distinction between
primitive and reference types.
Summer 2003: IBM T.J.Watson Research Center, Hawthorne NY:
Worked with Dr. Stephen Fink on high-level optimisation of
serialisation- intensive Java programs. Implemented a static
analysis (based on Andersen's pointer analysis) capable of
determining "transience" properties at a fine grain, enabling
conditional transmission of heap subgraphs during serialisation.
Fall 2003 -- ...:
I have designed and implemented a tool for automatic
translation of Java code to generic Java 1.5 code, inferring
instantiations of generic types. A paper on
this work will appear at OOPSLA'04.
Sep 2004: Awarded S.M.
Aug 2000 -- Aug 2001
ARM Ltd., Cambridge, UK --
Development of and research into compilers and toolchain
Initially I was working in the Core Tools group, on maintenance of
the ARM toolchain (compiler, linker, assembler, etc); on research
into configurable-toolchain technologies to permit easy addition
of customer-specified architecture variations; and on the design
and implementation of a tool to provide the illusion of portable
object-oriented interfaces to dynamic shared objects on platforms
lacking a C++ ABI (by generation of C++ client and server classes
and C thunk functions from a C++-like interface definition
language).
In November 2000, I moved into the newly-formed Research group,
investigating C compiler-construction toolkits and
configurable-toolchain technologies, with a view to using them for
rapid turnaround of test compilers for evaluation of experimental
new architecture variations. I spent six months using ACE's CoSy
compiler framework to create an optimising C compiler for the ARM
architecture.
(From the outset ARM were aware of my intentions to study for a
PhD, and for a time were interested in a sponsorship arrangement)
Aug 1999 -- Aug 2000
Imerge Ltd., Cambridge, UK -- Development of domestic and
commercial media servers
Work included: maintenance of video servers; design and
implementation of drivers, test-tools and some programmable logic
for a multi-channel PCI audio device (this work took place on-site
at Linn Products in Glasgow);
creation of a Linux distribution resilient to power-failure (by
elimination of race conditions and analysis of `restartability',
i.e. ensuring that program logic modified the system state in such
a way that no matter which instruction is pre-empted by power
failure, the filesystem was restored to a stable state upon
reboot); interfacing and integration of various consumer
electronic devices, primarily through reverse-engineering of
control protocols; field maintenance of video server
installations, e.g. at Millenium Dome; design and implementation
of TCP client/server programs for in-field software and media
update of deployed high-availability systems. Extensive
test-design. (All projects on Linux)
Dec 1997 -- Aug 1999
Adherent Systems Ltd., Cambridge, UK -- Design, development,
maintenance and testing of digital TV test systems
I worked on a product line of test-and-measurement tools for the
DVB and ATSC (derivatives of MPEG-2 TSs) digital television
standards, mostly based on high-performance x86-based workstations
running Windows NT, with additional custom hardware.
My first project was to design and implement an NT device driver
to interface to a custom ISA-bus satellite receiver card for
MPEG-2 transport streams, and an integration library for usermode
programs.
Throughout this post, I was involved in maintenance and extension
of both the embedded 68K code and NT device driver for a custom
PCI-bus card to preprocess MPEG streams, through which I gained an
understanding of DMA, programmable logic and PCI.
The second project, which spanned more than a year, was to design
and implement a large distributed, graphical, monitoring and
recording system using the above hardware, to allow real-time
quality analysis and debugging of high-bandwidth MPEG
streams. Output included multiplex composition, MPEG table
information, and accurate timing measurements. The system was RPC
based: the Transport Stream Processor was a DCOM server, and
clients, which could be run either locally or remotely, would be
able to control recordings and measurement parameters and display
results in real-time in a sophisticated MFC GUI. Much effort was
spent in profiling and optimisation to achieve the highest
possible performance.
Interim projects included: design and initial prototyping of an
interpreted declarative language for decoding and encoding custom
MPEG bitstream syntaces, using Lex and Yacc; design of a simple
private-key cryptographic licensing system for the hardware; and
planning of company source control policies.
My final project involved the design and implementation of a
remultiplexing editor for Japanese-standard MPEG streams. This
consisted of a sophisticated graphical MFC UI, and a highly
optimised off-line back-end. This 10KLOC project was delivered
months ahead of schedule, and I was pleased to learn in mid-2001
that not only had it generated revenues of over $1m, but there had
been no bugs reported against it.
In all projects I was involved in documentation, both for the User
Guides and for the internal design reports; and in testing,
through the construction of test harnesses and manual test plans.
Jul 1996 -- Nov 1997
FORE Systems Inc., Cambridge, UK -- Development of audio & video
codecs for ATM networks.
I worked on a product line of custom-hardware audio & video
codecs, which would plug into a TV, camera, mic and hi-fi, and had an
ATM network interface. On the workstation side, `manager' programs
would do ATM signalling for, and export RPCs interfaces to, the
codecs. RPC client programs would allow diverse means of
controlling communication between the codecs.
On the embedded side, I was involved in the addition of serial
data transfer capabilities, and extending the TV GUI. On the
workstation, I was involved in development and maintenance of RPC
client programs, including a complete `video telephone' signalling
system: this would enable each site to act analogously to a
telephone, with metaphors for dial, accept, hang-up, caller ID,
etc. Also, maintenance of configuration tools written for a
modified Tcl/Tk interpreter (with language support for object-RPC)
on the workstation.
I was involved in a considerable amout of testing, and of
developer support (production of test programs, internal
documentation, user guides). Also production of website
maintenance tools, and document format conversion tools.
All projects were written portably for various UNIX & NT.
Jun 1995 -- Sep 1995
Dragon Systems Ltd., Cheltenham, UK -- A summer internship,
helping with a speech recognition system.
Work included: hand optimisation in assembler of a speech engine
for TI 'C30-family parallel DSPs on a standard embedded platform
for telephony applications. Implementation of several speech
optimisation techniques, such as Beam Search and linlop. Design
and implementation of a regular expression parser for simple
speech grammars. Construction and maintenance of a suite of
off-line speech analysis, processing and visualisation tools for
use in shell-pipelines.
Technical skills
- I have been programming for over twenty years, and professionally
since 1996.
- Thorough knowledge of: Java, C, C++, Scheme, Perl, Bourne
shell and ARM assembly. Experience in many
others, including Haskell, Lisp, Modula-3, ML, Tcl/Tk.
- Project experience ranges from gate-level logic and embedded
microprocessors, WinNT and Linux device drivers, up to
user-mode apps, distributed applications, and GUIs.
- Specialist in compilers, interpreters, and program analysis
tools.
Miscellaneous
- Full clean UK driving licence.
- Reasonable fluency in French.
- Member of the ACM's Special Interest Group on Programming
Languages (SIGPLAN)
- Interests include: recreational programming (in my `copious free
time'), cinema, cycling, swimming, teaching C/C++, reading (history,
politics, science), travel, listening to music, cooking (and eating).