I am a software engineer with skills in a number of related fields. My main strengths are as follows.
Linux kernel and drivers: More than 10 years experience with Linux, including writing network, mass storage, audio, and custom hardware drivers.
C and C++: I have many years experience in C, and have carried out one very successful project in C++.
Project management: I have supervised teams of up to six successfully.
Image processing and graphics: Thirteen years in digital television, mainly developing digital video effects and digital recording, plus over two years involved with video streaming on Linux. I am familiar with both Gstreamer and FFmpeg, and have used both at the code level as well as the command line.
Hardware: Worked closely with the hardware engineers on digital television, designed one board in the effects machine, used test gear to resolve interaction problems between hardware and software.
Bare Metal: Experienced in programming at the lowest level, including implementing boot loaders and performing board bringups. I have also worked with microcontrollers.
Algorithm design: Experienced in applying mathematics, particularly solid geometry, to problem solving.
Communication: Have taught training courses and given technical presentations, two of which won RTS awards.
Python. I have completed a significant project using objective Python and the pygtk graphics support.
Perl: I have written three major packages in Perl, an online bookshop, a backup system and a package for controlling manufacturing. I am also working (as a volunteer) on a real-time audio package in objective Perl for a live drama environment. This has now been used successfully in two shows.
Other scripting: As an adjunct to many projects I have written scripts using Bash and TCL/TK. I am reasonably fluent with all of these even though they have been peripheral to the central parts of the projects. I have written a Python script to implement a form of DCL wildcards on Linux.
Networking: I am familiar with many protocol families including Ethernet, CAN, DecNet, TCP/IP (both stream and UDP) and the derived protocols such as NMEA (marine) and DMX (entertainment industry).
I am able to work by telecommuting from home, and have both a development system (64-bit Intel I3 with 6.5T of disk space) and my own testgear. I carry insurance for working on client hardware at home. However I am also quite happy to work on any site within approximately one hour's driving of Andover, or which can be reached by train in two hours.
5th August 1955, Farnborough, Hants, England.
Married, no children.
Full, Clean UK Driving License
UK Private Pilot's Licence (Cert of Exp Lapsed)
Have previously held (now expired) US work visa
7 O levels
4 A levels
University of Cambridge (1974-1977), upper second class honours.
Engineering Tripos Part I (Electrical Option)
Computer Science Tripos Part II
French to O level
Norwegian (rather rusty now) Linguaphone Course
Survival level German
1997-> Tanglewood Algorithms Limited
1983-1996 Questech Ltd
1981-1983 Cardkey Systems
1979-1981 John Bell Technical Services
1977-1979 Arbat Systems Ltd
1976 (Long Vac) Technitron Ltd
1975 (Long Vac) MSDS Frimley
1974 (Year before univ. ) MSDS Frimley
1973 (Long Vac) CI Data Centre
I left Questech Ltd. after 12 years, finishing as head of software, and formed my own company, Tanglewood Algorithms Ltd. I have been doing contract programming and system building through this company for the past eighteen years.
For a Local Theatre Company, October-November 2017
Developed a controller for on-stage lighting effects using a PIC microcontroller. Performed hardware design as well as writing software.
(Break for personal reasons.)
B-Cam, 3 months Jun-Sep 2017
Developed a prototype for a body-worn camera for security applications. This can record high-definition video and simultaneously stream a low-resolution preview over a network, including WiFi. It buffers the compressed video in such a way that up to five minutes of video and stereo sound are held in RAM. When the record button is pressed this is released into the recording ahead of the live video. It performs text overlay and can sign the recorded video using a private/public key pair to ensure a valid chain of evidence.
The first version was coded using Gstreamer, but this was replaced with direct calls to the AV libraries in FFMPEG in order to obtain better control of the stream.
The prototype used a Raspberry Pi Compute Module 3. I hand-wired the custom electronics on veroboard.
Kent Modular Electronics, 2 Months Jan-Mar 2017
Developed a resistive touch screen controller using PIC32MX. This converts single and dual touches and gestures to messages which in sends over a serial line to the host computer. The controller was programmed in C using MPLAB and PicKit3. Also wrote a simple GUI in Python to test the controller and calibrate the touch screen.
(Break to find and move house.)
Vision Engineering, 2 Months Jun-Jul 2016
Linux, Yocto, Video
Worked on a project to stream video from a microscope. Unfortunately the project was cancelled due to hardware problems.
Rapiscan, 2 Months, Feb-Mar 2016
Linux, Windows, Python, GUI, comms
Developed in objective Python a GUI front end for testing the sensors in the RTT110 baggage X-ray system. This involved using the pygtk graphical interface, serial and ethernet comms and interworking with the open document standard. The end result is a very user-friendly GUI which can perform both automatic and manual tests and allows both the test engineers to run standard sequences and the development staff to access most of the sensor subsystem at the bit level. The software produced is truly cross-platform and will run on both Windows and Linux.
Feabhas, Short, Dec 2015
Rewrite the labs for a Linux driver course to work with current versions of Linux and current Beaglebone board
IMC, 4 months, Jul 2015 - Oct 2015
Linux kernel, drivers
Setting up Linux kernel, filesystem and GUI on a Sitara processor for use in a new generation of measuring instruments. This includes driver writing and rewriting the build scripts to create a cutdown runtime system.
Ericsson, 10 months Sept 2014-Jul 2015
Linux Kernel, Device Drivers
Porting a new version of the Linux kernel to legacy hardware. This was necessary to make the old boards, many of which are in service around the world, compatible with new option cards. This involved a great deal of low-level debugging on the TI Sitara ARM processor family. It also involved formal version control and using Jenkins to confirm build quality and integrity.
Offshore Systems, 6 weeks, June 2014 - August 2014
C++, Linux Kernel, Video Drivers, Image Synthesis
This was a brief and rather rushed operation to ensure two versions of a systems management package for top-end motor yachts were delivered to meet tight deadlines. This involved getting video drivers working under Linux on an iMX6 quad-core processor, and writing a suite of image synthesis functions (organised as a group of C++ classes) to draw perfectly anti-aliased synthesised instruments such as ammeters, tachometers and engine status instruments.
Wireless Measurement, 11 Months, July 2013 - June 2014
PIC, Comms, Error Correction, Mathematics
I developed a system for communicating with intelligent tools at the bottom of boreholes, such as oil wells. This has been implemented on a dsPIC33 processor in C. It involved writing the whole package including software modems, error correction protocol handling and diagnostics. Specifically it involved writing a software digital PLL that could pick a weak signal out of noise, then implementations of both turbocode and Reed-Solomon error correction.
Lucy Switchgear, 6 Months, November 2012 - June 2013
Linux Drivers, Embedded, Cryptography, WiFi
A recent contract has been developing device drivers for an embedded control system for large-scale power distribution. This involved writing network drivers for the Freescale iMX25 processor running Linux, target debugging using JTAG and KGDB, fixing problems with the development system and developing in-circuit programming.
I also performed an upgrade from the 2.6.31 to 3.7.7 revision of the kernel. This enabled several major networking protocols and allowed the target to work as both WiFi client and access point. This allowed any encryption method supported by SSL to be used with the WiFi.
Dialog Semiconductor, 3 months, August 2012 - November 2012
Git, Ruby on Rails, Perl, Linux
A previous contract involved setting up a version control system for a major chip manufacturer. This included installing Gitorious, a large open-source package written using ruby on rails, determining procedures for its use, writing documentation and creating a suite of wrapper scripts to implement company procedures. This is now in use to track the development of device drivers for the company's products.
Provision, 12 Months, July 2011 - July 2012
TEAM LEADER Video Streaming, Cryptography, Public Key, U-Boot, Embedded Linux, Device Drivers
The previous contract had me working as software lead on a new consumer electronics product which involves video streaming over wireless transport. This involved running a team of up to six software engineers, plus myself taking on the low-level drivers for the SOC devices, and conducting technical discussions with chip makers. This project has now ended with the product going into production. I took this over at a point where the team were leaderless and the company was in serious difficulties, and have turned it around to produce a cohesive, dynamic operation which is well capable of turning out viable products. My personal contribution to this project was a quantity of low-level code, a package written in Perl which assigns serial numbers and encryption keys to units, and setting up and maintaining the source control system using git.
This product is now available for sale and is getting five-star reviews an Amazon http://tinyurl.com/cg2tw7t, due at least in part to the effort I put into making the connection protocol extremely reliable.
Miura, 6 months, Jan 2011 - July 2011
Chip and PIN, Cryptography, Public Key, ARM, Linux, Drivers, USB, Board Programming
Before this I worked on contract to develop a board programming system for a new range of chip-and-PIN payment terminals. This involved booting an ARM processor over USB, and then programming on-board memory and configuration fuses. To do this I had to go to a very low level, interact with the chip manufacturers to resolve problems, use testgear and untangle some very awkward hardware problems. I also had to develop methods for working with public-key signatures on the downloaded software.
Imagination, 7 months, May 2010 - Nov 2010
Video, Android, Linux, ARM, Intel
Recently I worked on porting a video codec driver to Linux and to Android for both ARM and Intel architectures. This codec is supplied to the SOC manufacturers as a design which is then realised in silicon. I then brought up both conventional Linux and Android on the new chips, and adapted an existing codec driver to work with the new hardware. To do this I had to debug the silicon itself at a very low level, sorting out problems with the boot sequence as well as solving driver issues.
Aerostream, 8 months, Sept 2009 - April 2010
Moving Maps, Linux, Mathematics, Video
This contract was to develop a system to create on-screen maps for a digital media company. This is under NDA, and hence full details cannot be disclosed. This requires database design, algorithm design, anti-aliasing and some graphic work. This is now running and has been delivered to the client.
I also worked with MontaVista, the embedded Linux distributors, porting their distribution onto client hardware, driver writing, consulting and running training courses. This has included on-site troubleshooting in the UK, Germany, and Scandinavia. I have worked on the Intel, Arm and PPC versions.
Projects at MontaVista included developing a "talking dashboard" integration unit manufactured by a mobile phone company for a major German car maker, road traffic sensing and control, several network routing projects and one video display. The "talking dashboard" involved integration with the car including CAN bus, audio playback and capture, and phone integration.
Training includes formal lecturing, workshop sessions, hands-on laboratories, one-on-one coaching and open discussion. A particular specialisation is the "kernel autopsy" where I dissect, on the projector, the kernel boot sequence or the internals of a device driver. I have mostly been teaching porting and driver writing but can teach user-space applications as well. A lot of the courseware I have used is Monta Vista copyright, but I am able to develop courses as required.
I used HTML, Perl, Apache and MySQL to develop an online shop selling books for electronic readers. I am no longer operating this site as I found myself in direct competition with Amazon, however I learned a lot by doing it.
In 2005 I spent six months contracting for Pace in Bradford, mainly developing debug techniques for embedded Broadcomm MIPS processors.
Much of the earlier contract work was for Questech Ltd. The last project involved building a complete real-time Linux-based control system for a new DVE. This system includes a graphical interface written in TCL, TCP/IP networking operating in real time, and a modified kernel running on an IBM Power PC 750CX or -CXE. which operates in real time down to a granularity of 16ms.
During my 12 years at Questech I was involved in the development of a number of products for the broadcast television industry. I have also been responsible for the development of the in-house computer simulation facility, which has enabled us to predict the behaviour of proposed products with a high degree of accuracy. This facility has enabled us to control development costs and lead times sufficiently well to be able to compete successfully in markets otherwise dominated by major multinational companies.
I have also designed and helped to develop a real-time multitasking kernel for in-house use. This was incorporated in several products. It provides both co-operative and pre-emptive task switching, intertask messaging, memory sharing, and queue management. It also provides a disk filing system, and networking facilities.
The following is a representative sample of the products which I have helped to create, minor products omitted. More recent products have been briefly summarised in order to comply with NDAs.
Borehole Comms Board. This is a communications board designed to be installed in a tool lowered down a borehole such as an oil well. It establishes communications with the surface using just the hoist wire and the bore itself. This can be characterised as a transmission line with significant attenuation and randomly varying characteristic impedance. The comms board both sends and receives an FSK signal using VLF carriers. To send it constructs the carrier waveform in software and sends it to a DAC, to receive it takes raw ADC samples and performs a software synchronous demodulate. It computes Reed-Solomon polynomials to detect and correct errors. It inserts and detects Barker codes to determine the boundaries of the data bitstream. It then presents the connection to the application as a form of socket interface. It manages queue prioritisation, retries and real-time clock synchronisation. This is approximately 7,000 lines of C running on a dsPIC33 processor with no operating system. All the code, including mathematical processing and device drivers, was written by me.
Switchgear remote control. This product is based on a Freescale iMX25 processor which I upgraded from Linux kernel 2.6.31 to 3.7.7. This allowed it to run as a Wi-Fi access point enabling control from a wireless equipped laptop. This project involved working on drivers for Wi-Fi, Ethernet, I2C, CAN and SPI, and writing in TCL and Perl scripts to control the build and onboard programming. This project also included cryptography and work at the bare metal level on the bootloaders.
HDMI over wireless. This system consists of a transmitter which can be inserted in the HDMI link between a PVR, a satellite receiver or a cable box and the local TV, and a second set receiver. It repeats the program over wireless to the second set receiver. It also transfers the IR remote control back to the program source. This allows the user to have a second TV in, for example, a bedroom, complete with all the remote control functions of the satellite or cable source. This involves both wireless transport and the cryptography needed to comply with content management standards.
"Chip-and-PIN" payment terminal. I developed a package to perform automatic programming of the processor options and the flash memory, solved several problems in the software itself, and initiated some hardware improvements.
Video codec driver. Performed a port to embedded Linux and to Android.
Moving map system. Designed and coded the whole product. This provides a variety of map formats for in-flight entertainment use allowing continuous zoom from a map of the world down to showing individual taxiways on an airport. It supports a variety of map projections, generates anti-aliased video out, displays day and night modes, and handles place names in mixed alphabets. It also offers a perspective mode, with the map laid down and a horizon on the screen. The sky above is correctly rendered, even showing constellations at night.
Vehicle phone integration board for a major cellphone manufacturer. I helped bring up the ARM processor and jointly with two other engineers ported Linux onto the board. I wrote the ALSA sound driver and the driver for the non-standard NAND FLASH interface.
Traffic loop to network interface board. This board was designed by a major traffic control company, and is used to detect vehicle speeds on major roads, then pass the information on over a network. I did much of the board bringup, wrote the drivers for the custom hardware, and located several hardware problems with the prototypes.
6101 Effects Framestore. This is a simple zoom machine for broadcast use. I designed the software and wrote about half of it.
Charisma ® DVE. This became an industry-standard high quality DVE in the ten years after its launch. I was involved in the design of this machine from the beginning, working closely with the hardware engineers on the structure of the frame stores and interpolators, which are now covered by patents in most major countries. I performed the original computer simulations of the machine, wrote the hardware and software specifications, and supervised the writing of the software. This machine, and its successors, became the primary revenue earning product of the company, and over 400 systems were installed in television studios and facilities houses worldwide.
SSVR ® (Solid State Video Recorder) This was the world's first commercially available video RAM recorder. I invented the basic structure of this machine, worked closely with the hardware engineers during its development, and wrote most of the original software for it. It is a very versatile product, and is used for a number of applications including editing, layering and removing satellite delays. The SSVR was used during the build up to the Gulf War to correct the delays during the three-way link at Christmas, and was mentioned by General Sir Peter de la Billière in his book "Storm Command" (P171) "Brilliant television engineering linked my Gulf forces live to services in Germany and the United Kingdom, and the result (which I later saw and heard on a video recording) was exceptionally moving."
DTV This product is a card set which is installed in a PC. It is a TBC, Mixer and optional DVE, controlled by panels which are facsimiles of normal hardware mixer and DVE panels displayed as windows under the MS Windows system. This product was originally developed by a subsidiary company, but when the project was seen to be overrunning badly I was called in to review the hardware design and oversee a complete software redesign. This product was launched after a high-pressure development exercise which involved my working through several months of weekends to write the control panel software.
CLEO® Curvi-Linear effects option. This is an upgrade to the basic Charisma DVE, which allows it to create curved surface effects. It performs in real time, creating the shapes and performing hidden surface removal in response to operator joystick movements. The unique properties of CLEO, which have made it a market leader, are its true three-dimensional geometry and immediate response to operator inputs, patented features which competitors have unsuccessfully attempted to copy. I invented the basic structure of CLEO, and worked closely with the hardware engineers on its detailed implementation. I performed computer simulation of the effects, wrote the bulk of the software and supervised the writing of the rest.
Shape Maker® (previously known as CLEO level four). This is a software package which runs on a Commodore Amiga computer. It is used by television graphics specialists to create three-dimensional shapes for the CLEO system. The unique feature of this package is that it not only defines solid objects, but the movements which parts of the objects can make, and the bindings of those movements to the axes of the operator joystick. Using this system a skilled operator can create the effects which were commonly seen on, for example "Top of the Pops" and "Live and Kicking". I designed and wrote the whole package.
Charisma X® This was the last version of Charisma. It was a substantial redesign of the original system incorporating ten bit data paths in place of the original eight bit and a revised interpolator design. It was however completely compatible with the earlier system. I performed simulations of this product and some software design. Most of this product was based on my earlier work.
Wrap option. This is a simpler version of the CLEO system which offers a small range of fixed effects at a much lower cost, for the Charisma X system only. I performed the computer simulation of this product and wrote some of the software,
"Teach Yourself Linux" (Hodder UK and McGraw-Hill USA) -- January 2004.
This is a full introductory course on Linux, aimed at the new user. It covers installation, use of CLI and GUI, office applications, databases, servers, security, system maintenance and troubleshooting. A reader who works through all the exercises will gain a working knowledge of Linux, and insights into advanced topics such as embedded systems and patching the kernel.
At Your Service (Real-Time Linux article) -- New Electronics 8 Jul 2008
Design & Elektronik (German) Sept 2008
Elektoronik Tidningen (Swedish) Apr 2008
Aktuel Elektronik (Danish) Sept 2008
Television & Video Production -- April 1987
Digit (Guild of Vision Mixers' Journal) -- May 1987
International Broadcast Engineer -- May 1987 & Sept 1990
Electronics Weekly -- Jan 25 1989
Paper on SSVR in Proc IBC 1988
"Tales from the future", EC publication, 2011.
The Last Word (Science Fiction) Futures (Nature Physics) Jan 2008.
Harnessing the Brane Deer (Science Fiction) Futures (Nature) Dec 2008
(This is now online in the "Best of Futures" at
‘Run from the Stars' and 'Turn to the Stars' (Science Fiction), Amazon Kindle May 2015.
‘Snow White - A Pantomime for the Information Age.’ Script to be performed on stage in 2018.
Patents: (Minor applications omitted, long titles abbreviated)
1986 September * Solid Object Combiner
1986 September * Edge Generator
1986 September * Store & Interpolator
1986 September * Multifreeze
1986 December *+ Improvements... editing of television pictures (SSVR)
1987 June *+ Improvements... editing of television pictures (SSVR)
1990 January *+ Improvements... digital video effects (CLEO)
1990 April Data Processing System
1992 March Sampling & Filtering of Digital Signals
1993 February Improvements in and relating to digital filters
1993 April Improvements in high speed sorting
1993 June Graphical Straight Line Processing
1993 June Accurate Digital Divider
Also filed in USA + Sole inventor
I have been using this operating system for about eleven years, and have gone deeply into the internals. I have written programs for both the command line environment, and X-windows. I have brought up Linux on about a dozen new platforms.
+ Bare metal
I enjoy getting to grips with a processor at the lowest level, and sorting out the mechanics of software installation and booting. I have worked on bot u-boot and Redboot implementations, and have contributed one bugfix to u-boot itself.
I have written code for several PIC processors including 18F series and dsPIC33. I have used PICkit 3, XC8, XC16 and MPLAB X development tools.
+ Source control
I have set up and maintained cvs and subversion repositories. At ProVision I maintained a complex set of interacting repositories for the whole project. I have also set up a simple git repository on my own computer.
I am familiar with composite, component, parallel digital, and serial digital television signals and have looked into the JPEG and MPEG standards. I have also designed (in conjunction with the hardware engineers) digital filters, interpolators, and special effects processors for television signals. I have also, at the other end of the chain, worked on set-top boxes.
I have designed hardware in a small way, and am familiar with using testgear including oscilloscopes, logic analysers, JTAG emulators and comms analysers.
I have set up my own Apache server to test the webshop before releasing it to a public server. I also debugged the production version of the shop on the public server, despite the hosting provider's tech support people being rather out of their depth with the complexity of the site I was creating.
I have been using MySQL for several years, having initially done a design study using it for Forest Enterprise, now the Forestry Commission. I used MySQL to create the webshop. This includes creating tables to keep track of books in stock and customers, and performing complex queries to find, for example, "Books by Dickens translated into French".
I have used Perl intermittently, the largest project being about 9,000 lines of code for the webshop. This provides login and user profile, search facilities, download, logging, shopping cart and PayPal integration.
At Questech I often took responsibility for bringing new recruits up to speed on the products, and the work in progress. I also undertook coaching in Linux and in the mathematical topics needed to work on the Questech products. In conjunction with MontaVista I have run courses of one day to one week duration including hands-on workshops and courses run overseas.
+ C language
I have been writing C for about 25 years, and have produced in excess of 120,000 lines of code, the bulk of which is now in use, either in house, or in TV installations around the world, much of it in "mission critical" applications, such as on-air use in television broadcasting.
I have written assembler for the 68000 family, PPC, transputers, Z80, many other processors. This includes both "bare metal" coding of device drivers, and assembler translation of mathematical algorithms for speed.
This machine is sadly now only of historical interest, but I include it in order to demonstrate the length of time for which I have been writing assembler (over 30 years).
I have used this family of machines for about 14 years, and have programmed extensively in C and a little assembler. I have also been system manager on a MicroVAX for about seven years.
I have a working familiarity with the Sun and HP workstation implementations, including networking and X-Windows.
I pioneered in-house use of OS/2, and have set up a network using Warp Connect. I have also used the internet connection software, and have written PM applications.
I have written both MS-DOS and MS-Windows applications.
I have attended the basic, advanced and networking courses. These were in preparation for use of OS/9 on a project which was postponed.
I am familiar with the internals of the protocols, and also with obtaining and interpreting the RFCs for the parts with which I am not familiar. I have written code to implement parts of the protocol suite which were missing from one particular implementation. I have used the Linux UNIX, HP, IBM OS/2, Winsock and CMU-IP implementations, and have configured most of them. I am also reasonably skilled at network troubleshooting.
I built my own website some years ago, and have developed an extensive webshop selling downloadable electronic books.
I have written extensive technical specification documents for a variety of projects. In particular I have learned to adapt the style of documentation to the particular needs of the project and the requirements of the intended audience. I have also written user manuals and promotional articles.
I have supervised programming teams of up to six on projects of varying duration.
I have conducted many interviews for technical positions, and developed methods for recording and comparing candidates' performances.
I have provided technical support to the marketing department, conducted customer negotiations, and personally obtained two orders.
I have been responsible for the specification and selection of capital equipment and consumables for my section of the department.
I have taken several first aid and fire safety courses, although I have no current qualifications.
Interests: Cookery, creative writing (I contributed the Science Fiction column to "Vision"), DIY, photography, amateur dramatics (I run the theatre technology for a local drama group), and exploring the internet.
I am also a safety certified stage pyrotechnician, ASP registration 2014256, and recently ran the effects for production of "Dick Whittington", a short clip is at https://spideroak.com/browse/share/rbtanglewood/video/Shared.