====================================================================== CURRICULUM VITAE -- Andrew Main -- last updated 2020-05-01 Latest version available from . PERSONAL DETAILS name: Andrew Main birthdate: 1977-01-20 email: telephone: 07887-945779 location: based in London, can commute up to about 100 km OVERVIEW A highly skilled, independent, self-motivating software engineer, with experience of a wide variety of languages and operating systems. Leans towards software infrastructure, comfortable programming from bare metal up to app-internal API level. Primary programming languages are Perl and C, on Unix platforms. Good for security-relevant applications and other situations requiring high software reliability. Experience of administration of a variety of Unix operating systems. EXPERT-LEVEL TECHNICAL SKILLS These lists show only areas of great expertise and familiarity. Skill levels here are far greater than the periods of experience suggest. programming languages: * Perl (daily use since c. 2000; occasional use since 1995; wrote parts of the Perl core) * C (daily use 1988-2002; occasional use since then) * Unix shells and related tools (daily use since 1994; wrote parts of zsh) * assembly languages (extensive use of x86 and Elate VP) * general ability to learn programming languages rapidly: typically proficient in a medium-sized language in hours; used around 50 programming languages so far Unix operating systems: * Linux (daily use and administration since 1996; kernel programmer) * Solaris (occasional use since 1994 and administration since 1998; kernel programmer) specific areas of programming: * networking (frequently since 1994; occasional IETF work; protocol designer) * kernel programming (code in Linux, Elate, and Solaris; also private projects) * API design (in several jobs and also open source Perl modules) OTHER TECHNICAL SKILLS Keywords for significant technical skills: Apache, assembler, autoconf, bash, BIND, Bourne shell, C, C++, CGI, cryptography, CVS, databases, DNS, Elate, Exim, git, HTML, HTTP, Intent, IPv6, JavaScript, kernel, ksh, LaTeX, Linux, Lisp, m4, make, mod_perl, MySQL, network administration, networking, NTP, OO Perl, Oracle, Perl, Perl 5, Perl POD, Perl scripting, Perl XS, PostgreSQL, RCS, Scheme, security, sh, shell scripting, SMTP, Solaris, Sparc, SQL, system administration, Taos, TCP/IP, TeX, Unix, WWW, x86, zsh Presence of a keyword in the above list indicates a significant competence, involving relevant experience in several projects or experience that is particularly deep. Additional technical skills: a passing acquaintance with many other technological constructs not listed here. EMPLOYMENT HISTORY dates employer/client position ----- --------------- -------- 2017-11 to 2018-03 The Perl Foundation (freelance) Perl core developer 2007-05 to 2015-10 Photobox Ltd (perm) software engineer 2013-10 to 2013-10 Clues Ltd (freelance) software engineer 2010-10 to 2010-10 Booking.com B.V. (freelance) software engineer 2005-04 to 2007-04 Transact Group Ltd (perm) developer 2003-03 to 2005-04 Corpex Ltd (perm) developer 2002-02 to 2002-06 Sun Microsystems Ltd (contract) software engineer 2001-06 to 2001-08 Philips (contract) software engineer 2000-07 to 2001-04 Sun Microsystems Ltd (contract) software engineer 2000-07 to 2000-07 Parasol Solutions Ltd (contract) network admin 2000-04 to 2000-05 Promotional Logistics Ltd (contract) software engineer 2000-03 to 2000-03 Salmon Ltd (contract) network admin 1999-11 to 2000-02 Iona Technologies plc (contract) software engineer 1999-08 to 1999-11 The Image Workshop (perm) Programmer/Web Developer 1998-11 to 1999-08 Parasol Solutions Ltd (perm) Consultant 1997-06 to 1998-11 Tao Systems Ltd (perm) Developer 2017-11 to 2018-03 The Perl Foundation (freelance) Perl core developer Perl core development, including bugfixing, feature development, bug investigation, and replying to mail on the core development mailing list. 2007-05 to 2015-10 Photobox Ltd (perm) software engineer Development, architecture, and maintenance of the backend of a large retail photo printing system in Perl, C (via Perl XS), and SQL. Developed custom object/relational mapping layer enabling flexible metaprogramming while retaining backward compatibility. Multiple spinoff CPAN modules. 2013-10 to 2013-10 Clues Ltd (freelance) software engineer Creation of a Perl obfuscation for promotional purposes, which was printed in the conference guide for the 2013 London Perl Workshop. 2010-10 to 2010-10 Booking.com B.V. (freelance) software engineer Update of the Perl module Data::Alias to work on Perl 5.12, involving tricky Perl internals work in C and XS. 2005-04 to 2007-04 Transact Group Ltd (perm) developer Development and maintenance of various web-based and SMS-controlled services in Perl and SQL. Implemented security mechanisms for a credit card payment system. 2003-03 to 2005-04 Corpex Ltd (perm) developer Development and operation of an email filtering system in Perl and other languages. Developed an effective spam filter from scratch. Web interface to the filtering system. Use of various databases. Some project management. Design of future email services. Also Unix system administration and network administration. 2002-02 to 2002-06 Sun Microsystems Ltd (contract) software engineer Device drivers and user-mode Solaris software to communicate with hardware-management microcontrollers, in C. 2001-06 to 2001-08 Philips (contract) software engineer In-house logistics system customisation in Perl. Perl training for permanent staff. 2000-07 to 2001-04 Sun Microsystems Ltd (contract) software engineer Solaris device management programming in C: FRU metadata format translation device driver for Netra FT1800; device dependency tracking code for fault tolerance; fault-injection device driver for test purposes. Some project management. 2000-07 to 2000-07 Parasol Solutions Ltd (contract) network admin Network design and setup. 2000-04 to 2000-05 Promotional Logistics Ltd (contract) software engineer CGI-based web interface to an e-commerce system, in Perl. 2000-03 to 2000-03 Salmon Ltd (contract) network admin Network design and setup. Security consultancy. 1999-11 to 2000-02 Iona Technologies plc (contract) software engineer Cross-platform build system automation. 1999-08 to 1999-11 The Image Workshop (perm) Programmer/Web Developer Administration of Unix systems (Linux and Solaris), particularly providing email and web services. Network administration, including network design and a firewall. DNS administation for the company and its clients. Some CGI web programming in Perl. 1998-11 to 1999-08 Parasol Solutions Ltd (perm) Consultant Contracted out to various clients. Principally Unix system administration and CGI web programming in Perl. 1997-06 to 1998-11 Tao Systems Ltd (perm) Developer Development and design work on the operating system Elate (formerly known as Taos; now also known as Intent), in Elate VP and other languages. Major specific projects: the Elate shell; POSIX.2 utilities; Unix-style pseudo tty device; regular expression library; bignum library; cryptographic libraries; entropy collector; source-level remote debugger. Also occasional Unix system administration work. MAJOR UNPAID PROGRAMMING WORK Considerable work done on various open-source software projects, including: Perl modules Published many Perl modules, starting in 2004. See . Subjects addressed include time, cryptography, numeric computation, syntactic and semantic extension of Perl, and textual representation of data. Perl core Bugfixing and feature development in the Perl core, starting in 2007. Feature developments particularly concerned with novel ways for modules to extend the core. Also involved in much discussion on the core development mailing list. Linux In 1997, did much of the kernel-mode programming, and some user-space library programming, in a project to implement some of the POSIX.1e (POSIX.6) security features for Linux. This code went into the official kernel in the 2.2 release. Also, in 2001, developed a demonstration version of an HTTP filesystem (which provides access to HTTP-accessible resources via a filesystem interface) for Linux. See . Z Shell Programming work on zsh 1994-1999, in C and other languages. Coordinator of the Zsh Development Group 1998-1999 (zsh versions 3.1.2 to 3.1.5). In 2001, expert reviewer of the third edition of "Unix Power Tools", particularly of the zsh material. In 2001, became a zsh representative on David Korn's second-generation POSIX shell standard working group. Minetest In 2014, worked on some plugin modules for this voxel-based open-world video game. Primarily worked on the "technic" and "unified_inventory" mods, joining an established group of developers for those mods, working in lua. PROGRAMMING CONFERENCES Since 2009, delivered various presentations at Perl conferences including YAPC::Europe and the London Perl Workshop. SCIENTIFIC ACTIVITIES In May 2013, by invitation, presented a paper at the colloquium "Requirements for UTC and Civil Timekeeping on Earth" hosted by the American Astronautical Society. The paper was concerned with how future programming environments can handle a multiplicity of time scales. Preprint available at ; formally published by Univelt, Inc. as part of the colloquium proceedings. OTHER WORK Essays and other published work available on personal website at . DEGREE-LEVEL ACADEMIC QUALIFICATIONS BSc(hons) in Computer Science The University of Warwick Summer 1997 ======================================================================