I’m a software engineer with fourteen years of experience developing web applications and embedded firmware, as well as providing technical oversight for small teams of software developers.
Skills: what I do...
- Develop websites that perform well and are easy to use. I’ve used various languages and databases, and I’m experienced with the scaling and caching required for large-scale websites (2M pageviews per day).
- Create native apps for iOS and Android devices. I’m familiar with all aspects of app development from design to code to app store submission.
- Contribute to open source projects, for example Python (more here).
- Administer web servers and automate complex code deployments on Windows or Linux.
- Write desktop tools and automated test software.
- Develop embedded firmware for data loggers, control systems, and other electronic devices, using 16-bit and 32-bit microcontrollers.
- Provide technical leadership for small teams of software engineers, and oversee product development.
- Communicate and document effectively and relate well to people.
- Designed and developed a real-time image scaling and badging service using Python and ImageMagick (able to serve hundreds of image scaling requests per second).
- Implemented a duplicate image detector using the dHash perceptual hash algorithm and BK-Tree data structures.
- Wrote a type-safe image metadata injection service using Scala and ElasticSearch.
- Worked on internal server setup and deployment tools, load balancing configuration, and React-based admin tools.
- Instigated database best practices on the engineering team.
- Ported our legacy C++ web backend to Python. Instead of generating static HTML, we now render all pages dynamically, in a language that lets us develop and release business-level features much more quickly.
- Helped design and implement a custom content management system that enabled us to publish hotel reviews realtime. The CMS is also used to write all of our travel content, with an integrated system that allows us to help users and boost revenue.
- Co-developed two mobile apps: a cross-platform iOS and Android app using React Native, and Oyster’s older iPad app written in Objective-C.
- Implemented the backend for various website features, including a tag-based photo search engine and a hotel booking system.
- Implemented many web-based internal tools, such as a photo album editor and a workflow system to help salespeople schedule photoshoots at hundreds of hotels per month.
- Wrote tools for our web infrastructure: a new code deployment system using Ansible, tools to translate and localize the entire website, a data analytics pipeline using Snowplow Analytics and Amazon Redshift, and a system to send personalized emails.
- Managed the transition of our 12 points of sale from plain http to SSL while closely monitoring SEO performance.
- Co-wrote heavily parallelized software to resize and watermark millions of images in many different sizes using Amazon EC2.
- Managed a small team of software developers. Oversaw architecture decisions and performed code reviews for most of Oyster’s software projects. Helped the team switch from Subversion to Git. Led the hiring of new software engineers.
Brush Technology – Software Engineer and Co-director – August 2006 to May 2010:
- Co-founded and designed the microPledge crowd funding website, and developed about a third of its codebase (in Python and PostgreSQL). microPledge implemented secure financial transactions, advanced Ajax-based voting, and scaled to thousands of campaigns and users.
- Designed, implemented, and promoted Gifty Weddings, a website that helps couples make great wedding gift registries.
- Wrote embedded firmware in C++ for Hamilton Jet’s large-scale jetboat control systems. Wrote testing and GUI tools in Python and C#.
- Worked on cellular telemetry firmware and GPS interfaces using Atmel AVR and ARM7 micros for various clients.
- Developed low-latency IP networking software in C and Python for a client in the high-frequency trading industry.
- Wrote articles for our programming blog, for example, on Knuth, protothreads, and bloatware.
- Managed projects and staff. As a cofounder, I was also heavily involved with the company’s business planning and decisions.
Harvest Electronics – Software Engineer – October 2002 to July 2006:
- Designed and developed the web and admin interface for their solar-powered weather stations – the clean UI and weather graphs really made Harvest’s product stand out. Wrote software to interface to the GPRS modems and administered associated databases and web servers.
- Wrote embedded firmware in C and assembler for MSP430 and ARM7 micros, including low-level boot loaders, serial and radio comms, digital audio, and I/O control logic.
- Developed various network and serial comms tools in C, C++, and Python. Worked heavily with the Win32 API.
I have a B.E. in electrical and computer engineering, and graduated from the University of Canterbury in 2002 with first class honors, GPA 7.9/9. For my final-year project I designed a small stack-based CPU in VHDL.
I have also discovered a truly marvelous proof of Hofstadter’s Law, but unfortunately this margin is too narrow to contain it.
My dad taught me how to program by teaching me the Tao of Forth. Two of my first projects were writing a Forth compiler in x86 assembly, and then writing a small 32-bit OS in my Forth. I love things small, fast, and light – and that’s paid off, especially in my embedded work.
Other than that, I enjoy reading and writing, and I edited and designed a small-scale magazine. I’m into unicycling, typography, and piano. I love my wife and family. I aim to keep the commandments, but you may find me breaking the conventions.