Phone number and street address available on request.
I am not currently seeking employment.
As of March 2012, I am working as a
at ITA Software,
which has just been bought by
and I am not
interested in leaving.
C/C++, Common Lisp, Python, Java, SQL, Perl, Standard ML, Erlang,
Various Unix: Linux, Solaris, AIX, HP-UX, IRIX, SunOS, Digital/Compaq Tru64.
Software architecture, algorithm design, concurrent programming,
Unix systems programming, network programming, protocol design,
object-oriented design, compiler design, Web-based applications,
TCP/IP, sockets, POSIX threads, Android, Google App Engine, software transactional memory, ANTLR, Bison/Yacc, Flex/Lex, Apache, XML, HTML, CSS, Postgresql, gcc, gdb, Oracle 9, JUnit, CPPUnit.
B.A. in Mathematics, Northwestern University, 1986-90. Graduated with departmental honors.
One year of mathematics graduate school at the University of Chicago, 1990-91.
M.S. in Computer Science, University of Massachusetts, Lowell,
included programming language design, compiler construction,
algorithms, machine learning, and data storage systems,
operating systems. My master's thesis was a novel design for a microkernel,
for which I wrote an IPv6 stack from scratch. My GPA was 4.0.
ITA, July 2008 to present:
Senior Software Engineer
Google, April 2011 to present:
Software Engineer III
ITA provides software for the airline industry. The
flagship product, QPX, searches for flights, and prices tickets,
for many airlines
and other travel sites, including (as of June 2010)
Orbitz, American Airlines, and Alitalia.
QPX is used for the majority of tickets sold in the US.
In April 2011, ITA was acquired by
- I work on QPX; my time is split about evenly between new
functionality and bug fixes.
- I work in Common Lisp and C++, with some Python for auxiliary programs.
- I regularly have to apply algorithmic knowledge in order to
improve performance. In one case, I replaced an O(N2)
with an O(N) algorithm, reducing certain customer queries from about
half an hour to about 3 seconds.
- The main new feature I've worked on was dynamic waivers, which
allow an airline to specify emergency exceptions to the rules used
when a passenger needs to change a ticket.
- For example, if a snowstorm is going to close the airport in
Madison, WI, an airline can file a waiver allowing passengers to
postpone their flights. Historically, this has required manual
intervention at the call center.
- I wrote the C++ code for managing waiver records from our
memory-mapped files, and the Common Lisp code for determining which
waivers applied to a given ticket.
- I also worked with the domain expert to resolve ambiguities in the
Famology, December 2007 to
July 2008: Chief Architect
Famology is a Web-based startup, building an application to enable
families to keep in touch and collect their family history.
- I have
built the application by myself.
in Ruby on Rails, using AJAX, XHTML, SVG,
Jabber, and some
Akamai, January to November 2007: Senior Software Engineer
Akamai operates the world's largest content delivery network.
- I worked in the Nameservers group, which maintains and develops the specialized DNS servers which direct each user to the optimal Web server.
- My primary task was improving the performance of the DNS server. Over about 8 months, I increased throughput from 25,000 queries per second to 60,000. This was done mainly by adding support for multiple query threads, allowing us to take advantage of multicore CPUs.
- Work was done in C++, using POSIX threads and x86 atomic operations.
- Also prototyped a DNS server in Erlang, which is supposed to scale well to multiple CPUs. Determined that, though that may be so, it imposed too much overhead: the best I was able to achieve was about 20,000 queries per second.
- Implemented software transactional memory in C++.
Endeca, August 2004 to November 2006: Principal Software Engineer
Endeca sells an enterprise information access platform to help people find, analyze, and understand their information in novel ways.
- I worked in the Engines group within Development, maintaining and developing the search engine.
- Enhanced the data store to keep certain large data structures offline, to improve scalability.
- Worked on the design and implementation of XQuery support, including an optimization strategy to enable queries to be answered via the engine's data index, instead of by iterating.
- Prototyped the new Conceptual Search feature.
- Enhanced the dictionary system to understand German compound words.
- Work was done in C++, with extensive unit testing using CPPUnit.
Centive, October 2001 to July 2004: Principal Software Engineer
Centive sold an enterprise platform for calculating complex commission plans for companies with millions of transactions per month.
- I was the principal compiler developer.
- Architected and implemented a compiler to translate the compensation plans into Oracle PL/SQL and Microsoft T-SQL.
- Focused on improving the performance, both of the compiler itself and of the generated SQL.
- The result is around 100,000 times faster than Centive's previous version.
- Worked closely with the professional services staff, to make sure that the compiler met their needs.
- Compiler was written in Java, on Windows; the design was heavily object-oriented, with explicit reliance on design patterns.
eCal Corp., January 1999 to September 2001: Chief Scientist
eCal made Web-based calendaring software: a packaged server for the enterprise space, a hosted service for the consumer space.
- Architected new products.
- Researched new technologies to keep ahead of the competition.
- Architected and implemented a Web application framework, in object-oriented Perl on Linux and Solaris, for the enterprise server.
- Worked with the application development team to make sure the framework met their needs; acted as technical lead to guide them in using the framework sensibly.
- Sped up the framework to meet (and exceed) the performance budget of 140ms per page.
- Represented eCal in the IETF.
- Researched instant messaging and presence, when eCal wanted to diversify.
- Created a prototype IM protocol, and implemented a Java object framework for it, on Linux.
- Wrote an Apache module in C++, on Linux, to speed up the hosted service; implemented security features such as MD-5 and HTTP Digest Authentication.
Netscape (now AOL), June 1996 to January 1999: Principal Software Engineer
I came to Netscape as part of the acquisition of InSoft (see below).
- Integrated InSoft's conferencing architecture, which I had developed, with the H.323 standard. (Work done in object-oriented C, on multiple versions of Unix.)
- Represented Netscape in the IETF's WebDAV working group.
- Architected a CRM product, in Java, on multiple operating systems.
InSoft (now Netscape/AOL), October 1993 to June 1996: Senior Software Engineer
InSoft sold enterprise videoconferencing and streaming media systems.
- Architected and implemented the OpenDVE networking architecture used in InSoft's Communique! videoconferencing program.
- Wrote various Unix daemons to provide OpenDVE services and route data through the conference's virtual network.
- OpenDVE is notable because it was a peer-to-peer system, some years before peer-to-peer was popularized. Three patents were issued on this work.
- Created the prototype of the Netscape Media Server.
- Work was done in C on seven different Unix platforms (Linux, Solaris, AIX, HP-UX, IRIX, SunOS, Digital/Compaq Tru64), under X Windows.
A&T is a naval contractor.
- Developed a Windows 3.1 application, in C++, for editing descriptions of underwater sound sources, for use in sonar training simulators.
- Held a Secret clearance.
The NSCF sells computer-aided instruction software for algebra.
- Created an X Windows front-end for the student database, on Unix, in a proprietary language.
thesis, PackOS, was a
microkernel where IPC was IPv6.
Someday I want to revisit it to
incorporate PLT and compiler design, too, by writing it in a custom
language based on combining λ-calculus with π-calculus.
My Android apps