Rubyland

news, opinion, tutorials, about ruby, aggregated
Sources About
danielabaron.me RSS Feed 

Speeding Up PostgreSQL Full-Text Search with Persistent TSVectors

Learn how to dramatically speed up PostgreSQL full-text search by persisting TSVectors and using GIN indexes in Rails apps.
Planet Argon Blog 

The Cost of Leaving a Software Rewrite “On the Table”

The Cost of Leaving a Software Rewrite “On the Table”

It’s not old software that stalls teams. It’s what happens when the future stays unresolved.

Continue Reading

OmbuLabs Blog 

Celebrating the Entrepreneurs Organization of Philadelphia with AI-Powered Branding

As a year winds down, entrepreneurs often pause to reflect on the risks taken, the lessons learned, the wins celebrated, and the setbacks overcome behind the scenes.

What if those moments could be captured visually in a way that felt personal, branded, and inspiring?

That is exactly what we set out to do with a custom GenAI-powered card builder created for the Entrepreneurs Organization of Philadelphia.

A Custom AI Experience for EO Philadelphia

This project started as a small but meaningful side project for the Entrepreneurs Organization (EO) Philadelphia community.

Our founder, Ernesto Tagwerker, has been a part of this community since ‘23.

The goal was simple:

  • Celebrate…

Evil Martians 

So, your developers use AI now—here's what to know

Authors: Ivan Eltsov, Frontend Engineer, and Travis Turner, Tech EditorTopic: AI

Research-backed insights into what AI-assisted developers can actually deliver: when productivity improves, when it doesn’t, and how setting realistic expectations means best quality results.

AI has quickly reshaped software development, but the benefits are still quite foggy. So, if you're working with developers who regularly use AI to speed up their work, what can you actually expect of them? Can AI truly transform us all into "10x engineers" or is this just a pipe dream? This post has research-backed answers to help set reasonable expectations when dealing with AI-assisted developers.

The Bike Shed 

492: Defining value within your team

Sally and Aji assess some common metrics for success when working a project and how they may not always provide the clearest picture of how things are going.

Together they discuss how to communicate effectively with stakeholders who are less technical to fully appreciate certain decisions and choices being made on a project, as well as the different metrics you can use to better reflect success and setbacks on a project.

Your hosts for this episode have been thoughtbot’s own Sally Hall and Aji Slater.

If you would like to support the show, head over to our GitHub page, or check out our website.

Got a question or comment about the show? Why not write to our hosts: hosts@bik…

Weelkly Article – Now open for 2026 sponsorships 

Opening the Heart of libgd-gis

Opening the Heart of libgd-gis February 3, 2026 How Ruby Turns Coordinates into Maps (and Why Tests Matter) Maps look simple on the surface. You give them coordinates. They give you an image. But anyone who has gone even slightly deeper knows that coordinates are never just numbers. They are context. They are assumptions. They … Continue reading Opening the Heart of libgd-gis

RailsCarma – Ruby on Rails Development Company specializing in Offshore Development 

What Is Ruby on Rails? An Introduction for Beginners (2026)

Web development is progressing really fast in 2026; however, some technologies have stood the test of time due to their stability, simplicity, and laser focus on developers. Ruby on Rails is such a framework. Even though it was born a decade ago, it is still getting and serving modern web apps from all over the world within startups, enterprises, and SaaS platforms. For someone who is diving into web development, Ruby on Rails provides a solid mix of power with ease of learning.

This guide is an ultimate beginner-friendly introduction to Ruby on Rails, what it is, how it works, and why it’s still widely considered in 2026, and how new…

BigBinary Blog 

CDN caching issue involving Cloudfront and Cloudflare

Recently, some Neeto customers reported experiencing a verylong page load time. For some of them, the page didn't even load. We found thatthe issue is related to CDN caching.

Neeto uses React.js for the front-end code, and the asset files are hosted atCloudFront. To complicate matters, we use CloudFlare as our DNS resolver.Between CloudFlare and Cloudfront, we were not sure what was being cached and atwhat level. Since this problem was being faced only by our customers, it was abit difficult to reproduce and debug.

The whole setup is like this:

  • Browsers make requests to https://cdn.neetox.com/assets/xyz.js
  • Clouflare forwards the request to Cloudfront
  • CloudFront acting as the caching layer will…

If the browser is not getting the…

JRuby.org News 

JRuby 10.0.3.0 Released

The JRuby community is pleased to announce the release of JRuby 10.0.3.0.

JRuby 10.0.3.x targets Ruby 3.4 compatibility.

Thank you to our contributors this release, you help keep JRuby moving forward! @mrnoname1000, @ngr-ilmarh, @Earlopain, @philr, @jotamartos, @kares, @aleksandrs-ledovskis, @trinistr, @katafrakt, @chadlwilson, @khasinski, @evaniainbrooks

Compatibility

  • JRuby now reports RbConfig::CONFIG['arch'] without a version number, as universal-java. This allows using different JDK versions without triggering RubyGems missing extension warnings for installed gems. The host Java version is still…
justin․searls․co - Digest 

🔗 We're gonna need a bigger Shovel…

Glad to see Jerod properly follow up on this one:

In September of last year, I covered a post by Mike Judge arguing that AI coding claims don't add up, in which he asked this question:

If so many developers are so extraordinarily productive using these tools, where is the flood of shovelware? We should be seeing apps of all shapes and sizes, video games, new websites, mobile apps, software-as-a-service apps — we should be drowning in choice. We should be in the middle of an indie software revolution. We should be seeing 10,000 Tetris clones on Steam.

I was capital-T Triggered by this, having separately fired off my own retort to Judge's post at the time, and even going so far as…

Certified Shovelware

And that…

Short Ruby Newsletter 

Short Ruby Newsletter - edition 166

The one where RubyConf launched The Ruby Runaway - startsup pitching, where tiny ruby conf announced their event and where Joel talks about Phlex::TUI
Tim Riley 

Continuations 2026/05: Fit of passion

  • A slightly slower week, this one. My regular OSS day was spent instead with the kids on their last Friday of the summer holidays.

  • Some good movement on the site. Reviewed, tweaked, and merged this new status page from Jane Sandberg. Thank you Jane! Aaron is also back on the job and taking a last pass over our logo and type colours. I think we’ve managed to get past all the outstanding issues, and should hopefully be free to lock in our final site design.

  • In a few spare moments, I took the chance to bring more Hanami repos under repo-sync management. Now we have it for hanami, cli, router, controller, and view! Porting the latter three was very easy, so I’m confident we should be able to…

Andy Croll 

Prefer in? Over include? for Readable Conditions

When checking if a value exists within a collection, Ruby’s include? method does the job, but Rails provides a more natural alternative through Active Support’s in? method.

Instead of…

…reading your conditions backwards with include?:

nsync = ["Justin", "JC", "Chris", "Joey", "Lance"]

if nsync.include?(candidate)
  puts "#{candidate} is in the band"
end

# Or inline
if ["Justin", "JC", "Chris", "Joey", "Lance"].include?(member)
  puts "#{member} can join the inevitable reunion tour"
end

Use…

…Rails’s in? method for more natural reading:

nsync = ["Justin", "JC", "Chris", "Joey", "Lance"]

if candidate.in?(nsync)
  puts "#{candidate} is in the band"
end

# Reads naturally even inline

Why?

The i…

Posts on Kevin Murphy 

Frequently Played February 2026

Frequently Played 🔗

I tend to listen to the same songs or albums on repeat that are evocative of how I’m feeling or what’s going on with me. Here is what I’m currently listening to over, and over, and over, and over, again.

The Weatherman 🔗

