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.

I love to share what I’ve learned and get new ideas – if you run an event or conference and would like me to speak about any of this, drop me a line.

Pebbles.js

Writing lots of custom AJAX interactivity is bug-prone, has no compile-time checking, breaks whenver 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.

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 still out on this for me. Maybe jQuery plugins are the best compromise.

PyEPL blog (open source, Python)

PyEPL (the Python Experiment-Programming Library) was written by the Kahana lab, and was my favorite 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)

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.