Although Devise is a fantastic authentication library, I’ve been reaching for Rails’s built in authentication generator since it was introduced in Rails 8. Almost all of my hobby apps are for a single user (me!) so I don’t really need all the features of devise.
I’ve been working through the fantastic Crafting Interpreters book, and implementing the Lox interpreter in Ruby. I wanted a minimal type checking setup for the code, so I decided to configure sorbet with RBS comment syntax.
For the past few weeks, I’ve been playing around with Antigravity, Google’s new AI powered code editor. It has a free tier, so I wanted to see how well it worked for hobby projects. At work, I primarily use Cursor and Claude Code with Opus. I also have a Cursor Pro subscription for personal use, and wanted to see if Antigravity could replace it.
35 books, 17,000 pages. That fell short of the 50 books target I set for myself, but there were quite a few great books in there. Most of my “reading” this year was through audiobooks, so I ended up listening to 240 hours (that’s 10 whole days!) worth of books.
Ruby 4.0 will be released next week on Christmas day. This release brings a new JIT compiler, improvements to Ractors, a new mechanism to define namespaces called Ruby::Box, and a whole lot of other changes.
I’ve been using the Airpods Pro 2 with an Android phone for the past few months. Recently, I came across the Librepods project, which aims to unlock Apple exclusive features available for Android users. This requires rooting the phone, so I’m too keen on installing it, but I was curious about what I’m missing, which prompted this post.
I switched to Obsidian for note taking this week, after over 3 years of using Logseq. Despite loving Logseq’s outliner format, I’ve found the app, especially the mobile app, to be slow and frustrating to use. If you’re looking to choose between the two, I hope the notes below help you see some of the tradeoffs.
When a method performs a slow operation, memoizing the result using instance variables is a useful optimization. However, I’ve often seen people (including myself, sometimes!) reaching for memoization for things that don’t need to be optimized.
In my previous post, I wrote about exporting the postgres database for devlibrary from fly.io to a local file. Now, I want to convert that into a sqlite database, so I can get rid of the dependency on a separate database server.