Rubyland

news, opinion, tutorials, about ruby, aggregated
Sources About
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…

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…

justin․searls․co - Digest 

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

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

justin․searls․co - Digest 

📍 Tabelogged: 伊太利亜のじぇらぁとや

I visited 伊太利亜のじぇらぁとや on May 21, 2025. I gave it a 3.1 on Tabelog.

justin․searls․co - Digest 

📍 Tabelogged: ラーメン 環2家 川崎店

I visited ラーメン 環2家 川崎店 on May 21, 2025. I gave it a 4.0 on Tabelog.

Fractaled Mind 

CSS-only Star Rating Component with Half Steps

After some experimentation, research, and AI being stupid, I finally have a simple, clean implementation of a star rating component that uses only radio inputs and labels and allows for half steps. 50 lines of beautiful CSS. Let’s break it down piece by piece.


Before I dove into the code, I did some research on how others had tackled this problem with pure CSS. I found two implementations that I liked. Both used simple radio inputs and labels, which is essential to the solution I want. But, both had some limitations that I didn’t like. One didn’t support half steps, while the other relied on the FontAwesome font. I want to use simple background image SVGs and radio inputs. So, after…

Hanami 

Field report from Riga and the Rooftop

It’s week 3 of our sponsorship drive! This week is a special one, because I’ve been out in the commuity, and I have a field report to share!

Tim on Rooftop Ruby

Earlier this month I had the pleasure of sitting down for a proper chat (not just a cameo) with my friends Collin and Joel on Rooftop Ruby. It was a wide-ranging affair, featuring not just the usual serving of English gastronomy, but also the hows and whys behind our sponsorship drive, and where we might take things in the future. It was a good one. Listen now!

Huge thanks to Collin and Joel for making this happen. I had very limited time to squeeze in this recording, and they were extremely…

Remote Ruby 

Unpacking Direct Routes and More

In this episode of Remote Ruby, Chris and Andrew discuss the recent Google Cloud Platform and Heroku outages, sharing personal experiences of system impacts and recovery strategies. The conversation shifts to technical insights, including a deep dive into Rails ‘direct’ routes and their routing helper capabilities. They also touch on the latest performance enhancements in Ruby 3.3, such as Embedded TypedData Objects and their impacts. Also, they explore parsing Ruby code with Prism and chat about  productivity hacks, upcoming RailsConf plans, parenting chaos, and dreams of launching their own MTV show. Hit the download button now! 

Links

justin․searls․co - Digest 

📸 Possy's been busy

Earlier this year, I announced I was working on a Rails app called POSSE Party which allows users to syndicate their website's content to a variety of social platforms simply by reading its RSS/Atom feed.

Well, as of today, POSSE Party officially posts to just about everything I could want it to. This week, I locked myself in a tiny Tokyo apartment and didn't let myself out until I'd finished building support for Instagram, Facebook Pages, LinkedIn, and YouTube. That brings the total number of platforms it supports up to 8. I've updated this site's POSSE Pulse accordingly.

I'm excited and relieved to have realized the vision of what I set out to build. I'll be discussing what's next……

André Arko 

a jj prompt for powerlevel10k

I’m in the process of switching from git to jj right now. That switch is another post of its own, which I am still working on, but in the meantime I wanted to write up the way that I’ve set up my shell prompt to include information about the current jj repo. If you’re not already familiar with jj, you might find the ways jj is different from git helpful background reading for the rest of this post.

I use the default macOS shell, zsh, and I don’t put much information into my prompt: basically just the current directory and the current git branch name, colored to show if I’m ahead or behind the remote. Using jj adds some interesting caveats to this kind of prompt, since jj branches aren’t…

justin․searls․co - Digest 

📍 Tabelogged: 魚屋あらまさ 川崎店

I visited 魚屋あらまさ 川崎店 on May 20, 2025. I gave it a 3.4 on Tabelog.

Fractaled Mind 

CSS-only Star Rating Component with Half Steps

