Peter Hartley

Strong mathematical/computer science background including Cambridge honours degree; fifteen years’ commercial experience of C/C++ development, plus years more on a hobbyist basis; proven big-app track record on both embedded (Linux, Ecos) and Win32 (VC++/MFC/SDK) platforms, including “architectural” and other senior technical rôles; experience also of porting and portability, GCC/G++ and cross-compilation, Unicode and i18n, client/server technology, GNU Make, multi-threading, database, multimedia including real-time, Internet protocols, UPnP, Qt toolkit, HTML, Subversion, CVS, ARM assembler, Python.
Email: pdh@chaos.org.uk
Home page: http://utter.chaos.org.uk/~pdh/
Date of birth: 9th January, 1972
Citizenship: British
Currently based: Cambridge, England

2007--2009: Two years’ career-break

After the closure of Sigmatel’s UK office, I had a couple of years’ career-break, doing a bit of travelling (mainly meeting up with old friends now far-flung around the world), and spending some time writing open-source software to give away on the Internet.
In particular, I wrote Chorale, a collection of UPnP A/V clients and servers (for Linux, initially) with the ultimate goal of being able to weld the current hotchpotch that is the digital media experience (CDs here, radio there, Roku Soundbridges and Ipods and all) into a single coherent whole, a “media Borg” that newly-purchased media or devices just get assimilated to. Some major sub-goals of this are already achieved: for instance, the server detects the presence of a Freeview (DVB) adapter in the server, and uses the UPnP A/V v2 “Tuner” extension to offer all Freeview channels to the rest of the network. Along the way, I got patches accepted upstream into open-source projects libupnp, libcdio, and the Linux kernel.

2000--2007: Senior software engineer, eventually “Software Architect”

Sigmatel Inc. (formerly Rio Audio; formerly part of Diamond Multimedia; formerly Empeg Limited)
Formerly of 300 Rustat House, Clifton Road, Cambridge, England; now defunct

From the beginning I worked closely with Empeg’s software “architect”, in a tight-knit team of, originally, five developers, slowly growing to twelve developers. In this phase I made many design and implementation contributions to substantial new releases of the Empeg-Car firmware (MP3-playing car-stereo) and to new products Rio Central (home media server), Rio Karma (portable MP3/FLAC player) and Rio Music Manager (PC music-transfer application). Following the departure of the original “architect”, I took over that position and was software “architect” during the development and successful release of the Trekstor Vibez firmware.
The design and implementation areas I worked in while at Empeg/Rio/Sigmatel included:

  • Portability work so that essentially the same application-level C++ code can run on Ecos (for Rio Karma and Trekstor Vibez), Linux (both desktop and embedded), and more recently ThreadX -- plus, for most of the core libraries, on Win32 for Rio’s Windows-based applications and for rapid UI development in advance of target hardware availability;
  • Updating the codebase to use UTF-8 internally, and developing or validating Unicode-safe metadata extractors for the various audio file formats supported;
  • A speed-optimised music-metadata database, including indexing and querying, for the Rio Central;
  • A size-optimised music-metadata database for the Rio Karma and Trekstor Vibez;
  • Implementing the Media Transfer Protocol (MTP), a Microsoft-backed standard USB file-transfer protocol for media players, including a stub client and server for unit-testing;
  • The windowing system used on the Rio Karma and Trekstor Vibez, including making sure it was unit-tested;
  • A build system of non-recursive Makefiles, to keep our multi-machine, multi-core build farm optimally busy;
  • Automating the construction of cross-compilation toolchains for Rio’s various platforms, including cross-compilation of thread-safe C++, and including maintaining out-of-tree patches for binutils, GCC, Ecos, and the Linux kernel, for various special purposes.
Additional contributions included:
  • Investigating and promoting (inside Rio/Sigmatel) upcoming media software technologies, particularly UPnP A/V standards;
  • Being “Code Custodian” of the Sigmatel Cambridge codebase. This was a senior technical rôle, keeping an eye on the “big picture” promoting coherence of design across the various development sub-groups working in different areas;
  • Various bits of ad-hoc toolsmithing: for instance, writing a tool to analyse and assist in the optimisation of ARM assembler by annotating code with pipeline stalls and register liveness;
