fellowcoder

I like solving problems. Programming is part of that.

I’ve worked on substantial projects in Perl, ColdFusion, Java, JavaScript, Scheme, Racket, and C/C++; I’ve also written plenty of SQL. I’ve written toy programs in Python and Haskell and other languages I’ve lost track of. I’ve built websites and databases, written compilers and interpreters, and implemented plenty of algorithms. As a teacher, I’ve written code mainly to solve problems for myself and the people I know, or to model the process for students.

Below is a non-exhaustive list of projects I’ve worked on or contributed to.

Open-source projects

Fun projects

2020: A script for generating a paper gradebook and planner for left-handed teachers, written for a teacher friend and documented sufficiently for a competent programmer without Racket experience to experiment with changes to the parameters.

2020: A script that simulates perfect shuffling of a deck of cards:

A vertical stack of four wide bands of red-or-orange and black rectangles.  Each band depicts, as a horizontal sequence of thin vertical rectangles, the locations of all red and black cards in a deck over the course of 208 perfect shuffles.  The initial deck state is leftmost, and successive shufflings are added to the right.

A vertical stack of four wide bands of red-or-orange and black rectangles. Each band depicts, as a horizontal sequence of thin vertical rectangles, the locations of all red and black cards in a deck over the course of 208 perfect shuffles. The initial deck state is leftmost, and successive shufflings are added to the right.

2018–19: As a choral director and singer, I know it’s helpful for directors to know the vocal ranges of their singers so we can choose music that fits those ranges. I wrote a script that extracts pitch info from a MusicXML file of four-part vocal music, and generates an image of summary histograms that can then be inserted into the last page of the sheet music PDF, permitting directors to see the needed vocal ranges at a glance:

Histograms showing the frequencies with which various pitches occur in a song.

Histograms showing the frequencies with which various pitches occur in a song.

2014: In studying the pancake-sorting problem, I wrote some code to generate trees of possible pancake-stack states using BFS, find critical paths from root to leaves, and render the results:

An n-ary tree of stacks of four pancakes of distinct widths, depth 5, 24 nodes, with nodes on the critical paths circled.

An n-ary tree of stacks of four pancakes of distinct widths, depth 5, 24 nodes, with nodes on the critical paths circled.

Academic work

2008: I implemented an algorithm in Java (working in Eclipse) for finding the quasi-inverse of a database schema mapping.

2000: I developed a prototype language for writing “nanopass” compilers, as described in the subsequent paper A Nanopass Framework for Compiler Education.

Writing

A few Quora posts I’ve written about programming: