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)

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:

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

Backlinks