Rubyland

news, opinion, tutorials, about ruby, aggregated
Sources About
Nithin Bekal 

Stop memoizing Hash lookups in Ruby

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.

One common example is when there’s a class that wraps a Hash object. Hashes in Ruby are quite well optimized, so do you really need to memoize the result of the hash lookup? Let’s benchmark and find out.

Benchmarks

Let’s start with a simple Setting class that takes a data hash with type and value keys.

class Setting
  def initialize(data)
    @data = data
  end

  def type
    @data["type"]
  end

  def type_memoized
    @type ||= @data["type"]

There’s a type method here, and I’ve added a type_memoized method for comparison. Now let’s…

Awesome Ruby Newsletter 

💎 Issue 477 - Ruby 3.4 Frozen String Literals: What Rails Developers Need to Know

Ruby Weekly 

The beautiful simplicity of async in Ruby

#​758 — July 10, 2025

Read on the Web

Ruby Weekly

Brut: A New Web Framework for Ruby — With no controllers, no verbs, no resources, and an HTML-first, ‘low-ceremony’ approach Brut is treading its own path. Here’s a broader conceptual overview of what it’s about; I think it makes some fantastic choices and David has clearly put a lot of effort into it. (Be aware of the atypical licensing, though.)

David Bryant Copeland

Async Ruby is the Future of AI Apps (And It's Already Here) — After years in Python’s async ecosystem, Carmine found Ruby’s approach to concurrency dated at first, before discovering the…

Rails Designer 

Smarter Use of Stimulus’ Action Parameters

This article is extracted from the book JavaScript for Rails Developers and edited for the web (use SUMMERSALE to get a 25% discount 🤫☀️).


Let’s imagine a typical text editor that has settings for the theme (a string), line numbers (boolean) and the font size (number).

Try to think how’d you set that up in a Stimulus controller. Create a separate method for each setting? updateTheme and setLineNumbers and so on? Not bad, but I’d like to suggest a way that is more maintainable and applicable to any kind of settings set up.

As always, we follow the outside-in approach by adding the HTML first:

<div data-controller="editor">
</div>

The Stimulus controller could look something like this:

Julik Tarkhanov 

Data Over Time

Since 2023 I have been working at Cheddar Payments, which is a fledgling fintech startup in the UK. It was a substantial change from WeTransfer in terms of the problem domain, but also scale.

The scale at a B2C fintech is smaller, but the challenges are, in ways, much harder. And the biggest challenge - engineering-wise - is “data over time”. I’ve learned more about data over time than I would like, and it can be useful to share my experience.

The Rails Way™ is harmful for data over time

Rails assumes building systems happen with a “current state of the world” database, filled with rows that get mutated. For example, this would be a very standard pattern in Rails:

class CustomerAccount
Planet Argon Blog 

Back-End Skills Every Front-End Developer Should Know

Back-End Skills Every Front-End Developer Should Know

There’s no front-end without the back-end. Explore why today’s best front-end devs think full-stack.

Continue Reading

Saeloun Blog 

Rails now allows associations to be marked as deprecated using deprecated: true

Active Record allows developers to mark associations as deprecated, providing robust reporting mechanisms to identify and eliminate their usage across all environments.

It supports multiple reporting modes and configurable backtraces, making the process of cleaning up or removing associations much safer and more efficient.

Before

We had no built-in way to deprecate associations. Removing an association like this:

has_many :projects

meant deleting projects and hoping CI or manual testing would catch all usage. This is risky in production, especially with incomplete test coverage or mocked associations.

After

Rails introduces deprecated: true for the deprecated associations. With…

Evil Martians 

We studied 100 dev tool landing pages—here’s what really works in 2025

Authors: Anton Lovchikov, Head of Design, and Travis Turner, Tech EditorTopics: Developer Products, Design, Design Engineering

While designing a landing page template for dev tool startups, we reviewed 100+ real product sites. Along the way, we uncovered practical insights—here’s what’s worth knowing if you’re building one yourself.

So, you’ve built an amazing open source project or developer tool. Now you need a landing page that doesn’t suck! You could spend weeks researching what works, A/B testing layouts, and second-guessing design decisions. Or… you could fight blank page pain by learning from what the best dev tools are doing in 2025. To save you the time, Anton Lovchikov, Head of…

Write Software, Well 

Polymorphic URLs with direct Router Helper

Polymorphic URLs with direct Router Helper

While reading the source code for the Maybe project (which is a really good Rails codebase that follows most of the Rails best practices and conventions), I came across this code in the router config file. It uses the Rails routing feature called direct to create custom URL helpers for a polymorphic model.

direct :entry do |entry, options|
  if entry.new_record?
    route_for entry.entryable_name.pluralize, options
  else
    route_for entry.entryable_name, entry, options
  end
end

At first glance, I didn't understand what it was doing, as I've personally never had to use the direct method like this in my Rails projects so far, so decided to do some reading and wanted to share everything I…

naildrivin5.com - David Bryant Copeland's Website 

Brut: A New Web Framework for Ruby

A brown rectangle with a large capital 'B'. Underneathe is 'brut'

Brut aims to be a simple, yet fully-featured web framework for Ruby. It's different than other Ruby web frameworks. Brut has no controllers, verbs, or resources. You build pages, forms, and single-action handlers. You write HTML, which is generated on the server. You can write all the JavaScript and CSS you want.

Here’s a web page that tells you what time it is:

class TimePage < AppPage
  def initialize(clock:)
    @clock = clock
  end

  def page_template
    header do
      h1 { "Welcome to the Time Page!" }
      TimeTag(timestamp: @clock.now)
    end
  end

end

Brut is built around low-abstraction and low-ceremony, but is not low-level like Sinatra. It’s a web…

Ruby News 

CVE-2025-24294: Possible Denial of Service in resolv gem

A denial of service vulnerability has been discovered in the resolv gem bundled with Ruby. This vulnerability has been assigned the CVE identifier CVE-2025-24294. We recommend upgrading the resolv gem.

Details

The vulnerability is caused by an insufficient check on the length of a decompressed domain name within a DNS packet.

An attacker can craft a malicious DNS packet containing a highly compressed domain name. When the resolv library parses such a packet, the name decompression process consumes a large amount of CPU resources, as the library does not limit the resulting length of the name.

This resource consumption can cause the application thread to become unresponsive, resulting in…

RubyGems Blog 

RubyGems.org Policies Now Live

We’re excited to announce that the new policies for RubyGems.org are now live! These policies—Terms of Service, Privacy Notice, Acceptable Use Policy, and Copyright Policy—help bring clarity and transparency to how RubyGems.org operates and how we protect the platform and its users.

Originally introduced for community review in March, these policies officially took effect on June 30, 2025. We appreciate the thoughtful feedback submitted during the preview period via email and Slack—your input helped refine these documents to better serve the needs of the Ruby community.

To ensure all users are informed and aligned with these updates, returning users will now see a banner prompting them to…

Ruby Central 

Ruby Central Announces Open Source Fiscal Sponsorship Program & Hanami Support

Ruby Central Announces Open Source Fiscal Sponsorship Program & Hanami Support

At Ruby Central, we've been exploring new ways to support open source maintainers and make their work more sustainable. After speaking with project owners across the ecosystem, we heard a common theme: fundraising requires a huge amount of time and pulls maintainers away from building and working with the community.

As a 501(c)(3) nonprofit, Ruby Central is well-positioned to support open source projects with the administrative side of fundraising through fiscal sponsorship. And today, we’re excited to share our first partnership: Hanami!

What does fiscal sponsorship mean?

Ruby Central handles the back-office aspects of fundraising, including donation processing, accounting, and reporting.…

Boring Rails: Skip the bullshit and ship fast |  

Hotwire components that refresh themselves

This is a guest collaboration with Jesper Christiansen, a long-time fan of most things Ruby on Rails.

Earlier this year, I made a quick tweet about a pattern that I think makes working with Hotwire apps much better.

When you need to make a bit of UI that runs some code in the background, you can use turbo_streams to ‘refresh’ the front-end when the work starts, is in-progress, and finally when it’s finished.

But the problem is that, out of the box, turbo_streams use partials. And frankly, it just kind of sucks to work with. I found myself annoying by having to match up dom_ids across files and passing in data as locals. And it’s hard to search the codebase for partials, leading to cases…

justin․searls․co - Digest 

📄 Full-breadth Developers

The software industry is at an inflection point unlike anything in its brief history. Generative AI is all anyone can talk about. It has rendered entire product categories obsolete and upended the job market. With any economic change of this magnitude, there are bound to be winners and losers. So far, it sure looks like full-breadth developers—people with both technical and product capabilities—stand to gain as clear winners.

What makes me so sure? Because over the past few months, the engineers I know with a lick of product or business sense have been absolutely scorching through backlogs at a dizzying pace. It may not map to any particular splashy innovation or announcement, but everyone…

Hi, we're Arkency 

Breaking the Singleton: How to Reload Ruby Singleton Instance

Breaking the Singleton: How to Reload Ruby Singleton Instance

As you may know, the Singleton module implements the singleton pattern in Ruby. Technically it ensures that the class that includes the Singleton module will have one and only one instance throughout the application’s lifecycle available with the class method instance. The most common usage is for some configuration objects, logging or some global third-party clients. What Ruby Singleton effectively does is that it hides new and allocate methods on the class level so you can’t create a new instance and undefines the extend_object method of your class. It also raises an exception when you try to clone an instance using clone or dup

Drifting Ruby Screencasts 

Dependent Select

In this episode, we explore how to enhance standard select fields using a JavaScript library together with StimulusJS to create more dynamic and responsive dropdowns. The focus is on adding search functionality, handling dependent selections, and integrating smoothly with modern frontend setups.
Hotwire Weekly 

Week 27 - Final RailsConf, Capture Browser Console Logs in Tests, and more!

Hotwire Weekly Logo

Welcome to Hotwire Weekly!

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

The final RailsConf 2025 is happening in Philadelphia next week and there a number of Hotwire-adjecent talks:

  • The Ghosts Of Action View Cache - Hartley McGuire
  • Rails Frontend Evolution: It Was A Setup All Along - Svyatoslav Kryukov
  • Master The Rails Asset Pipeline: Best Practices For Apps & Gems - Adrian Marin
  • Hotwire Native: A Rails Developer’s Secret Tool To Building Mobile Apps (Workshop) - Joe Masilotti
  • The Front-End Is Omakase - Cameron Dutro
  • The Future Of Rails Begins In The Browser - Vladimir Dementyev, Albert Pazderin
  • The Future Of: PWAs On Rails - Edy Silva
  • The Modern View…

You can find the full schedule on the RailsConf website or on RubyEvents.org.


📚 Articles, Tutorials, and Videos

Remote Ruby: Conferences, Hotwire Native updates, and a surprise guest! - Andrew Mason and Chris Oliver dive into Hotwire Native updates and features, among other things like RailsConf, Rails World, and app design tips.

Auto-pause YouTube Videos with Stimulus - Rails Designer

Island94.org 

Is everyone ok at the gemba

The following is the bones of a half-written essay I’ve had kicking around in my drafts for the past 3 years, occassionally updated. I recently read two things that said it all better anyways, but if you read through you get my perspectives as someone in software cooking the goose.

One: Albert Burneko’s “Toward a theory of Kevin Roose”:

My suspicion, my awful awful newfound theory, is that there are people with a sincere and even kind of innocent belief that we are all just picking winners, in everything: that ideology, advocacy, analysis, criticism, affinity, even taste and style and association are essentially predictions. That what a person tries to do, the…

Posts on Kevin Murphy 

How 10 years of RailsConfs can inform the next 10 years of your career

Abstract 🔗

RailsConf has played an important role in my professional and personal life. I’ve learned about technology in ways I wouldn’t have otherwise at RailsConf. I’ve learned about myself in ways I wouldn’t have otherwise thanks to RailsConf. I’ve met people that changed the course of my career thanks to RailsConf. I’ve met others who have become dear friends thanks to RailsConf. I’ve done things I’ve never done before thanks to RailsConf.

The same may be true for you. We should celebrate and reflect on that. Where do we go from here? Let’s talk about it together.

Presentation Resources 🔗

Ruby on Rails: Compress the complexity of modern web apps 

Deprecating Associations, Cleaner Backtraces, and Smarter Defaults

Hi! Emmanuel Hayford with some cool updates for you.

Deprecated associations
You can now mark associations as deprecated using:

has_many :posts, deprecated: true

Active Record will report any usage of the deprecated association. Three reporting modes are supported: :warn (default), :raise, and :notify. You can also enable or disable backtraces (disabled by default).

Add locale options to PostgreSQL adapter DB create
PostgreSQL adapter create DB now supports locale_provider and locale.

Fix annotate comments to propagate to update_all/delete_all
This PR fixes annotate comments to work with update_all and delete_all.

Rails New: Only add browser restrictions when using importmap
When you…

RubySec 

CVE-2025-34075 (vagrant): HashiCorp Vagrant has code injection vulnerability through default synced folders

An authenticated virtual machine escape vulnerability exists in HashiCorp Vagrant versions 2.4.6 and below when using the default synced folder configuration. By design, Vagrant automatically mounts the host system’s project directory into the guest VM under /vagrant (or C:\vagrant on Windows). This includes the Vagrantfile configuration file, which is a Ruby script evaluated by the host every time a vagrant command is executed in the project directory. If a low-privileged attacker obtains shell access to the guest VM, they can append arbitrary Ruby code to the mounted Vagrantfile. When a user on the host later runs any vagrant command, the injected code is executed on the host with that…
Weelkly Article – Ruby Stack News 

🧠 Hash Transformations in Ruby: index_by vs index_with

🧠 Hash Transformations in Ruby: index_by vs index_with July 4, 2025 Ruby and Rails developers often appreciate how expressive and elegant the language is—especially when it comes to working with collections. One of the lesser-known gems in Ruby’s Enumerable toolbox is the pair of methods: index_by and index_with. Both are incredibly powerful for transforming arrays … Continue reading 🧠 Hash Transformations in Ruby: index_by vs index_with

Remote Ruby 

Conferences, Hotwire Native updates, and a surprise guest!

In this episode of Remote Ruby, Andrew and Chris dive into a range of Rails-related updates, development workflows, and tech frustrations, all while preparing for RailsConf and Rails World. Chris dives into the evolution of Ruby Gems toward Python-style wheels and secure precompiled binaries, while Andrew breaks down the value of namespacing and modularization in Rails apps. They also reflect on accessibility, QA, component architecture, and how LLMs are changing the game for solo devs, Plus, a surprise visit from J**** C******adds some comic relief and candid takes on sabbaticals, Rails World, and a podcast competition. Hit download now! 

Links

katafrakt’s garden 

Ecto, on_replace and deferred checks

Today I learned a valuable lesson about how a seemingly simple task can have very rough edge cases, which take hours to solve. It involved Ecto, its associations and on_replace option, and uniqueness checks in the database. Here’s the story.

The problem

Let’s say you are modelling some kind of processes. These processes have steps and the steps have to be executed in a precise order. This is how a database structure for it would look like:

def change do
  create table(:processes) do
    add :name, :string, null: false
  end

  create table(:steps) do
    add :process_id, references(:processes)
    add :name, :string, null: false
    add :order, :integer, null: false
  end
end

It is…

Planet Argon Blog 

7 Smart Strategies for Styling Your React App

7 Smart Strategies for Styling Your React App

Explore these 7 smart, scalable strategies to style your React app for better performance, cleaner code, and a more maintainable UI.

Continue Reading

Awesome Ruby Newsletter 

💎 Issue 476 - Ever heard of `then` in Ruby?

BigBinary Blog 

Active Record adds support for deprecating associations

In Rails8, we can now mark ActiveRecord associations as deprecated. This makesit easy to phase out old associations from our codebase, while still keepingthem around to safely remove their usages. Whenever a deprecated association isused, whether by calling the association, executing a query that references it,or triggering a sideeffect like :dependent or :touch, Rails will alert usaccording to our chosen reporting mode.

Marking an association as deprecated

Simply pass the deprecated: true option when declaring an association.

class User < ApplicationRecord  has_many :meetings, deprecated: trueend

Now, every time the meeting association is invoked, well get a deprecationwarning in our logs.

>…
Ruby Weekly 

DHH on the beauty of modern Linux

#​757 — July 3, 2025

Read on the Web

Ruby Weekly

Omarchy: DHH's New Opinionated Arch/Hyprland Setup — DHH says he feels the same way about Linux now as he did about Ruby in 2003 and wants to ‘present its beauty in the most accessible way possible’. Omarchy is his attempt at making it easy to get running with an aesthetically pleasing, developer-friendly Linux setup. He writes more about it here.

David Heinemeier Hansson

💡 If you're not quite ready to go so far down the rabbit hole, Omakub is DHH's Ubuntu based setup/configuration for developers.

Let’s Hack Ruby Upgrade Tools Together @ RailsConf —…

Glauco Custodio 

TIL: previously_new_record? — A Hidden Gem in ActiveRecord

Have you ever needed to know if a record in Rails was just created — especially after using create_or_find_by or find_or_create_by?

Most Rails devs reach for new_record?, but it won’t help after create_or_find_by, because the record is already saved. So how do you know if a record was just created?

Say hello to previously_new_record?, which for my surprise is available since Rails 6.1.

It tells you if the record was new right before the last save — giving you a clean way to trigger onboarding logic, log metadata, or set defaults only for new records.

Here's how one can use it:

user = User.create_or_find_by(email: params[:email])

# only create the log if the user was just…
Rails Designer 

Auto-pause YouTube Videos with Stimulus

I recently published an article to auto-pause a video using Stimulus when it is outside of the viewport which I built for one of my Rails UI Consultancy clients. In this article I am exploring the same feature but using an embedded YouTube player using an iframe. While the implementation uses the same core concept as the previous video controller (the Intersection Observer API), working with YouTube’s iframe API adds some interesting complexity.

If you want to check out the full setup, check out this repo.

Again, let’s start with the HTML:

<div data-controller="youtube" data-youtube-percentage-visible-value="20">
  <iframe
    data-youtube-target="player"
    src="https://www.youtube.co…

Note a few…

Josh Software 

Securing GraphQL in Golang using Directives for Authentication & Authorization

When building an API, securing your data is just as important as exposing it. This post walks you through how to implement authentication and role-based access control in GraphQL using Golang, with a powerful feature called GraphQL Directives. We’ll learn how to: 📘 What are GraphQL Directives? GraphQL directives are annotations that can be added to your schema to change … Continue reading Securing GraphQL in Golang using Directives for Authentication & Authorization
Posts on Kevin Murphy 

Frequently Played July 2025

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.

Nothing Matters 🔗

I am definitely consuming all things The Last Dinner Party lately.

Full Lyrics

Even when the cold comes crashing through, I’m putting all my bets on you
I hope they never understand us
I put my heart inside your palms, my home in your arms, now we know
Nothing matters, nothing matters

Good Time 🔗

I’m missing them on tour with Gaslight Anthem this cycle.

Full Lyrics

So he rushes in to tell you what he did today
But he can’t think of what to say
I think you listen…

Evil Martians 

The early validation lesson: designing Quotient’s prompt sandbox

Authors: Yaroslav Lozhkin, Product Designer, and Travis Turner, Tech EditorTopics: Developer Products, Design, Case Study, AI, Design Engineering, AI Integration

The awesome Quotient team, a vision from the future, and a brilliant pivot. But if you're a visionary working on next-gen tech, you need to learn from the road we travelled on the way there!

We work with founders who embrace ambition. This was certainly the case when Quotient's team approached us with their vision: a prompt playground where AI-native developers could write production prompts, test with variables, evaluate outputs, and manage datasets. We knew we were working with builders who were looking into the future. But how to…

SINAPTIA 

Think before you cache

“Maybe we should cache this”. It’s a common thought when we notice a slow response or an expensive computation. Just as common - and even more frustrating - is the follow-up thought: “Must be the cache”. That moment when something returns an unexpected response, a stale value in a view, a wrong number in an API response, or a method returning outdated or just plain incorrect data. And the culprit? Caching gone wrong.

Most Rails apps are already leveraging caching from the get-go, even if it’s not immediately obvious. For example, digested assets (like stylesheets, JavaScript files, and logos) are fingerprinted and cached by the browser to avoid re-downloading them on every visit. Turbo…

Ruby Central 

Company Spotlight: FastRuby is the Answer to Rails Tech Debt That Overwhelms Teams

Company Spotlight: FastRuby is the Answer to Rails Tech Debt That Overwhelms Teams

What happens when your Rails app is stuck on an outdated version? You may know it needs to be upgraded, but the work feels overwhelming, risky, and no one on your team really wants to take it on. 

That’s where FastRuby comes in.

For the past eight years, FastRuby has carved out a unique (and much-needed) niche in the Ruby ecosystem: helping companies upgrade their Rails apps safely and sustainably. Founded by Ernesto Tagwerker, FastRuby has worked with clients like SoundCloud and Power Home Remodeling, and completed more than 100 projects, with over 50,000 developer hours invested in upgrades alone.

Company Spotlight: FastRuby is the Answer to Rails Tech Debt That Overwhelms Teams

“Early on, we did an upgrade for Power Home Remodeling,” Ernesto explained. “We finally had one…

justin․searls․co - Digest 

📄 A handy script for launching editors

Today, I want to share with you a handy edit script I use to launch my editor countless times each day. It can:

  • edit posse_party – will launch my editor with project ~/code/searls/posse_party
  • edit -e vim rails/rails – will change to the ~/code/rails/rails directory and run vim
  • edit testdouble/mo[TAB] – will auto-complete to edit testdouble/mocktail
  • edit emoruby – will, if not found locally, clone and open searls/emoruby

This script relies on following the convention of organizing working copies of projects in a GitHub <org>/<repo> format (under ~/code by default). I can override this and a few other things with environment variables:

  • CODE_DIR - defaults to "$HOME/code"
  • DEFAULT_ORG -…
a-chacon 

OasRails: From a Rails Engine to a Framework-Agnostic Solution

Ruby is a language that is easy to understand, fun to write, and performs well, but unfortunately, its popularity hasn’t grown over time. Worse yet, this popularity is almost entirely based on a single framework: Ruby on Rails. Therefore, it is essential for those of us who develop in Ruby to diversify the ecosystem and create solutions that work regardless of the framework to ensure Ruby’s longevity as a programming language that endures over time and isn’t controlled by a handful of companies.

Following this line, I discovered a framework called Rage for API creation. I had already tried Grape and knew about Padrino, Sinatra, and Hanami. But Rage seemed simple to me, and I also realized…

Rails at Scale 

A Ruby open-source sabbatical

I wanted to share a bit about the first part of my Ruby open-source sabbatical experience here at Shopify! There don’t seem to be nouns or verbs for someone doing a sabbatical, so I’m coining the terms sabbatical-er and sabbatical-ing for the rest of this post.

A bit about me (a sabbatical-er)

My name is Sid, and I’m currently doing a Ruby open-source sabbatical at Shopify on the Ruby Developer Experience team (aka Team Ruby DX). I’ve primarily worked on web applications using Rails and React for the past 6+ years building Shopify Collabs. I’m a proud Ruby developer and am increasingly appreciative of the Ruby community both here at the company and beyond.

What is an open-source…

Graceful.Dev 

Site News #26: Policy, Structure, and Memoization

Hi there, graceful devs! Here’s what’s new in the garden…

Content Updates

There are two hefty new episodes since the last update! The first one, Policy as Structure, introduces a powerful approach to architecting your code for flexibility and change.

A video thumbnail showing Avdi Grimm in a flowery shirt, with the title "Policy as Structure"

The second new episode follows on from it, although either can also be watched standalone. In this one you’ll learn why just because you can easily memoize objects so they aren’t re-created… doesn’t mean you should make it a habit.

Avdi Grimm pontificating in a colorful shirt, on top of a title slide reading "Resist Memoization - Episode 713"

There are also some new freebie episodes up on the YouTube channel:

That’s all for this month. Stay graceful!

danielabaron.me RSS Feed 

Capture Browser Console Logs in Rails System Tests with Capybara and Cuprite

Learn how to capture browser console logs in Rails system tests using Capybara and Cuprite, and debug JavaScript issues without slowing down test execution.
Hi, we're Arkency 

5 gems you no longer need with Rails

In my line of work as a consultant I’m often reviewing Rails codebases. Most of the time they’re not the greenfield apps — developed with latest and greatest Rails and Ruby releases. They power successful businesses though. To keep them running smoothly and securely they sometimes need a little push to stay within framework maintenance window.

Upgrading the Rails itself is the easiest part of the upgrade process. It’s well documented. The framework and its parts play well together. You can do it gradually, dealing with new framework defaults one by one.

The trickier part is the non-framework dependencies. The ones that gave tremendous leg while bootstrapping the application. When…

Weelkly Article – Ruby Stack News 

🚀 Using MongoDB in Ruby on Rails with Mongoid: A Practical Example

July 1, 2025 As developers, we often default to relational databases like PostgreSQL or MySQL when building Rails applications. But what happens when your data is better represented as documents, or you need more flexibility with your schema? That’s where MongoDB comes in — and with the help of Mongoid, integrating it with Rails is … Continue reading 🚀 Using MongoDB in Ruby on Rails with Mongoid: A Practical Example

justin․searls․co - Digest 

📄 How to subscribe to email newsletters via RSS

I have exactly one inbox for reading blogs and following news, and it's expressly not my e-mail client—it's my feed reader. (Looking for a recommendation? Here are some instructions on setting up NetNewsWire; for once, the best app is also the free and open source one.)

Anyway, with the rise of Substack and the trend for writers to eschew traditional web publishing in favor of e-mail newsletters, more and more publishers want to tangle their content up in your e-mail. Newsletters work because people will see them (so long as they ever check their e-mail…), whereas routinely visiting a web site requires a level of discipline that social media trained out of most people a decade ago.

But, if…

Alchemists: Articles 

Software Issues

Cover
Software Issues

Managing issues that pop up with the software you are developing is a common occurrence. You’ll always have new enhancements to implement and bugs to tackle. Sadly, there is no industry standard, or best practices, on how to go about managing these issues but there should be.

My favorite is thinking in terms of present and past tense which provides a nice synergy with the corresponding Git commits you make to complete the issue. Example:

Present (issue) Past (commit)

Add

Added

Update

Updated

Fix

Fixed

Remove

Removed

Refactor

Refactored

There’s a nice simplicity to the above where present tense is used to describe what is desired while past…

The Bike Shed 

467: How to get the most out of attending a conference with Matheus Richard

Joël continues his preparations for the last RailsConf as he talks with Matheus about how to make the most of your time at the conference.

Hear their tips to connect and communicate with other attendees, the different ways to take notes at the various talks you can attend, what to do when your discussions have a lull, as well as how to draw inspiration from others talks and using it to your advantage.

Don’t miss out on the final RailsConf which takes place July 8th - July 10th in Philadelphia, PA!

Thanks to our sponsors for this episode Judoscale - Autoscale the Right Way (check the link for your free gift!), and Scout Monitoring.

You can connect with Matheus via LinkedIn

Rails Designer 

Summer sale: 25% off UI Components and JavaScript for Rails Developers

July brings longer days and a quieter inbox in the northern hemisphere. A good moment to push a side-project, an internal tool, or the first version of a SaaS.

Rails Designer UI Components can help. Just like it did for more than 1,000 developers already, and roughly 100 more arrive each month. The library is built with ViewComponent, styled with Tailwind CSS, and enhanced by Stimulus.

During July, both Pro and Infinite, are available with a 25% discount. Apply coupon SUMMERSALE at checkout and start shipping a little sooner. 🚢

Want to level-up your JS and your paycheck as a result? JavaScript for Rails Developers is also available with 25% off using the coupon SUMMERSALE. 🤑

André Arko 

You should delete tests

We’ve had decades of thought leadership around testing, especially coming from wholistic development philosophies like Agile, TDD, and BDD. After all that time and several supposedly superseding movements, the developers I talk to seem to have developed a folk wisdom around tests.

That consensus seems to boil down to simple but mostly helpful axioms, like “include tests for your changes” and “write a new test when you fix a bug to prevent regressions”. Unfortunately, one of those consensus beliefs seems to be “it is blasphemy to delete a test”, and that belief is not just wrong but actively harmful.

Let’s talk about why you should delete tests.

To know why we should delete tests, let’s…

Short Ruby Newsletter 

Short Ruby Newsletter - edition 142

The one where Rails Foundation launches a new podcast, where Josef launched Kamal Devops and where Obie launches Claude On Rails gem and DHH announces Omarchy
Gusto Engineering - Medium 

False Fences Make Bad Neighbors

A green field with a dirt road running through it. A brown gate blocks the road but has no fencing to either side of it.An easily passable inconvenient fence blocking a road that appears to serve no purpose

Introduction

As software engineers, we’ve all encountered code that looked redundant, verbose, or just plain odd — and refactored it only to suffer failing tests or production bugs. After getting burned, we learn to be cautious and ask: “What non-obvious reason could require the code to be this way?”

Chesterton’s Fence

This cautionary principle is called Chesterton’s Fence. It originates from G.K. Chesterton’s 1929 book, The Thing, where he writes of a man encountering a fence crossing a road. The man believes the fence serves no purpose and wants it removed. Another man will not allow its removal until its…

justin․searls․co - Digest 

🎙️ Breaking Change podcast v39 - Broken Home

Direct link to podcast audio file

I have returned to the nation of freedom and tariffs and all my shit has stopped working! Which shit? Why? What did I buy now? Listen and find out.

Remember, listeners who write in to podcast@searls.co will be spared on judgment day.

Website stuff follows:

Dhaval Singh's Blog 

Run any LLM locally on your Mac in less than 2 mins

I am just surprised that is is so simple. Plus its so elegant, I want to stand on my rooftop and shout. Anyway, here are the steps. BTW you only need 1min if you dont care about a fancy chat interface.

Step 1:

Visit https://ollama.com/ click on download

Step 2:

Click on Models on the above page, pick any model you want and run a cmd like this in your terminal

ollama run gemma3:4b

Step 3:

Congrats! Your local LLM is now up and running. You can start talking to it in the terminal itself.

Step 4:

Visit https://github.com/open-webui/open-webui to get the chat UI.

Run these 2 simple cmds to install

pip install open-webuiopen-webui serve

Step 5:

It will automatically connect with ollama and you can start…

DEV Community: Doctolib 

Cracking the code: How Copilot supercharged my last CTF and where it fell short

Using AI for CTF

Over the years, I’ve always been drawn to riddles and brainteasers. It’s no surprise, then, that as a software engineer, I’ve always been interested in Capture The Flag (CTF) cybersecurity challenges. In these challenges, you need to find a solution (hack) to retrieve a secret string hidden somewhere. This could be in a website, social media, assembly code, images, or any medium that can conceal information. These challenges require a broad range of knowledge, particularly in computer science and software engineering, but also creativity and inventiveness. However, I never dared to try because, in my mind, CTFs were reserved for the elite: the seasoned hackers with skills far beyond my…

Now, at 35,…

justin․searls․co - Digest 

🔗 Goals are overrated, Constraints are underrated

Loved this post from Joan Westenberg, about the limitations of goals:

The cult of goal-setting thrives in this illusion. It converts uncertainty into an illusion of progress. It demands specificity in exchange for comfort. And it replaces self-trust with the performance of future-planning. That makes it wildly appealing to organizations, executives, and knowledge workers who want to feel like they're doing something without doing anything unpredictable.

And the liberation of constraints:

Constraints make solutions non-obvious. They force the kind of second-order thinking that goals actively discourage. Instead of aiming for a finish line, the constrained mind seeks viability. It doesn't…

Saeloun Blog 

Rails uses self-join for UPDATE with outer joins on PostgreSQL and SQLite

ActiveRecord joins is used to combine records from multiple tables based on associations. In this blog, we will discuss how UPDATE statements with outer joins are handled in PostgreSQL and SQLite.

class Client < ApplicationRecord
  has_many :projects
end

class Project < ApplicationRecord
  belongs_to :client
end

Before

When we do UPDATE with an OUTER JOIN and reference the updated table in the ON clause in PostgreSQL and SQLite, Rails generated subqueries as the join condition cannot be safely moved to the WHERE clause without breaking the query.

Client.joins("LEFT JOIN projects ON projects.client_id = clients.id")
      .where("projects.id IS NULL")
      .update_all(name: 'Archived…
UPDATE "clients" 
SET "name" = 'Archived Client' 
WHERE ("clients"."id") IN (
  SELECT "clients"."id" 
  
Island94.org 

Recently, June 29, 2025

  • We have a new fridge; it is the same model as the old fridge because only that model would fit in the cabinetry. The installers also discovered that the water valve was broken and couldn’t be shut off; subsequently, the plumber determined that only the handle had snapped. I ordered a completely new water valve to unscrew its handle and attach that handle to the existing valve. In this economy.
  • This week in Rails, I went back and replaced most of the places I was using turbo-broadcast-refresh and replaced them with targeted turbo-streams. I also spent a bunch of time trying to make an autogrowing textfield that didn’t bounce the page up and down which the style.hei…
Fullstack Ruby 

Sunsetting the Fullstack Ruby Podcast (and What I’m Doing Instead)

I always hate writing posts like this, which is why I rarely do it and tend to let content destinations linger on the interwebs indefinitely.

But I’m in the midst of spring summer cleaning regarding all things content creation, so I figured it’s best to be upfront about these things and give folks a heads up what I’m currently working on.

TL;DR: I’m bidding the Fullstack Ruby podcast a bittersweet farewell and gearing up to launch a new podcast centered on current events in the software & internet technology space, because we’ve reached a crisis point and future of the open web is more fragile than ever.


Here’s the truth. There’s a lot that’s fucked up about Big Tech and software…

Hotwire Weekly 

Week 26 - Multi-step forms done right, Turbo-friendly tables, and more!

Hotwire Weekly Logo

Welcome to Hotwire Weekly!

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


📚 Articles, Tutorials, and Videos

The Hotwire-Rails summit, or interactive multi-step forms at peak UX - Vladimir Dementyev showcases on the Evil Martians blog how they built a highly-interactive, multi-step form wizard within Rails + Hotwire, matching SPA-level user experience. Using Turbo Streams, morph updates and state-preserving UI tricks.

Making Tables Work with Turbo - Guillermo Aguirre fixes common Turbo issues with tables: avoid <turbo-frame> around <tbody>, use plain IDs on rows (dom_id) for inline edits, and use remote forms tied to rows.

Hotwire Native Live: Route…

justin․searls․co - Digest 

📍 Tabelogged: ハシゴ

I visited ハシゴ on May 29, 2025. I gave it a 3.3 on Tabelog.

justin․searls․co - Digest 

📍 Tabelogged: 串焼き居酒屋ゴバン

I visited 串焼き居酒屋ゴバン on May 29, 2025. I gave it a 3.3 on Tabelog.

justin․searls․co - Digest 

📍 Tabelogged: 米沢牛・焼肉 さかの

I visited 米沢牛・焼肉 さかの on May 29, 2025. I gave it a 3.5 on Tabelog.

justin․searls․co - Digest 

📍 Tabelogged: 餃子 照井 福島駅東口店

I visited 餃子 照井 福島駅東口店 on May 29, 2025. I gave it a 3.7 on Tabelog.

justin․searls․co - Digest 

📍 Tabelogged: ピッツェリア エ オスタリア ダヴェッロ

I visited ピッツェリア エ オスタリア ダヴェッロ on May 29, 2025. I gave it a 3.7 on Tabelog.

a-chacon 

When Machines Talk: ChatGPT and DeepSeek.

I’ve spent the last couple of days building a ChatBot for the company I’m currently working for, and I’ve had to research RAG, vector databases, Langchain, and more. Amidst this deep dive into the world of LLMs, I came up with a silly but fun experiment: What if ChatGPT and DeepSeek had the chance to talk to each other? What would they talk about? How far would they go?

I use DeepSeek mostly to generate code I’m too lazy to write, fix repetitive tasks, document, and generate tests. Its outputs aren’t perfect but are correctable. And I use ChatGPT more for defining structural approaches and solutions. They’re great tools, but just that—another tool in the universe of development and…

RubySec 

CVE-2025-6442 (webrick): Ruby WEBrick read_headers method can lead to HTTP Request/Response Smuggling

Ruby WEBrick read_header HTTP Request Smuggling Vulnerability This vulnerability allows remote attackers to smuggle arbitrary HTTP requests on affected installations of Ruby WEBrick. This issue is exploitable when the product is deployed behind an HTTP proxy that fulfills specific conditions. The specific flaw exists within the read_headers method. The issue results from the inconsistent parsing of terminators of HTTP headers. An attacker can leverage this vulnerability to smuggle arbitrary HTTP requests. Was ZDI-CAN-21876.
Judoscale Dev Blog 

Autoscaling: Proactive vs. Reactive

From the beginning, Judoscale has been focused on providing the fastest, most reliable queue-time-based autoscaling on the market. We believe that queue time is the metric that matters most for real applications out in the wild and that an autoscaler ought to be extremely responsive to queue time metrics as they arrive (most Judoscale applications scale up within 10 seconds of a queue time spike!). Our pitch and goal has remained more or less constant since we began: queue-time metrics scaled fast!

But what if queue time isn’t always the best answer? 👀 What if there’s another metric or style of autoscaling that’s more effective in certain cases and applications? Tl;dr: there is,…

justin․searls․co - Digest 

📄 Visiting Japan is easy because living in Japan is hard

Hat tip to Kyle Daigle for sending me this Instagram reel:

I don't scroll reels, so I'd hardly call myself a well-heeled critic of the form, but I will say I've never heard truer words spoken in a vertical short-form video.

It might be helpful to think of the harmony we witness in Japan as a collective bank account with an exceptionally high balance. Everyone deposits into that account all the ingredients necessary for maintaining a harmonious society. Withdrawals are rare, because to take anything out of that bank account effectively amounts to…

Remote Ruby 

Adventures with Puny Code and Other Programming Puzzles

In this episode of Remote Ruby, Chris and Andrew chat through everything from extreme summer heat, tornadoes, and driving habits, to browser quirks, Unicode bugs, Punycode, and the intricacies of building and maintaining rich text editors. Their conversation drifts into developer tools like Tiptap and Lexical, accessibility issues, browser rendering oddities, and even some personal stories involving cooking fails and skateboarding injuries. Hit download now to hear more! 

Links

Honeybadger
Honeybadger is an application health monitoring tool built by developers for…
Ruby on Rails: Compress the complexity of modern web apps 

BacktraceCleaner gets first_clean_frame and first_clean_location

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

The Rails Foundation launched a new podcast: ‘On Rails’ with host Robby Russell
In each episode, Robby talks with Rails devs and explores the real-world decisions that go into building, maintaining, and scaling Ruby on Rails applications. Episode one is already up with guest Rosa Gutiérrez. Listen at onrails.buzzsprout.com, or in your favorite podcast app.

Improve CurrentAttribute and ExecutionContext state management in test cases
Previously these two global state would be entirely cleared out whenever calling into code that is wrapped by the Rails executor, typically Action Controller or Active Job helpers. Now…

Implement…

Dhaval Singh's Blog 

Resources to transition to 'Applied AI' role

I have seen quite a few software devs(including me) with little to no background in ML jumping on the genAI train in the last 1-2 years. While this is a good thing and using LLMs with no prior classical ML knowledge helps in some ways it is also a detterent in quite a few ways. Here is how I tried to fill that gap for myself.

Who is this for?

You might be building AI apps or looking to get a job in a team that is dealing with AI stuff, this list of resources will help you do that. The idea is to learn some basic classical ML, understand the common terminology used, get a good understanding of LLMs, etc.

This is more for the devs who have built agents, RAG pipelines, etc but dont have a…

Nithin Bekal 

Migrating Postgres to SQLite using the Sequel gem

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.

The sequel gem allows connecting to one database, and dumping the contents into another.

First, let’s import that dump into local postgres database.

psql devlibrary_development < devlibrary-dump.sql

Next, we’ll install sequel and sqlite3 gems.

gem install sequel sqlite3

Finally, we can dump the postgres database straight into an sqlite3 database using:

sequel -C postgres://localhost/devlibrary_development \
    sqlite://storage/development.sqlite3

And…

Posts on Kevin Murphy 

How 10 years of RailsConfs can inform the next 10 years of your career - The Proposal

Description 🔗

RailsConf has played an important role in my professional and personal life. I’ve learned about technology in ways I wouldn’t have otherwise at RailsConf. I’ve learned about myself in ways I wouldn’t have otherwise thanks to RailsConf. I’ve met people that changed the course of my career thanks to RailsConf. I’ve met others who have become dear friends thanks to RailsConf. I’ve done things I’ve never done before thanks to RailsConf.

The same may be true for you. We should celebrate and reflect on that. Where do we go from here? Let’s talk about it together.

Session Format 🔗

Talk

Level 🔗

Introductory & Overview

Details 🔗

This talk shares my experiences with RailsConf. It highlights the…

Awesome Ruby Newsletter 

💎 Issue 475 - A Deep Dive into Solid Queue for Ruby on Rails

Hanami 

Meet Tim and Sean

It’s week 4 of our sponsorship drive! This week is your chance to get to know the people you’ll be supporting:

Sean and Tim at RubyConf 2024

That’s Sean on the left, me on the right. Now let’s get into it!

Meet Tim

Tell us a bit about yourself

I’m a software developer living in Canberra, Australia with my wife and two children.

I’ve been toying with computers since I was a kid. After years of playing newsagency-bought shareware games, teenage me found Linux (thank you APC Mag Pocketbook). After another few years, mostly spent reinstalling distros and theming Openbox, I eventually found Ruby! That was in 2002. I’ve been lucky to work with it ever since.

justin․searls․co - Digest 

📸 My favorite Apple Podcasts bug

After almost two years of being annoyed by this, I finally submitted the most annoying bug I'm currently dealing with. Filed as feedback FB18414183 with description:

For like 2 years (ever since Oppenheimer came out)? I listened to ONE EPISODE of Script Notes by manually navigating to it in the Podcasts app and listening to it. Now, across all my devices—iPad, iPhone, and every Mac, as if it's on some kind of bizarre timer, the Podcasts app will launch to the Script Notes page. Sometimes it's once a week, sometimes I go a month without seeing it. Always happens while I'm actively using the device and steals focus. This has been annoying and confusing for years, but it's so erratic…

Julia Evans 

New zine: The Secret Rules of the Terminal

Hello! After many months of writing deep dive blog posts about the terminal, on Tuesday I released a new zine called “The Secret Rules of the Terminal”!

You can get it for $12 here: https://wizardzines.com/zines/terminal, or get an 15-pack of all my zines here.

Here’s the cover:

the table of contents

Here’s the table of contents:

why the terminal?

I’ve been using the terminal every day for 20 years but even though I’m very confident in the terminal, I’ve always had a bit of an uneasy feeling about it. Usually things work fine, but sometimes something goes wrong and it just feels like investigating it is impossible, or at least like it would open up a huge can of worms.

So I…

Ruby Weekly 

A new Rails podcast launches

#​756 — June 26, 2025

Read on the Web

Ruby Weekly

On Rails: A New Podcast from The Rails Foundation — The Rails Foundation wanted to launch a new podcast featuring “Rails devs talking about the nitty gritty technical decisions they’ve made along the way” – now it’s here, hosted by Robby Russell. You can listen to the first episode here featuring 37signals’ Rosa Gutiérrez talking about her team’s work building Solid Queue.

Rails Foundation

Putting Hanami in the Browser with WebAssembly — This experiment shows how straightforward it is to run Ruby in the browser using WebAssembly nowadays, with the real…

Rails Designer 

Creating a Simple Embeddable JavaScript Widget (for Your Rails App)

This article was taken from the book: JavaScript for Rails Developers. It is shortened and adapted for the web.


Browsing any modern SaaS site or app and you have very likely seen a widget in the bottom corner. Like a chat or a documentation look-up dialog.

In this article, I want to show you an example on how you can build such JavaScript widget that users can embed on their own site or app. It can be a great starting point for a new SaaS business (feel free to send stock options my way 🤑).

If you purchase the professional package of the JavaScript for Rails Developers book, check out the bundled resources. It includes the resource for a complete JavaScript widget, along with a Rails…

Nithin Bekal 

Exporting fly.io postgres database

Recently, I’ve been using fly.io for small hobby projects like devlibrary. However, I’ve wanted to simplify the setup even further by replacing the app’s postgres DB with sqlite. To start, I needed to figure out how to export the database to my local machine.

First, start a fly proxy so you can connect to the remote database. This will create a proxy running in localhost:5434 for a postgres app with the name devlibrary-db.

fly proxy 5434:5432 -a devlibrary-db

The database dump needs a password, which can be extracted from the DATABASE_URL env variable. This can be fetched from:

fly ssh console -C "printenv" | grep DATABASE_URL

Then, in another terminal window run the pg_dump command,…

Ruby Central 

Ruby Central's OSS Changelog: June 2025

Ruby Central's OSS Changelog: June 2025

Hello, and welcome to the June newsletter. Read on for announcements about our Open Source Program and a report of the OSS work we’ve done over the past month!

As mentioned in our previous newsletters, we will now be sending out separate updates for the Open Source Program and general Ruby Central organization and community news.

You can expect our general Ruby Central newsletter (the Ruby Central README) in your inbox later this month.

Open Source Program Announcements

Marty keynotes at Baltic Ruby

Ruby Central's OSS Changelog: June 2025

We’re excited to share that our Director of Open Source, Marty Haught, spoke at Baltic Ruby, June 12-14! Marty joined a fantastic keynote lineup alongside Matz and Hanami’s Tim Riley.

In his talk,…

RichStone Input Output 

The new AI wave, Rails Builders III and Mom Test reading group

The new AI wave, Rails Builders III and Mom Test reading group

Hey all!

Here are some mixed-bag updates with useful resources to help us reach the next level, as well as Rails Builders invites for building together.

Agentic Coding

I've been among the lucky ones in our development team to have gotten sponsored for a Claude Code Max plan by ClickFunnels. Huge thanks at this point, else I would have still been in the dark about where we are in the AI coding revolution.

For giant codebases, it's unlike anything I've tried to create, first ideas around solving a particular problem or finishing features according to specific instructions.

For greenfield projects, it's pretty spot on when generating new code and iterating on it.

It's also unmatched in parsing a…

Ruby on Rails: Compress the complexity of modern web apps 

Introducing On Rails: A New Podcast 🎙️ from the Rails Foundation

There’s no shortage of podcasts about new tools, trending libraries, and web development hot takes. But what’s often missing are the deeper conversations, the ones about how teams actually made things work in production, under pressure, and with real-world constraints.

That’s the gap we’re hoping to close with 🎙️ On Rails.

Produced by The Rails Foundation, On Rails is a new podcast focused on the technical decisions, architectural trade-offs, and long-term thinking behind building and maintaining Ruby on Rails applications.

This podcast isn’t about chasing the latest trends. It’s about understanding the choices that help teams ship and sustain reliable software over time. You’ll hear…

André Arko 

jj config edit

Today I stumbled across a jj cheat sheet and it contained an absolute gem of a command that I had somehow completely avoided knowing about this entire time: jj config edit --user. You can just run a jj command to open the config file in your editor! You don’t have to remember whether you put it in ~/.jjconfig.toml, or ~/.config/jj/config.toml, or whatever, you can just edit it! Super great.

Gusto Engineering - Medium 

Platform Engineering at Gusto: Part 2

Accelerating customer value through vertical slicing

A child puts together legosSometimes there is greater value in building something piece by piece

In my last blog, Platform Engineering at Gusto: Part 1, I explored how the Comms Platform team iteratively enhanced the experiences of both customers and product engineers by improving the performance of notifications for larger product teams, improving notification consistency across multiple platforms, and by reducing the load for comms management for product teams.

Just as Rome was not built in a day, the team needed to make changes to our development practices to optimize for end-user facing value as we were confronted with ambiguity of these projects.

A process for…

Evil Martians 

The Hotwire-Rails summit, or interactive multi-step forms at peak UX

Authors: Vladimir Dementyev, Principal Backend Engineer, and Travis Turner, Tech EditorTopics: Rails, Hotwire, Ruby, JavaScript

Read about the techniques and tools we used to build a slick-looking interactive multi-step form with Rails and Hotwire for one of our clients.

Picture this: one day your product, which was built with Ruby on Rails in a canonical HTML-first (Hotwire) fashion, gets an "off-world" feature request, namely, building a highly-customizable and amazingly-interactive user interface. You stare at Figma mockups scratching your head and mulling an unspeakable question: "Is the Renaissance at an end? Should we reach for React now?" Before you abandon ship, let me share the tips…

The Rails Tech Debt Blog 

The Hidden Costs of Technical Debt in Rails: Lessons from Client Projects

When people hear the phrase “technical debt”, they often picture broken code, outdated infrastructure, or a total rewrite waiting to happen. But in our experience at Planet Argon, technical debt usually shows up more quietly.

It’s not a crisis. It’s a pattern.

It shows up in how long it takes to make changes, how often bugs sneak in, and how hesitant developers are to touch certain parts of the codebase. And while it rarely announces itself, it always costs something — whether in time, budget, or momentum.

In this post, we’ll highlight real-world examples of how technical debt has surfaced in Rails applications we’ve worked on. These aren’t horror stories — they’re common issues we see…

Weelkly Article – Ruby Stack News 

🧠 SOLID vs OOP in Ruby: Are We Just Repackaging the Same Ideas?

SOLID vs OOP in Ruby: Are We Just Repackaging the Same Ideas? June 24, 2025 In a recent round of technical interviews, I was asked about the SOLID principles. Like many Ruby developers, I’ve spent years applying object-oriented concepts in practice — even before SOLID was something people talked about regularly. As I dug deeper … Continue reading 🧠 SOLID vs OOP in Ruby: Are We Just Repackaging the Same Ideas?

The Bike Shed 

466: All about keynotes with Aji Slater

As the final RailsConf draws near Joël and Aji Slater sit down to discuss its varied and interesting history of keynote presentations.

The pair reminisce on their previous trips and talks at RailsConf, share some tips on creating the perfect keynote, as well as discussing the strong community that’s rallied behind RailsConf for so many years and how to best connect with others at similar cons as an audience member.

Don’t miss out on the final RailsConf which takes place July 8th - July 10th in Philadelphia, PA! Get ready for by checking out Aji’s recommenced keynotes from previous years 2022 - 2017

Thanks to our sponsors for this episode Judoscale - Autoscale the Right Way

justin․searls․co - Digest 

📍 Tabelogged: さわやか 新静岡セノバ店

I visited さわやか 新静岡セノバ店 on May 24, 2025. I gave it a 3.4 on Tabelog.

Short Ruby Newsletter 

Short Ruby Newsletter - edition 141

The one where Marco Roth announced the Herb Language Server and where we discuss again about service objects
justin․searls․co - Digest 

📍 Tabelogged: 多可能

I visited 多可能 on May 24, 2025. I gave it a 4.0 on Tabelog.

justin․searls․co - Digest 

📍 Tabelogged: 鳥藤

I visited 鳥藤 on May 24, 2025. I gave it a 3.8 on Tabelog.

Planet Argon Blog 

Planet Argon Named One of Inc. Magazine’s Best Workplaces—for the Third Year Running!

Planet Argon Named One of Inc. Magazine’s Best Workplaces—for the Third Year Running!

We’re celebrating three years running as one of Inc. Magazine’s Best Workplaces! Our team’s dedication and our client-first approach continue to shape our culture.

Continue Reading

Petr Hlavicka 

Versioning API requests

Learn how to handle API request versioning in Rails without duplicating controllers, using a schema-based approach that supports OpenAPI documentation and seamlessly maps external API structures to internal models.
katafrakt’s garden 

Putting Hanami in the browser via WASM

The other day I was loosely listening to a Code and the Coding Coders who Code it podcast episode with Vladimir Dementyev. He was talking about his work around putting Ruby on Rails into the browser to lower the entry barrier for folks who just want to “feel” it, but witohut going through the struggle of choosing a correct Ruby version manager, installing dependencies for gems with C extensions etc.

And I thought: Wow, great!

And I also thought: If it’s (almost) possible with Rails, it should be even more possible with a truly modular framework, such as Hanami.

Despite not knowing a thing about WASM, I decided to give it a go. I had my first working version running in about half an hour.…

Evil Martians 

How to make an AI clone of your CEO for the world's biggest hackathon

Authors: Nina Torgunakova, Frontend Engineer, Ivan Eltsov, Frontend Engineer, and Travis Turner, Tech EditorTopics: Developer Products, Design, Case Study, AI, Design Engineering, AI Integration

Evil Martians and Bolt.new teamed up to build an AI clone of their CEO Eric Simons using Tavus to power real-time video calls for the world’s largest hackathon.

We’re increasingly seeing people connect with AI the same way they’d talk to a real person: face-to-face, voice-to-voice, with natural expressions and gestures. AI talks, listens, looks alive, helps users, and even inspires them. In this post, we’ll share how we helped our client Bolt.new ship an AI clone of its creator, Eric Simons, to the…

Judoscale Dev Blog 

Choosing the Best Python Web Framework

Stuck choosing between Django, Flask, and FastAPI? You’re in the right place. It’s no secret that Python has several great options for making web apps. Some folks have a framework they prefer over others, but you may be wondering how to choose between them!

In the next few minutes you’ll see how they compare in terms of performance, developer experience, and long-term scalability, so you can pick with confidence.

Start with the flowchart below for a quick answer, then read on for the deeper guide:

Which Python framework is for me? A flowchart

Performance and scalability

Your choice of Python web framework has performance implications for your app at scale. When comparing the common framework options for Python,…

Avo Blog 

Adding llms.txt to a Rails application

Let's learn how to add a llms.txt file to a Rails application to help large language models better process our content
justin․searls․co - Digest 

📍 Tabelogged: 無庵

I visited 無庵 on May 23, 2025. I gave it a 4.0 on Tabelog.

Hotwire Weekly 

Week 25 - Herb Language Server, VS Code Extension, and more!

Hotwire Weekly Logo

Welcome to Hotwire Weekly!

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


📚 Articles, Tutorials, and Videos

Introducing Herb Language Server and Visual Studio Code Extension - Marco Roth has launched the Herb Language Server and VS Code extension, powered by the Herb parser, providing real‑time diagnostics, error reporting, and structural awareness for HTML+ERB files directly inside your editor.

Dead Code: Herbicide - Marco Roth joins Jared Norman on the Dead Code podcast to talk in depth about Herb (see above), why existing tools fall short, and how Herb opens the door for better developer experience and future view-layer innovations.

Master Rails 8 Turbo +…

justin․searls․co - Digest 

📍 Tabelogged: めしのタネ

I visited めしのタネ on May 22, 2025. I gave it a 3.3 on Tabelog.

justin․searls․co - Digest 

📍 Tabelogged: うなぎや せきの

I visited うなぎや せきの on May 22, 2025. I gave it a 3.9 on Tabelog.

justin․searls․co - Digest 

📍 Tabelogged: 全国ご当地グルメコート 大宮横丁

I visited 全国ご当地グルメコート 大宮横丁 on May 22, 2025. I gave it a 3.0 on Tabelog.

justin․searls․co - Digest 

📍 Tabelogged: いづみや 本店

I visited いづみや 本店 on May 22, 2025. I gave it a 3.4 on Tabelog.

justin․searls․co - Digest 

📸 Home Sweet Home

What my Japanese friends imagined when I told them I was headed back to Florida

zverok's space 

Notes on code, text, and war. Week 2: If code is text, then what?

Last time, I’ve highlighted “treating code as text” idea as something that I want dedicate a few posts to. Let’s talk in generalities some more this time.

OK, if we look at code as a text, then what?

If this metaphor-based approach – bringing the mental model of one domain into another – is useful, it should have some consequences. What are we gaining by using the culture’s experience with natural language texts in software development?

For now, I want to briefly outline some consequences and then expand on them, hopefully, in future posts.

The code is frequently compared to a cultural artifact, and most of the time, as a juxtaposition. Sometimes, this juxtaposition seeks…

code.dblock.org | tech blog 

Using Claude-Swarm to Upgrade Ruby Projects

One of my colleagues wrote a pretty awesome tool called claude-swarm that orchestrates multiple Claude Code instances as a collaborative AI development team. At Shopify, we are attempting to use it to generate Ruby unit tests at some scale with an army of AI test agents (think a “Ruby Expert” paired with a “TDD Practitioner” and a “Code Review Nitpicker”). But for the purposes of this post, let’s just upgrade Ruby in a few projects.

First, ensure that you have a working version of command-line Claude code with a monthly subscription, since you will be having a lot of tokens for breakfast.

$ claude "Say hello."
╭───────────────────────────────────────────────────╮
│ ✻ Welcome to Claude…
justin․searls․co - Digest 

📄 The T-Shirts I Buy

I get asked from time to time about the t-shirts I wear every day, so I figured it might save time to document it here.

The correct answer to the question is, "whatever the cheapest blank tri-blend crew-neck is." The blend in question refers to a mix of fabrics: cotton, polyester, and rayon. The brand you buy doesn't really matter, since they're all going to be pretty much the same: cheap, lightweight, quick-drying, don't retain odors, and feel surprisingly good on the skin for the price. This type of shirt was popularized by the American Apparel Track Shirt, but that company went to shit at some point and I haven't bothered with any of its post-post-bankruptcy wares.

I maintain a roster of…

code.dblock.org | tech blog 

I Failed to Implement the Diameter of a Binary Tree in a Coding Interview

Six months ago I failed a basic coding interview at a FAANG. Yes, I was a Principal Engineer, and yes, I was paid absurd amounts of money, yet I couldn’t implement a diameter of a binary tree as a “warm up” exercise, 10 lines of code.

The interviewer was very nice about it, and was equally surprised. You see, I’ve been coding for 35 years, and I am not “rusty” at it, which is a typical excuse for senior ICs bombing LeetCode interviews. At that time I was writing code every day. I simply froze, and couldn’t do it. All I could think of was “why the hell am I here doing this to myself?”. I couldn’t turn my brain around, apologized, cut the interview short, and, while I did ace several coding…

justin․searls․co - Digest 

📍 Tabelogged: 熟成和牛ステーキグリルド エイジング・ビーフ 横浜店

I visited 熟成和牛ステーキグリルド エイジング・ビーフ 横浜店 on May 21, 2025. I gave it a 4.0 on Tabelog.