After some experimentation, research, and AI being stupid, I finally have a simple, clean implementation of a star rating component that uses only radio inputs and labels and allows for half steps. 50 lines of beautiful CSS. Let’s break it down piece by piece.


Before I dove into the code, I did some research on how others had tackled this problem with pure CSS. I found two implementations that I liked. Both used simple radio inputs and labels, which is essential to the solution I want. But, both had some limitations that I didn’t like. One didn’t support half steps, while the other relied on the FontAwesome font. I want to use simple background image SVGs and radio inputs. So, after…

justin․searls․co - Digest 

📍 Tabelogged: 串かつ でんがな 川崎店

I visited 串かつ でんがな 川崎店 on May 20, 2025. I gave it a 3.3 on Tabelog.

André Arko 

Variable outputs from jj to a fixed length zsh array

While working on my shell prompt for jj, which will get a much longer post on its own shortly, I ran into a fascinating mismatch between different programs’ ideas of “empty”.

To set the context, I’m trying to print out the change ID and the commit ID, which have two parts each. The “prefix”, which is the shortest unambiguous value that will match, and the “rest”, which is the other letters needed to reach the minimum length. (In this case 4 characters).

jj log -T 'separate(" ",
  change_id.shortest(4).prefix(),
  change_id.shortest(4).rest(),
  commit_id.shortest(4).prefix(),
  commit_id.shortest(4).rest()
)'

In jj, the separate() function prints each argument, delimited by a string. So…

Awesome Ruby Newsletter 

💎 Issue 474 - Ruby on Rails Audit Complete

Ruby Weekly 

The latest Ruby version usage stats

#​755 — June 19, 2025

Read on the Web

Ruby Weekly

As part of Gift Egwuenu's latest RubyGems monthly update post, some Ruby version and gem download stats from RubyGems.org were shared. Some insights:

  • 📈 RubyGems.org served 4.06 billion gems in May 2025, versus 2.87 billion in the same month last year.
  • Ruby 3.2 is the most deployed version for now.
  • The latest Ruby branch – 3.4 – has reached almost 10%
  • About 33% of users are using versions that have reached End-of-Life (EOL).
  • All Ruby 3.x releases total about 85%, all Ruby 2.x releases about 14%, and, thankfully, only about 0.2% for Ruby 1.9 or earlier.

Tech…

Write Software, Well 

Working Effectively with AI as a Developer

Working Effectively with AI as a Developer

Over the past year, I’ve started heavily using AI tools like Cursor and ChatGPT in my everyday development workflow. They’re not a replacement for thinking, but I found them as excellent assistants for learning, debugging, refactoring, and accelerating implementation work.

In addition, I’ll soon start working with a company to train their developers on using AI tools in everyday development, as part of a Ruby on Rails training program. So I wanted to write down some common patterns I’ve observed in my own workflow, plus the patterns I’ve come across from other experienced developers and the ones I found online.

Btw, this is by no means an exhaustive list; if you know more patterns and best…

Rails Designer 

Auto-pause Video Player with Stimulus

Ever seen videos on popular (social media) platform sites being automatically paused when you scroll them out view (and resume again when in view)? I find this an elegant UX and recently was asked, via my Rails UI Consultancy work, to create such a feature as part of a larger learning platform.

It is fairly straight-forward with JavaScript’s Intersection Observer, but there are still some interesting techniques used.

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

As often when building something with Stimulus, let’s start with the HTML:

<video
  src="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4"
  controls
  preload="metadata"
  da…

Then create the Stimulus controller: bin/rail…

justin․searls․co - Digest 

📍 Tabelogged: うさぎや 川崎店

I visited うさぎや 川崎店 on May 19, 2025. I gave it a 3.5 on Tabelog.

justin․searls․co - Digest 

📍 Tabelogged: 洋食や 三代目 たいめいけん

I visited 洋食や 三代目 たいめいけん on May 19, 2025. I gave it a 3.3 on Tabelog.

Ruby Magic by AppSignal 

A Deep Dive into Solid Queue for Ruby on Rails

