Elliott Cable                        (prefer a PDF? ell.io/tt/Elliott_Cable.pdf)

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

“Move slowly and maintain things.” I'm a testing-, operations-, and
documentation-obsessed software engineer, motivated by projects involving
programming-language implementation, maintainability refactors, tooling
development, or diversity and accessibility.

I'm currently interested in: 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.

Here's a sampling of my work, selected primarily for breadth. Where publically
available, I've included exemplary source-code.

### 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
 - 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-2018: 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 work and PLT
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+#README
 - 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
 - ell.io/tt$Paws.c/tree/f4fcb5/Source/Paws.o/Paws.c#L32-L94
 - ell.io/tt$Paws.c/blob/f4fcb5/Source/Paws.o/Ancillary/Threading/Thread/Thread.c#L97-L175

### 2017-now: An R5RS-Scheme compiler in OCaml
At PWLconf 2017, I was introduced to A. Ghuloum's “Incremental Approach to
Compiler Construction” paper. This spawned a still-ongoing project
from which I am learning a substantial amount — about compiler architecture, as
well as general OCaml skill, parsing automata, and Scheme itself.

 - ell.io/tt$ocameel/blob/5ac70f/bin/cli.ml#L6-L93
 - ell.io/tt$ocameel/blob/db2dda/lib/Lexer.sedlex.body.ml#L40-L97

### 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.

 - 2018, Python/OCaml: Merlin, OCaml's analysis engine.

 - 2017, ISO C: the XV6 operating-system.

 - 2013, ISO C: Git. adding a history-reorganizing feature.

### 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#README
 - ell.io/tt$giraphe/blob/fe85e6/giraphe.es6.js#L122-L257

### 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
recent and pure JavaScript I've written, with no legacy cruft.

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

### 2008: ArchLinux image-builder for Amazon EC2
Arch, my preferred Linux distro, was unavailable on Amazon EC2 for years. I
built a fiendishly-complex, modular shell-script architecture for bundling
custom builds of Arch and publishing them to your EC2 hosts. This involved
poring through both Amazon's AWS documentation, as well as that of Arch's own
build-system and packaging. This is the largest pure-POSIX-shell program I've

 - 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.

 - 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

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