Aaron Muir Hamilton
Senior Software Engineer with over 8 years of Experience
+1 313 240 2152 (Verizon) +1 307 365 7527 (AT&T) aaron@correspondwith.meWork Experience
Various Open Source
, 2013 — Present | See Open Source belowWealthyPlanet
2018-10 — Present | Co-Founder, Lead Developer, VP R&D
Leading the software engineering practice and financial model development; I set cornerstones for every technical project, from our backend and data storage architecture, to each frontend application and webpage. I also co-developed the initial financial model, and managed/directed a full-time modeler thereafter.
The backend is written entirely in Clojure, and uses streams and futures to coordinate a system of command (strictly sequential, can mutate) and query (random access, can not mutate) reducers with embedded aggregates over immutable append-only logs. This system communicates with client applications through a custom resumable JSON RPC channel over WebSockets. Clients include numerous web applications written with Preact in TypeScript, administrative tools written in Javascript on Node.js, and also with some pages written with Next.js+React.
Hamilton Professional Services of Canada Incorporated
2017-04 — 2018-10 | Owner, Software Engineer
I created this corporation to house contracts I was taking, while looking for a new nine-to-five. I dealt in small and medium contracts across multiple languages (C, C++, Elixir, JavaScript) including:
- Distributed stochastic simulation for casino games modeling on Google Compute Engine with NATS-based message passing.
- Custom high-performance WebGL data visualization.
- Straightforward, well-behaved business data entry and display applications.
- An application merging a web interface with a Unity WebGL view; import tools and processes to bring a library of more than a hundred thousand geometry assets into the application, on contract.
Rangle.io
2014-08 — 2016-10 | Software Developer
Delivering state of the art web applications, ahead of schedule and under budget for multinational online retailers, financial services companies, and media syndicates. Working on the official Angular 2 debugging tool, Augury.
Among other technologies, I used JavaScript, TypeScript, ES6, AngularJS, PhoneGap/Cordova + Ionic, React.js, Objective-C (iOS), Ramda, Express, and PostgreSQL in my time at Rangle.io
Open Source
Simple full text search
Recently, I had use for a simple full-text search index that returned quality results for inexact queries full of typos, is mergeable, and which produces identical indexes regardless of insertion order. I also needed it to be simple enough that I could reimplement it for multiple platform targets, with similar or identical results.
Here's what I came up with:
- in Rust: indexrs
- in Kotlin: hotfuzz
- in Swift: SchroedingerKit
- in JavaScript [lite version]: fuzzidex
- in Clojure [lite version, different treatment of non-BMP Unicode]: je.suis/un-petit-index
It works well in the contexts I designed it for: it scales logarithmically with index string length, and linearly with key size, in ordinary natural language. For cases with a few thousand records, at a useful indexing depth, it produces good results in much less time than it takes to hear back from a search indexing server even on the same rack, and is much easier to maintain, integrate, and configure than a standalone search indexing server.
Miscellaneous small libraries
- grapheme-iterator (JavaScript) — A simple Unicode Extended Grapheme Cluster segmentation library for JavaScript, which is more memory and time efficient than the alternatives. I created this when I was writing my fuzzy search index and the corresponding display code, because availability of Unicode segmentation functions in browsers was (and still is) not quite ready.
- je.suis/lbx (Clojure) — A relatively fast XML emitter for Clojure with a similar API to hiccup (HTML emitter). Unlike the other options in Clojure, je.suis/lbx reliably outputs minimal and simple UTF-8 XML; it emits self-closing tags for elements with no children, correctly escapes CDATA and comments (using the
CDATA
andCOMMENT
symbols), and minimally escapes text nodes by default (override with thenoescape
symbol).
Miscellaneous drive-by contributions
I have made modest contributions to a variety of public open source projects that I have used over the years, including:
- originating the current maintenance branch of Anthy, a Japanese input method — I did this in 2013 as a user of Anthy, because the upstream version had source and data files in a JIS encoding rather than UTF-8, and was throwing compiler warnings; I converted the source files to UTF-8 and fixed the compiler warnings and build issues. The authors of Anthy forked my Github repository and now maintain it at https://github.com/fujiwarat/anthy-unicode
- fixing ICC color profile loading and profile embedding for PNGs in the SANE command line utilities — I did this in 2017, as a user of SANE (scanner drivers and utilities) relying on color profiles of my scanner.
- fixing WebSocket connection upgrade detection in Aleph HTTP — This was causing issues with Firefox users accessing our WebSockets at WealthyPlanet.
- fixing font variant selection in the iBus input panel — I was an iBus (input method system) user, and I was frustrated that a Japanese input method window was displaying Taiwanese-variant fonts, the changes herein ask the library selecting the font to consider the advertised locale on the input method.
adding missing properties to Preact TypeScript defs — We had use for this event on
<details>
This is nowhere near exhaustive, but my point is: I am well accustomed to making upstream contributions to open source projects in the course of work and leisure; and I am ready to do so across a variety of languages and disciplines.