Instantiating an Abstract Class with Dependency Injection

In my Laravel app, I wrote an abstract class that has a fair bit of stand-alone behaviour. I wanted to test this directly instead of via the implementations. PHP has anonymous classes, so instantiating it isn’t very tricky to do in a unit test. But the constructor also has about a dozen dependencies its asking…More

Garrick the Lightbringer

This is a short story from our current Dungeons & Dragons campaign. This is the moment when my warlock greedily took up an artifact after passing its guardian’s trial.

Garrick loved leaning on borrowed power. In this instance, the power he sought to take took him instead.More

Wake up your RDS Aurora Serverless before running your migrations

When you’re using an RDS Aurora Serverless DB instance with Laravel Vapor, you have the option to scale it down to zero capacity units when it’s been idle. This is great for development environments — it only takes a few seconds to come back up, and while it’s hibernating, you’re saving loads of money. One…More

Torghast, Tower of the Damned

Torghast, the Tower of the Damned, is a rouge-like (ish) set of dungeons in WoW: Shadowlands. I finished the “hard mode” last night and got my Maw horse, so I wanted to write up some of my thoughts on the feature. If you read “rogue-like” and think angband or Caves of Qud: congrats, you’re old…More

FEW Spirits’ Cold-Cut Bourbon

I had somehow missed the release of FEW‘s cold-cut bourbon in 2019. Fortunately, somebody notified me about it last month. I don’t usually go for FEW’s whiskeys — or those from the other Chicago distilleries — for one simple reason: Chicago & Evanston only re-started granting distillery licenses in 2008 and 2011, respectively. They’re new…More

First Thoughts on Baldur’s Gate 3

I started Baldur’s Gate 3 on Tuesday afternoon. This morning, I “completed” the first chapter, which is the end of the story in early access. So here are my thoughts on it so far! Firstly: the timing of the release was great. My Eberron campaign came to an abrupt end last Friday when we accidentally…More

Geek Grind Coffee’s Goblin Gulp

In one of my DnD campaigns, our mascot is a goblin we adopted early on. He’s a big fan of coffee, so on a lark, I google image searched “goblin coffee” for something funny to put in a scheduling email. I was surprised to find officially-licensed Pathfinder coffee offered by Geek Grind Coffee. I immediately…More

Bootstrap vs. Tailwind

People occasionally get into slap-fights over the tried-and-true Bootstrap vs. newer CSS frameworks like Tailwind. I’ve worked with both — and each one has a place in the toolkit. Maybe not your individual toolkit, depending on what your job requires, but at $UNIVERSITY there was a place for both. Do I need a CSS framework?…More

Quarantine Omakase at Kyōten

Chicago omakase restaurant Kyōten is doing private dining right now, so you get the whole place to yourself. Having considerable events to catch up on celebrating, we decided to go for it, being the safest dining-out option you can find. When you do omakase, you can usually talk to the chef. I’ve always felt bad…More

The UI Trap in Microsoft Teams

I have moved orgs and no longer live in Microsoft’s Slack competitor, Teams. So before I forget the frustration, I wanted to write up the severe, crippling flaw in Teams’ UI. Here’s a screenshot. Note the leftmost sidebar: a “chat” tab, and then a separate “teams” tab: “Teams” is the chatroom function, whereas “chat” are…More