This is my résumé (CV). I try to keep it up to date, although it may be out of date by as much as a year or three. If you want to download this resume, just right-click this link and "Save as".
Location: Seattle, WA, USA (willing to relocate)
Statement of Intention
I desire to work in a relaxed environment, on relatively interesting projects, where I can utilize my skills to the fullest, learn new things, and work with fun and intelligent people. Although I have significant web development experience, I'm not interested in jobs where frontend web development is the primary focus. I prefer backend and non-web development, especially developing tools and APIs for other developers to use.
Primary Skills (details below)
- 20+ years of general programming experience
Knowledge of many programming languages, including:
- C#, MSIL, Managed C++, JScript.NET
- Perl and Python
- Assembly (for x86, 6502, z80, and Atmel chips)
- Lisp and Scheme
Experience with many technologies and platforms:
- .NET (overall framework, Windows Forms, ASP.NET, MSIL, etc.)
- Docker and Kubernetes
- Win32 (raw Win32 API, MFC, and COM/ActiveX [using both raw C/C++ and the ATL])
- SQL databases (ANSI SQL and TSQL with MySQL, MS SQL Server, and PostgreSQL)
- XML (XML, XSD, XSLT)
- Embedded programming (in particular, development for Atmel chips in custom electronics)
- Microsoft SharePoint (I worked directly on SharePoint technologies and SharePoint itself when I was employed in the Microsoft Office Server team.)
- Strong attention to detail and a focus on code quality
- Quick learning
- Understand object-oriented programming and design, computer architecture, and code optimization
- Experience building, repairing, and networking computers in basic applications
- 1 year's experience baking healthy artisanal breads. Yum! See my baking page.
- Experience using and configuring MS-DOS, Windows 9x/2000/XP/2003/Server 2008/7, and GNU/Linux
- Basic configuration and administration of servers and desktop workstations
- Basic Microsoft Office skills (Word, Excel, Outlook, Visio)
- IIS, MS SQL Server, Apache, PHP, MySQL
- Microsoft Visual Studio, TFS
- Git, Subversion, mercurial, Emacs, vi, bash (shell scripting), general GNU (unix) utilities
- May 2016 - present - Senior engineer working at Microsoft in the SQL Azure / Azure Data organization. While in this role, I designed and implemented the Azure ARM resource provider for the Azure Data Migration Service, along with a generic framework for creating ARM resource providers. After that, I worked on the SQL Server to Azure SQL migration pipeline, and architected and implemented the MongoDB to Cosmos DB migration pipeline. Then I switched focus to open source databases and architected and implemented an engine-agnostic system for deploying and managing database systems on-premise using Kubernetes, which included the writing of a Kubernetes API server and Kubernetes operator/controller, the extension of the Kubernetes CLI, along with fairly extensive use of Docker. I also architected and implemented a highly available and redundant service for storing and maintaining database backups. Finally, I took on some smaller side projects, such as designing a domain-specific language to describe the dependencies between DLLs that use loose binding and dependency injection.
- January 2014 to May 2016 - Moved to Seattle, WA. Working on my own projects and doing related contract work.
- November 2011 to January 2014 - Contract work for Webmedia Estonia, designing and developing a high-level database engine to augment or replace SharePoint. I also designed and implemented a high-quality, standards-compliant, extensible WebDAV server.
- August 2011 to November 2011 - Taking time off, studying, and planning a move back to the USA.
- November 2008 to August 2011 - Senior developer for Webmedia Estonia. I worked primarily on developing a large SharePoint document management system for the Estonian government (the Ministry of Science and Education), integrating it with other Estonian government services (e.g. for document exchange and archival), and implementing Estonian standards (e.g. for digital signing). The system was modular enough that additional document management systems tailored for other organizations could be developed with minimal effort. I also developed a few SharePoint intranet sites with bidirectional integration with Microsoft CRM and other in-house and third-party systems (e.g. calendars, employee databases, etc). These were also modular systems such that 70-90% of the effort could be reused for future sites after the first site was built. Finally, I developed a fairly substantial Silverlight garden planner application, including a simple software 3D renderer. In addition to these large projects, which I implemented single-handedly for the most part (though of course as part of a larger team that included analysts, testers, etc.), I was involved in various smaller projects, including a number of e-commerce websites and an experimental number-plate-reading system for the police department.
- January 2008 to November 2008 - Sabbatical. I spent time studying baking, artificial intelligence, Estonian, and math; playing with friends; and relaxing. I also moved to the country of Estonia.
- January 2006 to January 2008 - Software developer for Microsoft Corporation, on the Microsoft Office Server team, building components on top of SharePoint, the Business Data Catalog (BDC), and the People profile store. I also did some work on SharePoint itself, and built tools to help streamline the development process for the various Office Server teams.
- January 2003 to January 2006 - Project lead and lead software developer for RosArt Multimedia, designing and implementing a distributed client management system for the SDSU Social Policy Institute in C# with a SQL database backend, called OTGMS. I also briefly worked on the open source .NET MySQL driver used in OTGMS. In addition to OTGMS, I maintained and developed web sites and applications written using Perl, ASP, MySQL, and/or PHP, and designed and created a large set of perl modules for use in a web server environment. Later, I created (in C#) a server-side system that allowed rapid development of e-commerce and other dynamic web sites by non-programmers, with the ability to maintain, reconfigure, and upgrade all sites from a centralized control panel. The system also scanned websites proactively to detect broken links and pages, and misconfigurations, and sent detailed reports to those responsible.
- 2002 to January 2003 - Software engineer for Datamar Inc. and SLCC (Student Loan Consolidation Center), writing COM components to support various ASP applications, doing database design and optimization, writing components and stand-alone tools in .NET to support ASP.NET applications. Developed a full-featured issue tracking system.
- October 2000 to 2002 - Software engineer for Trustium Corporation, creating COM components and .NET assemblies in C++ and C# for use in multi-tier web environments, SQL database design, web sites using XHTML, CSS2, ASP (JScript), and XML, and stand-alone utilities and testing applications (in C#, C/C++, VB, and Perl). Heavily involved in the creation of several highly successful real estate websites.
- August 2000 to October 2000 - Web developer for Equinta Corporation, creating web applications using HTML/AJAX/ASP (JScript and VBScript) [company folded]
- Previous - Various programming projects and computer repair for individuals.
- See my code page.
Potentially Interesting Publications
- Creating High-Performance Locks and Lock-free Code (for .NET)
- Roguelike Vision Algorithms
- Performing Automatic Target Motion Analysis
- A More Efficient Flood Fill
- Efficiently generating random numbers without bias
- Permuting Integers and Creating Bijective Functions using Block Ciphers
- Locks and Software Transactional Memory (STM) in .NET
- How the SQL Server hierarchyid data type works (kind of)
- A new data structure
- Available upon request
- 20 years of experience working with the .NET platform on Windows and GNU/Linux (via mono), including Managed C++, C#, JScript.NET, ASP.NET, and MSIL
- 7 years of experience working with C/C++
- 5 years of experience working with Microsoft SharePoint
- 4 years of experience working with SQL (MySQL, MSSQL, and PostgreSQL)
- 3 years of experience working with BASIC/Visual Basic
- 3 years of experience with the Win32 API, and some MFC experience
- 2.5 years of experience working with COM/ActiveX in raw C/C++ and using the ATL
- 2 years of experience working with Kubernetes and Docker
- 2 years of experience working with Go
- 2 years of experience working with Perl
- 1 year of experience with x86 assembly (plus 6502, Z80, and Atmel assembly)
- 8 months of experience working with Python (enough to write a Python compiler)
- 4+ months of experience working with Lisp (both Common Lisp and Emacs Lisp, enough to write a LISP compiler or two)
- 4 months of experience working with Scheme