Born in New Zealand; citizen of New Zealand and of the United Kingdom.
First language English; fluent in Swedish.
My research focuses on Network-Aware Programming: the design and implementation of programming languages that incorporate ideas from distributed systems and networking.
More broadly, I explore the areas of interpretation, reflection, metaprogramming, and programming language and operating system design and implementation.
1995–1998: Bachelor of Science in Computer Science and Biology, University of Auckland, New Zealand.
2010–: University Excellence Fellowship, Northeastern University.
2014: "The Network as a Language Construct", with Sam Tobin-Hochstadt and Matthias Felleisen, Proc. of the 23rd European Symposium on Programming (ESOP), to appear.
The following list includes academic research, commercial closed-source, commercial open-source, and non-commercial open-source and private projects, as well as major contributions to third-party open-source projects.
2007–2010: Core developer of the RabbitMQ implementation of the AMQP messaging middleware standard. Responsible for the majority of the code in v1.0 of the RabbitMQ server, as well as for many of the supporting AMQP client libraries and gateway adapters for the RabbitMQ server, and for much subsequent development and maintenance.
2007–2010: Significant contributions to the development of the AMQP specification itself, including work on acknowledgement protocols and details of message framing for version 0-10 of the specification; exploration of different notions of naming, addressing, topology, trust, and failure.
2008–ongoing: Author and maintainer of the reversehttp protocol specification and initial implementation.
2004–ongoing: A series of experiments in programming language design and implementation, incorporating ideas from the literature on pi-calculus, partial evaluation, mobile ambients, parser combinators, monadic structuring of events, software transactional memory, and pattern matching.
2004–ongoing: Development of a simple R5RS Scheme compiler, Newmoon, with backends for Java bytecode, .NET bytecode, and C.
1997–1998, 2008–ongoing: Development of a series of unreleased experimental microkernels for x86 and ARM machines.
2009: Co-designed RabbitMQ Streams (neé Feeds Hub), and contributed to its implementation.
2009: Led a RabbitMQ custom-development project for the Ocean Observatory Initiative. Designed and prototyped a system for large-scale federations of AMQP brokers and for managing federated broker groups.
2008: Contributed Cairo and SDL bindings to GNU Smalltalk. Constructed an experimental lightweight widget-set atop the resulting libraries.
2007: Developed Camstream, a program for Linux, OS X and Windows which uses AMQP and a simple from-first-principles video compression scheme to route live, streaming video from one or more webcams to one or more displays.
2007–2008: Developed ndocproc, a javadoc-like documentation extraction and rendering system for C#/.NET programs.
2005: Undertook research investigation of pi-calculus-based modeling of biochemical pathways; investigated logics describing classes of biochemical pathway; developed StoJ, a join-based stochastic pi-calculus variant for experimentation with different styles of modeling molecular processes.
2005: Was part of a team implementing a web-based gift-list service for an international furniture retailer. This project led to the extraction and public release of Icing, a Scheme-on-JVM-based web framework.
2005: Contributed a green-threads implementation and a socket interface built upon it to the Slate language project.
2004–2005: Produced an implementation of Scheme's
syntax-casemacro facility from the original papers; developed a test suite for the implementation; started the groundwork for an implementation of Flatt's module system for Scheme.
2003–2004: Worked as part of a team researching and implementing a pi-calculus and linear-logic inspired programming language (and associated compilers, behavioral type systems, hygienic macro systems, development environments etc.) for the Microsoft Platform Development Group.
2001–2002: Embedded a scheme system in eServGlobal's core ACS product, allowing advanced call-processing functionality to be written in an efficient high-level language, and freeing developers from the development and maintenance of complex low-level state-machines in complex low-level languages.
2001–2002: Was part of a team working on a distributed pre- and postpaid billing system ("CCS") for mobile telephones. Responsible for several aspects of the core design and implementation.
1999–2002: Was part of a team working on a massively multithreaded virtual machine ("ACS") for programming IVR call flows.
2002: Developed docscm, a javadoc-like documentation extraction and rendering system for Scheme programs.
2001–2002: Developed a high-speed C++ shared-memory message-passing library.
2001: Designed and implemented a CS1 INAP Call Gapping overload control program; installed and configured the software for Powertel, Sydney.
1999–2001: Developed gAlan, an open-source modular digital audio processing system with a graphical notation for constructing sound processing pipelines.
1997–1998: Designed and developed a multi-user networked online text-based programmable virtual environment, 3-move, strongly inspired by Pavel Curtis's MOO software.
"AMQP and Beyond: Messaging by Extending RabbitMQ", Erlang Factory, San Francisco, 26 March 2010. Slides
"Squeak: a Compositional System", Cambridge University Engineering Design Centre, Cambridge, 9 January 2010. Slides
"RabbitHub: RabbitMQ + Mochiweb = PubSubHubBub", Erlang Factory, London, 25 June 2009.
"Polling Sucks: RabbitMQ and Internet Messaging", Bay Area Functional Programmers, San Francisco, 8 April 2009.
"RabbitMQ: Open-Standard Business Messaging in 5000 lines of Erlang", Erlang Exchange, London, 2008. Slides.
Head Teaching Assistant, CS 5010 "Program Design Paradigms", 2010–.
Guest Lecturer on Content Management Systems, Model-View-Controller architecture, and Domain-Specific Language design; three lectures given as part of a final-year undergraduate multimedia course at the University of Westminster, London, 2005.
LShift is a bespoke software research and development company based in London, England. LShift works on all sizes and kinds of project, from fundamental research in computer science to large-scale, long-term software development projects. My role has ranged from research and development, through architectural consultancy, to leading projects from beginning to end.
eServGlobal provides a complete range of telephony software in the 'Intelligent Networking' domain, from SS7 protocol stacks, to programmable interactive voice response units, to soft-realtime hot-billing engines. My role was to design, implement, and maintain eServGlobal's software products, and to provide on-site support and consultancy to eServGlobal's customers.
1999: Computer Support Officer, School of Biological Sciences, Victoria University of Wellington, NZ
My responsibility was to provide day-to-day first-line computer support to the staff and students of the school, and to maintain and enhance the school's network, including running a student computing laboratory.
Enermet-Zellweger supplies energy metering and load management solutions. My responsibilities included embedded-systems programming and factory automation control software development.
ESA Publications produces a range of textbooks for New Zealand high school students. My role included day-to-day computer support for the employees of the company and the purchasing and maintenance of the hardware and software on which the company relied.
The list that follows covers those technologies I have had significant experience of working with. I also have a working knowledge of many others not listed.
- Proficient: CSS, Delphi, Forth, Haskell, Lambda-, pi- and ambient-calculi, lex, OCaml, Perl, RELAX NG, sed, Self, sh, SML (both SML.NET and SML/NJ), Smalltalk (Squeak and GNU dialects), SQL, XSD, yacc
- Expert: x86 (32- and 64-bit)
- Proficient: ARM, Openmoko, PA-RISC, PowerPC, Sparc
- Expert: AMQP, HTTP, JSON-RPC, SMTP, STOMP, TCP/IP, UDP, XMPP
- Proficient: SCTP
- Cairo, Episerver, GTK+, JDBC, JMF, jquery, libevent, psyntax, OpenGL, Prototype, Qt, SDL, Swing, WinForms
- CouchDb, MySQL, Oracle, PostgreSQL, SQL Server
- CGI, ASP.NET, Java servlets, Seaside
- Expert: Linux (particularly Debian/Ubuntu), OS X, POSIX
- Proficient: Windows, Windows NT, SunOS/Solaris, HP-UX, FTX, RISC OS, Macintosh System 7
I have been involved with the SchemeUK community since its formation in 2002. I have also been involved with Scheme's SRFI process since 2002, and have participated in the comp.lang.scheme newsgroup since 2001.
I have participated in London's nascent Smalltalk, Erlang and Messaging-middleware communities since 2006. I am also active in the RabbitMQ community forums.
I was an active participant in the AMQP working group between 2007 and 2010, and contributed to the AMQP 0-9-1, 0-10 and 1.0 specifications.
I am enjoying the gradual process of teaching myself how to bake acceptable bread and bagels. I dabble in the construction of digital music software, though I can't construct listenable music from the results to save myself. I occasionally overcome my instinctive dislike for jogging, but commute daily by bicycle. I regularly break myself on the rocks of (intermediate-difficulty) cryptic crossword puzzles, and try to avoid breaking myself on the rocks of highways around the world on the motorcycle tours I take during non-rainy seasons.