The eventual position of “Software Architect” was another senior technical rôle aimed at seeing the even bigger picture across both the Cambridge and Austin software teams, helping to organise integration between the two and spreading good development practices. Additionally, I was the “go-to person” both for low-level C/C++ language-lawyering and for questions of elegance and simplicity of software design. Informed by broad experience of both design and implementation, it was partly my almost aesthetic sense for good design that let this small team produce such varied products from the same codebase so effectively.

1996--2000: Senior software engineer

ANT Limited
Since moved to Cambridge Business Park, Cowley Road, Cambridge, England

ANT is a small company whose main activity is Internet client software (browsers, mail readers) for the embedded, set-top-box market and also (at the time -- not these days) for the RiscOS desktop market.
Most of my work at ANT was on the Fresco project, of which I eventually became the “architect”. Fresco is a portable, lightweight HTML3.2 web browser originally developed by ANT as part of the “Network Computer” or NC Reference Platform designed by Acorn Computers (later briefly called E14, and now part of Pace Micro Technology).
During my time at ANT I designed, coded and/or updated many important aspects of the browser at all levels from the HTTP fetcher to the formatter and GUI, and including implementing its support for frames, web publishing, HTTPS, and JavaScript. More importantly, I also co-ordinated the technical effort to make Fresco (originally a RiscOS-only product) portable, defining the API and code structure of ANT’s cross-platform library and coding the RiscOS and Win32 implementations (another developer did the X Window System implementation). The Win32 work was done using Visual C++ 4.2, 5.0, and later 6.0.
Following on from the work to make ANT’s code portable across mainstream operating systems, I designed and implemented a further library which provides a simple window manager, a widget set, and a collection of graphics primitives. This has allowed ANT to port the browser (and its other software projects) to much lighter-weight, embedded-style operating systems where the library is basically just given a framebuffer and has to do everything else itself.
The Fresco sources were managed using the source-control system CVS, which I ported to RiscOS from Unix/NT.

1993--1996: Software engineer

Iota Software
Formerly of Iota House, Wellington Court, Cambridge, England; now defunct

Iota Software Limited is another small company (eight people, when I was there) producing application software for 32-bit Acorn RiscOS machines, and, more recently, PCs running Windows. In theory, I was part of the development team (four strong), but, obviously, in a company of that size everyone found themselves filling more than one rôle. My others included taking some support calls, demonstrating the products at trade shows, and doing much of their technical writing. This last, though, was the only one of those which I found as absorbing and stimulating as programming. I also ended up doing most of Iota’s “internal support”, such as keeping the computers and network going, and running the administrator accounts on their Unix and NT servers. In 1996 I implemented their Internet connectivity using Linux 1.1.59 on an otherwise-retired 486.

These are some of the main development projects I worked on:
Apr 1994 -- Oct 1994: The Complete Animator
This was a frame-based animation package for RiscOS, written from scratch in the above timescale by me and two other people. It won wide praise for its ease of use, robustness and professional features such as a proper “ghosting” or “lightbox” mode. Again, this program was written in C, except a few speed-critical bits which I rewrote in ARM assembler.
Dec 1994 -- Jul 1995: The Complete Animator for Windows
Actually, the name of this program kind of says it all, but for the record this was a rewrite of our animation software for the Win32 platform. I and one other developer learned Win32 and MFC from scratch for this project (with the help of a third developer, who already knew Win32, for the initial few months of the project). This program was written in C++, using Visual C++ 2.0, MFC and SDK, and again I rewrote the speed-critical part (decompressing the frames) in x86 assembler. It ran on Win95, NT, and Win32s -- it detected which at run-time, in order to run most effectively on each. It won a PC Format Gold Award, quite unusual for a non-game program.
As something of a personal jeu d’esprit of mine, this program came with a network-aware, peer-to-peer screen-saver program I wrote, which uses animation files created in Animator and could pass them from screen to screen around an IP network -- even if some of the machines were PCs and others were Acorns. I wrote the screen-saver in BASIC on the Acorn platform, and then again in C++ with MFC on the Win32 platform. I then ported the Win32 version to Win16.
Aug 1995 -- Dec 1995: DataPower Server service for Windows NT
This project was concerned with porting the back-end, or engine, of DataPower (Iota’s flagship database management product) to Win32 in order to run it on Windows NT fileservers. The principal issues were the separation of the DataPower code from OS-dependent routines, and the rewriting of DataPower’s RPC mechanism to take advantage of true multi-threading and true blocking sockets, neither of which was available in the RiscOS API (which used coroutines, and polled its sockets all the time). The server ran as a true Win32 service. It was written in C using the Win32 SDK. This port was undertaken entirely by me, with some input from DataPower’s original designer.
Jan 1996 -- May 1996: Primary Maths
This was a project reusing the innards of Animator as a multimedia tool, the content being an adaptation of a series of workbooks by the Cambridge University Press. Primary Maths was sold as a triple-platform CD, running on Acorns, PCs and Macintoshes, although it actually contained four versions of the code, as the Win32 and Win16 ones were separate (it didn’t use Win32s). I wrote the Win32 version and most of the Win16 and MacOS versions (this last using Microsoft Visual C++ Cross-Development Edition for Macintosh, so I don’t actually know a great deal about MacOS).
I also wrote the cross-platform source control system used at Iota, including its RiscOS GUI front-end.

