Jonathan Coxhead

Document Sample
Jonathan Coxhead Powered By Docstoc
					Jonathan Coxhead, +1-650-430-6564                          

                                  Jonathan Coxhead
                   72 Rock Harbor Ln, Foster City CA 94404, +1-650-430-6564 (mobile)
I am an accomplished and experienced software engineer and system architect who excels at the design
   and coding of large or complex software systems. I am familiar with a wide variety of languages,
    operating systems, toolchains and hardware. I have a record of taking ideas from conception to
              completion satisfying the project requirements efficiently and accurately.
                  Permanent resident of the USA with right to work (“green card”).

Goals and Objectives
Much of my experience has been with embedded systems, where it is essential that the code is durable and
the algorithms used are efficient. I would like to build on this experience by taking on challenges at the
leading edge of software technology, using the newest techniques to solve today’s problems. I see myself
primarily as a problem‐solver and innovator, which is what I enjoy doing most. I can work alone, and I do
well given simply a deadline and an objective; but I find working as part of a committed team is more
productive and satisfying. I have a proven record of satisfying and exceeding the demands placed on me by
all of the employers listed below, either when the objectives where very strictly defined, such as
implementing a certain standard, or when some research was needed to find a path.

20 years of experience covering all aspects of software engineering and the software lifecycle: gathering
requirements, design (OOD), implementation (OOP), debugging, testing, documentation (formal and
informal) and support.
I know many languages at a high level of detail, including C++, C, Java, perl, bash, TriMedia assembler,
ARM assembler, HTML, Tcl/Tk, SQL, UML, yacc/bison and more. I have experience with toolchains
including GNU/Linux (Eclipse, emacs, make, cvs/rcs), Windows (TriMedia Compilation System, Visual C+
+, Cygwin, Continuus, Subversion, Source Safe), Solaris (TCS, Code Manager). I’ve used many OS’s
including Linux (Ubuntu, Fedora, RHEL), Android OS (Linux kernel, Dalvik JVM, hosted using Android
Emulator under Windows), Embedded ARM Linux (hosting PNX1005 DSPCPU), pSOS (running on various
TriMedia DSPCPU’s), VxWorks.
A versatile working style, adaptable to working alone or as part of a team. Fast, independent learning,
continually acquiring new techniques, languages and libraries. My depth of knowledge often leads to me
becoming the department expert for detailed questions about the capabilities of languages, libraries or
applications that are widely used. I have been called a “C guru”.
Design of efficient, correct, elegant, durable code using up‐to‐date techniques and efficient algorithms,
sometimes in novel ways. Readable and maintainable coding style with attention to forward‐compatibility
Maintenance, development and enhancement of existing code as needed, even where original documentation
is poor or non‐existent; finding ways to provide new features while retaining compatibility (protecting
investment in existing client code). I can take new tools and use them effectively in new environments, for
example, porting software from one architecture to another.
Writing documentation at all stages of a project—design documents, tutorials, technical API specifications—

                                                   1 of 3
Jonathan Coxhead, +1-650-430-6564                            

using a thorough grasp of written and spoken English.
I’m happy to travel to client sites, and have enjoyed helping customers complete their retail products
incorporating hardware and software and bring them to market.

MA in Mathematics, (Peterhouse, University of Cambridge, England); BA (Hons) in Mathematics,
(Peterhouse, University of Cambridge, England); 2‐year entrance scholarship to Peterhouse.