Trying to predict the future is almost as bad as my prediction coming true.

Full Lyrics

And I put aside my strongest desires that ruled me before
And I took all the pain that I could find
‘Til I exploded in electric light
Now I wander the open skies, waiting on the storm

Killing In The Name Of 🔗

I am of course essentially contractually obligated to point out that his former boss showed up with something new and something familiar.

Ain’t nobody coming to save us…

Drifting Ruby Screencasts 

Claude Code

In this episode, we look at how to use Claude Code to assist us in developing Rails applications. This is not about vibe coding, but using tools to assist our development efforts.
Nithin Bekal | Ruby 

Minimal Sorbet with inline RBS comments

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.

First, we add the sorbet and tapioca gems to the Gemfile.

gem "sorbet"
gem "tapioca", require: false

Next, we add a sorbet/config file that includes all the arguments that we would pass when running the srb typecheck command:

--dir
lib
--enable-experimental-rbs-comments

And that’s basically it! You can now type check your Ruby codebase with bundle exec srb typecheck.

Based on my experience adding Sorbet to a Rails app in the past, I expected this to be more…

justin․searls․co - Digest 

📸 Why is OpenAI so stingy with ChatGPT web search?

For however expensive LLM inference supposedly is, OpenAI continues to be stupidly stingy with respect to web searches—even though any GPT 5.2 Auto request (the default) is extremely likely to be wrong unless the user intervenes by enabling web search.

Meanwhile, ChatGPT's user interface offers:

  • No way to enable search by default
  • No keyboard shortcut to enable search
  • No app (@) or slash (/) command to trigger search
  • Ignores personalization instructions like "ALWAYS USE WEB SEARCH"
  • Frequently hides web search behind multiple clicks and taps, and aggressively A/B tests interface changes that clearly will result in fewer searches being executed

All of this raises the question: how does…

Alchemists: Articles 

Hanami with Rodauth

Cover
Hanami with Rodauth

Security is an important part of web application engineering and a good solution for implementing authentication within your application, both in terms of UI and API, is Rodauth. That said, Rodauth does come with a learning curve. The following will walk you through setting up Rodauth in your Hanami application because, unless you are a security expert, you won’t want to do this yourself.

Setup

To get started, add the following gems to your application:

bundle add bcrypt jwt rodauth

Here’s what each provides:

John Nunemaker 

Conducting Rails

I've been using @conductor_build heavily for weeks now and it's completely changed how I ship Ruby on Rails code when working with Claude models.

Conductor.build + Claude Opus 4.5

The multi-workspace, multi-process model feels unusual at first compared to a single editor flow, but once you handle the Rails-specific quirks, your ability to work in parallel and ship faster skyrockets.

Here are the key practical steps and fixes I've found essential for getting a Rails app running reliably across multiple Conductor workspaces. I'll try to keep this up to date as I find new things.

Copy essential gitignore'd files

