Play to Improve, Not to Win

You’ll often hear the advice, “Play to improve, not to win.” What does that mean, exactly?

Adding Mastodon links to Jekyll

I’ve added Mastodon links to the blog. In the process I created a Jekyll plugin that does all the work.

Voice Lessons

What does Reiterate have in common with top-tier Olympic coaches? It’s all in your head.

2022 Recap

That’s a wrap for year two of my blog. It’s been mostly more of the same. I look back at encouraging trend lines from Google, and forward on what’s to come.

Custom MacOS Notifications

I wanted Jekyll to notify me when it had completed building my site. Getting it to work the way I wanted involved patching together a bunch of almost-solutions from different places.

How To Filter Journalctl By Unit

Journalctl is the standard way of viewing system logs on Linux. But since the logs from all processes get consolidated in one place, it can get quit spammy if one process dumps a lot of output. Here is how I filter out those bad processes.

Designing a REST API in Swift

Reiterate uses a backend server to coordinate its in-app purchases. The app and server communicate via a REST API. Here’s how I implemented that in Swift.

Using Tags to Note Infrequent Reminders

One of the ways to use Reiterate’s tag feature is to filter infrequently-used tips.

Creating Custom Bundles for On-Demand Resources

For the new in-app purchase flow, with on-demand resouorces, I needed to organize Reiterate’s products into separate bundles.

You Should Almost Always Vote Yes to Surrender

League of Legends offers players the ability to forfeit games. After a certain amount of time, any player can start a surrender vote, and if enough players vote Yes then the game ends with a loss. When is it appropriate to surrender a game?