I’m a software engineer with ten years of experience designing and developing web applications and embedded firmware. I’m fluent in Python, C, C++, Objective-C, SQL, HTML, x86 assembly, and English. I learn quickly, care about detail, and love computers and mathematics.
Skills: what I do...
- Develop web applications 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.
- Create native iOS apps for iPhone and iPad devices. I’m familiar with all aspects of app development from design to code to the App Store.
- Develop embedded firmware for data loggers, control systems, and other electronic devices, using 16-bit and 32-bit microcontrollers. I’m familiar with many comms protocols, such as CAN, J1939, SPI, and IP.
- Write desktop tools and automated test software.
- Administer web servers and networking tools on Windows or Linux.
- Manage small teams of engineers and oversee product development.
- Communicate and document effectively and relate well to people. I also design, write specifications for, and manage projects.
Oyster.com – Software Engineer and Manager – June 2010 to May 2012:
- Managed a team of five software engineers and oversaw architecture decisions for software projects. Supervised the datacenter’s server and database configuration. Managed the hiring of new software engineers.
- Co-developed Oyster.com’s photo-rich iPad app, including the app’s Objective-C codebase and its API backend.
- Implemented the backend for Oyster Shots, a tag-based photo search engine and filtering system for Oyster’s 750,000 hotel photos. More info.
- Ported the entire C++ web backend (which produced static HTML pages) to Python (which renders all pages dynamically). This allowed us to develop and release business-level features much more quickly.
- Wrote code and tools to internationalize and localize the entire website, including automatic translation of hotel reviews via translation APIs.
- Implemented a personalization system to recommend hotels and articles a user might like, based on an “interests profile” generated for them.
- Designed and implemented a user accounts system, enabling users to save hotels, invite friends, add rate alerts, and review their bookings.
- Wrote much of the site’s hotel booking system (turned off late 2011 for business reasons), including secure credit card and payment handling.
Brush Technology – Software Engineer and Co-director – August 2006 to now (with a two-year hiatus while at Oyster.com):
- Co-founded and designed the microPledge crowd funding website, and developed about a third of its codebase (in Python and PostgreSQL). microPledge implements secure financial transactions, advanced Ajax-based voting, and it scales 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 interfacing using 8-bit and ARM7 micros for Baycity Technologies and ILR.
- Developed low-latency IP networking software in C and Python for the high-frequency trading industry.
- Co-authored several small open source projects including a Python-based build tool and a row-object mapper for web.py. Wrote articles for our programming blog, for example, on Knuth, protothreads, and bloatware.
- Managed projects and staff. As a cofounder, I’m 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.
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.
Below are a few people I’ve had the pleasure of working with. Please let me know if you need more specific contact details.