Our previous article in this series established that Solid Queue is an excellent choice if you need a system for processing background jobs. It minimizes external dependencies — no need for Redis! — by storing all jobs in your database. Despite that, it is incredibly performant.

But just being performant is not enough for a production-ready background job system. Rails developers have come to expect a lot over the years. We don't just want to enqueue jobs to run in the background. We want to schedule jobs, run them on a recurring schedule, and we might even want to limit how many jobs can run concurrently. We want more features!

Amazingly, Solid Queue provides all of those features out of…

justin․searls․co - Digest 

📸 28 Allergens Not Detected

Sure this ice cream killed me, but think of all the allergens it didn't have!

André Arko 

zsh cheat sheet

Today I was trying to figure out how to parse a string into an array in zsh, and eventually found the zsh cheat sheet. This should definitely be posted somewhere much easier to find, or maybe should just be the beginning of the zsh man page.

RubySec 

CVE-2025-28382 (openc3-cosmos-tool-iframe): OpenC3 COSMOS Vulnerable to Directory Traversal via openc3-api/tables endpoint

An issue in the openc3-api/tables endpoint of OpenC3 COSMOS 6.0.0 allows attackers to execute a directory traversal.
RubySec 

CVE-2025-28384 (openc3-cosmos-tool-iframe): OpenC3 COSMOS Vulnerable to Directory Traversal via /script-api/scripts/ endpoint

An issue in the /script-api/scripts/ endpoint of OpenC3 COSMOS 6.0.0 allows attackers to execute a directory traversal.
Evil Martians 

Weeks → days: a case for expert-led, AI-driven design engineering

Authors: Roman Shamin, Prev. Head of Design, and Travis Turner, Tech EditorTopics: Developer Products, Design, Case Study, AI, Design Engineering, AI Integration

While working on a project highlighting a decade of investments in AI products, I recorded how often I used LLMs. Once done, I reread my notes and was shocked—my tech knowledge, multiplied by AI, helped compress weeks of work into a few days.

I recently had the pleasure of working on an interactive chart that highlights a decade of investments in AI products. As I worked on the project, I kept jotting down how often I relied on LLMs throughout the process. When I finished and reread my notes, I was shocked—my technical knowledge,…

Write Software, Well 

How to Inspect the Sequence of Controller Callbacks in Rails

How to Inspect the Sequence of Controller Callbacks in Rails

While debugging a Rails app, sometimes it's useful to see the full list of callbacks that are set to run before, after, or around a controller action, in the exact sequence they will run. This is especially true in applications with a deep controller inheritance hierarchy or a heavy use of concerns with conditional callbacks.

Here's a small trick you can use to inspect the full list of callbacks for a controller. I just learned this today while trying to make sense of a confusing callback sequence in a fairly complex controller. As always, please let me know if there's a better or more idiomatic way to do this. 

First, add a new initializer with the following code under the initializers

#…
Island94.org 

The difference between Rails Plugins, Extensions, Gems, Railties, and Engines

There’s overlapping terminology that describes the act of packaging up some new behavior for Rails. I think of two gems I maintain that are of vastly different scales

  • activerecord-has_some_of_many which adds two new tiny association methods to Active Record models in 150 lines of code.
  • GoodJob, which is an entire Active Job backend with a mountable Web Dashboard and database models and custom job extensions in 10k lines of code.

I was pondering the different terminology because I recently saw both ends of the spectrum discussed in the community:

  • A developer on Reddit announced a tiny new gem and a commenter wrote well actually, in your Readme you called…
Weelkly Article – Ruby Stack News 

📘 Designing RESTful APIs with Ruby on Rails: Conventions and Practical Implementation

June 17, 2025 In modern software engineering, APIs (Application Programming Interfaces) serve as essential components for scalable, modular applications. A well-structured API facilitates communication between systems, enhances developer experience, and supports long-term maintainability. This article explores widely accepted API conventions and illustrates how to implement them in Ruby on Rails, with a particular focus on … Continue reading 📘 Designing RESTful APIs with Ruby on Rails: Conventions and Practical Implementation