 |  |  |
2000--2007: Senior software engineer, eventually “Software Architect”
Sigmatel Inc. (formerly Rio Audio; formerly part of Diamond Multimedia; formerly Empeg Limited)
300 Rustat House, 62 Clifton Road, Cambridge, England
In 2000 I joined Empeg Limited to work on their eponymous
groundbreaking MP3-playing car stereo product. This device ran Linux
on ARM-based hardware, and the music-player application itself was
written in C++ (with bits of assembler), cross-compiled with GCC. I
mainly worked on the player firmware, covering a wide area but
particularly focussing on database work, and to a lesser extent UI
work.
Empeg Limited was subsequently
bought by Diamond Multimedia, and after a further chain of renamings
and sellings-on, too tedious to enumerate, finally ended up owned by
Sigmatel, a company based in Austin, Texas and who design ARM-based
system-on-chip ICs for digital media products. The Cambridge operation
doesn’t do any chip design, but instead helps provide the SDKs
-- essentially, customisable player firmware designs -- supplied with
the chips.
At Rio the car-player
application was diversified over the years to build for several
different products from the same codebase: the Rio Receiver
thin-client networked audio player, the Rio Central home stereo
jukebox (with CD ripping and encoding, network music serving, and CD
writing), and the Rio Karma hard-disk-based portable player. In the
Sigmatel era, the focus has been on portable designs, including the
Trekstor Vibez, which are the heirs of the Rio Karma -- Sigmatel pride
themselves on the low power consumption of their chips, which is less
of a selling-point in those other markets.
These are some of the technical
areas I’ve worked in while at Empeg/Rio/Sigmatel:
- 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;
- Implementing a time-efficient indexing and querying system for the
Rio Central’s music database;
- Implementing a memory-efficient music 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;
- Implementing the windowing system used on the Rio Karma and
Trekstor Vibez, including making sure it was unit-tested;
- Implementing a build system of non-recursive Makefiles, to keep
our multi-machine, multi-core build farm optimally busy;
- Investigating and promoting (inside Rio/Sigmatel) upcoming media
software technologies, particularly UPnP A/V standards;
- 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.
Empeg had about half-a-dozen developers when I joined, and the
Cambridge team has since grown to a dozen or so. As well as doing
general development, I became “Code Custodian” of the
Sigmatel Cambridge codebase. This is 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. More recently this position has been coupled with
that of “Software Architect”, 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.
1996--2000: Senior software engineer
ANT Limited
Norman House, Cambridge Place, 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
Iota House, Wellington Court, Cambridge, England
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.
|
|