Souls Like Strings

10s to 100ms; Optimising a Legacy Endpoint

This is the script for my first ever programming talk, delivered at the Tokyo Rubyist Meetup on April 15th, 2026. You can find a recording of the talk on Youtube (Github doesn't allow files over 1GB), and the slides (which you'll need if you want to see them) are here.

Introduction

Hi everyone, my name's Brett and unlike seemingly every other presenter I have not written a book, made contributions to Rails or used Ruby to write a presentation program I can use to deliver these slides from a Dreamcast. So what makes me...

Continue reading

TWIL April 10th 2026

  • When fixing someone else's mistake it's generally best not to make one of your own
    • You can't rescue passing nil to JSON.parse for some reason
  • The senior engineer who referred me for my job has (had) a blog!
  • More of a 'today I remembered' but there's a native HTML progress element
    • It's much easier than using divs/pseudoelements
  • expect_any_instance_of needs to go at the start of the spec, not the end
  • Having a StandardError rescue for your controller action (or anything really) is a pretty bad idea
    • makes it very difficult...
Continue reading

Momodora: Reverie Under the Moonlight

Surprisingly souls-like

Why

  • Nails the intangibles, feels better than it should
  • Evocative pixel art
  • Compact & fair, even on hard

Why Not

  • Pretty short
  • Not especially challenging, even on hard

Impressions

My expectations for this were right around Shantae given the similarities; retro pixel metroidvanias which at least from their store page look like they were drawn with one hand. In reality Momodora was more or less the exact opposite of Shantae; rather than being bright & cheery but clunky and frustrating Momodora sets a distinctly Dark Souls-like mood and plays with surprising...

Continue reading

TWIL April 3rd 2026

  • 'Next refresh' means 'next background refresh' not 'next time you can successfully request a refresh'
    • It's still wrong though haha
  • Demoing is easier when you break it up into chunks
    • And have separate links/accounts for each chunk
    • And close the links from the previous section before starting a new one
    • Luckily for my talk at Tokyo Rubyist I have slides & no links
  • Not for the first time, returning inside a block (like reject) actually returns in Ruby
    • What you're thinking of is next
    • Please do not get stuck on this for...
Continue reading

2026 March Retro

Projects

Continued writing this blog! Did not make as much progress on my meetup talk as I probably should have (i.e more than 0) but I've always worked best close to the deadline anyway.

Games

Despite being in Italy for 10 days of the month I racked up over 90 hours of Slay the Spire 2 in the 16 remaining days after its March 5th release. That's just over 5.5 hours a day which sounds about right haha, more or less every moment I could be using my laptop. As expected it's the original but better in every way in...

Continue reading