Programmer, languages and tools specialist
tel:+1-647-468-8948
mailto:jneen@jneen.net
http://jneen.net/
http://twitter.com/jneen_
Toronto, with work permit sponsorship.
I am happiest working on compilers, tools, library/framework code, or build systems. I especially enjoy writing compiler frontends and designing tool interfaces for programmers. I am also quite good at it - I've been solving problems like these for about 9 years and have a number of successful libraries and languages under my belt.
In more detail, what I really love doing is almost product design in a way, but for technical users - users who have a certain amount of expertise in something, and are willing to work with and learn a system. What fascinates me is getting at who is using a library, interface, dsl, understanding where they're coming from - what tools they're used to, what they expect, how they formulate a problem - and then making something small, useful, and beautiful that speaks their language.
- Advised senior management on engineering direction
- Built a tool to render government PDFs, which most existing tools couldn't handle
- Designed an abstract system for routing bilingual URLs
- Improved the accessibility and programmer-usability of form controls
- Removed the need for users to attach separate documents via an abstract web-form tool
- Maintained the Rouge syntax highlighting gem (on average 200 open issues and 100 open pull requests)
- Unblocked several permission-based features by refactoring to a Policy-based approach
- Expanded support for comment-by-email to MS Exchange users, as well as for many users whose email systems are not configured in English.
- Designed and pitched the UX for a comprehensive suite of moderation tools
- Paired with an OpenCounter dev on their in-house calculator language to:
- Implement a type checker with reason-tracking for legible error messages
- Implement a runtime tracer
- Thread source location info through the existing parser and type checker for location-aware error messages
Nov. 2015 - Jun. 2016
- Designed and implemented a regular-expression / glob syntax for the company's in-house language. Saw the feature through design, organized a review by its internal users, and shipped an implementation.
- Refactored a hand-written multilingual code generator into a straightforward, traceable template system.
- Improved compiler code through the use of dynamic variables.
Feb. 2011 - Feb. 2012, Feb. 2013 - Oct. 2015
- Designed and built critical tools for the science team. Authored an in-house declarative data language, including a constraint-solving type checker, optimizer, and continuation-based sequencer, with a pluggable data layer
- Fixed long-standing wrong-data bugs by writing a safe concurrent reflow system to update derived data based on fresh data
- Increased site stability by enabling separate staging, demo, and production environments
- Solved major process bugs with a switch from mercurial to git, including giving talks and training coworkers
- Relentlessly fought slog with quality code, established a culture of code review, led refactoring initiatives
Mar. 2012 - Aug. 2012
- Boosted MathQuill's rendering performance by an order of magnitude by replacing the hand-coded parsing layer with Parsimmon
- Worked to get Desmos using the main branch of mathquill by creating a template system for user-defined commands
- Factored out complex browser input-handling in a cross-browser way, resolving longstanding issues with international keyboards and mobile browsers
- Rebuilt several ad-hoc build systems using a central Makefile
Feb. 2010 - Dec. 2010
- Worked on a small team to build wishes.causes.com
- Transfered the physical servers to a new datacenter
- Automated the full server build cycle: power-cycle, dhcp, dns, pxe booting, puppet provisioning, and deploy
- Provisioned a static assets cluster behind a squid reverse-proxy
- Replaced the single memcached instance with a consistently-hashed cluster
- Configured and provisioned the A-10 loadbalancers
Tulip: a Language for Humans at StrangeLoop 2016. (slides)
How to Tell If You've Accidentally Written A Language (And What To Do About It) at clojure/west 2015. (slides)
Variants are not Unions at clojure/conj 2014. (slides, follow-up post)
Parsing With Skeleton Trees Trello Tech Talks, Oct 2016. (slides)
-
University of California, Berkeley. Double major in Mathematics (Pure) and Music. 3.57 UC GPA, 4.0 Mathematics GPA. Graduated: December 2009
-
Tokyo Institute of Technology (東京工業大学). Masters in Mathematical & Computing Sciences.
-
Jeanine Miller Adkisson, Johannes Westlund, and Hidehiko Masuhara. 2019. A Shell-like Model for General Purpose Programming. In Companion of the 3rd International Conference on Art, Science, and Engineering of Programming (Programming ’19), April 1–4, 2019, Genova, Italy
-
Jeanine Miller Adkisson. Magritte: A Language for Pipe-Based Programming. Master Thesis at Tokyo Institute of Technology (東京工業大学). Submitted Aug 2019. Tokyo, Japan.
-
Languages: English, Japanese, some Spanish
-
I can code in: ruby, javascript (node + browser), bash, python, haskell, ocaml, clojure (but I try to familiarize myself with the semantics and salient features of all languages)
-
Technical things I'm good at refactoring, code maintenance, mentoring junior developers, type systems, parsing, semantic analysis, concurrent programming, unix, rails, browser stuff (though it's a little out of date these days)
-
Leadership skills
- Organized a housing cooperative, facilitating meetings, generating buy-in for decisions
- Conflict resolution
- Public speaking
- Rouge: (ruby) A syntax highlighter for Ruby, whose output is compatible with Pygments stylesheets. Includes lexers for over 150 languages.
- tulip (RPython, C) An untyped functional language that I've been kicking around for about 3 years. The design goals are to balance repl ergonomics with viability as a general purpose language. The current design is centered around open variants using "tagwords", pattern matching, and versatile left-to-right chaining.
- Parsimmon: (javascript) Originally written as part of MathQuill, Parsimmon is a monadic parser combinator library for javascript.
- Parsy: (python) Parser combinators for Python 3, taking advantage of bidirectional generators for an API similar to Haskell's do-syntax
- Mathquill (javascript) gui editable math in the browser.
- Pjs: (javascript) Classes for Javascript that you'd actually use. Basically it's prototypes with the bad parts taken out.
- Ry: (bash) the simplest possible virtual environments for Ruby
- Feminism and trans-feminism
- Music! I make electronic music (http://jneen-collective.bandcamp.com/) and I used to play drums for Mya Byrne.