Photo

Curriculum Vitae

Anthony James ("Tony") Garnock-Jones

102R Prospect Street, Apt. 2
Somerville, MA 02143-4109, USA.
+1 617 230 0220
tonyg@ccs.neu.edu
http://homepages.kcbbs.gen.nz/tonyg/
http://github.com/tonyg/

Born in New Zealand; citizen of New Zealand and of the United Kingdom.
First language English; fluent in Swedish.

Research Interests

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.

Education

2010–: PhD Student, Northeastern University, Boston, MA, USA.
Advisors: Matthias Felleisen, Sam Tobin-Hochstadt.

1995–1998: Bachelor of Science in Computer Science and Biology, University of Auckland, New Zealand.

Awards

2010–: University Excellence Fellowship, Northeastern University.

Publications

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.

Selected Project History

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.

Ongoing Projects

  • 2010–ongoing: Research into network-aware programming. Investigation of language features for composing communicating programs. Lightweight language extension prototypes in Racket and Javascript. Multiple case studies, including a full DNS server and resolver, and an SSH protocol implementation and service.

  • 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.

Past Projects

  • 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: Designed, implemented and presented a distributed version control system in Javascript; integrated the code with Tiddlywiki to provide a prototype distributed, versioned personal wiki.

  • 2008: Contributed Cairo and SDL bindings to GNU Smalltalk. Constructed an experimental lightweight widget-set atop the resulting libraries.

  • 2007: Ported Erlang, GNU Smalltalk, Squeak Smalltalk, and the Spidermonkey Javascript engine to the Openmoko cellphone; used Erlang and GTK+ to construct a replacement userland (modem driver, dialer, SMS application, etc.) for the phone.

  • 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.

  • 2007: Wrote an assembly-language port of Richard Jones's FORTH system, Jonesforth, for PowerPC machines running OS X.

  • 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-case macro 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.

  • 2002: Ported the Chicken Scheme compiler and runtime to Sparc and PA-RISC architectures. Contributed a number of bugfixes and libraries to the project.

  • 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.

Talks

  • "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

  • "Achieving Scale with Messaging and the Cloud", Online Gaming High Scalability Special Interest Group, London, 9 July 2009. Video, Slides.

  • "RabbitHub: RabbitMQ + Mochiweb = PubSubHubBub", Erlang Factory, London, 25 June 2009.

  • "RabbitMQ's Internal Architecture, Federating Exchanges, and Redundancy for High Availability", Thoughtworks's London Geek Night, London, 12 May 2009. Video, Slides.

  • "Polling Sucks: RabbitMQ and Internet Messaging", Bay Area Functional Programmers, San Francisco, 8 April 2009.

  • "RabbitMQ: An Open Source Messaging Broker That Just Works", Google Tech Talk, London, 25 September 2008. Video, Slides.

  • "Distributed Version Control in JavaScript (or any other language that takes your fancy)", Osmosoft's Open Source Show'n'Tell, London, 5 June 2008. Video, Slides.

  • "RabbitMQ: Open-Standard Business Messaging in 5000 lines of Erlang", Erlang Exchange, London, 2008. Slides.

Teaching

  • 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.

Employment History

2002–2010: Senior Developer, LShift Ltd., London, UK

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.

1999–2002: Software Designer and Developer, eServGlobal Ltd., Wellington, NZ and Ipswich, UK

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.

1998–1999: Contract Software Developer, Enermet-Zellweger (NZ) Ltd., Auckland, NZ

Enermet-Zellweger supplies energy metering and load management solutions. My responsibilities included embedded-systems programming and factory automation control software development.

1996–1998: Computer Systems Manager, ESA Publications (NZ) Ltd., Auckland, NZ

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.

Computing Skills and Experience

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.

Programming, data, and schema languages

  • Expert: C, C#, C++, Erlang, HTML, JSON, Java and the JVM, Javascript, .NET CLR, Python, Racket, Scheme (including syntax-rules and syntax-case), UBF, XML, XSLT
  • 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

Instruction sets, machine languages, and machine architectures

  • Expert: x86 (32- and 64-bit)
  • Proficient: ARM, Openmoko, PA-RISC, PowerPC, Sparc

Network protocols

  • Expert: AMQP, HTTP, JSON-RPC, SMTP, STOMP, TCP/IP, UDP, XMPP
  • Proficient: SCTP

Libraries

  • Cairo, Episerver, GTK+, JDBC, JMF, jquery, libevent, psyntax, OpenGL, Prototype, Qt, SDL, Swing, WinForms

Databases

  • CouchDb, MySQL, Oracle, PostgreSQL, SQL Server

Web programming environments

  • CGI, ASP.NET, Java servlets, Seaside

Operating systems

  • Expert: Linux (particularly Debian/Ubuntu), OS X, POSIX
  • Proficient: Windows, Windows NT, SunOS/Solaris, HP-UX, FTX, RISC OS, Macintosh System 7

Activities

I write for my technical blog, eighty-twenty.org, and previously wrote for the LShift company blog.

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.

General Interests

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.