Software
I code compulsively and with great delight. Writing software is like weaving a magical spell, something out of nothing.
I've worked on a mix of consumer, web, scientific and open source software projects. Here are a few.
I'm gregdetre on GitHub (currently mostly hidden in private repositories).
- Memrise (consumer web)
- The Multi-variate pattern analysis (MVPA) toolbox (scientific, open source)
- Emacs freex mode (open source)
- Wordpress-Python-Emacs
- Pebbles.js
- PyEPL blog (open source, Python)
- Matlab Cookbook (open source, Matlab)
- Free Rhycall (scientific, Python)
- Emacs indentation library (open source, Emacs Lisp)
Memrise (consumer web)
Memrise is a popular B2C language learning startup. more >>
In my first stint there as CTO, we put together a really talented technical team, and built some great infrastructure for ourselves that I'd love to one day see open sourced. High-level details:
-
Rich Python/Django/MySQL/Javascript app that scales to 100+ requests/second.
-
Hosted on Amazon EC2/S3/RDS/Cloudfront.
-
A lot of complex javascript (mostly jQuery) to make our learning environment snappy once loaded, and highly interactive.
-
Original adaptive learning algorithms to decide how and when to test learners, in order to maximize the effectiveness of their learning.
-
Fairly comprehensive set of Python and Selenium unit tests.
-
Continuous deployment to the live site many times a day (one command to deploy to multiple web servers, migrate the database, run the whole suite of unit tests, and alert the rest of the team on Campfire).
-
Powerful internal AB testing and analytics framework that made it very easy to run multiple simultaneous AB tests, and track their effects across multiple key metrics.
In my second stint, I helped kickstart the MemBot AI-powered language learning coach.
The Multi-variate pattern analysis (MVPA) toolbox (scientific, open source)
I lead the development and maintenance of the popular Multi-Voxel Pattern Analysis Toolbox (in Matlab) for analysing fMRI neuroimaging data multivariately. (For a gentle introduction to the ideas behind it, see Brain orchestras and fMRI analyses).
The MVPA toolbox was co-authored with a number of other people (see the AUTHORS list), and was released under the GPL. It has now been superseded by more sophisticated approaches, but in its heyday was downloaded by hundreds of labs around the world, and featured in multiple publications.
Emacs freex mode (open source)
Emacs Freex mode is a minor mode for organising and editing a massively-hyperlinked database of your notes and ideas. It's a personal wiki on steroids.
Freex was co-authored with Per Sederberg, and has been released under the GPL.
I'm incredibly proud of it, and I use it hundreds of times a day myself, but it would need a lot of work and polish to increase its market share beyond one :)
You can see a screencast of Emacs Freex in action.
Wordpress-Python-Emacs
A very simple command-line Python library for down/uploading Wordpress posts, and some Emacs wrapper functions, so I can type M-x wordpress-publish-this-file.
Pebbles.js
(Development led by Joseph Perla and Spencer Davis.)
See Pebbles on GitHub.
Writing lots of custom AJAX interactivity is bug-prone, has no compile-time checking, breaks whenever you change the structure of your html, and requires you to separate basic interactivity from markup.
With Pebbles, you just annotate your html objects (e.g. a button) with the '.actionable' class, then provide a set of arguments in the html alongside, e.g.
<div class="kwargs">
<!-- replace #money with the output from /user/3/money/create -->
<input name="type" value="replace" />
<input name="target" value="#money" />
<input name="url" value="/user/3/money/create" />
</div>
The library then parses the html of .actionable objects, and automatically creates the relevant jQuery bindings for you. In other words, you define the behavior in html, without having to write any custom javascript. (see Hacker News).
We made heavy use of this at Memrise (Spencer Davis gets most of the credit here). Devolving certain kinds of basic, repetitive ajax functionality to html felt natural and simple. And, by adding new handler types to the library, it was sometimes much easier to create reusable widgets that we can sprinkle throughout the site.
That said, it produced heavier html pages, and wasn't as easy to extend as we'd hoped. So the jury is out on this for me. UPDATE More than a decade later, it looks like HTMX operates in a similar spirit!
PyEPL blog (open source, Python)
PyEPL (the Python Experiment-Programming Library) was written by the Kahana lab, and was my favourite way to code up psychological experiments.
Like the Matlab Cookbook (below), I created the PyEPL blog to help new users by providing useful snippets.
Matlab Cookbook (open source, Matlab)
After years and years of writing in Matlab, I collated some of the utility functions I'd built for myself in a Matlab Cookbook. There are also a good number of handy scripts in the MVPA toolbox (see above).
Free Rhycall (scientific, Python)
This was just a mini-project, but it was pretty neat.
Free Rhycall helps you parse the free recall audio of someone talking in a noisy fMRI scanner.
In this case, you have a wordlist of may a few tens or hundreds of words, and your job is to tell which one the subject is saying each time. They could come in any order. This program is not trying to do speech recognition or anything fancy like that. It's simply intended as a handy tool for the human doing the parsing. Put simply, you feed it a wordlist and what you think you hear, and it will return words (from the wordlist) that might be matches. It's then up to the human to decide which works best.
This uses the Levenshtein edit distance as applied to the phonetic distances in the CMU Pronouncing Dictionary.
Available upon request.
Emacs indentation library (open source, Emacs Lisp)
Available as part of Emacs Freex as freex-hiert.el, this library makes it much easier to indent and outdent multiple, entire paragraphs at a time. Very useful for taking hierarchical notes.
Belongs to these tags
Contains these sub-pages
- Abstractions are distractions to an AI-assisted programmer
- Presentations at BarCamp Tampa 2015
- "Oh, that should be easy - maybe a few minutes..."
- Emacs Freex
- Blogging with Wordpress and Emacs
- Auto-links
- Dropbocumentation
- Self Control through software
- Emacs backup files
- Emacs Freex gets a new home
- PyEPL blog
- WriteRoom? DarkRoom? MushRoom!
- Switching from linux to mac
- Evangelizing Emacs (in terms of economics)
- Matlab cookbook
- Emacs freex 0.3.1
- Using fancy methods to estimate shipping dates (Joel Spolsky's FogBugz)
- My take on emacsclient
- Things that are still crap about linux
- Open source