This site runs best with JavaScript enabled.

Blog

I write about solving problems with code, desiging things people use, teaching, and learning. Subscribe to my newsletter to make sure you don't miss anything.