All Posts
posts by year • posts by tag • crystal • debugging • design • homelab • jujutsu • languages • opinion • photography • podman • projects • tmux • tools • web
2026
- HTML-Safe String Interpolation August 17
- Type-Checking SQL Queries With Crystal Macros August 15
- Backups With Restic July 19
- Language Models for Programming June 9
- From Vim to Helix June 3
- Language Servers in Containers March 13
- Async Programming Is Just @Inject Time March 2
- Ruby Scripting Utilities February 8
- Building Dependency Injection with Crystal Macros January 31
- Why Containers? January 15
- Upgrading to Jekyll 4.4 January 3
2025
- Help I'm Stuck in a Photo Management Factory and I Can't Get Out December 26
- My Website Broke and You Won't Believe Why December 24
- Add a Signature to Your Website December 14
- Programming With tmux for Beginners December 13
- Why Do Containers on Alpine Forget My Tailnet? November 30
- More Commands in the JJ Toolbox November 22
- Hot ECR Reloading in Your Area November 17
- HTML-Safe ECR Templates November 13
- Tracking Down Progressively-Enhanceable APIs November 7
- Recklessly Smashing mruby Into Zsh November 1
- Unlocking the Full Speed of the tmux Interpreter October 25
- Light Mode InFFFFFFlation October 20
- The 6.2nd Stage of Swift on Linux October 13
- It Wasn't a Virus, It Was Just TLS October 5
- Now Codeberg Is My New Best Friend August 16
- Rewriting Pod With Two Years of Wisdom July 25
- GIF: The Git Interchange Format June 16
- Using Ruby in Shell Pipelines June 8
- Writing in Crystal, Rewriting in Rust April 26
- Building NZ Topomap of the Day March 28
- Snakes in a Pane: Building Snake Entirely Within a tmux Config File March 20
- Playing Video With 5,170 tmux Windows March 17
- Endash, a Lightweight Container Dashboard March 10
- A Slim Home Server with Alpine Linux March 9
- What Happened to the Future of Computing? March 2
- Configure Rootless Podman Remote on Alpine Linux January 18
- How Did I Miss run -C? January 10
- Lazy Load Command Completions for a Faster Shell Startup January 6
2024
- Solving Sudoku with tmux December 27
- Going Gigabit December 16
- HTTP Router for Crystal December 6
- Appreciating the Fine Art of Phone Photography December 2
- Why Does Delta Take 400ms to Show Diffs? November 23
- Web Gardening October 3
- When Does an API Become a DSL? September 28
- Mockito, Type Checking, and the Perils of DSL Design September 27
- Copy the Output of the Last Command Using tmux September 26
- Grabbing GitHub Release Assets Using JQ September 22
- Implicit Lifetimes and Undroppable Types September 5
- Horrifying Volume Control Interface September 2
- Understanding Revsets for a Better JJ Log Output August 18
- A New Home for My Photos July 20
- Lazy Jekyll Hacks for More Accurate Publication Times July 18
- Upsetting the Apricot Cart July 17
- Merging JJ Repos July 11
- Interoperability Tier List July 10
- A Critique of Closure Syntaxes June 28
- Apple Watch Running Apps June 18
- Repairing My Roborock S6 June 15
- Using JJ for the Version Control Operation Audit June 9
- The Version Control Operation Audit June 7
- Some Hot JJ Tips May 26
- Happy Birthday to Website May 5
- Glory Is an Indeterminate Amount of Bandwidth Away April 19
- Blogroll: Early 2024 April 11
- It's Not Me, It's Git April 1
- Further Adventures in tmux Code Evaluation March 16
- Making a Compiler to Prove tmux Is Turing Complete March 15
- tmux.conf, With Commentary March 6
- Optimising for Modification February 28
- A Successful Experiment in Self-Hosted RSS Reading February 21
- Scalability and Capability February 8
- 40th Anniversary Macs January 28
- The Code-Config Continuum January 18
- I'm Dumbfounded by Discord January 13
2023
- Build and Install Tools Using Containers December 29
- Jekyll Blog Tips December 2
- Parsing Flags is Surprisingly Hard November 12
- How I Learned to Stop Worrying and Love Concurrency October 31
- Improvements for Initialising Pod Projects October 19
- The Best Reading App September 25
- The Five Stages of Swift on Linux August 23
- Warp Terminal August 2
- The Curse of Knowledge July 31
- Helicopter Tracking for Safer Drone Flights July 29
- Simple Home Server Monitoring with Prometheus in Podman July 16
- Limited Languages Foster Obtuse APIs July 9
- Why Modernising Shells is a Sisyphean Effort July 6
- Picking a Synology July 3
- Why Crystal is the Best Language Ever June 24
- Interfaces of Spatial Photo Editing June 18
- DJI Mini 3 Pro June 11
- Overcoming a Fear of Containerisation June 8
- pod, the container manager June 8
- Photomator for MacOS May 24
- Complicated Solutions to Photo Publishing May 22
- DJI DNG Rendering Broken on Ventura May 10
- Hardening with ssh-audit May 9
- Setting up podman-remote May 5
- @willhbr: Origins May 4
- Making a Website for the Open Web March 13
- Installing rsnapshot on Synology DS420j March 7
- Geode: More Functions for Crystal March 2
- HOT NEW MARKDOWN EDITOR FOR MACOS February 10
- Dismissable Popup Shell in tmux February 7
- Adding OpenGraph previews to Jekyll February 4
- Create a Mastodon alias using GitHub Pages January 24
2022
2021
2019
2018
- Compiling for Shortcuts December 26
- Learning Software Engineering July 17
- iOS Should Not Have a Command Line June 21
- Writing Macros in Crystal June 18
2017
- Scrutinising a Scalable Programming Language November 21
- A Downgrade October 22
- Top Tips for iOS 11 September 24
- Pug: An Abomination of Shell Scripting August 21
- Learn Enhancer Reaches Version 2.0 July 21
- Using tmux in the Real World July 11
- Metaprogramming and Macros for Server-Side Swift July 4
- Needless complexity: Generalising a Scheme for Aikido Training June 18
- More Fun With Generics in Kotlin May 23
- Templates, Code Generation, and Macros May 1
- Conditionals in SH January 11
2016
- Tested: Apple Won't Make a Touch MacBook October 30
- Bluetooth is Great, Until it's Not October 27
- Basics of Functional Programming July 28
- Making Slackbots July 11
- Why I Dislike ATDD March 29
- Why I use Nginx March 3
- Enumerating The Ways I Love Swift Enumerations February 28
- Testing GitLab CI February 12
- 4K Video Editing on a 12" MacBook? January 8
2015
- Welcome to Swift.org December 4
- Life with Swift November 28
- Not Enough Magic October 22
- OS X El Capitan October 2
- Absurd infinitum: Deliberately misunderstanding Steve Jobs September 13
- Learn Enhancer 1.6 June 8
- The OnePlus One May 11
- Nexus 6.5 April 12
- Samsung Copying Culture April 6
- Valve: Give me a Steam Machine March 24
- Pebble Time March 6
- I made a thing February 16
- Smartwatch!? January 25