Employment history
NXP Semiconductors, San José, CA (formerly Philips Semiconductors)
I did development for consumer streaming media products on many generations of the TriMedia DSPCPU:
TM1000, PNX8550, PNX1500, PNX1700, PNX1005. These are multithreaded systems involving multiple
asynchronous communicating hardware and software streaming components (media input devices, codecs,
muxes, demuxes, video processors and output devices), communicating with each other in many possible
configurations. The challenge is to maintain throughput while avoiding deadlock, data loss, high or
unpredictable response time, race conditions, re‐entrancy problems, priority inversion, memory leaks,
reference‐count leaks and other resource leaks. Any of these would be unacceptable in a consumer device.
My main responsibility was the development and maintenance of TSSA (“TriMedia Software Streaming
Architecture”), which is NXP’s streaming infrastructure library. TSSA is used to connect streaming
components in media‐processing applications for many media formats: MPEG2 (video), MPEG4/AVI (audio
and video), MP3, H264, WMT, Bluetooth, AC3, AAC, raw video frames and PCM audio. I was the chief
architect and sole developer of this company‐critical library for 2 years, and remain one of the few trusted to
work on it.
When I started, I derived formal specifications from complex existing code, formulating pre‐ and
postconditions and UML descriptions. I proposed new developments by writing detailed design
documentation for management approval; levelised, refactored and redesigned existing code; and
implemented new features. I promoted better reusability of streaming components by using the OO facilities
of C++.
I was the first to write a comprehensive test suite for TSSA. This uncovered many long‐standing situations
where data packets could be dropped, depending on subtle interactions between task priorities and ISR rates.
I was then able to fix them all.
I also designed and implemented many important low‐level systems components, accurately implemented to
schedule, always with an emphasis on simple, clear specifications which were usually ambitious. I can often
delight clients of my libraries when they ask for a new feature, by saying “It can already do that.” Libraries I
have written include a very featureful and helpful logging library (using an easily‐understood representation
for complex interactions involving multiple threads and ISR’s working together); a heap integrity and
fragmentation checker; a packet‐dropper to allow testing of codec robustness in the face of noisy inputs; a
complete 64‐bit integer library; a timer library with well‐defined and useful semantics for all operations
(drift‐free, correct over wrap‐around, etc); and a simple and yet powerful convention for C coding that is
equivalent to C++ exception handling. (This has been observed spreading virally in the wilds of Silicon

Origin, Cambridge, England
Origin’s business was software subcontracting, so the work was very varied and the engineers had to be very
flexible, as each customer would have their own way of working, requirements and culture. Some projects

                                                     2 of 3
Jonathan Coxhead, +1-650-430-6564                            

were executed by a specially formulated team in‐house at Origin; others by individuals placed at client sites.
I did both of these.
During one particular year, I was the engineer who attracted the highest billable revenue, because of my
chargeable contributions to various different projects.
My accomplishments were in delivering a variety of good software on time to exacting specifications. These
included set‐top box browser development—HTML table layout, input and textarea controls, audio
rendering, an audio device driver to play audio files in various PCM formats concurrently with web
downloading—control software for a cash machine, and further work for Acorn.
Origin was a Windows development house, with embedded projects being cross compiled. I used Norcroft
ARM C/C++, Keil Embedded C, Visual C, Visual Source Safe and Origin’s own excellent in‐house toolset
for change control and archiving procedures, which assured reproducible deliveries and fast turnaround on
last‐minute client demands. This was the most mature software delivery environment I have used or seen,
and I have enjoyed being able to apply these principles in my subsequent career.
I attained the positions of Technical Consultant and Team Leader before moving to Silicon Valley.

Acorn Computers Ltd, Cambridge, England
While at Acorn, a major player in the UK Personal Computer market during the early 90’s, I was responsible
for designing, implementing, coding and maintaining a major part of the application software shipped as
standard with the RISC PC, which was a computer designed around the ARM chip that ran Acorn’s own OS,
RISC OS. These included Draw, Paint, the Printer Manager, machine start‐up and configuration utilities, the
C window library, the window manager itself. These were written in C and ARM assembler, with
development being done on the platform itself, using RISC OS on the 32‐bit ARM processor.
I also carrying through the complete design, development and release of OSLib, a standard C interface for the
1000+ system calls of RISC OS. I took this on as a personal project and, with Acorn’s support, released the
result into the public domain. It was subsequently “re‐adopted” by Acorn, which is a testament to its
usefulness and its high quality. Development is continued by a small team, and it now resides on

FEGS Ltd, Impington, Cambridge, England
Their key product, FAMBUILD, was an interactive finite element preprocessor containing many CAD‐like
features in addition to its main capabilitiy of meshing a 3D model into the large number of finite elements
which are then used by an engineering analysis system. During my time there, I worked on all these aspects
of the product. This involved lots of solid geometry (lines, planes, spheres etc), numerical methods and some
3D graphics. My highlights were
    • Major rework of the structural representation to allow a more reusable time‐saving approach to
      geometric design.
    • Geometrical algorithms expressed in robust numerical methods providing a major enhancement to the
      mesh generation at the heart of the product.
    • Design of a robust and clearly‐specified subroutine interface for a new “results database” package, for
      use and implementation by (separate) 3rd parties.
    • Reduction of the time‐complexity of various algorithms (O(n5) to O(n3) in one case).
    • A new multithreaded command‐line based GUI.
    • An improved object‐oriented geometric repliction facility, and a robust integrity‐checking algorithm
      which at a stroke solved many long‐standing prblems in that area.
    • A slope‐continuous reformulation of the discrete representation of curves.

                                                    3 of 3

Shared By: