On the subject of developer tooling, or perhaps computer programs more broadly, I have become increasingly convinced that vertical integration is the only thing that matters. I also think that the inability of developer productivity startups to vertically integrate their offerings has hindered their adoption and utility. I’d like to talk about what I mean by “vertical integration” and why we don’t…
Previously: My iPhone Hates My WiFi . For about a year, iPhones in my household would frequently disconnect from the wifi, with no clear explanation or cause. After a month of frustration I got desperate enough to spend $300 on a Ruckus R350 access point that didn’t help (NB: an access point is “the thing that makes the wifi”). And then I just… gave up for almost a year, I guess. Well, my blog…
Sometimes, my iPhone disconnects from my wifi. The little icon disappears from the status bar. Then, when I go to the settings app to reconnect, it claims that it’s still connected to the wifi. Maddening. What follows is an infuriating ritual of flicking the airplane mode and wifi switches on and off until it will stay connected. Sometimes it will connect, showing a strong signal in the status…
A quick update on last year’s “Giving My Student Loan Servicer a $560 Interest-Free Loan” : they gave me my money back! # Timeline recap Here’s the story I covered in my post last year: 2024-04-08: I finish paying off my student loans. 2024-04-08: Aidvantage processes my monthly autopay despite my loans having a balance of $0, taking an extra $560 from my bank account and leaving me with a…
# Foreword: Missed calls Today I had a delivery scheduled for a piece of furniture, so I had my iPhone’s ringer on. This is pretty unusual for me; my policy is that if you want to get on the phone with me, you need to either tell me in advance when you’ll call or be in my contacts. Otherwise, unknown numbers are silenced. I don’t think this pattern of phone usage is that unusual. A 2025 Pew survey…
One of my pet peeves is when command-line tools look for user configuration files in ~/Library/Application Support when running on macOS. In addition to offering poor ergonomics for users, I believe this behavior is incorrect according to the documentation which is cited to justify it. Instead, command-line tools should implement the XDG Base Directory Specification and look for…
AKA “The IORef trick”. In Haskell, functions are pure and there’s no global state. But sometimes global state is convenient! If you want to add some extra bit of configuration that you would need to thread through some large portion of code in a fairly mechanical fashion (for example, “are we running in verbose mode” or “is this a dry run”) and your program is written in IO or some other context…
The git range-diff command compares two commit ranges. You can use this to check how a branch changed before and after a rebase, or to find differences between a commit on your main branch and a corresponding backport on a long-term-support branch. If you’ve ever tried to use git diff to figure out the changes introduced by resolving merge conflicts, you might understand the pain point this helps…
# Introduction At work, I’m busy upgrading our compiler from GHC 9.6 to GHC 9.10. A couple days ago I found some failing tests which eventually turned out to be a compiler bug ! Simon Peyton Jones took the time to reply with a very detailed comment explaining how GHC’s constraint solving logic led to the bug, so be sure to check that out if you’re curious about how the bug works. To find the…
TL;DR: I’ve built git-prole , an ergonomic git-worktree manager. Check out the user manual to get started! If you don’t know what a Git worktree is or why you might want one, read on. If you’re anything like me, you have a couple repositories cloned that are cumbersome enough to clone more than once: $ ls -l drwxr-xr-x - rebeccat 15 Oct 11:13 mwb drwxr-xr-x - rebeccat 11 Oct 14:19 mwb2 drwxr-xr-x…
Our story begins on April 8th, 2024. I was ecstatic: I’d just finished paying off my student loans. Well, maybe not ecstatic, given the Biden administration’s lackluster student loan forgiveness policy, but it was a weight off my shoulders. My joy lasted two days, until April 10th, when my monthly autopayment got processed and Aidvantage took $560 out of my bank account, leaving one of my loans…
Note: This article was originally published on the Mercury engineering blog. ( Archived on the Internet Archive Wayback Machine. ) At Mercury, we’ve developed a file-watching recompiler for Haskell projects called ghciwatch , which loads a GHCi session (a Haskell REPL ) and instructs it to reload or add modules when files in your project change. Ghciwatch is very similar in design to Neil…
It’s popular (and good!) advice to tell people to set git config --global merge.conflictStyle diff3 ( “Take the pain out of git conflict resolution: use diff3” ), but I’ve always found diff3 -style merge conflicts pretty confusing. I’ve never managed to internalize if the top section is from “my branch” or “their branch”. It turns out there’s a reason for this — the first section in a diff3 merge…
This is intended to be a brief introduction to the Rust programming language for Haskell programmers who want to work on a Rust project without too much fanfare. Fortunately, Rust has a lot of features we know and love from Haskell like Hindley-Milner type inference, typeclasses, and pattern matching, so aside from method call syntax and semicolons, Haskell programmers should feel right at home. #…
note: i don’t think i’m going to finish this one. issue with hard soap: it gets wet. that’s the big thing. you get it wet, and then it’s all soft and it rubs onto the soap dish. and the soap dish gets dirty as a result. one might imagine solving this by dripping the moisture into the adjacent sink. there’s not actually much water dripping off of the soap, though. and another issue: soap gets very…
A word of advice: don’t. At work, I’ve written a command-line tool which sets up the developer environment. It installs the Nix package manager, sets up a local Postgres instance, and handles all the complex bits of configuration. It does all of this on Linux and macOS, and it supports bash , zsh , and fish for shell configuration. We build and publish releases with GitHub actions, so that…
I’m trying to get an orchiectomy, or rather to decide if I want one. It’s a procedure where a surgeon removes your testicles, and I don’t know much else about it because I think surgery is gross and unpleasant. I’ve been trying to get a consultation with one of the surgeons that does them and other transgender bottom surgeries, so I can ask some questions about orchiectomies and how they might…
I’m pretty competent with the Git command-line interface, and I use it for most things. But sometimes, especially when I’m navigating a particularly thorny rebase, I like to be able to browse the commit history and view diffs as I go. For this I like to keep a Git GUI around, but none of them are particularly appealing to me. Here are the reasons why, largely for my own future reference. # Gitk…
NixOS is well-known for being user-hostile, and installation is the worst. Let’s look at a typical installation: We go to the NixOS manual , not to be confused with the Nix manual (for the Nix package manager specifically) or the Nixpkgs manual (for the Nix packages architecture and de-facto standard library for the Nix expression language). We are greeted with a table of contents 3500px tall,…
If you were to log on to my personal Discord server and glance at the unhideable channel list side-panel, you would see one text channel, one voice channel, and nothing else. Many people find that surprising, and most Discord servers I see have an absolute plethora of channels, often neatly arranged into groups — as an example, one server I’m in has 43 members and 21 text channels arranged in five…
I really like command line user interfaces. I think they live up to a sort of conversationality that computing often lacks. In the desktop metaphor , stacked GUI windows often feel like a clutter of unorganized papers, whereas the command line — at its best — presents an ordered ledger of queries and responses. But the command line hasn’t really grown with us. Instead, it’s been left to linger,…
Slack’s lackluster implementation of threading shapes the rest of its collaborative features, largely nullifying them. Slack gives users the ability to reply to messages, creating a thread. I say ability because that’s all it is: a possibility that technically exists. But what do Slack’s threads give us, and what do we want from them? They can’t be organized; for one, there’s no way to move a…
Note: This letter was originally published in The Brandeis Hoot . The letter itself is a near-exact copy of an email I sent to interim student accessibility services director Scott Kalicki, explaining why I was uninterested in arranging a closed-door meeting where my concerns would be Heard and then promptly and completely forgotten. Unfortunately, I suspect that these complaints will already be…
Note: This article was originally written for an undergraduate course on the Scheme textbook Structure and Interpretation of Computer Programs (SICP). Students entering this course typically had 1–2 semesters of experience programming in Java and we found that many students could solve the course excercises in Java, but failed to translate the code to Scheme. This article helped bridge the gap…
there are many rebecca turners. i am not these ones software engineer rebecca turner, aka iarna , currently employed by microsoft but perhaps best-known for her work at npm, where she was responsible for the npm cli , among other things british olympian rebecca turner host of mississippi talk show “good things with rebecca turner” founder of “world of lucid dreaming” rebecca turner folk…
Created by rebecca with major help from @FakeUnicode Unicode is a standard “registry” of characters designed to catalogue all the world’s writing systems and serve as a superset of all previously-existing character sets used and supported by just about everyone and all their software . Get into the details on Stack Overflow or see some of the Unicode encodings on Wikipedia. # Charts and character…
Available as a terminal-friendly .txt! ( long version ), or with less details . Char Dec Oct Hex Bin C0 C U Name (nul) 0 0000 0x00 00000000 ^@ \0 ␀ Null (soh) 1 0001 0x01 00000001 ^A ␁ Start of Heading (stx) 2 0002 0x02 00000010 ^B ␂ Start of Text (etx) 3 0003 0x03 00000011 ^C ␃ End of Text (eot) 4 0004 0x04 00000100 ^D ␄ End of Transmission (enq) 5 0005 0x05 00000101 ^E ␅ Enquiry (ack) 6 0006…
A distance-estimating ray marcher From Syntopia : Classic raytracing shoots one (or more) rays per pixel and calculates where the rays intersect the geometry in the scene. Normally the geometry is described by a set of primitives, like triangles or spheres, and some kind of spatial acceleration structure is used to quickly identify which primitives intersect the rays. Distance Estimation, on the…