Programmer, languages and tools specialist
tel:+1-510-578-8948 mailto:email@example.com http://jneen.net/ http://twitter.com/jneen_
What I'm looking for
Toronto, preferably with visa 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.
- 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
OpenCounter (1-week consultancy)
- 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
Metta Mentors / ExperiMentors
Jun. 2011 - Aug. 2011, Jun. 2012 - Aug. 2012
- Designed and facilitated workshops for 3-7 live-in participants for 10 weeks
- Ran house meetings and facilitated the creation of shared agreements and processes
- Mediated and resolved conflicts between participants and other house members
- Designed and implemented the application and interview process
- Welcomed and oriented international participants
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
How to Tell If You've Accidentally Written A Language (And What To Do About It) at clojure/west 2015. (slides)
- University of California, Berkeley. Double major in Mathematics (Pure) and Music. 3.57 UC GPA, 4.0 Mathematics GPA. Graduated: December 2009
Languages: English, Japanese, some Spanish
Technical things I'm good at browser mumbo jumbo (html/css/js/jquery), rails, type systems, parsing, semantic analysis, concurrent programming, unix
- Organized a housing cooperative, facilitating meetings, generating buy-in for decisions
- Conflict resolution
- Public speaking
Open source code I am proud of
- 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.
- Rouge: (ruby) A syntax highlighter for Ruby, whose output is compatible with Pygments stylesheets. Includes lexers for over 150 languages.
- Parsy: (python) Parser combinators for Python 3, taking advantage of bidirectional generators for an API similar to Haskell's do-syntax
- Ry: (bash) the simplest possible virtual environments for Ruby
- Feminism and trans-feminism
- Music! I make electronic music (http://soundcloud.com/jneen-collective) and I used to play drums for Mya Byrne.