blog
- My Student Loan Servicer took $560 and kept it for a year: I finished paying off my student loans. They took another $560 anyways.
- How to turn an iPhone's ringer on: Here are all the settings that can silence calls on iPhones. But why can't I just tell my phone I'm waiting for a call?
- macOS dotfiles should not go in ~/Library/Application Support: A CLI tool is not an app, and none of you are reading the docs as carefully as you think you are
- Global State in Haskell with IORef: A naughty and previously-undocumented trick
- Reading git range-diff output: It's simpler than I thought!
- Bisecting GHC is easier than I thought: Practical lessons from building a compiler
- Announcing git-prole: Create multiple checkouts for one repository with Git worktrees
- Giving My Student Loan Servicer a $560 Interest-Free Loan: I finished paying off my student loans. They took another $560 anyways.
- Announcing ghciwatch 1.0: Load a GHCi session for a Haskell project and reload it when source files change
- Why Git's diff3 merge conflicts are confusing: The first section in a diff3 merge conflict is your branch in a merge, but their branch in a rebase
- Rust for Haskellers: A 5-minute intro to Rust for Haskellers who want to get stuff done
- No Good Soap Dish: The problems you want it to solve cannot be solved.
- So You Want to Ship a Command-Line Tool for macOS: It's one executable, how hard could it be?
- transgender surgery is way too hard to get: you do not need 14 pages of paperwork and dozens of documents to talk to me about a surgical procedure
- Git GUIs and why I don't like them: Here's why I don't like several Git GUIs
- installing nixos doesn't have to hurt: there's lots of low-hanging fruit to work on
- against discord channels: i just wanna talk to my friends, please don't make me click 300 little tabs to do it
- type-driven computing: towards a more cohesive computing experience
- Slack’s threads are terrible for accessibility: Slack’s threads might as well not exist
- Open letter: Brandeis is failing its disabled students: The last time I met with you, I was told that “there’s not a brick that doesn’t move” when it comes to accessibility. Here are some bricks. Let’s get moving.
- Introduction to functional programming in Java