My very own place to post.
Subscribe to receive updates via email or web feed.
- Thou shalt not suffer a bashism to live
- CSS Timeline
- New TIL section and multiple web feeds
- Atlas
- Generating SVG pie charts in Hugo
- Action without thinking
- SVG triangle of compromise (resolved)
- Concerns about passkeys
- psyopsOS: a DIY infrastructure example
- That Pleasurable Buzz of Feeling Slightly Unsettled
- LDAP migrations
- Technical solutions to social problems
- Use the 1Password SSH agent conditionally
- Linux keyboard LED control
- RSS for Hannah
- (Type) Checking the LLM Some environments are better suited for Copilot than others
- The iPad and computing
- Shell startup precomputation
- Custom APK Repositories
- Local symlinks as HTTP redirects in S3
- Web Archiving
- I was featured in Paged Out!
- Multilinks
- Copyright is for the Public
- Process substitution in Python
- Improving argparse documentation generation
- Just let me write code, dammit!
- Batch Cocktails
- ZSA Voyager
- Progfiguration is programmatic
- "I can't write this"
- List CSS variables in JavaScript
- Hugo development snippets
- Python zip applications and static includes
- Progfiguration public release
- Public comment period open
- The Aeropress and grinders
- Python pdoc: recursively generating argparse help
- Home clusters
- Command line -like interfaces for mobile apps
- The command line is cheap
- git back A useful custom git subcommand
- Convert SSH ed25519 key to Onion Service key
- magicrun(): Run a command, print stdout/stderr in real time, and save it for later
- A shrine to privacy
- Fun with iframes
- Archiving Tweets to HTML
- Running Wiki.js on Fly.io with Litestream backups
- Dark Mode
- New project pages
- Cistercian numerals are good for dates
- Business card
- Site design updates
- A failed experiment: Python Pillow and a Cistercian font
- hugo-theme-cistercian
- Interpersonal: A connection to the IndieWeb
- Through the Looking Glass
- Slippery Slopes and Bright Lines Device-side CSAM scanning is a retreat to a strategically weaker position for end-user privacy contra nonconsensual search by law enforcement.
- I do Pilates in bed
- set -eu is the lesser of two evils, if you have to write shell at all
- Formulæ Technicæ
- Hugo: Injecting an external file into a page with syntax highlighting
- Hugo Redirects and Partial Functions
- How I write shell scripts
- RSS styles
- Inline FontAwesome SVGs in Hugo
- Hardened 1Password emergency kit
- Let's Encrypt DNS challenges for appliances behind a firewall
- Secret control panels
- Biblemunger 2.0
- Fortunate
- Interviewed by ZSA, the makers of the ErgoDox-EZ
- Count like a Cistercian
- keymap.click 1.0
- keymap.click development preview
- deskmx: Never unplug your headphones again
- An Ansible filter is a pure function
- sparkles emoji dot ico
- A random failure: Problems upgrading Ansible and Python The story of a data loss bug I caused at work, how I fixed it, and some surprising behavior in Python and Ansible.
- Hack: saving QMK firmware source to the keyboard
- Windows, IKEv2, and error 13801
- Python, argparse, and custom actions and types
- CherryPy: Override the base URL behind a reverse proxy
- LockableSqliteConnection
- Python bullshit I'm proud of
- CherryPy: Cookies with HTTP basic authentication
- Announcing Caryatid
- Creating a Linux livecd
- Mozilla, SSL, and NSS
- Deploying SSL certificates
- Windows, symlinks, and pain
- DEFCON19 lanyard and PDP-8 assembly, part 2
- DEFCON19 lanyard and PDP-8 assembly, part 1
- DEFCON19 - In my day, you just walked into a bank with a gun and got money