All blogs / Software / engineering practice
Chris Dzombak
A Midwestern software developer with objectively too many hobbies.
Software / engineering practiceLinux / UnixAI / MLDevOps / SRE / infrastructure
- Posts
- 288 from 1 Aug 2008 to 27 Apr 2026
- Posting
- weekly (27 in the last year)
- Kind
- personal blog
- Feed
- https://www.dzombak.com/blog/rss/
2026 8
- A vLLM Docker Compose recipe for running Qwen 3.6 27B on dual RTX 3090s (+OpenCode configuration)
- eztag: GitHub Tag Creator
- Linux Desktop Amenities
- Things to try if you're new to Claude Code
- Birds of Sanibel Island
- "Why Does Test-Driven Development Work So Well In 'AI'-assisted Programming?"
- A pipeline for getting bird videos from an IP webcam
- What software engineers bring to AI-assisted software development
2025 76
- Never use Apple gift cards
- "Your job is to deliver code you have proven to work"
- Why tech companies encourage their software engineers to use LLMs
- Introducing two tools for working with Plex media libraries
- Letter of Recommendation: Simon Willison's Weblog
- noclobber breaks JetBrains IDEs’ ability to read your shell environment
- Streamlining my user-level CLAUDE.md
- Linux server migration planning
- Neat Image noise profiles for the Ricoh WG6
- Neat Image noise profiles for the Leica X1
- Beavers at work in West Lake Nature Preserve
- Using systemd to keep an SMB share mounted
- Using systemd to run a Docker container only when an SMB mount is mounted
- Beavers in Dexter, MI
- Automatically sort trail camera images with trailcamai
- pdate.dzdz.cz: A website for pdate
- Not everything in your todo list needs to be a proper GTD Next Action
- pdate: Date/Time Parsing for Programmers, DevOps, and SRE
- AlfredSwitchWindows now supports Ghostty tabs
- #latergram: Wild Birds at the Detroit Zoo, April 2024
- #latergram: Bird Photos from Kensington Metropark, July 2025
- A Tool for Working with Git Worktrees
- Getting Good Results from Claude Code: Writing Good Prompts
- Setting Up & Testing Spotlight + Samba + Elasticsearch
- New Derivative of my Ubiquiti Cloud Key 3.5" HDD Adapter
- Ask Claude Code to fix CI
- LLM Q&A Technique: Context Priming
- LLM + MCP Use Case: GitHub Actions Workflow Updates
- Celebrating 250(+) Public GitHub Repositories
- Give your LLM Coding Tools Their Own Tools
- Teaser for upcoming Claude Code posts
- Getting Good Results from Claude Code
- Quick Devops Tool: gha-secrets-setup
- Navigating and Rewriting Legacy Systems
- An improved nginx_ensite script
- How I share Bird Buddy photos online
- A Lychee photo library tool for titling photos
- Avoid unbounded inboxes; avoid stress
- Functional Documentation
- Announcing the DzSolarized VS Code theme
- Recommendation: Microphone Setup for BirdNET-Pi
- feedfilter: an RSS feed postprocessing tool
- Use Your Type System
- I vibe-coded an AI photo organizer for Lychee
- CO2 Monitoring and Alerting with Aranet4 + an4mon
- Neat Image noise profiles for the Sigma sd Quattro H
- Trying to remind myself that I don't have to do everything today.
- Setting up a dev env for Lychee
- 687999645019130001001e05
- 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 —
- Updated instructions for installing my Debian package repositories
- How to rsync with sudo on both sides
- 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
- Some TODOs for the new site
- RIP: Aircraft Radar Skill for Amazon Alexa
- Great Moments in Modern Apple User Experience Design
- Know Your Birds: Red-Headed Woodpecker
- More Severance Michigan Connections
- My eBird Profile
- 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
- A migration to Ghost from Jekyll
- Automating Ghost Routes & Redirects Deployment
- Dust Caps for Oxygen/Acetylene Hoses
- Some new DNS-related tools
2024 38
- Everything I know about the YK-1000H NTP Server
- Making a Docker container depend on a disk being mounted
- Letter of Recommendation: Quality Binoculars
- Cloning Raspberry Pi SD cards
- Faking the fan rotor lock signal in a Tripp Lite SU1000RTXLCD2U UPS
- Freeing disk space on GitHub Actions runners
- Fixing Ego batteries in a low-voltage "defective" state
- Improved low-battery shutoff for my DIY Ego-powered 12V supply
- Moving fake-hwclock to a separate partition on a read-only Raspberry Pi
- Raspberry Pi Use Cases
- Alfred workflows for searching Bear notes and Docker Hub images
- Keeping a SMB share mounted on macOS (version 2)
- Letter of Recommendation: Where to start with Alastair Reynolds
- 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
- The 12v portable power supply Ego needs to make
- Pi Reliability: Reduce writes to your SD card
- Some recent bird photos
- Running a Raspberry Pi with a read-only root filesystem
- Keeping a SMB share mounted on macOS (and alerting when it does down)
- Setting net.netfilter.nf_conntrack_max on Ubuntu 22.04
- Pi Reliability over WiFi: 'Temporary failure in name resolution'
- OpenList is no longer available in the Chrome Web Store
- Socket organizers, end caps, and 3D-printed friction fits
- Reliable WiFi for the Bambu X1C 3D printer
- More Koyaanisqatsi desktop wallpaper (sunrise clouds this time)
- Making 3D-printed end caps for sharp aluminum extrusions
- Blocking disposable email domains in Mastodon
- Desert stills from Koyaanisqatsi as desktop wallpaper
- Automated generator load-shedding for the house
- Setting up KVM virtual machines using a bridge network on an Ubuntu host
- Fixing bad design with a label maker
- Setting up a secondary Pi-Hole on my home network
- Recycling a pallet into an Adirondack-ish-style footrest
- RIP: OpenList Chrome Extension
- RIP: SaveTabs Chrome Extension
- How to move Docker's data directory from /var/lib
2023 15
- Considerations for a long-running 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
- Remote logging for easier Raspberry Pi debugging
- Stop using the Raspberry Pi's SD card for swap
- Keep your software up and running on the Raspberry Pi
- Mitigating hardware/firmware/driver instability on the Raspberry Pi
- Raspberry Pi SD cards: fsck them often
- Maintaining a solid WiFi connection on Raspberry Pi
- Choosing the right SD card for your Pi
- Fixing excessive Pi-hole lighttpd access log size when Netdata is installed
- RIP: garagedoorctl
- A complete table of Nikon 1 system battery compatibility
- From Pinboard to Raindrop
- Photo sequence of Bald Eagles hunting, from Nov. 2022
2022 4
2021 45
- Building the atomic clock I’ve always wanted
- Reconsidering Netdata
- 3D Printing Recommendation: Plasti-Dip Spray Rubberized Coating
- TDS220 Oscilloscope Refurbishment: Rotary Encoders & Backlight
- 3d printing project tiny trays for screws etc
- Reducing SD Card Wear on a Raspberry Pi or Armbian Device
- Expanding the Ubiquiti Cloud Key Gen 2+ with a 3.5” Hard Drive
- Pikvm build
- Macos scripting how to tell if the terminal app has full disk access
- Thermal camera photos of wemos d1 mini esp8266 board
- Patron only fatal error episodes are becoming public
- Embracing a ruthless approach to email spam
- Log your ecobee data in influxdb with ecobee influx connector
- Raspberry pi environmental data logging to influxdb using bme280 am2301 sensors
- Small commands big consequences
- Esp8266 how to enable debug logging for arduino s esp8266httpclient with platformio
- Https requests with a root certificate store on esp8266 arduino
- Esp8266 platformio serial console monitoring with exception decoding
- Shipping data to influxdb using arduino esp8266
- Checking in on ios 15 bugs as of 15 0 2
- Initial impressions of esp8266 arduino
- Https requests with a small set of root certificates on esp8266 arduino
- Reusing an esp8266httpclient
- Debugging an intermittent arduino esp8266 isr crash
- Working around the untrusted developer bug on ios 15
- 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
- Ios 15 safari 15
- Integrating urls into the finder file browsing experience
- More bugs in iphone 13 ios 15
- LAKE.app
- LAKE.app GitHub repository
- Michigan covid vaccine links
- Deferred tasks project templates and more customizing things with applescript
- Securing my personal SSH infrastructure with Yubikeys
- Letters of Recommendation: Where to start with Peter F. Hamilton, Mastodon iPhone apps, and Domain Registrars
- Redirecting Hacker News traffic away from your site via Nginx configuration
- Using flickr again
- Ship electricity usage data from an energy bridge to influxdb
- Now jan 2021
- Replacing itunes music app and itunes match and icloud music library
- Why i use arq instead of restic for macos backups
- Now feb 2021
- A lightweight service health check tool written in bash
2020 2
2018 6
2017 12
- Ali ramlawi and the library lot development
- Api design reading list
- Failing actors reading series
- Recommended equifax breach resources
- Alprs in ann arbor
- Quick ads b monitoring on os x
- Drying up duplicate code into helper functions
- Monitoring aircraft via ADS-B on OS X
- Fatal error season 2
- Parent child communication in a coordinator view model application
- Choosing a version number for a cocoapod with updated dependencies
- Statically typechecked duck types in swift
2016 13
- Fatal error
- The hard problem in decentralized social networks
- Why comcast injecting messages into web traffic is dangerous
- 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
- Ad light malware heavy
- Does everything need to be https
- App transport security what why how
2015 20
- Quotes
- String is not a sufficient type how using your type system can help you make better software
- Obviously super complex evaluating software architecture as simple vs easy
- Writing good commit messages
- Working with custom uiview designated initializers
- Why i m selling my apple watch
- Ad blockers aren t killing the web ad networks are killing the web
- Nobody is using app transport security what s next
- 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
- Subjective c i use property dot syntax liberally
- Iboutlet declarations in swift
- Why use github wikis
- Tiny swift idioms in objc
- A list of auto layout dsls categories etc
- Why non engineers should care about technical debt
- The problems with due process compatible cryptography
- Why reactive programming techniques are valuable
2014 20
- Notes on initialization on swift
- Physics in interstellar
- Ios 8 extensions roundup
- Real world singleton design
- Greg titus on nsfilecoordination and extensions
- Back buttons for web view controllers
- Code optional
- Tech debt
- Let s talk about optionals
- Benefits of cocoa still here in swift
- It s not exploitable
- Explicit programming
- ↗ Avoiding Singleton Abuse
- Follow me on Pinboard
- Singletons
- Quick singletons followup
- Including pods in source control
- Objective c
- The value of reactivecocoa
- Serving dropbox via nginx
2013 7
2012 4
2011 11
- UMich Google Calendar Updated for Winter 2012
- Fixing corrupted mac on input error
- Capturing Lightning
- UMich Google Calendar Updated for Fall 2011
- Rdio spotify
- Remove att mobile bookmark android
- Making private gist public
- Twitter busyness average
- Shooting concerts with strobes
- Find open caen computers using your phone
- Moving from wordpress to jekyll