Skip to content

Blog

Ephemeral Servers on Hetzner

I developed a method to efficiently use Hetzner cloud servers by booting from a removable volume and automating server deletion when idle, significantly reducing costs.

Stop using em in media queries

CSS media queries are used to create responsive layouts. Conventional wisdom tells us that we should use relative font sizes to specify layout dimensions, because that improves accessibility, however this wisdom is outdated in the current browser landscape.

Automating an SSH session with Python

Learn how to automate an SSH session for a MUD game using Python, iTerm2 triggers, and asyncio, enabling bot-like functionality for character commands and interactions.

Creating my personal cloud with HashiCorp

I maintain a VPS which I use to self-host a variety of services that I use: Joplin Server, Seafile, as well as for hosting websites that I develop. For the past few years, that VPS has been managed with Docker Compose, but recently I decided to build something a bit bigger.

Useful notifications in iTerm2

For some reason, I’ve found that in my career a lot of the work I do ends up involving slow REPL loops: I make a change, run a command, wait for it to finish, and repeat. While I’m sitting there waiting, it’s easy to be distracted by things, and I want my task to bring itself back to my attention when it’s ready. This desire has led me on a multi-year quest to tailor my notifications perfectly, and in this post I’m going to share what I’ve come up with.

Writing iTerm2 Python scripts

iTerm2 is a very powerful piece of software and includes a plugin system that allows you to write Python scripts that terminal programs can take advantage of. In this post, we’re going to write two Python scripts for iTerm2: one to automatically switch to/from Dark Mode, and the second to play a sound on your local speakers when an escape sequence is printed, even over SSH. I’ll also share a few bonus snippets that take advantage of some of iTerm2’s lesser known features.

Configuring Prettier and ESLint

After configuring Prettier and ESLint for my JavaScript projects, I documented the streamlined process for others to easily achieve consistent code formatting and linting in their repositories.

Thoughts on dotfiles

I’ve maintained a dotfiles repository since 2011 (at least that’s when I initially put it into git), and haven’t thought much about it since then. I wrote a basic “dotfiles installation” script back in 2013 and have been using and lightly modifying that ever since. My primary use case was just syncing dotfiles between my personal and corporate Macbooks, so it didn’t need much flexibility. However, the Makefile wasn’t trivial and doing simple things like adding new files required knowing the magic incantation (a combination of undocumented convention and GNU Make functions).

Dev Diaries - July 21, 2018

A summary of my current hobby projects includes developing a board game engine with Glish, enhancing a Chess 2 AI, and reevaluating HTerminal’s features for better productivity.

Dev Diaries - May 28, 2018

Work focused on defining how glish programs run, including their structure and exports, while planning future improvements like a visitor pattern and a board game app for testing.

What is Glish?

Glish is a programming language designed for writing prose-like manuals that define rules and behaviors for applications, making it easier for non-technical users to understand complex relationships.

Dev Diaries - May 21, 2018

Reflecting on the ongoing development of Glish, I’ve encountered challenges with rulebooks, property assertions, types, and features like named outcomes and self-referential descriptions, guiding my next steps forward.

Setting up RetroPie

Set up RetroPie on a Raspberry Pi B+ to play classic games, connect to a Time Capsule for ROM storage, and enhance the experience with faster tools and potential improvements.