NOTE: The most recent version of this document is available here.
Location: Seattle, WA (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, CVS, 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
- 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.
Potentially Interesting Publications
- 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
- 8 years of experience working with web and XML technologies (HTML, AJAX, ASP, PHP, CGI, CSS,
- 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 Go
- 2 years of experience working with Kubernetes and Docker
- 2 years of experience working with Perl
- 1 year of experience with x86 assembly (and also 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