I’ve been wanting to use readonly classes since PHP 8.2 came out a year ago, but I’ve been blocked by my (to this point) loosey-goosey approach to immutability and PHPCS not supporting the syntax.

Turns out PHPCS was Going Through Some Things. It’s better now.


Fun game over on Bluesky that I wanted to share: what’s the best single line from a song? Most of the ones I could think of were whole bridges or only worked in context. Finally settled on an older lyric from The Echoing Green.

Screenshot of a Bluesky post. An image says: Best single line from a song; Not best chorus, not best verse, not best bridge, Just one line. Evan’s response: And I’ll believe for everyone that love has come and sorrow has an end.

Is there some “dev mode” in Mastodon I can turn on to see (a) what ActivityPub messages are being received and (b) why they aren’t doing anything/got rejected?


After trying and failing multiple times to get multiple Fediverse projects working inside my existing Docker Compose setup, I’m biting the bullet and paying for another VM so I can finally test against Mastodon.

I feel like I’m missing something…


For those that celebrate, hope you are having a wonderful Christmas. Today’s joy is a six-sided keyboard switch tester that doubles as a fidget toy.

I will try not to annoy absolutely everyone. No promises.

Evan’s left hand holding a cube with a keyboard key on each side.

Bookmarking this post comparing social media site interactions to UX dark patterns for the eventual essay on social media.


Testing time…

A series of post titles that, in reverse order, reads as the chorus and second verse to “Vertigo” by U2.

From @brentsimmons’ post on adding Mastodon support to the RSS reader NetMewsWire:

Such an app could be a nice unified experience. Get your Mastodon, Threads, RSS feeds, Micro.blog and, hopefully, other services — anything that supports ActivityPub, RSS, or some other open format or API — all in one place, in a way that’s already familiar to everyone.

That’s the second half of the plan for Smolblog. It’s under Beta Phase 2. Feedback and help is always appreciated.


Just wrote the last sentence of a story that comes in at just under 12k words.

But I like this one too much, so it’s getting edited!


Bookmarking this article about moving from CRUD to Event Sourcing as it has some of the simplest explanations of the concept I’ve seen.


Fascinated by this talk by Gary Bernhardt about boundaries in software architecture. It’s validated some of the architecture I’ve used with Smolblog and given me ideas for what I haven’t…


There are always going to be the free riders – tech companies, perhaps – who benefit from the interconnectedness of the world while refusing to do the work.

— Duke University Libraries in a post aptly titled “Why We’re Dropping Basecamp”


Last year Fortnite did a big in-game event to end Chapter 3 and launch Chapter 4. This year they had even worse queuing (my wife got kicked out an hour before and couldn’t get back in) just to have a few cinematic teasers and… get kicked out anyway I guess? I’m not mad, just disappointed.


Sometimes you get an error that just makes you want to walk into the ocean.

Screenshot with white text on a red background: Error from Smolblog: Call to a member function toString() on string

I hate signing into my Google account on my phone. Because Google, a company run by Very Smart People, always assumes I’m signing into my phone for the first time and bombards me with emails and notifications about “setting up” my phone and “making it better” with all of their apps. 🙄


It goes like this:

  1. Find out my company is using a product.
  2. Look at product.
  3. Find out they have a free tier.
  4. Sign up for said free tier.
  5. Find out that this product allows public comments on a roadmap.
  6. Post the link to the Smolblog roadmap I just created.
  7. Ask people to like, comment, and subscribe.

And after resigning myself to just using a raw SQLite database to store my character/setting info, I gave Collections Database a try. So far it’s working well enough to spend the $7 on the pro version…


Started and stopped several attempts last night at finding some software to use as a character database… Ended up making a SQLite file and opening it in TablePlus.


Hey Stripe, what’s your black Friday dashboard say about the number of businesses having their “best day ever”?

Screenshot from the Stripe public dashboard. The entry for businesses having their best day ever on Stripe is 9,001.

If you want to upload a file through an HTML form, be sure to set the content type to multipart/form-data. Otherwise it will not work.

If you want to upload a file through the JavaScript fetch function, be sure NOT to set the content type manually. Otherwise you’ll be stuck for a week. Like me.


Not me belting out a line from the song stuck in my head and pulling up to the drive thru window just to be told the mic was still hot. You must have me confused with someone else.


Some belated Veterans Day words from a colleague who passed earlier this year:

Please be mindful that there are folks that you know who are holding a lot in their hearts. And this weekend, their hearts may feel particularly heavy.


Hearing rumblings of Tumblr being put on life support. I’m trying not to let it pressure me…

But come ON! I had two API integrations ready to start with Smolblog. But Twitter doesn’t exist anymore, and now Tumblr?!

Anyway, thanks @manton @jean @vincent and co for the stable platform.


I’ve been planning on using the AGPLv3 license for Smolblog and selling exception licenses. It felt like the best way to keep the project Actually Open Source™ without leaving it open to poaching by major cloud players. And now Element (co. behind Matrix) is providing some major vindication.


Some days you get an idea. Some days that idea doesn’t last.

Screenshot from Mastodon. Evan asks: if the finger tap for the Apple Watch only works when it’s being looked at, does that mean it can’t be used as a no-look slide clicker? John Gruber responds in the affirmative.