|  | #latergram: Wild Birds at the Detroit Zoo, April 2024 | 
                        
                            |  | #latergram: Bird Photos from Kensington Metropark, July 2025 | 
                        
                            |  | A Tool for Working with Git Worktrees | 
                        
                            |  | Setting Up & Testing Spotlight + Samba + Elasticsearch | 
                        
                            |  | Getting Good Results from Claude Code: Writing Good Prompts | 
                        
                            |  | New Derivative of my Ubiquiti Cloud Key 3.5" HDD Adapter | 
                        
                            |  | LLM + MCP Use Case: GitHub Actions Workflow Updates | 
                        
                            |  | Celebrating 250(+) Public GitHub Repositories | 
                        
                            |  | LLM Q&A Technique: Context Priming | 
                        
                            |  | Ask Claude Code to fix CI | 
                        
                            |  | Give your LLM Coding Tools Their Own Tools | 
                        
                            |  | Teaser for upcoming Claude Code posts | 
                        
                            |  | Getting Good Results from Claude Code | 
                        
                            |  | Navigating and Rewriting Legacy Systems | 
                        
                            |  | An improved nginx_ensite script | 
                        
                            |  | Quick Devops Tool: gha-secrets-setup | 
                        
                            |  | How I share Bird Buddy photos online | 
                        
                            |  | A Lychee photo library tool for titling photos | 
                        
                            |  | Avoid unbounded inboxes; avoid stress | 
                        
                            |  | Recommendation: Microphone Setup for BirdNET-Pi | 
                        
                            |  | feedfilter: an RSS feed postprocessing tool | 
                        
                            |  | I vibe-coded an AI photo organizer for Lychee | 
                        
                            |  | Use Your Type System | 
                        
                            |  | CO2 Monitoring and Alerting with Aranet4 + an4mon | 
                        
                            |  | Announcing the DzSolarized VS Code theme | 
                        
                            |  | Functional Documentation | 
                        
                            |  | Neat Image noise profiles for the Sigma sd Quattro H | 
                        
                            |  | birdbath.tube | 
                        
                            |  | Trying to remind myself that I don't have to do everything today. | 
                        
                            |  | Setting up a dev env for Lychee | 
                        
                            |  | 🙄 | 
                        
                            |  | A rule of thumb, that I need to keep in mind, is that it will take about the same amount of time to edit photos as I spent shooting them. | 
                        
                            |  | for no particular reason other than I think it's fun, | 
                        
                            |  | flickr-rss | 
                        
                            |  | I've long been worried that Apple will drop support for AppleScript automation in macOS updates, or at least allow it to decay into a horrible broken state. | 
                        
                            |  | A new feature, completed — | 
                        
                            |  | A new feature, continued — | 
                        
                            |  | A new feature appears — | 
                        
                            |  | How to rsync with sudo on both sides | 
                        
                            |  | Updated instructions for installing my Debian package repositories | 
                        
                            |  | Host Inventory for a (not-) Homelab | 
                        
                            |  | Tips on Brazing Copper and Stainless Steel | 
                        
                            |  | Someone please Photoshop a “Phantom of the Opera” mask onto this grackle for me | 
                        
                            |  | RIP: Aircraft Radar Skill for Amazon Alexa | 
                        
                            |  | Some TODOs for the new site | 
                        
                            |  | Great Moments in Modern Apple User Experience Design | 
                        
                            |  | Know Your Birds: Red-Headed Woodpecker | 
                        
                            |  | My eBird Profile | 
                        
                            |  | More Severance Michigan Connections | 
                        
                            |  | A Selection of Complex CSS Selectors | 
                        
                            |  | Sunset over Canyonlands National Park, viewed from BLM's Needles Overlook in Utah. | 
                        
                            |  | Birds in Moab and Arches & Canyonlands National Parks | 
                        
                            |  | Brief Review: Tamron 28-300mm F/3.5-6.3 Di VC PZD | 
                        
                            |  | My (Only) Two Complaints about the Canon 10x42 L IS WP Binoculars | 
                        
                            |  | Automating Ghost Routes & Redirects Deployment | 
                        
                            |  | Dust Caps for Oxygen/Acetylene Hoses | 
                        
                            |  | Solar Water Preheater Goals & Design Considerations | 
                        
                            |  | A migration to Ghost from Jekyll | 
                        
                            |  | Some new DNS-related tools | 
                        
                            |  | Everything I know about the YK-1000H NTP Server | 
                        
                            |  | Cloning Raspberry Pi SD cards | 
                        
                            |  | Faking the fan rotor lock signal in a Tripp Lite SU1000RTXLCD2U UPS | 
                        
                            |  | Letter of Recommendation: Quality Binoculars | 
                        
                            |  | Freeing disk space on GitHub Actions runners | 
                        
                            |  | Improved low-battery shutoff for my DIY Ego-powered 12V supply | 
                        
                            |  | Fixing Ego batteries in a low-voltage "defective" state | 
                        
                            |  | Making a Docker container depend on a disk being mounted | 
                        
                            |  | Moving fake-hwclock to a separate partition on a read-only Raspberry Pi | 
                        
                            |  | Raspberry Pi Use Cases | 
                        
                            |  | Letter of Recommendation: Where to start with Alastair Reynolds | 
                        
                            |  | Keeping a SMB share mounted on macOS (version 2) | 
                        
                            |  | Monitoring for NAS data corruption on ext4 with cshatag | 
                        
                            |  | Photographing an unusual aurora in southeastern Michigan | 
                        
                            |  | Linux: start an mdraid check even though bash's noclobber is set | 
                        
                            |  | Alfred workflows for searching Bear notes and Docker Hub images | 
                        
                            |  | Some recent bird photos | 
                        
                            |  | Pi Reliability: Reduce writes to your SD card | 
                        
                            |  | The 12v portable power supply Ego needs to make | 
                        
                            |  | Running a Raspberry Pi with a read-only root filesystem | 
                        
                            |  | Setting net.netfilter.nf_conntrack_max on Ubuntu 22.04 | 
                        
                            |  | Pi Reliability over WiFi: 'Temporary failure in name resolution' | 
                        
                            |  | Keeping a SMB share mounted on macOS (and alerting when it does down) | 
                        
                            |  | More Koyaanisqatsi desktop wallpaper (sunrise clouds this time) | 
                        
                            |  | Socket organizers, end caps, and 3D-printed friction fits | 
                        
                            |  | Making 3D-printed end caps for sharp aluminum extrusions | 
                        
                            |  | Blocking disposable email domains in Mastodon | 
                        
                            |  | Reliable WiFi for the Bambu X1C 3D printer | 
                        
                            |  | Desert stills from Koyaanisqatsi as desktop wallpaper | 
                        
                            |  | Automated generator load-shedding for the house | 
                        
                            |  | Fixing bad design with a label maker | 
                        
                            |  | OpenList is no longer available in the Chrome Web Store | 
                        
                            |  | Recycling a pallet into an Adirondack-ish-style footrest | 
                        
                            |  | Setting up a secondary Pi-Hole on my home network | 
                        
                            |  | Setting up KVM virtual machines using a bridge network on an Ubuntu host | 
                        
                            |  | How to move Docker's data directory from /var/lib | 
                        
                            |  | RIP: SaveTabs Chrome Extension | 
                        
                            |  | RIP: OpenList Chrome Extension | 
                        
                            |  | Considerations for a long-running Raspberry Pi | 
                        
                            |  | Stop using the Raspberry Pi's SD card for swap | 
                        
                            |  | Remote logging for easier Raspberry Pi debugging | 
                        
                            |  | Raspberry Pi SD cards: fsck them often | 
                        
                            |  | Mitigating hardware/firmware/driver instability on the Raspberry Pi | 
                        
                            |  | Maintaining a solid WiFi connection on Raspberry Pi | 
                        
                            |  | Keep your software up and running on the Raspberry Pi | 
                        
                            |  | Disable or remove unneeded services and software to help keep your Raspberry Pi online | 
                        
                            |  | Consider the risks before making any dramatic changes to your Raspberry Pi setup | 
                        
                            |  | Choosing the right SD card for your Pi | 
                        
                            |  | Fixing excessive Pi-hole lighttpd access log size when Netdata is installed | 
                        
                            |  | A complete table of Nikon 1 system battery compatibility | 
                        
                            |  | RIP: garagedoorctl | 
                        
                            |  | From Pinboard to Raindrop | 
                        
                            |  | Photo sequence of Bald Eagles hunting, from Nov. 2022 | 
                        
                            |  | A simple, reasonably verbose URL shortener. | 
                        
                            |  | New IDs resulted in many “new” posts in Ann Arbor FOIA RSS feed | 
                        
                            |  | Thinking about cardboard | 
                        
                            |  | Hacking slightly better sum types without Go generics | 
                        
                            |  | 3D Printing Recommendation: Plasti-Dip Spray Rubberized Coating | 
                        
                            |  | Reconsidering Netdata | 
                        
                            |  | TDS220 Oscilloscope Refurbishment: Rotary Encoders & Backlight | 
                        
                            |  | Building the atomic clock I’ve always wanted | 
                        
                            |  | 3D Printing Project: Tiny Trays for Screws, etc. | 
                        
                            |  | Embracing a ruthless approach to email spam | 
                        
                            |  | macOS Scripting: How to tell if the Terminal app has Full Disk Access | 
                        
                            |  | Patron-only Fatal Error episodes are becoming public | 
                        
                            |  | Reducing SD Card Wear on a Raspberry Pi or Armbian Device | 
                        
                            |  | PiKVM Build | 
                        
                            |  | Expanding the Ubiquiti Cloud Key Gen 2+ with a 3.5” Hard Drive | 
                        
                            |  | Thermal Camera Photos of Wemos D1 Mini ESP8266 Board | 
                        
                            |  | HTTPS Requests with a Small Set of Root Certificates on ESP8266 + Arduino | 
                        
                            |  | HTTPS Requests with a Root Certificate Store on ESP8266 + Arduino | 
                        
                            |  | Shipping Data to InfluxDB using Arduino + ESP8266 | 
                        
                            |  | Initial Impressions of ESP8266 + Arduino | 
                        
                            |  | Environmental Data Logging to InfluxDB using BME280/AM2301 Sensors on Raspberry Pi | 
                        
                            |  | Log your Ecobee data in InfluxDB with ecobee_influx_connector | 
                        
                            |  | Working around the “Untrusted Developer” bug on iOS 15 | 
                        
                            |  | Checking in on iOS 15 bugs, as of 15.0.2 | 
                        
                            |  | Reusing an ESP8266HTTPClient | 
                        
                            |  | How to enable debug logging for Arduino's ESP8266HTTPClient with PlatformIO | 
                        
                            |  | ESP8266 + PlatformIO Serial Console Monitoring with Exception Decoding | 
                        
                            |  | Debugging an Intermittent Arduino/ESP8266 ISR Crash | 
                        
                            |  | Small commands, big consequences | 
                        
                            |  | More Bugs in iPhone 13 & iOS 15 | 
                        
                            |  | iOS 15 & Safari 15 | 
                        
                            |  | Integrating URLs into the Finder file-browsing experience | 
                        
                            |  | I wrote ‘hosts-timer’ to help quit my (desktop) Twitter and Facebook habits | 
                        
                            |  | Tiny Side Project: Lofi Cafe.app | 
                        
                            |  | I got into 3D printing, and it feels like magic | 
                        
                            |  | LAKE.app | 
                        
                            |  | LAKE.app GitHub repository | 
                        
                            |  | Michigan COVID Vaccine Links | 
                        
                            |  | Deferred Tasks, Project Templates, and More: Customizing Things with AppleScript | 
                        
                            |  | Now: Feb. 2021 | 
                        
                            |  | Redirecting Hacker News traffic away from your site via Nginx configuration | 
                        
                            |  | Why I use Arq instead of restic for macOS backups | 
                        
                            |  | Ship electricity usage data from an Energy Bridge to InfluxDB | 
                        
                            |  | Replacing iTunes, Music.app, iTunes Match, and iCloud Music Library | 
                        
                            |  | Securing my personal SSH infrastructure with Yubikeys | 
                        
                            |  | Using Flickr Again | 
                        
                            |  | Letters of Recommendation: Where to start with Peter F. Hamilton, Mastodon iPhone apps, and Domain Registrars | 
                        
                            |  | Now, Jan. 2021 | 
                        
                            |  | A lightweight service health check tool written in Bash | 
                        
                            |  | Simple programs that make Things.app better | 
                        
                            |  | Introducing Runner: a lightweight wrapper for cron jobs | 
                        
                            |  | Letter to Ann Arbor City Council regarding the failed Y Lot vote | 
                        
                            |  | Ann Arbor iPhone X Wallpaper | 
                        
                            |  | Dashcam & Crash Report from March 2017 AAPD Diag Crash | 
                        
                            |  | Deploying Let’s Encrypt with Nginx on Ubuntu 16.04 | 
                        
                            |  | Takeaways from Vox’s post on malicious ads | 
                        
                            |  | Reading List: Meltdown and Spectre | 
                        
                            |  | What Ali Ramlawi Gets Wrong About Development and Quality of Life | 
                        
                            |  | API Design Reading List | 
                        
                            |  | Recommended Equifax Breach Resources | 
                        
                            |  | Failing Actors Reading Series | 
                        
                            |  | Quick ADS-B monitoring on OS X | 
                        
                            |  | ALPRs in Ann Arbor | 
                        
                            |  | DRYing up duplicate code into helper functions | 
                        
                            |  | Monitoring aircraft via ADS-B on OS X | 
                        
                            |  | Statically-Typechecked Duck Types in Swift | 
                        
                            |  | Choosing a Version Number for a CocoaPod with Updated Dependencies | 
                        
                            |  | Parent-Child Communication in a Coordinator/View Model Application | 
                        
                            |  | Fatal Error, Season 2 | 
                        
                            |  | Fatal Error | 
                        
                            |  | Why Comcast injecting messages into web traffic is dangerous | 
                        
                            |  | The hard problem in decentralized social networks | 
                        
                            |  | Let’s Encrypt vs. iTunes: anatomy of an error delivering Fatal Error | 
                        
                            |  | Fixing Storyboard Segues: Only Apple Can Do This | 
                        
                            |  | Radio in Ann Arbor: Scanning KARB | 
                        
                            |  | Over-Reactive? | 
                        
                            |  | A brief index of many neat Ann Arbor things | 
                        
                            |  | Ad networks in their current incarnation are too dangerous to be allowed to exist. | 
                        
                            |  | Modeling polymorphic relationships in Swift (spoiler: enums seem pretty cool) | 
                        
                            |  | Does everything need to be HTTPS? | 
                        
                            |  | App Transport Security: What, Why, How? | 
                        
                            |  | Ad-light, Malware-heavy | 
                        
                            |  | Quotes | 
                        
                            |  | ‘Obviously super complex’: evaluating software architecture as simple vs. easy | 
                        
                            |  | String is not a sufficient type: how using your type system can help you make better software | 
                        
                            |  | Writing good commit messages | 
                        
                            |  | Why I’m selling my Apple Watch | 
                        
                            |  | Working with custom UIView designated initializers | 
                        
                            |  | Nobody is using App Transport Security; what’s next? | 
                        
                            |  | Ad blockers aren’t killing the web; ad networks are killing the web | 
                        
                            |  | Multiple Inheritance vs. Traits or Protocol Extensions | 
                        
                            |  | Cocoa’s mutable-subclass pattern is an antipattern | 
                        
                            |  | Be Proactive: Use Reactive | 
                        
                            |  | Casting in Swift 1.2: a brief summary | 
                        
                            |  | IBOutlet declarations in Swift | 
                        
                            |  | Subjective-C: I use property (dot) syntax liberally | 
                        
                            |  | Why use GitHub Wikis? | 
                        
                            |  | Tiny Swift idioms in ObjC | 
                        
                            |  | A list of Auto Layout DSLs, Categories, Etc. | 
                        
                            |  | The problems with due-process-compatible cryptography | 
                        
                            |  | Why non-engineers should care about “Technical Debt” | 
                        
                            |  | Why Reactive programming techniques are valuable | 
                        
                            |  | Notes on Initialization in Swift | 
                        
                            |  | Physics in Interstellar | 
                        
                            |  | Back Buttons for Web View Controllers | 
                        
                            |  | Real World Singleton Design | 
                        
                            |  | Greg Titus on NSFileCoordination and Extensions | 
                        
                            |  | iOS 8 Extensions Roundup | 
                        
                            |  | Let’s talk about Optionals | 
                        
                            |  | Benefits of Cocoa: Still here in Swift | 
                        
                            |  | It’s Not Exploitable | 
                        
                            |  | Code Optional | 
                        
                            |  | Tech Debt and Refactoring | 
                        
                            |  | Explicit Programming | 
                        
                            |  | ↗ Avoiding Singleton Abuse | 
                        
                            |  | Follow me on Pinboard | 
                        
                            |  | Quick followup on singletons | 
                        
                            |  | Including your Pods directory in source control | 
                        
                            |  | Singletons in Cocoa applications | 
                        
                            |  | The Value of ReactiveCocoa | 
                        
                            |  | Objective-C | 
                        
                            |  | Serving from your Dropbox folder with nginx | 
                        
                            |  | I FOIA'd Myself with the FBI | 
                        
                            |  | Do programmers use serial commas more often than other people? (No.) | 
                        
                            |  | ArborWX | 
                        
                            |  | CDZLinkOpenManager | 
                        
                            |  | Where is this awesome airplane playground? | 
                        
                            |  | CDZPinger | 
                        
                            |  | The UGLi | 
                        
                            |  | Elegant UITableView row selection behavior based on edit state | 
                        
                            |  | Collaborating with Git and Github | 
                        
                            |  | 1.5 Years of UMich Magic Bus Data | 
                        
                            |  | Shooting Theatre, Dance, and Music | 
                        
                            |  | Fixing 'Corrupted MAC On Input' Error with Git/SSH/VirtualBox 4.1.6 | 
                        
                            |  | UMich Google Calendar Updated for Winter 2012 | 
                        
                            |  | Capturing Lightning | 
                        
                            |  | UMich Google Calendar Updated for Fall 2011 | 
                        
                            |  | How Rdio Can Kill Spotify (and vice-versa) | 
                        
                            |  | Removing AT&T Mobile Web Bookmark from Android Phones | 
                        
                            |  | Making a Private Gist Public | 
                        
                            |  | Shooting Concerts with Strobe Lights | 
                        
                            |  | The Twitter Busyness Average | 
                        
                            |  | Find open CAEN computers using your phone | 
                        
                            |  | Moving from Wordpress to Jekyll (and a new design) | 
                        
                            |  | UMich Google Calendar Updated for Winter 2011 | 
                        
                            |  | Michigan Asst. AG Shirvell appeared at protest in May to defame Armstrong | 
                        
                            |  | Datasheet for RadioShack Phototransistor | 
                        
                            |  | Perfect ViewVC On Dreamhost | 
                        
                            |  | University of Michigan Google Calendar | 
                        
                            |  | Very Simple Dynamic DNS Client | 
                        
                            |  | ↗ Singletons are Pathological Liars |