Welcome!
I am Matthew Planchard, a software engineer currently in Burlington, VT. This is a blog I maintain mostly for the purpose of playing around with whatever technologies I'm interested in at the present, but also to occasionaly post whatever I'm inclined to write.
If you particularly enjoy anything here and want to drop me a line, you can find my contact information on the about page. If you're curious about the technical details behind this website, that stuff is there, too.
Recent Posts
- Y'all Need to Read Something Other than Tech Blogs — The state of tech blogging is abysmal. Even posts I suspect of being human-authored are acquiring an style reminiscent of generative AI. I suspect this is because people read so much LLM-produced drivel that they subconsciously mimic it. As someone who is offended by the very idea of content presented as being human-authored that is in fact written by a machine, this is a plea to please read something, anything, other than tech blogs, to sow a more diverse set of patterns in the fertile soil of your mind.
- Manual Record Sharding for High-Performance Updates in Postgres — UPDATE is a dangerous operation in a high-throughput postgres database, and so it is often best to prefer an insert-only schema. But of course there is no free lunch, and an insert-only schema comes with drawbacks of its own. In this post, we talk about a simple mechanism for manually sharding rows in order to enable high-frequency updates for certain kinds of data. This method is especially useful in maintaining aggregate data and allows for significantly improved SELECT query performance when accessing the data post insert/update.
- A Zero Downtime Migration to Time-Partitioned Tables in Postgres — A crosspost from our engineering blog at work, in which I describe how we managed to migrate databases receiving millions of writes per day to time-partitioned tables without incurring any downtime or performance degradations.
- Amtrak Tips — A collection of tips and tricks for riding Amtrak
- TIL: use svn to download subdirectory of GitHub repo — Today I learned this one weird trick to download a single subdirectory from a github repo, without needing to add the repo as a remote, do a spare checkout, or any of the other typical workarounds.
- A NixOS Christmas Story — A quick story of how NixOS saved Christmas
- Installing a Specific Version of a Package with Nix — A common question when starting out with nix is "how do I install some particular version of some package?" This is not only a surprisingly complicated problem to solve for new nix users, but also a surprisingly difficult question to find answers to on your search engine of choice. Here, I'm going to cover a few different ways of installing a particular package version using nix, highlighting the pros and cons of each. I'll be focusing on _declarative_ nix configuration, with the nix repository pinned to a particular version using either the older [niv] or the newer [flakes]. The examples I show will be for installing a package into a development environment. See my other post [here][nixifying the blog] for instructions on how to set up a basic dev environment. I'll cover some basic setup again here, but see that post for rationale and discussion.
- A Year (and Change) of Rust — Looking back on over a year of writing Rust professionally. What were my early concerns, and how did they play out? How do I feel about the language now? What do I like and dislike about it?
- Set Your Upstream to the True Upstream — One of the great things about Magit is that, through using it, I wind up learning new things about git itself. One of those things is the capacity of git to work with two remote targets, the upstream and the push target. Using separate targets is easy and natural in Magit, but it's also not difficult to bring this workflow into your command-line-driven git experience.
- Introspecting Emacs Packages — As your emacs configuration gets more and more complicated, it can be non-obvious which of many installed packages (or even built-in emacs functionality) is being called at any given time. Here, we discuss some ways of figuring that out, with a mildly deep dive into exploring which functions are called via the profiler. Somebody on the Internet asked how to figure out which functionality is coming from which package in emacs, and I went classically overboard in responding, so I figured I'd turn the response into a post.