I am a software engineer who spent the first 11 years of my career developing video games and tools for video game creation. Since 1998 have been doing embedded systems programming, including web enabling embedded devices, as well as full stack web applications.
One of my more valuable assets is my ability to work at any level of abstraction, from high level Javascript through C++ down to debugging hardware with logic analyzers and oscilloscopes. I have a broad variety of experience and can jump into an existing project/code base and quickly be doing productive work. I am self motivated and don't require much management.
I have watched the computer industry grow up, and have grown up with it, continuing to enjoy learning new technologies as they emerge. I prefer Linux as my primary development environment, but am capable of working in Windows as well.
Added modern web interface to legacy hardware control systems |
Given a text based API over a socket, implemented full stack server and web client providing a modern, remotely accessible interface into a desktop windows application, configuring and controlling large industrial equipment. Clients enjoy being able to operate these systems with tablets where they need to, no longer having to sit in the control booth. |
|
Academics placement tests |
Comprehensive web app for authoring, administering, and reporting academic placement tests utilizing modern web stack. See the Django and browser sections of skills below for full list of technologies. |
|
Major theme park ride components |
Developed software and control infrastructure to delight guests on a recently opened major theme park attraction. On this video, and the image to the left, every place you see a display with a Z on it, it is running custom video playback software I wrote, which runs on a rapsberry Pi, and is responding in real time to guest shooting at them. There are over 100 of them in the ride. |
Python/Django |
Comprehensive web app for authoring and administering academic placement tests. Configuration management for embedded Pi based systems via web, front panel, & central server (low level I/O in C++, Python for logic, glued together via sockets). |
Browser side HTML/DOM/Javascript (fully buzzword compliant) Responsive web design. |
Modern client side apps, including question editors for academic testing system, as well as modern interface to legacy industrial controls, using modern web stack pieces including Ecmascript 6 / handlebars / bootstrap / jQuery / chai / jasmine / jest / /backbone.js / /React / CreateReactApp/ / /Redux / REST / GraphQL Web interface for configuring embedded application parameters with real time update (COMET), responsive interface using bootstrap |
Server side web application programming |
NodeJS /
npm /
|
Deployment / automation / virtualization / testing |
Webpack /
Babel /
Sass
|
iOS/Android |
Wrote an enterprise app which communicates with a back end server that allows the client to view (cached) lists of people from the server, generate new scheduled events and queue them for delivery to the server, and integrated with google maps to display maps with people's locations marked. Also uses push notifications to know when to fetch updated lists. Ported and debugged several iOS games to Android using the Apportable SDK. |
Project Management |
Provided project and engineering management on a wide variety of successful projects. Breaking a project down into tasks, time estimation, resource allocation, progress tracking, etc. Prefer agile methodologies such as Scrum or Kanban |
C/C++/Objective C |
Linux / Windows / MS DOS / Embedded. Everything from bit banging time critical C code to large OO systems in C++. Experience with sockets, interthread communication/mutexes (and how to prevent race conditions), etc. Prefer C++0x11 or newer |
Generation of header and definition files in multiple languages from a common source definition. XML as API for RPC, XML as data exchange format, XML as data definition language. |
|
Perl & shell scripting |
Core functionality and web interface server side for SMS3. All sorts of projects. Prefer Perl5 with Perl Best Practices intelligently applied. |
Mostly postgreSQL, also SQLite3, MySQL, Informix, redis for configuration management, mongo Backend for SMS3, Storing song metadata, tracking user music preferences, complex search/filtering options. Dynamic synthesis of SQL queries, data abstraction/encapsulation using views into tables, data integrity via constraints. No administration required, tens of thousands of units fielded. Query optimization (SMS3 ran on a 1Ghz 486 equiv). |
|
Unix application development |
Linux & Embedded Linux. Focus on network technologies, deployable systems with no administration required. |
Distributed development |
git, wiki, Instant Messaging, ssh, vnc, Google Docs (and rest of online office suite, plus drive), Slack, Signal, Skype, Doxygen and of course email. |
3D math and rendering |
Experienced with 3D math and rendering both in software and via OpenGL/DirectX, Physics/Collision detection, etc., see World Foundry |
Automated builds and testing |
Automatic build verification, regression and smoke testing both client and server side Working toward test driven development, using Design by Contract, if it runs without asserting it is correct . Also automated asset production pipelines for video games. |
Sysadmin |
Maintain my local network with about 12 computers (and dozens of other devices with IP addresses), Bind(DNS), DHCP, NFS, SMB, Apache, multiple routes to the internet. |
8051/embedded devices |
Embedded firmware on small RS-485 networked devices. I wrote
the majority of the custom code found in IntellinetControls
product line, as well as contributing to various Russound
products. This included managing a custom embedded linux spin (for
the C4), socked based communication (between the C4 and the DH1),
and RS-485 based networking (for the other components), as well as
providing web based configuration and control. In particular the
audio keypads
All of the above had to happen in real time. There were 0 bytes free in the ROM near the end of development. Later features required first optimizing the existing code to make room. |
GUI toolkit under Linux (dynamically generated interface in World Foundry attribute editor). |
|
Video games |
|
MIPS RS3000 |
|
80x86 et al. |
IBM PC |
680x0 |
Sega Genesis / Sega-CD / Amiga / Embedded |
Z80/Rabbit |
Sega Master System / Sega Genesis Sound Subsystem (real time sampled audio playback while also executing MidiFile player) / Intellinet RS485 Network to Ethernet adapter |
65816 |
|
SPC700 |
SNES Sound Subsystem: audio driver, including reverse engineering the boot ROM so that the Game Genie could play sounds, yet restore the sound system to its initial state so the game could then start correctly (the hardest part of that was, the ROM was bank switched out as part of the load process, so we had to pull the code which managed the transition from RAM and dissassemble it so we could work out what hardware registers were used for the bank switching) |
Hardware Design & Debugging |
PCB Layout, Digital Logic using PAL's and small embedded processors. Debugging of hardware using oscilloscopes, logical analyzers. |
Jan 2021 — Present |
CTO for Diglossia
|
Feb 2011 — Apr 2020 |
Freelance Contractor - for various companies, including
|
Jan 2002 — Feb 2011 |
Freelance Contractor — Mostly worked for Russound LMP:
|
Jul 98 — Dec 2001 |
Freelance Contractor — Mostly worked for Intellinet Controls:
|
Oct 96-Jul 98 |
Senior Software Engineer at Recombinant Limited
|
Sept 94-Sept 96 |
Senior Software Engineer at Cave Logic Studios, Ltd.
|
Feb 94-Aug 94 |
Freelance Contractor
|
Feb 93-Jan 94 |
Senior Software Engineer at Alexandria, Inc.(later known as Oddworld)
|
Feb 90-Feb 93 |
Freelance Contractor — Various Console video games for Sega Master System & Sega Genesis:
|
Jul 87-Feb 90 |
Software Engineer for Spectrum HoloByte
|
See my home page for more about me personally.