Elliott Cable                        (prefer a PDF? ell.io/tt/Elliott_Cable.pdf)
=============
“Move slowly and maintain things.”

Cell:    +1 919 636.4204          (SMS preferred; calls, FaceTime w/ prior notice)
E-mail:   hire@from.ec            (NOT CHECKED OFTEN; text or DM me first!)
Twitter: twitter.com/ELLIOTTCABLE (DMs welcome)
GitHub:   github.com/ELLIOTTCABLE
Addt'l:   elliottcable.name

I am a testing-, operations-, and documentation-obsessed software engineer. I am
primarily looking to join projects involving:

 - programming-language design and implementation,
 - other software-tooling development,
 - technical-debt paydown and maintainability refactors, or
 - accessibility tooling / positive effects on diversity-in-tech

My preferred process involves careful software development using powerful
correctness tools like OCaml and ReasonML; or PLT and JIT/compiler design. I'm
most experienced in: interpreter implementation; open-source library
maintenance; modern JavaScript tooling, versioning, and deployment; JS library
development; server-side development in Node.js or Ruby; POSIX shell and ISO C.


PROJECT EXPERIENCE
------------------
Here's a sample of my work, selected primarily for breadth. Where legally
possible, I've included links to source-code that I find to be particularly
exemplary.

### 2018-2019: KidScript, an educational programming-language for kids
    (as Senior Software Engineer at Codeverse)

Codeverse brought me onboard to draw on my open-source experience, improving on
the stability of (and establishing engineering process for) their KidScript
programming-language, as well as an iOS IDE. Responsibilities included:

 - Establish strict Semantic Versioning procedure for the releases of, and
   dependencies between, internal packages and external products
 - Rewrite organization's internal tooling for JavaScript and iOS compilation,
   deployment, etc. effectively from scratch, to enforce good practices
 - Contribute features and handle fixes to the parsing, error-handling, and
   interpreter components of KidScript
 - Manage contributions to the language's standard-library of components and
   objects
 - Review other engineers' contributions to all of the above; providing guidance
   on maintainability and technical debt
 - Rewrite critical portions of the IDE's game/graphics-engine in TypeScript and
   ML to improve stability

### 2010-now: Pratchett, a programming language
My overarching work of the past ten years, Pratchett (née Paws) is the project
that's driven much of my personal development as a programmer. From surveying
prospective users' needs, staying on top of similar language projects and
theoretical research, to organizing a (brief) community of interest and
contributors and triaging design goals to try and keep a sense of constant
progress, this has been my largest ongoing software project.

 - ell.io/tt$Paws.js/tree/queueless+
 - ell.io/tt$Paws.js/blob/d1a1f2/Source/datagraph.coffee#L27-L135
 - ell.io/tt$Paws.js/blob/d1a1f2/Test/datagraph.tests.coffee#L246
 - ell.io/tt$Paws.js/blob/546795/Source/reactor.coffee#L114-L196
 - ell.io/tt$Paws.js/blob/d1a1f2/Scripts/test.sh#L3-L35

### 2018-now: Excmd.js, a performant and strict vi-mode parser for Tridactyl
I'm a huge fan of Firefox and Vim; and Tridactyl, a vi-mode for daily web-
browsing. I offered to take over the rewrite of their Exmode (command-line)
parser.

 - ell.io/tt$excmd.js

Beyond just improving the parser, my *primary* goal here was to apply
traditional OCaml parsing tooling to a front-end project. I yearn to 'shave the
rough edges' off the user-experience of OCaml for use in the JavaScript
community; and this project gave me a lot of opportunity tES6+ o contribute back. I
spent much time working in the BuckleScript ecosystem and improving the overall
experience of writing ML-for-the-web.

 - ell.io/tt$bs-sedlex
 - github.com/c-cube/gen/pull/17
 - github.com/ocaml/merlin/pull/771
 - github.com/ocaml-ppx/ppx_deriving/pull/204
 - github.com/ocamllabs/higher/pull/12