Anything in .gitignore (credentials, .env.local, custom config files, active storage…

Passenger - Phusion Blog 

Passenger 6.1.2

Passenger 6.1.2

Version 6.1.2 of the Passenger application server has been released. This is a very small bugfix release, which rolls out the new signing key for linux repos.

New Signing Key

While not a change to Passenger itself the APT and RPM repos are now signed with a new signing key. You can read about it here: https://blog.phusion.nl/important-new-signing-key-for-passenger/

Ruby Version Compatibility

Passenger 6.1.2 has improved support for Ruby 4 and Rubies < 2.3. Closes Github issues: 2642 and 2641.

Updates & improvements

Updated various library versions used in precompiled binaries (used for e.g. gem installs):

    • cmake: 4.2.1 -> 4.2.2
    • curl: 8.17.0 -> 8.18.0
    • gnupg: 2.4.8 -> 2.5.16
    • rubygems: 4.0.2 -> 4.0.4
    • rubi…

Installing 6.1.2

Please see the installation guide for advice…

Ruby Central 

The Ruby Central README: January 2026

January 2026 README

The Ruby Central README: January 2026

Our January README newsletter is live!

Inside: highlights from the Fundraising Gala, Awards & Honorees, Ruby news, introductions to our new Ruby Central Board members, volunteer spotlights, and a supporter feature with GitButler.

Check out our January 2026 README here: https://buff.ly/MPIPdSW

Remote Ruby 

Blue Ridge Ruby 2026 with Jeremy Smith and Joe Peck

In this episode, Blue Ridge Ruby organizers Jeremy Smith and Joe Peck join Andrew, Chris, and David to talk about the conference returning in 2026. They explain why it’s different (single-track, long breaks, and memorable community activities), what they’ve learned from running it, and how folks can help (speaking, sponsoring, and attending). The discussion also highlights the importance of community and in-person interactions in the tech industry, offering insights into how these events support professional growth and long-term sustainability in software development. Hit download now to hear more! 



Rémi Mercier 

Reflecting on 2025

2025 was the year I started something I’ve been wanting to do for a very long time: freelancing.

I had already been a freelancer twelve years ago, and it did not go well. I was working too much, for too little, and some clients never paid me for my work. I was young(er) but I learned my lesson: freelancing is a whole extra job, on top of your core offering.

So when the opportunity arose last year, I knew I needed to get better at being a “company”.

A year of freelancing

I started freelancing at the very end of 2024. After a taxing four-month job search – that only emphasized how broken some tech companies are – I decided to switch my approach.

I reached out to Sunny – an internet pal…

Ruby on Rails: Compress the complexity of modern web apps 

Disabled query cache in console and bugfixes

Hi, Wojtek here. Let’s see what changed in the Rails codebase.

Disable the Active Record query cache in the console by default
Pass –query-cache to enable it for the session.

Fix inflections to better handle overlapping acronyms

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym "USD"
  inflect.acronym "USDC"
end

"USDC".underscore # => "usdc"

Skip unique index lookup for insert_all!
insert_all! uses on_duplicate: :raise which performs a plain insert without any ON CONFLICT clause. Previously, find_unique_index_for was called unconditionally, requiring a unique index even when one wasn’t needed.

This caused unnecessary failures for tables with composite primary…

RailsCarma – Ruby on Rails Development Company specializing in Offshore Development 

Ruby Random Numbers: How to Generate Them With Examples

Random number generation is a fundamental concept in programming, and Ruby makes it both simple and powerful. From building games and simulations to generating test data, tokens, or randomized user experiences, random numbers play a crucial role in many Ruby and Ruby on Rails applications. Ruby provides built-in methods and classes that allow developers to generate random integers, floating-point numbers, reproducible sequences, and even cryptographically secure random values.

In this guide, you’ll learn how random numbers work in Ruby, explore different techniques to generate them, understand when to use each approach, and see practical…

Planet Argon Blog 

Defining Redesign Roles: Designer, Developer, or UX/UI Expert?

Defining Redesign Roles: Designer, Developer, or UX/UI Expert?

A practical look at why website redesigns stall and how choosing the right lead at each stage keeps work moving forward.

Continue Reading

Evil Martians 

Building dev tools with AI: the product decisions that need to be yours

Authors: Yaroslav Lozhkin, Product Designer, and Travis Turner, Tech EditorTopics: AI, Design for devtools

AI can generate a full dashboard in an afternoon. But speed doesn't eliminate design decisions—and building the wrong thing faster is an expensive mistake. Here's what design work looks like across four stages, from framing problems to learning after launch.

If you're shipping with AI (which can mean generating everything from mockups to working code) you know it works. When something breaks, the problem usually isn't the AI. Instead, it's the decisions that were made for it. For dev tools and professional apps, the most expensive mistake is building something that doesn't fit how people…

Weelkly Article – Now open for 2026 sponsorships 

Making Maps with Ruby

Making Maps with Ruby January 29, 2026 Static and animated cartography built directly from GeoJSON For a long time, generating maps from code meant working inside heavy ecosystems designed primarily for analysis. Those tools are powerful, but they are not always the right fit. In many practical scenarios, the problem is simpler and more concrete: … Continue reading Making Maps with Ruby

Ruby Weekly 

RubyConf’s 'Shark Tank' moment with The Ruby Runway

#​785 — January 29, 2026

Read on the Web

Ruby Weekly

The Ruby Runway: A RubyConf Pitch Competition — RubyConf has launched a competition for Ruby-powered startups to take the stage at RubyConf and compete for various cash prizes and awards. You need to represent a business using Ruby at its core, and not have raised more than $500k so far. The submission deadline is February 28 — and if you can't enter, RubyConf is looking for reviewers and judges for the entries.

Ruby Central

Anyone Can Code: Software Is Having Its Ratatouille Moment — AI tools aren't replacing developers—they're being used to reframe…

Rails Designer 

Creating a link-icon custom element

You know those times when you have a list of links and you want to show a nice icon next to each one? Maybe social media links in a footer, or a list of resources, or links in a bio page? You could manually add icons for each platform, but that gets tedious fast. What if the link could just show the right icon automatically?

That’s exactly what the <link-icon> custom element does. Pass it a URL and it figures out which icon to show. Twitter, GitHub, LinkedIn, Instagram, YouTube and a bunch more. If it doesn’t recognize the URL, it shows a generic link icon. Simple!

Here’s what it looks like in action:

<link-icon url="https://twitter.com/username"></link-icon>
<link-icon url="https://githu…
RailsCarma – Ruby on Rails Development Company specializing in Offshore Development 

How Ruby on Rails Supports Fast Time-to-Market (2026)

In today’s digital economy, nothing is more important than speed.” From startup products to SaaS features to enterprise platforms, every organization is feeling the squeeze to shrink development timelines. Time-to-market is no longer a metric – it’s an advantage. Agents who launch more products can validate ideas sooner, iterate in response to customer feedback, and stay ahead of market trends.

Ruby on Rails has been written in a way that can make applications very quickly, which don’t crumble under heavy load. So, even in 2026, Rails remains an awesome strategic choice for companies looking to ship features rapidly and at scale while ensuring…

RubyGems Blog 

4.0.5 Released

RubyGems 4.0.5 includes enhancements, bug fixes and documentation and Bundler 4.0.5 includes enhancements and bug fixes.

To update to the latest RubyGems you can run:

gem update --system [--pre]

To update to the latest Bundler you can run:

gem install bundler [--pre]
bundle update --bundler=4.0.5

RubyGems Release Notes

Enhancements:

  • Removed unused deprecate loading. Pull request #9266 by hsbt
  • Validate executable names for invalid characters. Pull request #9257 by hsbt
  • Installs bundler 4.0.5 as a default gem.

Bug fixes:

  • Fix RubyGems not able to require the right gem:. Pull request #9246 by Edouard-chin
  • Remove special behavior for rake. Pull request #9245 by JasonLunn
RailsCarma – Ruby on Rails Development Company specializing in Offshore Development 

Ruby on Rails Development Lifecycle Explained (2026)

Ruby on Rails has long been known for its ability to accelerate web development without compromising on quality, scalability, or security. In 2026, it is still one of the favorite frameworks for startups, enterprises, and SaaS businesses to create scalable web applications fast. One of Rails’ key success factors is the maturity and developer-friendliness of the development process.

Explaining the lifecycle of a RoR project — from Idea generation to Launch. Clarity on how an app goes from just a concept into a product that can be used and maintained going forward – some lean software development processes build it better than you found the goal.…

Mike Perham 

Adding Mastodon Comments

I’m enabling comments via Mastodon using this webcomponent. @dpecos has done a nice job keeping it self-contained and has made good tradeoffs in functionality vs simplicity IMO. Thanks @sardaukar!

Aha! Engineering Blog 

When overmind isn't enough and I'm over it all

I built a tool called overitall ( oit). It's a terminal UI that combines process management with log viewing — think overmind plus a log viewer (like lnav) that can actually keep up with modern, noisy apps. If you're a terminal‑first developer dro
Giant Robots Smashing Into Other Giant Robots 

A JavaScript developer's guide to Rails: What does Composition Over Inheritance mean?

Rails uses inheritance and mixins heavily to make methods appear throughout your application. This can be confusing for JavaScript developers used to explicit imports. While Rails framework code uses inheritance heavily, thoughtbot recommends your application code prefer composition. This makes your code easier to test and makes dependencies visible.

Why Composition Matters: Testing

The primary benefit of composition is easier testing. You can inject test doubles instead of real objects, making your tests fast, isolated, and free from external dependencies.

With implicit dependencies (inheritance):

# Inheritance example - requires database and complex setup
class WelcomeNotifi…
Julia Evans 

Some notes on starting to use Django

Hello! One of my favourite things is starting to learn an Old Boring Technology that I’ve never tried before but that has been around for 20+ years. It feels really good when every problem I’m ever going to have has been solved already 1000 times and I can just get stuff done easily.

I’ve thought it would be cool to learn a popular web framework like Rails or Django or Laravel for a long time, but I’d never really managed to make it happen. But I started learning Django to make a website a few months back, I’ve been liking it so far, and here are a few quick notes!

less magic than Rails

I spent some time trying to learn Rails in 2020, and while it was cool and I really wanted to like Rails…

Andy Croll 

Simple Tailwind CSS 4 Setup for Jekyll

Tailwind CSS 4 changed how configuration works. The JavaScript config file has been replaced by CSS-based configuration using @theme directives and uses the tailwind CLI to shake down the generated tailwind classes and minify. Here’s how to set it up with Jekyll.

The Setup

Changes to four files, plus one more step if you want plugins.

Gemfile

gem "jekyll-tailwind", group: [:jekyll_plugins]

Run bundle install to fetch the gem. The jekyll-tailwind gem handles everything. No separate build pipeline, no PostCSS config, no watching for changes. It hooks into Jekyll’s build process.

Under the hood, it uses tailwindcss-ruby—the same gem that powers Tailwind in Rails.

_config.yml

plugins:
Evil Martians 

Optimistic UI in Rails with optimism... and Inertia

Authors: Svyatoslav Kryukov, Backend Engineer, and Travis Turner, Tech EditorTopics: Rails, React, JavaScript

Build optimistic UI in Rails with Inertia by updating props before requests complete. Learn the replaceProp pattern, automatic reconciliation, rollback behavior, and history caveats using a kanban board example.

Your user drags a card across a kanban board. They expect instant feedback. Not a loading spinner, brief flicker, or "please wait." Here's the thing: optimistic UI is a lie. And the modern web has trained everyone to expect interfaces that lie convincingly. We show the user what we expect to happen before the server confirms it. With Inertia Rails, telling that lie takes…

Weelkly Article – Now open for 2026 sponsorships 

Ruby Rendering Seismic Observation Data

January 27, 2026 From Disaster Prevention to High-Performance Maps On December 26, 2025, I published an article titled “Ruby at the Front Line of Disaster Prevention.” It was inspired by a real, uncomfortable fact: Tokyo Gas uses Ruby to protect millions of people during earthquakes. Not in theory. Not as a prototype. In production. That … Continue reading Ruby Rendering Seismic Observation Data

The Bike Shed 

491: Influences that shaped our thinking

Joël and Aji reference their personal bibliographies as they compare the different influences that have shaped their programmer world view.

Our hosts discuss their most influential programming material, from books, talks and video, and how it’s impacted the way they write code, Joël hones in on the importance of confidence and dealing with uncertainty of objects in a project, while Aji dips into his knowledge of RailConf talks to find his biggest inspiration.

Take a leaf out of our hosts book and discover some of the material that influenced them and their work for yourself - POODR - Confident Ruby - RailsConf 2014 Talk - Take Smart Notes - Working Effectively with Legacy…

Your hosts for this episode have been…

justin․searls․co - Digest 

📍 Tabelogged: 浪漫

I visited 浪漫 on January 27, 2026. I gave it a 4.0 on Tabelog.

Tim Riley 

Continuations 2026/04: i18n support

  • After my code-a-thon last weekend, this week I was able to polish up Hanami’s built-in i18n support and share it as a PR (also on the forum). Please take a look, I’d love to hear your feedback!

  • I spent a few more hours continuing to refine my Hanami Mailer rebuild. That one will hopefully be ready to share soon too.

  • While I was poking at things during the week, I discovered that hanami new (and any other outside-of-a-project hanami CLI innovations) were crashing on recent Rubies with Gem::LoadErrors, due to bundled gems already being activated, but being in conflict with the required versions for Hanami’s own dependencies. I fixed this nice and promptly and our CLI is back in action…

  • This fix allowed me to…

justin․searls․co - Digest 

📍 Tabelogged: The Villa & Barrel Lounge

I visited The Villa & Barrel Lounge on January 27, 2026. I gave it a 3.7 on Tabelog.

さりげなくクール。発想力が光る。

Hotwire Weekly 

Week 04 - Optimistic UIs, Hotwire Native in-app purchases, and more!

Hotwire Weekly Logo

Welcome to Hotwire Weekly!

Welcome to another issue of Hotwire Weekly! Happy reading! 🚀✨


📚 Articles, Tutorials, and Videos

Drifting Ruby: Turbo Permanent - Dave Kimura published a new video for Drifting Ruby about the data-turbo-permanent attribute and how it can help with solving some common problems with broadcasting refreshes and page morphs.

Building optimistic UI in Rails powered by Turbo - Rails Designer explains how to use Turbo’s client-side visits for snappy optimistic feedback in Rails apps without heavy JavaScript.

Getting Started with Vite on Rails - Julio Lucero on the FastRuby.io blog shows how to set up Vite Rails for fast builds and hot module replacement while still…

CSS Counters: auto-update list…

Gusto Engineering - Medium 

It Takes a Village: Building Gusto’s First AI Risk Agent

Split illustration showing a magic wand automating a clean workflow diagram on the left, and two people collaborating at a messy desk with papers and laptops on the right.Myth vs reality of AI Work

The Myth vs Reality of AI at Work

As an engineer, I’ve grown skeptical whenever I hear the word “AI” thrown around as a solution. There’s an unspoken belief that AI should just figure things out on its own. Feed it enough data, write a clever prompt, and something magical happens.

After spending months building Gusto’s Risk Onboarding Work Agent (GROW), Gusto’s first AI-powered risk agent, I can tell you: the common mental model of prompt + data = magic, is wrong. The missing variable is context but realizing how much we needed took more effort than we expected. We found ourselves debating things that felt absurdly small like: what does this field represent? How…

Code With Rails 

Monitor CSRF Attacks in Production with Rails Notifications

An upcoming Rails change adds ActiveSupport notifications for CSRF events, giving you visibility into attack attempts and failed validations.
Short Ruby Newsletter 

Short Ruby Newsletter - edition 165

The one where Roadmap launched a Roadmap for learning Ruby, where Rails 8.1.2 is officially released, Devise reaches the 5.0 mark and where Intercom shares data about how they ship to production.
Rails Designer 

CSS Counters: auto-update list numbers without JavaScript

This is a quick-tip about a CSS feature. It is the kind of feature most developer (and LLM’s) would use JavaScript for. With CSS you get this for free. Knowing about it, makes you a better developer! 🏆

Recently I helped build a new product that involved pages with content in a specific order.

For the ordering I used the nice positioning gem. This gives sequentially numbering (1, 2, 3 and so on).

So you can display them like this:

The ERB is something simple like this:

<%# locals: (page:) %>
<li draggable data-reposition-id-value="<%= page.id %>">
  <%= tag.span page.position class: "" %>

  <%= tag.p page.content %>
</li>

(reposition is coming from the Kanban article)

But, of…

justin․searls․co - Digest 

📍 Tabelogged: 静岡かきセンター 呉服町店

I visited 静岡かきセンター 呉服町店 on January 26, 2026. I gave it a 3.4 on Tabelog.

宮城県産のカキは蒸し焼きでとても美味しかった!

justin․searls․co - Digest 

📍 Tabelogged: ほんな骨 静岡店

I visited ほんな骨 静岡店 on January 26, 2026. I gave it a 3.5 on Tabelog.

本格的博多ラーメンは見つかりにくいですか、ほんな骨はほんな骨です!一口餃子もとても美味しいです!

danielabaron.me RSS Feed 

AI Forecasts, Fear, and Focus

Why I tune out sensational AI predictions and focus on what I can actually control.
Island94.org 

Frontier novelty

From Benji Edward’s “10 things I learned from burning myself out with AI coding agents” describing the challenge of maintaining novelty during AI coding:

Due to what might poetically be called “preconceived notions” baked into a coding model’s neural network (more technically, statistical semantic associations), it can be difficult to get AI agents to create truly novel things, even if you carefully spell out what you want.
For example, I spent four days trying to get Claude Code to create an Atari 800 version of my HTML game Violent Checkers, but it had trouble because in the game’s design, the squares on the checkerboard don’t matter beyond their starting…

justin․searls․co - Digest 

📍 Tabelogged: 大衆食堂BEETLE 原宿

I visited 大衆食堂BEETLE 原宿 on January 24, 2026. I gave it a 3.2 on Tabelog.

めちゃくちゃいそがしても、10分待ってから迎えていました。お通しまないし、お得!

Planet Argon Blog 

LeadDev Webinar Recap: “Why Software Maintenance Still Feels Stuck in 2015 (And What To Do About It)”

LeadDev Webinar Recap: “Why Software Maintenance Still Feels Stuck in 2015 (And What To Do About It)”

A recap of a LeadDev panel on why maintenance still feels outdated and what it takes to keep long-lived software moving forward.

Continue Reading

Ruby on Rails: Compress the complexity of modern web apps 

Squish as fast as you can

Hi, it’s Claudio Baccigalupo. Let’s explore this week’s changes in the Rails codebase.

Optimize String#squish
A RegExp improvement in the Rails codebase makes squishing a string twice as fast.

Render stream errors are reported to Rails.error
Now that Rails has a dedicated API to report errors we can call it also when an error is raised during streaming.

reload! will reset the console’s executor when present
The Rails console is wrapped with an executor which can have side effects such as implicitly enabling the Query Cache. After this PR, calling reload! will not just reload the console, but reset the executor too.

Detect JS package manager from lockfiles in generators
Generators can…

John Nunemaker 

Rooted & Reaching Podcast Interview

I recently sat down with Marty Mechtenberg on the Rooted and Reaching podcast to talk about my entrepreneurial journey, from struggling through my first programming class at Bethel to building multiple SaaS businesses while staying rooted in the South Bend area.

The Early Days: Learning to Code (the Hard Way)

I wasn't a natural programmer. In my sophomore year at Bethel, I was pulling a D in my programming class while my future business partner Steve would walk in, hand in his homework, and leave. I spent hours in office hours, terrified of failure after a lifetime of straight A's. But that struggle taught me something important: once I learned something the hard way, it stuck.

What really…

Julik Tarkhanov 

We have to re-learn to walk alone

Reading the article about Nexus that Obie has posted I got absolutely struck. Yes, it can be said without a shade of doubt that the modern way of building software, the late-2025-way with Opus 4.5 in the picture, is markedly different from the one we operated in for the last decade (or more).

I haven’t been sitting on my hands either. One of my smaller pursuits, now that I am a proud self-employed raconteur, has been moneymaker - a piece of kit I wanted for all the business aspects of the said raconteurship. Think:

  • basic accounting
  • bank statements and balances
  • invoicing
  • time tracking
  • …all of that - across several projects, clients and managing entities

And, out of principle,…

Giant Robots Smashing Into Other Giant Robots 

What Shoulda Matchers Is Actually Doing For You

If you’ve worked on a Rails app, you’ve probably written or seen something like:

it { is_expected.to validate_presence_of(:email) }
it { is_expected.to have_many(:orders).dependent(:destroy) }

It feels a bit like a magic trick: one short line, and a lot of behavior is being tested.

In this post, we’ll peek behind the curtain and see what these matchers are actually doing for you.

More than shorter specs

Those one-liners aren’t just shorter, they’re less fragile. Each matcher:

  • Builds an isolated setup focused only on the behavior under test
  • Encapsulates battle-tested patterns for exercising Rails features
  • Makes your specs read like documentation and creates self-contained…

That third point is easy to miss, so let’s make it concrete.

Imagine you wrote a presence test that happens to reuse some…

Remote Ruby 

Tool Standardization

In this episode, Chris, Andrew, and David dive into details about refactoring with SQL, updates on new Ruby versions, and share their views on various developer tools including Mise, Overmind, and Foreman. They also touch on standardizing tools within their teams, the benefits of using Mise for Postgres, and the efficiency of task scripts. The conversation also covers encoding issues, Basecamp Fizzy SSFR protection, and rich-text editors like Lexxy and its application in Basecamp. Additionally, there's a light-hearted discussion on the speculative future of AI and Neuralink.  Hit download now to hear more! 

Links

hexdevs 

Optimizing load time for faker-ruby

A quick win that made loading faker-ruby 19% faster.
Ruby on Rails: Compress the complexity of modern web apps 

Rails Version 8.1.2 has been released!

Hi everyone,

I am happy to announce that Rails 8.1.2 has been released.

CHANGES since 8.1.1

To see a summary of changes, please read the release on GitHub:

8.1.2 CHANGELOG To view the changes for each gem, please read the changelogs on GitHub:

Full listing

To see the full list of changes, check out all the commits on GitHub.

SHA-256

If you’d like to verify that your gem is the same as…

Ruby Weekly 

Rust's Ratatui comes to Ruby for building great TUIs

#​784 — January 22, 2026

Read on the Web

Ruby Weekly

RatatuiRuby: A Fresh Way to Build Terminal UIs in RubyRatatui is a popular Rust library for building fast, modern terminal user interfaces, and RatatuiRuby brings it to Ruby too. Despite being in beta/pre-release, this is an incredibly solid effort and I had fun playing with it (above).

Kerrick Long

💡 This is an active moment for Ruby TUIs with Marco Roth's efforts in bringing Charm's powerful TUI tooling from the Go world into Ruby too.

Stuck on Rails 4.2? Need Estimates for Budget Approval? — Stop postponing your upgrade. Get a thorough action…

Saeloun Blog 

From Idea to Launch: Why Rails Remains the Ultimate MVP Framework in 2026

Introduction

In the fast paced world of startups, speed to market can make the difference between success and failure.

Every day spent in development is a day without user feedback, without revenue, and without validation of the core business hypothesis.

Ruby on Rails has been the secret weapon behind some of the world’s most successful startups including

Airbnb, Shopify, and Stripe.

In this post, we’ll explore why Rails continues to be an excellent choice for MVP development, and how it can accelerate the journey from idea to launch.

What Makes an Ideal MVP Framework?

  • An ideal MVP framework should deliver speed without sacrificing quality.
  • It needs sensible defaults so teams…
RailsCarma – Ruby on Rails Development Company specializing in Offshore Development 

How to Parse JSON in Ruby: A Comprehensive Guide 2026 

JSON (JavaScript Object Notation) remains one of the most popular data interchange formats in 2026, powering APIs, configuration files, microservices communication, and data pipelines across Ruby applications—from Rails APIs to background jobs and CLI tools. Ruby has offered excellent built-in support for JSON since version 1.9.3 through the standard library’s JSON module—no external gems required in modern Ruby versions (including Ruby 3.3+ and the upcoming Ruby 3.4/4.0 series).

This article covers everything you need to know about parsing JSON in Ruby: basic usage, advanced options, file handling, error management, best practices, performance…

Rails Designer 

Building optimistic UI in Rails powered by Turbo

A while back I showed you how to build optimistic UI using custom elements. It worked great! And you thought too, it was shared far and wide (it was readseen by many thousands!).

Something like this (no, really, this is not the same gif as the one from the custom elements article):

But something bugged me. The custom element wrapper felt like extra ceremony. What if I could get the same instant feedback without the extra markup? Just a form, some data attributes (Rails developers ❤️ data attributes) and a sprinkle of (custom) JavaScript? 😊

Guess what? You can! And it is even simpler. 🎉

The code is available on GitHub (see the last commit).

The custom element approach looked like this:

Jake Zimmerman 

Bugs Block Blogs

When writer's block is actually the weight of the bugs you're papering over.
justin․searls․co - Digest 

📍 Tabelogged: 本格板前居酒屋 お魚総本家 アスティ静岡店

I visited 本格板前居酒屋 お魚総本家 アスティ静岡店 on January 21, 2026. I gave it a 3.5 on Tabelog.

「特大」というホッケ開き焼きは嘘ではない!まじでデカい

Giant Robots Smashing Into Other Giant Robots 

A JavaScript developer's guide to Rails: Where Does Everything Come From?

As a senior JavaScript developer learning Rails, you’ve probably felt this frustration: you’re reading Rails code and suddenly come across a method like current_user, redirect_to, or belongs_to, and you have no idea where it originated. There’s no import statement. No require. It’s just… there.

Coming from JavaScript’s explicit world of imports and modules, Rails can feel like programming in a house of mirrors. Everything seems to appear out of thin air. This magical appearance was one of my biggest struggles too, so I want to demystify where everything actually comes from.

The Fundamental Difference: JavaScript vs Rails

In modern JavaScript, if you want to use something, you…

RubySec 

CVE-2026-23885 (alchemy_cms): AlchemyCMS - Authenticated Remote Code Execution (RCE) via eval injection in ResourcesHelper

### Summary A vulnerability was discovered during a manual security audit of the AlchemyCMS source code. The application uses the Ruby `eval()` function to dynamically execute a string provided by the `resource_handler.engine_name` attribute in `Alchemy::ResourcesHelper#resource_url_proxy`. ### Details The vulnerability exists in `app/helpers/alchemy/resources_helper.rb` at line 28. The code explicitly bypasses security linting with `# rubocop:disable Security/Eval`, indicating that the use of a dangerous function was known but not properly mitigated. Since `engine_name` is sourced from module definitions that can be influenced by administrative configurations, it allows an…
justin․searls․co - Digest 

📸 A better macOS Globe key

The Globe key on macOS is a strange key.

Ostensibly, Apple added it so users could easily change keyboard layouts to switch between different languages. In practice, however, the vast majority of users only need two "languages": their mother tongue and the emoji keyboard. The same key also serves as an underutilized fn button—a role that has become ubiquitous on Windows and Linux keyboards, but which has seen relatively little use on macOS.

By having two jobs, the Globe key ends up being bad at both. And when it comes to changing languages, it fails because it introduces a 300–500 ms delay while the system waits to see whether the user intends to press and hold the key as part of…

Robby on Rails 

Humans in the Loop

The Oh My Zsh core team recently met up in person at GitHub Universe in San Francisco. Getting the maintainers into the same room matters more than most people realize. It strips away the abstractions and forces the conversation back to reality… what’s working, what’s breaking, what’s quietly draining energy, and what’s worth protecting long term.

We spent a good amount of time talking about AI. Not as a culture war or a prediction exercise, but as something already embedded in our day-to-day work. It shows up in our jobs, our creative projects, our personal workflows, and increasingly, in open source contributions to projects like Oh My Zsh. We don’t all share the same worldview on AI…

SINAPTIA 

RubyLLM::Instrumentation: The foundation for RubyLLM monitoring

In our last post, we introduced RubyLLM::Monitoring, a Rails engine that captures every LLM request your application makes and provides a dashboard where you can see cost, throughput, response time, and error aggregations, and lets you set up alerts so that when something interesting to you happens, you receive an email or a Slack notification.

But how did we do it? What mechanism does RubyLLM provide that we can use to capture all LLM requests? Or did we use something else?

RubyLLM event handlers

RubyLLM provides event handlers out of the box. You can use them to capture an event when a message is sent to the LLM and, for example, calculate its cost. This is how you’d use them:

#…
Julik Tarkhanov 

On the way to step functions: the two worlds

This is the next article in the series On the Way to Step Functions - you will find the other articles linked below:

We have highlighted that DAGs are actually the underpinning of any workflow/durable computation engine (barring serializable continuations). I would like to highlight another aspect of that reality: that there are two worlds.

TL;DR - if you are a Rails user and that topic interests you, skip away to geneva_drive which is pretty much how I feel we “should do it” in Rails-land.


I am currently available for contract work. Hire meto help make your Rails app better!


The…

The Rails Tech Debt Blog 

Getting Started with Vite on Rails

A few months ago, we were working on a Rails 7 app using Webpack 5. One of the main problems we had was that making a small change in the Javascript took around 39 seconds to recompile. You can imagine how much productivity we lost just waiting, and honestly, I personally remember getting really distracted during that dead time, just sitting there.

At that point, Webpacker had been retired, so we checked the official migration guide and found several options: the first was jsbundling-rails, the second was Shakapacker, another was Importmaps, and finally, we knew we had the option to try Vite.

We finally went with Vite, which (as noted on GitHub) is named after the French word for “quick”

The Bike Shed 

490: Large Language Misadventure

Our hosts discuss the pros of AI and where they find the tool genuinely useful, it’s limitations, downsides and where it’s causing harm, the differences between bad AI code and human code, before asking the question of where this AI boom could be leading us.

To get more of an insight into today’s episode consider watching Sandi Metz's RubyConf talk to learn more about red-lighting, or read the article Aji mentioned about running out of ideas.

Thanks to our sponsor for this episode Scout Monitoring.

Your hosts for this episode have been thoughtbot’s own Sally Hall and Aji Slater.

If you would like to support the show, head over to our GitHub page, or check out our website.

Hashrocket - Ruby Posts 

Crafting Code: Building a Ruby Pattern Generator for a Crochet Circle

In my time as a developer, I have noticed that one of the most common ways my coworkers spend time coding outside of work is by developing little code snippets or apps that solve problems in their everyday lives. From household budgeting, to managing workouts on rowing machines, to generating a Taco Bell order, these projects allow devs to explore different coding styles and learn new technologies.

For a long time, most of my side projects have been for the sole purpose of learning a new technology. When I wanted to start building mobile apps with React Native, I wrote a small to-do app that, once finished, I abandoned. The same thing happened when I wanted to try to use PostgreSQL's…

BigBinary Blog 

How to analyze Playwright traces

Playwright traces are like flight recorders for your tests - they capture everyaction, network request, DOM snapshot, and console log during test execution.When a test fails, especially in CI environments, traces become the mostpowerful debugging tool, providing a complete timeline of what happened and why.

We learned so much about Playwright traces while adding the Playwright's tracingcapabilities to NeetoPlaydash. We builtNeetoPlaydash and it is the most affordable Playwright Dashboard. NeetoPlaydashcollects, monitors and debugs Playwright test reports.

What are Playwright traces?

Playwright traces are compressed archives (.zip files) that contain:

  • Complete DOM snapshots before, during, and…
  • Scree…
Tim Riley 

Continuations 2026/03: Bonus weekend

  • This edition is going out a couple days later than usual, because I had Bonus Weekend of open source work, and I wanted to be able to share everything with you all at once!

  • Here’s the background: one of our ambitions for 2026 is to begin a twice-yearly release cadence for Hanami. Since our last release was November, I chose May and November as a starting point. Right now, we’re now getting close to the end of January. We have a new site to ship in February sometime. I’m taking a family trip in April. The team overall has been pretty quiet for the last couple of months. So all of this has had me a bit worried that we wouldn’t have much to share come May.

    This weekend the rest of my family…

Tenderlove Making 

Bainbridge Island Mochi Tsuki

Seattle waterfront skyline featuring the Space Needle and Great Wheel ferris wheel, viewed through a ferry window across Elliott Bay.A group of people gathered outdoors watching a young man wearing a headband demonstrate mochi pounding with large wooden mallets (kine) at what appears to be a traditional mochitsuki event.A man wearing a headband pours water into a traditional stone mortar (usu) during a mochi-pounding demonstration as a crowd watches outdoors.A taiko drummer in a red and black vest performs with large wooden bachi sticks on a traditional Japanese drum during a group performance.A taiko drummer wearing traditional black and bronze performance attire plays a large wooden drum with wooden bachi sticks during a performance.

Last weekend we took the ferry to Bainbridge Island to see a Mochi Tsuki event. I read about the history of Japanese immigrants on Bainbridge island. I saw people making mochi, a taiko drummer group, and traditional dances. It was a lot of fun, and I learned a lot. Definitely recommend this event!

justin․searls․co - Digest 

✂️ Shenmue was educational software

Your browser does not support the video tag.

Everything I needed to know I learned as a 16 year old playing Shenmue on Dreamcast

Code With Rails 

Building Smart Retry Strategies in Rails with Error-Aware Delays

Use the new retry_on error argument to build intelligent retry strategies that respect rate limits, handle transient failures, and fail fast on unrecoverable errors.
Weelkly Article – Now open for 2026 sponsorships 

Now Ruby GIS Rendering: Stabilizing the libgd-gis Rendering API

Stabilizing the libgd-gis Rendering API January 19, 2026 This article documents the current state of libgd-gis following a significant internal update: the stabilization and freeze of its core rendering API. The update consolidates the project’s primary responsibilities—static GIS rendering, layered composition, and post-render image manipulation—into a stable and documented surface. Alongside this milestone, comprehensive documentation … Continue reading Now Ruby GIS Rendering: Stabilizing the libgd-gis Rendering API

Short Ruby Newsletter 

Short Ruby Newsletter - edition 164

The one where Ruby 4.0.1 is released, TruffleRuby 33 is released, Programming Ruby 4 enters beta, Google Summer of Code invites for Ruby projecs and where we found Ruby is token efficient
Ryan Bigg Blog 

Beware grpc gem and Ruby 4.0

Finally got to the bottom of ridiculously slow build times on one of my applications. I’m talking 30+ minute builds, all without sassc!

We use a gem in the app called newrelic-infinite_tracing, which has a dependency on another gem called grpc. This gem has native extensions that are pre-built. You’ll see these listed on RubyGems as lists like:

  • 1.76.0 October 24, 2025 x86-linux-gnu (22.5 MB)
  • 1.76.0 October 24, 2025 x86_64-linux-gnu (19.8 MB)
  • 1.76.0 October 24, 2025 x86_64-linux-musl (18.8 MB)

These list the version, architecture and platform that you’re going to be installing these gems on. These gems can also be locked to specific Ruby versions, and these 1.76.0 gems are…

Hotwire Weekly 

Hotwire Weekly - Happy 2026

Hotwire Weekly Logo

Welcome to Hotwire Weekly!

Happy New Year, and welcome to the first 2026 edition of Hotwire Weekly! We took a short break over the New Year, but we’re excited to be back and kicking things off for 2026. Happy reading! 🚀


📚 Articles, Tutorials, and Videos

jQuery 4.0.0 released - The jQuery Team shipped jQuery 4.0.0, marking a major release more than 20 years after the project’s original launch. It dropped Internet Explorer support and migrated its code to modern ES Modules.

Introducing CSS Grid Lanes - The WebKit Team announces CSS Grid Lanes, a new grid layout feature that lets you define named lanes between tracks and place items relative to those lanes. This makes complex grid layouts…

zverok's space 

It is 2026; where were we?

Most of the time, I try to keep this blog/mailing list to thoroughly thought-through articles about software development: mostly, programming languages in general and Ruby in particular.

But after it was dormant for quite some time, this one will be a bit more personal. And a lot less coherent.

For those who just wandered into this blog post on my site, or those who have subscribed to my mailing list and forgot what that was about (I get it! I wasn’t writing anything for months!), just a quick reminder: I am a software developer and writer from Ukraine, currently serving in the military. You can look up my personal site for some of my writing, projects, and talk recordings.

This…

danielabaron.me RSS Feed 

What AI-Assisted Coding Feels Like in Early 2026

Exploring the pace, responsibility, and understanding required when AI enables faster-than-ever coding in real-world systems.
justin․searls․co - Digest 

📍 Tabelogged: どんぶりハウス

I visited どんぶりハウス on January 18, 2026. I gave it a 3.4 on Tabelog.

生しらすは苦手ですがら美味しいと思いました。マグロ漬けは本当に美味しかった!朝にはとても良い雰囲気

RichStone Input Output 

What to expect from your blog & how to close it gracefully in the end

Yesterday, I saw in my inbox that richstone.io is expiring. So I did what any reasonable person would do in 2026: I talked to Claude Desktop about it.

After a good chat, we decided not to pay €60 for the next season of the richstone.io domain, nor the €13/month in hosting costs. But money isn't really the reason. It's more about the cost of focus and doubling down on impacting what already works.

If you think about starting a blog, here's a little recap of the past 5 years I hope you can learn from. If you are in the closing stage of a blog that served you and others, there will be a how-to on archiving your treasures gracefully at the end of it.

The Journey

RichStone I/O was born in February…

justin․searls․co - Digest 

📍 Tabelogged: エル・ポジート

I visited エル・ポジート on January 17, 2026. I gave it a 3.5 on Tabelog.

とても本格的!

Julik Tarkhanov 

On the way to step functions: it is actually a DAG

This is the next article in the series On the Way to Step Functions — you can find the first article in the series here. Previously, I have outlined the ambient desire in the field (marshalable stacks) and described why that is largely unachievable. But if imperative invocations can’t bid us consolation, what could?

DAGs, in fact.

If you are impatient (and a Rails user) - just head to the geneva_drive repo for the grand reveal.


I am currently available for contract work. Hire meto help make your Rails app better!


DAGs, DAGs everywhere

I love DAGs (directed acyclic graphs). DAGs are everywhere.

Having worked in visual effects for a while, I know first hand…

Posts on Kevin Murphy 

Frequently Played January 2026

Frequently Played 🔗

I tend to listen to the same songs or albums on repeat that are evocative of how I’m feeling or what’s going on with me. Here is what I’m currently listening to over, and over, and over, and over, again.

Downbound Train 🔗

In a debate about the most underrated Springsteen song, this would be high on my list.

Full Lyrics

Last night, I heard your voice
You were crying, crying, you were so alone
You said your love had never died
You were waiting for me at home

Feel The Pain 🔗

Although I expect my ears will need a week to readjust, even with hearing protection, I’d like to see J Mascis and crew live.

Full Lyrics

I feel the pain of everyone
Then I feel nothing

Posts on Kevin Murphy 

How I Read A Pull Request

An episode of the Bike Shed podcast convinced me to dig this out of my drafts. Thanks Stephanie and Joël.

I read a lot of pull requests (PRs) for work. It’s been a huge accelerator for my growth. It helps push work towards production. Work that’s in a pull request is likely closer to completion than what I’m working on. Alternatively, the PR may exist because the author is stuck. That also deserves my attention. I hope my reviews help share knowledge and provoke thought from time to time.

I’ve developed a bit of a system to work through it. I’m going to share that with some help from the reporters’ questions. Note that this is not going to focus on how I comment on changes. Only the mechanic…

W…

Write Software, Well 

Understanding How Active Storage Variants Transform Images

💡
This post is part of a series on Active Storage internals. See also: Understanding the Active Storage Domain Model and How has_one_attached Works in Rails.
Understanding How Active Storage Variants Transform Images

Disclaimer: I used Claude Code to trace through the Rails codebase and explain how various parts of it are related to each other. Lately, I've found it an excellent tool to navigate the parts of the codebase that I don't understand and to get a deeper understanding of how things work. It's such a fun process to come across some obscure Rails method, ask Claude (or Cursor) to explain exactly how it works, and learn a few new things in the way. In the past, I would have likely skimmed past it or ignored it altogether.


If you've worked on an…

Ruby on Rails: Compress the complexity of modern web apps 

Error-aware retry_on, PostgreSQL type mappings, and more!

Hi, it’s Emmanuel Hayford. Here’s a look at the highlights from this week’s updates to the Rails codebase.

Allow retry_on wait procs to accept error as a second argument
This PR adds support for retry_on wait procs to optionally receive the error as a second argument, enabling dynamic retry strategies based on error properties.

class RemoteServiceJob < ActiveJob::Base
  retry_on CustomError, wait: ->(executions, error) { error.retry_after || executions * 2 }

  def perform
    # ...
  end
end

Procs with arity 0 or 1 continue to receive only the execution count, maintaining backwards compatibility.

Make CSRF header-only protection compatible with local installs using HTTP
This change…

Ruby Weekly 

TruffleRuby 33, Ruby 4.0.1, and Ruby 3.2.10

#​783 — January 15, 2026

Read on the Web

Ruby Weekly

TruffleRuby 33: The High Performance, GraalVM-Based Ruby Implementation — Healthy languages have multiple implementations, and TruffleRuby, originally created by the late Chris Seaton, is celebrating its 13th birthday with both a major release and new web site. v33 boasts it's ‘the fastest and easiest Ruby to install' – a claim I just successfully tested.

The TruffleRuby Team

Start Fixing Bugs Faster with AppSignal — AppSignal gives Ruby developers the tools they need to fix bugs, track performance issues, and ship with confidence. Easy to set up, a…

Island94.org 

GoodJob, Solid Queue, Sidekiq, Active Job, in 2026

Hey, I’m Ben, the author of GoodJob. Last year at RailsConf I hosted a panel discussion between myself, Solid Queue’s Rosa Gutiérrez, Sidekiq’s Mike Perham, and Karafka and Shoryuken’s Maciej Mensfield called “The Past Present and Future of Background Jobs”. You can watch that video here.

In this post, I’m writing my personal perspective on how you, dear developer, might decide what background job backend to choose for Rails and Active Job. But everything in context. And oh boy, it’s all context.

A sober look at how technical decisions are actually made

I’ve worked in software engineering a long time and seen a lot of bullshit justifications for… doing stuff.

  • It…
Remote Ruby 

Tech Resolutions and Tailwind Troubles

In this episode of Remote Ruby, Chris, Andrew, and David have conversations from New Year's resolutions and monitor specifications, to the sustainability challenges of open source projects like Tailwind CSS. They discuss the pros and cons of various hardware, upgrading to Ruby 4.0, recent issues in software projects, and the evolving landscape of AI's impact on productivity tools. They also touch on gaming experiences with Arc Raiders and the never-ending monitor hunt. Hit download now to hear more! 

Links

Honeybad…
Julik Tarkhanov 

On the way to step functions: dreams of marshalable stacks

Lately, it has been a great challenge to get into the world of durable execution. Granted, in the world of web applications we often do not need it. However, anyone who has come in contact with electronic payments, money orders, verifications - will likely encounter a need for durable execution.

The juggernauts in the space are, of course, Temporal.io - with the recently emerging contender restate following in its footsteps. Both are based on the premise of sagas, controlled by a separate service.

There is also DBOS and now there is also absurd and the Vercel Workflow.

As it happens, meeting Bouke when I joined Cheddar has spurred my interest in Temporal. I knew someone who did work on…

justin․searls․co - Digest 

📍 Tabelogged: とんかつ ひな太

I visited とんかつ ひな太 on January 15, 2026. I gave it a 3.6 on Tabelog.

特上ロースはとても柔らかくてすごくジューシーです。旬の広島産牡蠣も美味しかった!

code.dblock.org | tech blog 

Serving Markdown for AI Agents in Jekyll

Dries Buytaert recently wrote about The Third Audience. For decades, websites have targeted two audiences: humans and search engines. AI agents are now the third audience, and most websites aren’t optimized for them yet.

AI agents prefer clean, structured content over HTML. Markdown is ideal - it’s readable, semantic, and free of navigation chrome. So I made this blog serve its source markdown files alongside the HTML.

How It Works

For every post like /2026/01/15/serving-markdown-for-ai-agents.html, you can now fetch the source at /2026/01/15/serving-markdown-for-ai-agents.md.

AI agents can discover this via a <link> tag in the HTML head:

<link href="serving-markdown-for-ai-agents.md"
Glauco Custodio 

A Neat Trick for Splitting Strings

You probably needed to split a full name into first and last name at some point.

How would you split the string Ayrton Senna da Silva into Ayrton as the first name and Senna da Silva as the last name?

What if the name contains inconsistent amounts of whitespace in between the words? Eg: Ayrton Senna da Silva.

"Ayrton Senna da  Silva".split(" ")
# => ["Ayrton", "Senna", "da", "Silva"]

Splitting by space is a good start, but it doesn't finish the job.

Solution

I learned recently we can pass a second argument to split specifying the maximum number of splits:

"Ayrton Senna da  Silva".split(" ", 2)
# => ["Ayrton", "Senna da  Silva"]

That almost worked, but we still have an extra space…

Hi, we're Arkency 

Stop using DateTime in 2026 (unless you work for UNESCO)

Stop using DateTime in 2026 (unless you work for UNESCO)

DateTime has been considered deprecated in Ruby since 3.0. It’s 2026. Why are people still using it?

During a recent code review, we found this:

whatever.starts_at = DateTime.now

When asked why DateTime instead of Time, the response was: “DateTime handles a wider range of dates.”

That was partially true. In 2008. On 32-bit systems.

DateTime’s range advantage died in Ruby 1.9.2

Before Ruby 1.9.2 (released in 2010), Time was limited by the system’s time_t type — typically 32-bit signed integer covering 1901-2038. DateTime had a much wider range.

Ruby 1.9.2 changed this. Time started using a signed 63-bit integer representing…

RailsCarma – Ruby on Rails Development Company specializing in Offshore Development 

Rails Generate Model: Beginner’s Guide to Database Models

In the fast-evolving world of web development in 2026, where new JavaScript frameworks, AI-assisted coding tools, and serverless architectures dominate headlines, one technology quietly continues to thrive: Ruby on Rails.

Far from being a relic of the past, Rails in 2026 is a mature, battle-tested powerhouse — refined over more than two decades into a framework that prioritizes developer happiness, rapid productivity, and long-term maintainability. Major platforms like Shopify, GitHub (in its early days), Basecamp, and countless startups and enterprises still rely on Rails to ship features quickly and reliably.

The secret sauce? Rails’…

Rails Designer 

Nested forms without `accepts_nested_attributes_for` in Rails

Recently I had to build a form builder again. You know the one: update some attributes for the form and then a customizable set of form fields, like text fields, email fields and text areas. All with their own validations, settings and so on. It turned out like this:

Initially I thought of building it using Rails’ accepts_nested_attributes_for (like I wrote about here), but I quickly opted out of that and instead had a simpler idea for it. Some ideas are so simple that I feel almost embarrassed to publish about it. But over the years I’ve found that the most simple ideas will still delight plenty of people.

So here is a way to have “nested forms” in Rails without accepts_nested_attribut…

RubyGems Blog 

4.0.4 Released

RubyGems 4.0.4 includes enhancements and bug fixes and Bundler 4.0.4 includes enhancements and bug fixes.

To update to the latest RubyGems you can run:

gem update --system [--pre]

To update to the latest Bundler you can run:

gem install bundler [--pre]
bundle update --bundler=4.0.4

RubyGems Release Notes

Enhancements:

  • Remove date require from rebuild command. Pull request #9232 by jeremyevans
  • Installs bundler 4.0.4 as a default gem.

Bug fixes:

  • Add a missing “require ‘etc’” statement:. Pull request #9242 by Edouard-chin

Bundler Release Notes

Enhancements:

  • Validate more options for add sub-command #5905
  • Support Ruby 4.1 #9219

Bug fixes:

  • Fix dependency source…
RubySec 

CVE-2025-68271 (openc3): openc3-api Vulnerable to Unauthenticated Remote Code Execution

### Summary OpenC3 COSMOS contains a critical remote code execution vulnerability reachable through the JSON-RPC API. When a JSON-RPC request uses the string form of certain APIs, attacker-controlled parameter text is parsed into values using String#convert_to_value. For array-like inputs, convert_to_value executes eval(). Because the cmd code path parses the command string before calling authorize(), an unauthenticated attacker can trigger Ruby code execution even though the request ultimately fails authorization (401).
Code With Rails 

Build a File Deduplication System with ActiveStorage

Stop storing duplicate files. Learn how to detect identical uploads and reuse existing blobs to save storage costs and speed up uploads.
SINAPTIA 

Monitoring LLM usage in Rails with RubyLLM::Monitoring

You’ve built an AI-powered feature into your Rails application using LLMs. You’ve built an evaluation set to test different prompts and model combinations, compared them, and improved them1 so you could get the best bang for the buck out of your LLM usage. You aimed for the highest accuracy at the lowest possible cost. You deployed it to production. And now?

Unlike most APIs, LLM APIs calls have variable costs. They are usage-based, so the price depends on input and output tokens consumed. So, how do you know how your users are using it? Or, how much will it cost you monthly? Is it what you estimated, and are the usage limits you designed ok? Are they needed at all?

Why monitoring LLM…