I blog sometimes! I've covered topics including software engineering, polyamory, tabletop RPGs, and random other things.

You can be alerted to new posts by subscribing through RSS or following me on Twitter.

All Posts

Haskell monads and the nest of lies
The IO monad in Haskell works by assuming our universe is in a simulation and that your tiny computer can capture the entire state of the universe and play it forwards in real time. (more)
Shmeppy is looking great
My "how excited I am about Shmeppy" meter has gone up and down the last ten months. I've had days where I'm sure Shmeppy will flop, and days where I'm so excited I can't stop looking at it. Today is the latter. (more)
Pigby is very cute
In this episode of Please Look at Pictures of My Dog… (more)
Handling criticism is tough
"Don't worry, I'm used to all kinds of users giving feedback in all manner of frequencies and tones. You'll have a hard time affecting me much." This is a serious oversimplification. I think it was a mistake for me to say this and a mistake for me to think it. (more)
Passing through the advice and getting to the actual user experiences
When a user gives me advice on a product, I ask them what experience they had that prompted them to give that advice. (more)
Ten months of Shmeppy
It feels like an eon ago that I left Khan Academy to start my journey into self-employment. I'm planning to do a proper launch of Shmeppy within the next few months so I thought I'd summarize some of the story so far. (more)
Answering questions with accounting: Expenses in Quicken vs Ledger
Answering the question "How much money did I spend eating out versus buying groceries this month?" is trickier than Quicken would have you believe… (more)
Answering questions with accounting: Shared reimbursements
This is a sequal to my last post "Answering questions with accounting: Reimbursements". In this post, we'll take things one step farther and I'll talk about how I'm tracking reimbursable expenses that I share with my partner. (more)
Answering questions with accounting: Reimbursements
I love accounting and to me it's a tool that lets me get answers to my financial questions… In this post I'm going to talk about how I found answers to variations of the question "Have I been reimbursed for this therapist visit?" (more)
Interviewing is hard
A month ago I finally marked something off my todo list that had been there for a couple years. I went through an interview process as an interviewee. (more)
One idea down. Another one pivots.
My third week of self employment is wrapping up. One of my product ideas has bitten the dust… (more)
The Seesaw - A D&D 5E Encounter
I've been DMing a Dungeons and Dragons (fifth edition) game every other week for awhile. During this last session on Monday they found themselves in the center of a room with a rectangular floor. (more)
A very practical piece of pure CS
If an interviewer asked me to find the last item in a linked list, I might write some code like this: (more)
Could I be a zealot? Yes and it sucks.
Zealotry seems to always sneak up on me. I see it in my coworkers, myself, and of course in comments online. Recognizing it in myself is challenging, but I'm slowly building up some tools to help me out. This post is about one such tool. (more)
A model of (polyamorous) relationships
I want to present a model for thinking about relationships and polyamory. Like any model, I will relate it (hopefully strongly) to real world things, but the model exists within its own system. (more)
Principles of Building a Simple Site
I've made a bunch of simple websites over the years, and from my endless failures I've built up some principles I now follow. (more)
I talk to myself on GitHub
I talk to myself on GitHub a lot. If I could share our internal issues at Khan Academy you'd see a similar story there as well. I do this to serve a few ends. (more)
Solving a wooden puzzle
Last week a mysterious double-sided puzzle appeared next to the kitchen at Khan Academy. (more)
Typos in search queries at Khan Academy
One year ago, searching for polinomials on Khan Academy's search page would give you no results. If you typed the same thing into Google you'd be efficiently and politely corrected. (more)
Local Storage Today
I'd like to write to localStorage often. I'd also like to write to it synchronously in response to user interaction. Past wisdom says this is a bad idea and will give me Angry Users Syndrome very quickly. (more)
Intelligently Shortening Text
Our search page at Khan Academy displays highlighting information to provide context for our results. Our full-text search engine gives us the highlighting text, but it doesn't provide a way to reliably control the length of the text. The end result can be undesirable. (more)
The Python Import System
I made a presentation at Khan Academy on a few good things to know about Python's import system. Here's a writeup of that presentation (this is written mostly as a reference, sorry for the dryness). (more)
Transactions with Python's sqlite3 Package
Python's sqlite3 package tries to take care of the tricky business of properly executing BEGIN and COMMIT statements. The rules of when and how this automatic transactioning is done has confounded a number of developers, many of whom have jumped ship and chosen to use the aspw package or similar. (more)