What software engineers bring to AI-assisted software development LLMs don’t mean the end of software engineering as a profession.
Why tech companies encourage their software engineers to use LLMs It's not news that many tech companies are encouraging or even requiring use of LLM coding tools like Claude Code. While reading Sean Goedecke's post about bad code at big companies, it occurred to me that tech companies are happy to have their software engineers use …
Streamlining my user-level CLAUDE.md This post follows up on my post about getting good results from Claude Code. I've recently streamlined my ~/.claude/CLAUDE.md based on: * Informal observations about what Claude does and doesn't do well * A desire to avoid conflicting with principles that seem to be built into …
Getting Good Results from Claude Code: Writing Good Prompts Key to getting good results from Claude Code (and similar LLM programming tools) is writing good prompts. This is one area where your own programming expertise comes into play; you need to use it to provide guidance to the LLM and nudge it in the right direction. Good prompts are …
Give your LLM Coding Tools Their Own Tools Model Context Protocol (MCP) allows LLMs to call "tools" that can do anything: interact with your filesystem, search the Web, hit an external API, or even help guide the LLM through a structured problem-solving process. A single MCP server provides one or more tools; for example, a research …
Getting Good Results from Claude Code An updated version of my user-level CLAUDE.md is featured in this post from December 2, 2025. I've been experimenting with LLM programming agents over the past few months. Claude Code has become my favorite. It is not without issues, but it's allowed me to write …
New IDs resulted in many “new” posts in Ann Arbor FOIA RSS feed Subscribers to my RSS feed (or JSON feed) of Ann Arbor FOIA requests will have noticed that yesterday their feed readers showed a large number of "new" posts, which were not actually new and dated from weeks ago. RSS feeds require each entry to have a unique ID, …
Thinking about cardboard I produce a fair amount of cardboard waste, which all goes into the recycling. Can I recycle it myself, into useful material for my hobby projects?
Hacking slightly better sum types without Go generics Go doesn't have real sum types, but we can at least hack together an exhaustive switch helper, without requiring generics.
3D Printing Recommendation: Plasti-Dip Spray Rubberized Coating I've now completed several 3D printing projects which need to sit more-or-less still on a desktop or other work surface. I've seen a few different approaches to this, but I wanted to note that I've had good luck so far with clear Plasti-Dip rubberized …
Reconsidering Netdata Reconsidering where and how I install the open-source system monitoring tool, Netdata.
TDS220 Oscilloscope Refurbishment: Rotary Encoders & Backlight Part of the Project Logs series. For years, my oscilloscope has been a Tektronix TDS220 (2-channel, 100 MHz) scope. I bought it used, fairly inexpensively, a little while after graduating from college. (You'll see some photos of this scope's screen in my atomic clock project post. …
Building the atomic clock I’ve always wanted For years & years, I have wanted to own an actual atomic clock. So I built one.
3D Printing Project: Tiny Trays for Screws, etc. Part of the Project Logs series. When working on electronics and similar projects, I often end up with a couple piles of small screws or other tiny hardware littering my workspace. I have a few magnetic trays like these, but most of them live in the garage, and they mostly …
Embracing a ruthless approach to email spam For years, I've dutifully clicked "Unsubscribe" from the email lists of companies I'd done business with, organizations I'd donated to, and news roundups I'd once wanted to read. Over the past two years, however, I have adopted a new strategy …
macOS Scripting: How to tell if the Terminal app has Full Disk Access My macOS system configuration script requires Full Disk Access, so I wanted to add a warning if the user's terminal app doesn't have the required permissions. This check should be performed right at the beginning of the script, because if the process fails halfway through, the …
Patron-only Fatal Error episodes are becoming public Now that a few years have passed since concluding the Fatal Error podcast, Soroush and I have decided to begin releasing the patron-only episodes for everybody. These are the even-numbered episodes which previously were released only on Patreon, starting with Episode 12 ("Swift 3 Migration") from January 9, …
Reducing SD Card Wear on a Raspberry Pi or Armbian Device A guide to reducing SD card wear for a more reliable Raspberry Pi installation.
PiKVM Build Part of the Project Logs series. For the past few years, every once in a while I'd search something like "IP KVM," look at the prices, and remember why I always quickly abandoned this search. Until sometime earlier this year, that is, when I stumbled across …
Expanding the Ubiquiti Cloud Key Gen 2+ with a 3.5” Hard Drive Part of the Project Logs series. This post walks through my successful expansion of Ubiquiti’s Cloud Key Gen2+ to use a 3.5” hard drive instead of a 2.5” drive. Motivation In January 2021, I upgraded my Cloud Key to a 5TB hard drive, which is the maximum …
Thermal Camera Photos of Wemos D1 Mini ESP8266 Board I'm not 100% sure how accurate the displayed temperatures are for the ESP8266 module itself, since using my inexpensive thermal camera I need to set emissivity manually, and the emissivity of the PCB material is substantially different from that of the main chip's metal case. This …