### 2017: Giraphe, a configurable JavaScript graph-walking library
Extracted from my work on Paws.js by necessity, this is an API designed to
generate individual, optimized graph-walking iterators for various Pratchett-
related tasks. (It currently only *implements* a generic, unoptimized walker.)

 - ell.io/tt$giraphe
 - ell.io/tt$giraphe/blob/fe85e6/giraphe.es6.js#L122-L257

As of December 2021, I'm busy re-writing this in TypeScript (sadly, not OCaml)
and optimizing for performance.

 - ell.io/tt$giraphe/blob/33a5259f/src/edgeless-walker.ts

### Various patches and contributions to others' open-source projects
I'm a repeat open-source developer and patcher. Although so many of my changes
stay local and never see the light of day (a bad habit!), occasionally, I clean
up and complete my explorations, and remember to submit a pull-request.

 - 2020, OCaml/JS: BuckleScript, Bloomberg's OCaml-to-JavaScript compiler

   My most recent sizable contribution, this patch was an on-and-off project
   throughout 2020. I would like to call attention to my documentation, clear
   explanatory git-log, and incremental changes, moreso than the actual
   code-changes I contributed.

   github.com/rescript-lang/rescript-compiler/pull/4116

 - 2018, Python/OCaml: Merlin, OCaml's analysis engine.
   ell.io/tt$merlin/blob/9b80dd/vim/merlin/autoload/merlin.py#L677-L734

 - 2017, ISO C: the XV6 operating-system.
   ell.io/tt$xv6/blob/efd94e/README#L10-L57,
   ell.io/tt$xv6/compare/08429c...379fc6

 - 2013, ISO C: Git. adding a history-reorganizing feature.
   ell.io/tt$git/compare/b5c267...author-order+

### 2016: `pin-cushion`, an API-client for Pinboard.in
A small, one-off, but complete and modern, command-line client for my
bookmarking service of choice. Included simply because it's some of the only
*pure* ES6+ JavaScript I've written this decade, with no legacy cruft.

 - ell.io/tt$pin-cushion
 - ell.io/tt$pin-cushion/blob/36be70/pin-cushion#L78-L121

### 2008: ArchLinux image-builder for Amazon EC2
Arch Linux was unavailable on Amazon EC2 for years. I built an overengineered,
modular shell-script architecture for bundling custom builds of Arch and
publishing them to your EC2 hosts. (This is the largest pure-POSIX-shell program
I've written, and although it showcases well some of my UNIX/sh knowledge, I
wouldn't undertake a project in this way nowadays.)

 - ell.io/tt$ArchLinux-AMIs/blob/a34646/bundle.sh

### 2006-2009: Assorted Ruby tools
I was heavily into metaprogramming Ruby for many years — these are some of the
libraries and tools I was most proud of at the time.

 - ell.io/tt$it/blob/b52441/lib/it/environmented_proc.rb#L63-L155
 - ell.io/tt$lobby/blob/8dc3f6/lib/lobby.rb
 - ell.io/tt$stringray/blob/117038/lib/stringray.rb#L3-L162
 - ell.io/tt$nfoiled/blob/d8e593/lib/nfoiled/window.rb#L3-L217


ADDITIONAL INFORMATION
----------------------
I'm an avid maker/hacker, I hold a ‘General’-class gov't license for radio
operation (KL4JC, monitoring!), and I'm an activist for the safety and inclusion
of Black, trans, and other underrepresented folks in tech. I'm also a lifelong
Eagle Scout.

Finally, a keyword-oriented list of additional related skills omitted from the
above (at least, those with which I have at least *some* familiarity), follows:

    Practices: BDD & TDD, Agile; granular Git or git-flow; Agile, git-flow;
       Semantic Versioning
    Languages & platforms: CoffeeScript, TypeScript, BuckleScript, Flow; React,
       Rails, Python; Objective-C, Cocoa; Io, Lua, Potion; Racket, Guile, other
       R5RS; Tulip, Eff, MetaOCaml; VimScript; C++, Java
    Other: macOS, BSD, Linux, and the POSIX/UNIX APIs; Redis & MongoDB;
       firmware / RTOS development; Docker, Vagrant; PostgreSQL