Anthony James ("Tony") Garnock-Jones
58 Dixon Street, Oakura,
Taranaki, New Zealand.
+64 21 02740719
tonygarnockjones@gmail.com
http://homepages.kcbbs.gen.nz/tonyg/
Born in New Zealand; citizen of New Zealand and of the United Kingdom.
First language English; fluent in Swedish.
Education
1995–1998: Bachelor of Science in Computer Science and Biology, University of Auckland, New Zealand.
Research Interests
Interpretation, reflection, metaprogramming
Programming language and operating system design and implementation
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.
Selected Project History
The following list includes 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
2007–ongoing: 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–ongoing: 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.
2002–ongoing: In-house enhancement to PyleWiki, which forms the core of LShift's intranet.
1997–1998, 2008–ongoing: Development of a series of unreleased experimental microkernels for x86 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-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.
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 and Teaching
"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.
Three guest lectures on Content Management Systems, Model-View-Controller architecture, and Domain-Specific Language design, given as part of a final-year undergraduate multimedia course at the University of Westminster, London, 2005.
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, 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-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 both for the LShift company blog and for a technical blog, eighty-twenty.org, that I run jointly with a colleague.
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 am an active contributor to the AMQP working group.
Skills and Training
- 2009: Certificate in First Aid for the Workplace (St. John Ambulance)
- 2008: Certified Dynamic Systems Development Method (DSDM) Practitioner
- Full current clean NZ car driver's license
- Full current clean UK motorcycle driver's license
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.