1990--1992: Sponsored student

ICL
Wenlock Way, West Gorton, Manchester, England

I was sponsored through university by ICL (International Computers Limited, now Fujitsu ICL). As part of that, I worked for them each summer for three years.

Summer 1990: Design Automation department: Maintenance of a very large and old circuit design program, and other work, conducted in Pascal running under Unix. (I’d never used Unix, nor a compiled language, before; they literally sat me down on the first morning with a copy of the Pascal user guide and said “First, learn this”. I did.)

Summer 1991: Fifth Generation department: Writing a test suite for the operating system on a new parallel processing computer, the “Goldrush” machine (connected with an Esprit project, the European Declarative System), and other work. This involved programming in C++ for Unix and Goldrush’s own OS (based on Chorus).

Summer 1992: Software Factory department: Working in a team developing software tools to support program development; for example, a syntax checker for S3 (an Algol-like language). Conducted in C on Unix.

Marple Hall School, Marple, Stockport, Cheshire:

1988: GCSE Maths, English, English Literature, Physics, Chemistry, Geography, History, and French (all grade A)
1989: GCE A-level Maths (Pure and Applied), grade A
National Maths Contest, 19th place; British Maths Olympiad, grade B
1990: GCE A-level Further Maths (Pure and Applied), Physics, Chemistry, and General Studies (all grade A); STEP Maths and Physics (both grade S)

Trinity College, Cambridge:

1990-93: B.A. (Hons.) (Cantab.) in Computer Science
1991: Part Ia: First (Placed top of the University; jointly awarded college’s Percy Pembarton prize, “for the undergraduate who most distinguishes him or herself in the first year examinations”)
1992: Part Ib: First
1993: Part II: Upper Second

The course included, among other things,

  • Imperative programming in C, Fortran, and Cobol;
  • Functional programming in ML and Lisp;
  • Declarative programming in Prolog;
  • Object-oriented programming in Modula-3;
  • Program design, software engineering and formal methods;
  • The design and analysis of algorithms;
  • Language design and compiler construction;
  • Hardware courses including VLSI design and computer architecture;
  • Theory courses including discrete mathematics, automata theory, complexity theory, and formal semantics;
  • Courses on operating systems; databases; distributed computing; graphics; communications; and artificial intelligence.
My interests outside work include cookery, typography, writing, and reading.
On my desk at home, is the usual collection of PCs, old Sun boxes, and other geek junk; I’m using these for my own programming projects. Back at the dawn of the Internet (1996ish) I wrote InterGif, an animated GIF creation and optimisation program for Acorn RiscOS (eventually ported to Win32 and Linux), which became so universal on the RiscOS platform (partly due to its extremely liberal licensing) that no other animated GIF creation program for RiscOS was ever written.
More recently I’ve been playing with my own cross-compilable Linux distribution.(And yes, everyone else has started in on that too since the LFS book came out. But theirs don’t tend to run on five different architectures, like mine does.)