Rubyland

news, opinion, tutorials, about ruby, aggregated
Sources About
Ruby on Rails 

Capturing error reports in tests and more

Hi, Wojtek here. Let’s explore last 2 week’s changes in the Rails codebase.

Add capture_error_reports
Captures all reported errors from within the block that match the given error class.

reports = capture_error_reports(IOError) do
  Rails.error.report(IOError.new("What a Terrible Failure"))
  Rails.error.report(StandardError.new)
end
assert_equal 1, reports.size
assert_equal "What a Terrible Failure", reports.first.error.message

Don’t always escape JSON when rendering from controller
The JSON renderer doesn’t escape HTML entities or Unicode line separators anymore. Since the renderer is used to return a JSON document as application/json, it’s typically not necessary to escape those…

You can use the escape: true

Giant Robots Smashing Into Other Giant Robots 

Ruby on Rails agency in London

Everyone’s talking about AI replacing developers these days… but where can you find a good old Ruby on Rails agency in London with Ruby on Rails developers in flesh and bones* these days?

(*) plant-based version also available in selected locations, like the UK, for instance.

Do you need top-notch developers who have extensive experience with code, architecture, design, UI/UX, SRE, applications scalability, major versions upgrades, draining rivers of tech debt, as well as forward-minded individuals, savvy with AI applications and what current and future technologies will bring us?

I hear you, you still need human-centred solutions for your coding problems, AI or not.

Well, look no…

Awesome Ruby Newsletter 

💎 Issue 462 - The future of AI is Ruby on Rails

Ruby Weekly 

How good different LLMs are at writing Ruby code

#​744 — March 27, 2025

Read on the Web

Ruby Weekly

Fast MCP: A Ruby Implementation of the Model Context Protocol — MCP (Model Context Protocol) servers enable certain LLM-based agents (such as Claude, Claude Code, and Cursor) to perform actions/call tools outside of their usual restricted environment. This library lets you build tools in Ruby which such agents can then reach out to and use.

Yorick Jacquin

💡 Interest in MCPs is taking off rapidly, with a Rails-focused MCP implementation also available. OpenAI is also beginning to show an interest in working with MCP, so it's becoming a bit of a standard now.

Ruby Central 

Ruby Central's OSS Changelog: March 2025

Ruby Central's OSS Changelog: March 2025

Hello! Welcome to the March newsletter—now known as Ruby Central’s OSS Changelog.

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.

Letter From Our Open Source Director

RubyGems has grown significantly in recent years, with a greater focus on stability and security to ensure you have the tools you need to build with confidence.

As we continue to mature, we’re putting stronger foundations in place to support that growth over the long term. This includes creating clear…

Ruby – AWS Developer Tools Blog 

AWS SDK for Ruby: Deprecating Ruby 2.5 & 2.6 Runtime Supports and Future Compatibility

Effective June 2, 2025, AWS SDK for Ruby Version 3 will no longer support following end-of-life (EOL) Ruby runtime versions:

To ensure your applications and services remain secure, we strongly encourage you to upgrade to Ruby 2.7 or later.

Moving forward, AWS SDK for Ruby will proactively drop Ruby runtime versions 3 years after they have reached end-of-life. This approach ensures we provide up-to-date and secure libraries. Our deprecation strategy will follow from the official Ruby maintenance timeline, promoting a predictable and transparent support cycle for the SDK. It also lets us stay aligned with the AWS…

Rails Designer 

Touch Events (swipe) using Stimulus

The time you build and design web-apps for the desktop, without touch events, has been long gone. Users expect features to work on their touch devices (phones, tablets) just as well.

In this article I want to explore two features where touch events can be used:

  • (image) carousels;
  • tinder-like, left- and right card swipes.

Something like this:

(don’t hate for disliking the first cat!)

Because there is a lot of overlap with these two features I am also going to explore inheritance, meaning one Stimulus controller inherits functionality from another class (just like Ruby’s UsersController < ApplicationController).

As most of the time with such features, let’s start with the HTML…

justin․searls․co - Digest 

📄 Programming is about mental stack management

The performance of large language models is, in part, constrained by the maximum size "context window" they support. In the early days, if you had a long-running chat with ChatGPT, you'd eventually exceed its context window and it would "forget" details from earlier in the conversation. Additionally, the quality of an LLM's responses will decrease if you fill that context window with anything but the most relevant information. If you've ever had to repeat or rephrase yourself in a series of replies to clarify what you want from ChatGPT, it will eventually be so anchored by the irrelevant girth of the preceding conversation that its "cognitive ability" will fall off a cliff and you'll never…

Island94.org 

Recently, March 26, 2025

  • I am on a new work adventure. I gave my notice at GitHub and will be doing this full-time starting in April. The new job should be a nice combination of a cozy “this again” and some thrilling new.
  • I finished reading Careless People; recommend as a good sequence of business trainwrecks that will leave you wondering if this one is penultimate trainwreck (spoiler: it’s not). Now I’m reading Wicked; I didn’t really like the beginning but it’s gotten more interesting.
  • I finished Severance. Hopefully without spoilers, the consistent plot driver seems to be “Mark (yes) sucks”. So now just White Lotus and with palate cleansers of Say Yes to the Dress.
  • I have been…
Schneems - Programming Practices, Performance, and Pedantry 

A Daft proc-macro trick: How to Emit Partial-Code + Errors

A recent Oxide and Friends podcast episode, “A crate is born,” detailed the creation of a proc macro for deriving “diffable” data structures with a trick I want to tell you about. To help rust-analyzer as much as possible, @rain explained that the macro should always emit as much valid source code as possible, even when an error is emitted. They didn’t go into detail, so I looked into the internals that made this code + error emitting behavior possible and wanted to share.

Podcast link: A Crate is Born

This post covers:

  • Why does macro output matter to rust-analyzer ?
  • What mechanics are used to emit code + errors?
  • When does this macro emit code + errors versus when does it just…
Ruby Central 

Introducing New Policies to Support the Growth of RubyGems

Introducing New Policies to Support the Growth of RubyGems

RubyGems has grown significantly in recent years, with a greater focus on stability and security to ensure you have the tools you need to build with confidence.

As we continue to mature, we’re putting stronger foundations in place to support that growth over the long term. This includes creating clear standards and processes for how RubyGems.org is managed.

Within my first two months in this role overseeing RubyGems, we received a takedown request for a gem that potentially violated a trademark. As we looked into it, we realized we didn’t have a formal policy to guide our response. The team had a general sense of how such cases were handled in the past, but nothing was documented. That…

Evil Martians 

Hey developer tool teams, don’t copy these copywriting clichés!

Authors: Olga Rusakova, Head of Communications, and Travis Turner, Tech EditorTopics: Developer Products, Developer Marketing, Developer Community

Avoid common dev tool copywriting problems. Learn to spot errors, improve clarity, market better, and come up with messages that stick.

Ever been on the hunt for a tech solution, then turn to Google, Reddit, or your socials and punch in something like: “Where can I find an unprecedented, blazing-fast, innovative ecosystem with faster deployment for trailblazers?” No way! Yet, a lot of developer tool copy is riddled with phrases like this. In this post, we invite you to learn from our experience and avoid copy that is too market-y, vague, or poorly…

Radan Skorić's website 

Rails 8 Assets: Combining importmaps

This post is part of a mini series on Rails 8 asset pipeline. For the full picture, start with breakdown of how propshaft and importmap-rails work together and Propshaft deep dive. Recap of importmap-rails gem The import statement in JavaScript modules allows you to import functionality from other module files. However, this typically requires providing URLs to the other JavaScript module sou...
All about coding 

Example of value objects using Ruby's Data class

Last week, I wrote an article about how to create value objects in Ruby - the idiomatic way. This week, I will share some real examples of using the data object to show some real examples.

Remove boilerplate constructor code

If you are defining classes and expose the initializer parameters as getters and you plan to make them immutable, then I think you just found the most common case for using the Data class:

Instead of this:

class Link  attr_reader :url, :source  def initialize(url:, source:)    @url = url    @source = source  endend

I write this:

class Link < Data.define(:url, :source)end

You can of course also write the simple form, but I do recommend the the previous way with inheritance…

Ruby News 

Ruby 3.1.7 Released

Ruby 3.1.7 has been released. This release includes CVE-2025-27219, CVE-2025-27220 and CVE-2025-27221 fixes and update bundled REXML and RSS gems.

Please see the GitHub releases for further details.

This version is a final release of Ruby 3.1 series. We will not provide any further updates including security fixes for Ruby 3.1 series.

We recommend you to upgrade to Ruby 3.3 or 3.4 series.

Download

Ruby News 

Ruby 3.2.8 Released

Ruby 3.2.8 has been released. This release includes CVE-2025-27219, CVE-2025-27220 and CVE-2025-27221 fixes.

Please see the GitHub releases for further details.

This version is a last version of normal maintenance for Ruby 3.2 series. We will fix only security issues for Ruby 3.2 series until end of March 2026.

Please consider upgrading to Ruby 3.3 or 3.4 series.

Download

Weelkly Article – Ruby Stack News 

Creating Reusable code in Rails: Plugins, Metaprogramming, and Best Practices

March 25, 2025 Rails developers often face the challenge of writing clean, reusable, and maintainable code. Achieving this requires leveraging plugins, metaprogramming, and Ruby’s dynamic nature. In this article, we’ll explore practical ways to implement these techniques, ensuring your Rails code is DRY (Don’t Repeat Yourself) and efficient. 💡 Looking to improve your application's code … Continue reading Creating Reusable code in Rails: Plugins, Metaprogramming, and Best Practices

Tejas' Blog 

Using PostgreSQL database constraints

Effective use of database constraints can ensure data integrity.

Mintbit 

Hiding Unfinished Features in Rails

When working on a new feature that’s not quite ready for production, it’s helpful to hide it without introducing a bunch of complexity or new dependencies.

Here’s a tiny helper we’ve been using that lets us keep in-progress UI elements visible in development, but safely hidden in production:

1
2
3
4
5
6
7
8
# app/helpers/application_helper.rb
module ApplicationHelper
  def under_construction
    if Rails.env.development?
      yield
    end
  end
end

That’s it.

Now in your views, you can wrap anything that’s still baking:

1
2
3
4
5
<% under_construction do %>
  <div class="dev-banner">
    🚧 This feature is under construction
  </div>
<% end %>

In development, the block gets…

justin․searls․co - Digest 

📄 Announcing Merge Commits, my all-new podcast (sort of)

Okay, so hear me out. Last year, I started my first podcast: Breaking Change. It's a solo project that runs biweekly-ish with each episode running 2–3 hours. It's a low-stakes discussion meant to be digested in chunks—while you're in transit, doing chores, walking the dog, or trying to fall asleep. It covers the full gamut of my life and interests—from getting mad at technology in my personal life, to getting mad at technology in my work, to getting mad at technology during leisure activities. In its first 15 months, I've recorded 33 episodes and I'm approaching an impressive-sounding 100 hours of monologue content.

Today, I launched a more traditional, multi-human interview podcast… and dr…

Giant Robots Smashing Into Other Giant Robots 

Using the Presenter Pattern in Ruby on Rails

The presenter pattern is a handy design approach that sits between your views and models, helping you keep your code organized by handling view-specific logic in a clean and maintainable way. In a Rails app, it’s a great way to keep your views and controllers slim since the presenter takes care of preparing the data your views need. Sounds interesting, right? Let’s dive in!

What is the presenter pattern

The presenter pattern, sometimes called the “ViewModel” pattern, is essentially an intermediary between the model and the view. While the model handles core business logic and data, the presenter’s job is to prepare the model’s data specifically for display.

Setting Up a…

Gusto Engineering - Medium 

Our Super Power is Our Community and Our Standards

Securing Ruby’s Competitive Edge as LLM Code Gets Useful

Coding standards and code quality have always been a cornerstone of software engineering culture that supports efficiency, outcomes, and team happiness. As LLM generating tools like Cursor finally get useful, these tools become even more important. We discuss how Ruby shops and Rubocop have an edge, as human readability has been a community goal for 25 years, giving Ruby some of the highest quality training data and the most human-centered tools to work with.

Audience

This blog post is primarily aimed at software engineers and engineering leaders interested in embracing AI, celebrating code quality, and thinking about the long term…

Short Ruby Newsletter 

Short Ruby Newsletter - edition 128

The one where TruffleRuby 24.2 is released, JRuby 10 is getting close, a Rails MCP server is introduced, and where Stan Lo shows a Ruby MCP server powered by Ruby LSP
justin․searls․co - Digest 

🔗 Real Agency and MyTerms

Doc Searls (no relation) writes over at searls.com (which is why this site's domain is searls.co) about how the concept of human agency is being lost in the "agentic" hype:

My concern with both agentic and agentic AI is that concentrating development on AI agents (and digital “twins”) alone may neglect, override, or obstruct the agency of human beings, rather than extending or enlarging it. (For more on this, read Agentic AI Is the Next Big Thing but I’m Not Sure It’s What, by Adam Davidson in How to Geek. Also check out my Personal AI series, which addresses this issue most directly in Personal vs. Personal AI.)

Particularly interesting is that he's doing something about it, by chairing a…

Tosbourn – Belfast based Ruby developers 

Belfast Rails Supper Club

I was recently invited to join some other senior Ruby folk for a dinner in Belfast.

I love Ruby, and I love dinners, win-win!

The Belfast Rails Super club was organised by Jade White, she has put on several over the last while.

I haven’t attended networking events in years, in fact I haven’t been to a conference or meet up in a very long time. Interestingly, some of the folk I spoke to at the Supper Club were in the same boat. So, why did we go?

I can only speak for myself, but there were a few reasons;

  • it is invite only, and it is nice to be invited to things, I’m unsure if it was my LinkedIn profile or our web presence, but good to get found
  • I knew the numbers would be limited,…
Saeloun Blog 

Rails 8 Removes Channels From Default App Structure.

ActionCable integrates websockets with our app which allows two-way communication between the server and client without the need for continuous page refreshes, making real-time updates possible.

Channels are similar to controllers in that we define methods for broadcasting or streaming data to connected clients.

Before

By default, Rails would create a channels folder in the app/ directory to store these channel definitions, allowing developers to easily set up real-time features.

# Before Rails 8 when we generate rails new app

# Rails app folder structure
/app
  /assets
  /channels
  /controllers
  /helpers
  /javascript
  /jobs
  /mailers
  /models
  /views

After

Rails 8 now remove…

Saeloun Blog 

React 19 Ref Updates - Prop Support & Cleanup Function!

React 19 makes ref easier – just pass it!

React 19 brings many exciting updates, and one of the simplest yet powerful change is how ref works. We no longer need forwardRef when passing ref to built-in elements like inputs. Cool, right?

This small update makes working with ref much simpler, especially in forms where smooth user interactions matter.

The problem with forwardRef

Before React 19, if a parent component wanted to interact with a child component using a ref, we had to wrap the child in forwardRef. Annoying, right? It made the code harder to read and maintain, especially in large projects.

Thankfully, React 19 makes ref handling much easier. Let’s check out why ref became…

Notes to self 

Running JavaScript after a Turbo Stream renders

Turbo comes with turbo:before-stream-render but unfortunately doesn’t ship with the equivalent turbo:after-stream-render. Here’s how to run JavaScript after the stream renders.

Why we need this

If you are building your application with Hotwire, your Turbo streams will likely add, remove, and replace some HTML nodes. This mostly works except when you want to add HTML that comes with some JavaScript. Like a file picker, Trix editor, and the like.

Turbo itself won’t do anything about this. It’s a rather simple tool with simple purpose. JavaScript initialization should come with the HTML Turbo is about to add. Hotwire solves this with Stimulus.

The Hotwire way

The Hotwire answer to the…

Giant Robots Smashing Into Other Giant Robots 

content_for -- What is it good_for?

Sometimes, you need to include HTML but you can’t figure out where to do it, especially if you’re trying to push something up the view hierarchy.

The answer to your challenge is often #content_for.

Content what?

As described in the Rails guides:

The content_for method allows you to insert content into a named yield block in your layout.

How does it work?

Step 1: A view has a #content_for line or block. This is the “input”.

<!-- app/views/posts/index.html.erb -->

<% content_for :title, "All the Posts" %>

<% content_for :something do %>
  <script>function hello() {}</script>
  <style>h1 {color: blue;}</style>
  I will appear in the :something block!
<% end %>

Step 2: The…

Hotwire Weekly 

Week 12 - AnyCable 1.6 is here, Turbo declarative presence tracking, and more!

Hotwire Weekly Logo

Welcome to Hotwire Weekly!

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


📚 Articles, Tutorials, and Videos

AnyCable v1.6 with presence tracking support - Vladimir Dementyev released AnyCable v1.6.0 which adds presence tracking, token-based WebSocket authentication, and improved handling of slow clients via configurable message buffering.

Simple Declarative Presence for Hotwire apps with AnyCable - Following up, Vladimir Dementyev and Irina Nazarova posted an article about the new declarative presence tracking feature in AnyCable 1.6. It utilizes a <turbo-cable-presence-source> element to manage the presence of a user on a page or resource.

Translations in Stimulus…

RichStone Input Output 

DNS brain teaser for your engineering brain

DNS brain teaser for your engineering brain

I just spent a few weeks wrestling with a domain issue that could have been solved in a couple of hours max (not a literal few weeks, but half an hour here and an hour there over a few weeks). Let me walk you through what happened and the technical details I learned along the way about DNS and domains.

For context, I was trying to connect a subdomain of my primary domain (richstone.io) to my ClickFunnels account. I already have this blog here that you can navigate to with richstone.io and I wanted devs.richstone.io to point to ClickFunnels, which I currently basically use like TypeForm and sometimes like a Stripe Checkout.

The setup required verifying certain TXT records, and this is where…

justin․searls․co - Digest 

🎙️ Merge Commits podcast - Changelog: My Siri Theory

Direct link to podcast audio file

Had a blast, as usual, joining my Changelog friends for a vigorous discussion of Apple's Intelligence struggles and the tumultuous state of the software industry.

It's also on YouTube:

Appearing on: The Changelog
Recorded on: 2025-03-18
Original URL: https://changelog.com/friends/85

Comments? Questions? Suggestion of a podcast I should guest on? podcast@searls.co

Tim Riley 

Goodbye Pinboard, hello Linkding! (And the magic of getting here)

Let me tell you about one of the best software experiences I’ve had in recent times.

But first, some background. I’ve always been a bookmark collector. There are so many cool or informative things on the web, and I want to be able to find my way back to them. Since 2007 (18 years!), I’ve collected over 4,500 bookmarks.

I first captured these bookmarks on del.icio.us (RIP), then later on Pinboard. Both were good tools: fast, low fuss, and oriented around tags, for easy organisation and retrieval of links.

Then Pinboard guy turned out to be a transphobe, so I knew I had to switch.

The time finally came last week, when I had a spare hour at the computer one evening. The obvious commercial…

justin․searls․co - Digest 

🎙️ Merge Commits podcast v - Changelog: My Siri Theory

Direct link to podcast audio file

Had a blast, as usual, joining my Changelog friends for a vigorous discussion of Apple's Intelligence struggles and the tumultuous state of the software industry.

Appearing on: The Changelog
Recorded on: 2025-03-18
Original URL: https://changelog.com/friends/85

Comments? Questions? Suggestion of a podcast I should guest on? podcast@searls.co

byroot’s blog 

Database Protocols Are Underwhelming

If you’ve been in this trade for a while, you have probably seen dozens of debates on the merits and problems of SQL as a relational database query language. As an ORM maintainer, I have a few gripes with SQL, but overall it is workable, and anyway, it has so much inertia that there’s no point fantasizing about a replacement.

However one database-adjacent topic I don’t think I’ve ever seen any discussions about, and that I think could be improved, is the protocols exposed by these databases to execute queries. Relational databases are very impressive pieces of technology, but their client protocol makes me wonder if they ever considered being used by anything other than a human typing…

naildrivin5.com - David Bryant Copeland's Website 

One Week With Desktop Linux After a 20 Year Absence

I bought a Framework laptop a couple weeks ago, set it up with stock Ubuntu, and used it for my primary computer for a week. It’s the first time I’ve used Linux in earnest in 20 years. It’s amazing how much has changed and how much hasn’t.

The tl;dr for this post is that I don’t know if I could use Linux as my desktop full time for web development. While there are many papercuts, the three main issues I can’t see a way around are: lack of integrated API documentation lookup (e.g. Dash.app), inability to customize keyboard shortcuts consistently across all apps, and the absolute tire-fire of copy and paste.

Why Even Do This?

I actually grew up on UNIX and then Linux. All through…

Remote Ruby 

Mac Upgrades to Debugging Dilemmas

In this episode, Andrew and Chris discuss Chris's new hardware upgrade to a Mac Studio, diving into its benefits for video processing and development work. They share stories about troubleshooting a perplexing bug related to WebSockets and Cable Ready, and discuss the conference proposal process, offering insights into writing effective CFPs based on their experiences with RailsConf and Rails World. Additionally, Andrew shares a game update about Cyberpunk and Chris shares the inspiring success story of the game ‘Balatro,’ highlighting the developer’s journey from side project to commercial triumph. Hit the download button now!

Honeybadger
Honeybadger is an application health monitoring tool…
Notes to self 

Running interactive sessions with Kamal

How to connect to a container on a server managed by Kamal and run an interactive session?

Interactive server actions

Kamal comes with a kamal server exec to execute a single command on the server. If we pass the -i option, we’ll start the interactive session that doesn’t cancel the connection immediatelly.

Similarly, Docker comes with docker exec command with the -it options to run a container process interactively.

If we combine both of these we’ll get what we need. A single command to run something interactively out of a single container:

$ kamal server exec -i "docker exec -it [CONTAINER] [COMMAND]"

Example

Here’s an example with kamal-proxy:

$ kamal server exec -i "docker exec…
Awesome Ruby Newsletter 

💎 Issue 461 - The Ultimate Guide to Scaling Sidekiq

avdi.codes 

How did you know to do that?

I wrote the following in a SIGAVDI newsletter many years ago:


The other day I wrote some Ruby code to emulate the UNIX which command. Afterward, I started composing a RubyTapas episode explaining the implantation.

There were some points worth noting in the code, and I think it’ll make a solid episode. But as I was writing it, I realized that I was leaving out the parts that a lot of my viewers would probably most like to see.

Sometimes I watch videos of masters on tasks I have no skill at, like electronic music composition, or graphic design. The questions that are most often in my mind are not “how did you do that?”, but: “how did you know to do that?”

I can see (or hear)…

RubyGems Blog 

Introducing New Policies for RubyGems.org

We’re pleased to introduce several key policies for RubyGems.org for community review. These include a Terms of Service, Privacy Notice, Acceptable Use Policy, and Copyright Policy. While these policies align with how RubyGems has always operated, the absence of formal documentation created ambiguity around acceptable use. These new policies provide clarity and transparency regarding our operations, how we protect user data, and our commitment to maintaining a safe and respectful environment for all RubyGems users.

Terms of Service

The Terms of Service define the rules and guidelines for using RubyGems.org. They cover everything from account responsibilities to intellectual property…

The Rails Tech Debt Blog 

Heroku & Ruby Compatibility Table

In this article we will present compatibility between Ruby and Heroku across different versions. In the process of upgrading really old applications to more modern versions of Ruby we have run into a lot of these combinations.

To find more information about Heroku Ruby support check out the Heroku Ruby Support Reference page. In general, however, we suggest you to follow the Ruby Core support policy.

Heroku Stacks and Ruby Versions

Heroku stacks are the underlying operating system (OS) environments that power your applications, built on Ubuntu LTS (Long-Term Support) versions. Each stack supports specific Ruby versions, and aligning your application with the correct stack and Ruby…

Ruby Weekly 

Ruby debugging tips for 2025

#​743 — March 20, 2025

Read on the Web

Ruby Weekly

Ruby Debugging Tips and Recommendations in 2025 — A brief piece but packed with advice from Stan (who knows a thing or two from all his work on debug.rb and modernizing IRB). Did you know you can use the Ruby LSP extension with debug.rb?

Stan Lo

Ruby, Ractors, and Lock-Free Data Structures — An extensive, multi-chapter article that goes into serious depth about Ractors, lock-free data structures and shared mutable global state in multi-threaded Ruby apps. There’s also code if you want to play along or experiment.

Ilya Bylich

Seamless Rails…

Weelkly Article – Ruby Stack News 

Handling File Transfers in a Heroku Environment with Net::SFTP

March 20, 2025 Daily readers, today’s article is a bit different. Usually, I dive into a specific Ruby or Ruby on Rails topic, but today, time is short, and I need to handle different tasks. So, I’ll share a quick but useful real-world problem I encountered. Need Help with a Heroku Project? Do you need … Continue reading Handling File Transfers in a Heroku Environment with Net::SFTP

justin․searls․co - Digest 

🔗 Very-nearly-free HTTPS redirects for Heroku and DNSimple

Tuesday, while recording an episode of The Changelog, Adam reminded me that my redirects from possyparty.com to posseparty.com didn't support HTTPS. Naturally, because this was caught live and on air and was my own damn fault, I immediately rushed to cover for the shame I felt by squirreling away and writing custom software. As we do.

See, if you're a cheapskate like me, you might have noticed that forwarding requests from one domain or subdomain to another while supporting HTTPS isn't particularly cheap with many DNS hosts. But the thing is, I am particularly cheap. So I built a cheap solution. It's called redirect-dingus:

What is it? It's a tiny Heroku nginx app that simply reads a…

Rails Designer 

Translations in Stimulus Controllers

This is a sneak peek from the upcoming book, JavaScript for Rails Developers. For this blog post, I’ve simplified some of the more detailed sections to better fit the blog.


Translations, or more broadly Internationalization (i18n; because there are 18 letters between “i” and “n”), is the process of preparing apps to support multiple languages and regional settings (i.e. “locale”) to accommodate a global user base. So it’s not just about translating words, but also about the formatting of dates, numbers and phone numbers.

It is one of those features product managers move back it to the backlog, because they know adding support for it is fairly easy (especially with Rails), but…

All about coding 

How to create value objects in Ruby - the idiomatic way

When writing Ruby OOP, a typical pattern might be to create an object to group multiple values together meaningfully and sometimes also add some extra methods (computed properties, predicates, representations, ) to allow the object to respond to various situations.

Here is an exploration of how to create value-alike objects in Ruby and what I think is the modern idiomatic way.

What is a value-alike object?

If you want to read an article about this concept, I recommend Value Object by Martin Fowler. He explains this concept very well with examples and references. I invite you to read that article. It is not that long.

They are simple objects that have the following properties:

  • Comparable by type…

Ryan Bigg Blog 

Note taking

There was a question on the Ruby Oceania Slack recently:

What tools/apps are folks using in 2025 to manage their own tasks/life?

I gave an answer, which I’ve modified slightly for blogability, and kept focussed to just note taking:

Physical A5 note book with 0.8mm Uni-Ball Fineliner in either blue or black depending on the mood. Coincidentally, Sam Altmann has similar tastes.

Each page is a day. Write down intentions at start of day and then add to list as day continues. Review calendar, note down meetings and their times. Finish day by reviewing the list from the day and figuring out what to do next, then writing notes into next day’s page if necessary. Good for brain dumping end…

SINAPTIA 

Ruby Argentina March meetup

On March 12th, another Ruby Argentina meetup occurred at Roxom’s office in Buenos Aires.

It started with Jaime’s talk “Implementing 11 APIs in Rails without going crazy”. Jaime demonstrated his approach in building 11 API clients for his startup, MoonyApp.

Jaime's talk

Then came Patricio’s talk “The path to instrumentation”. In his talk, he shared his experience with 2 apps we’re maintaining at SINAPTIA. They had significant performance issues that led him to try and observe how they behaved upon certain events. After working with Rails instrumentation and error reporting, he stumbled upon OpenTelemetry. OpenTelemetry is an observability framework designed to collect, process, and export…

danielabaron.me RSS Feed 

Cover Letter Writing for Nerds

Learn how to write effective, customized cover letters for tech job applications using markdown and a markdown to PDF converter for VSCode.
Radan Skorić's website 

Rails 8 Assets: Deep dive into Propshaft

Read the previous article to learn how Propshaft and importmap-rails work together to form the Rails 8 Asset pipeline. That article focuses on the interplay between the two and explains more of the importmap-rails side. Now, let’s dive into how Propshaft actually processes the assets. TL:DR; Here’s the gold fish attention span version, minus some details: Propshaft processes every file in ...
RubyGems Blog 

February 2025 RubyGems Updates

Welcome to the RubyGems monthly update! As part of our efforts at Ruby Central, we publish a recap of the work that we’ve done the previous month. Read on to find out what updates were made to RubyGems and RubyGems.org in February.

RubyGems News

In February, we released RubyGems 3.6.4, 3.6.5 and Bundler 2.6.4, 2.6.5. These releases bring a series of enhancements and bug fixes designed to improve the overall developer experience with RubyGems. Notable improvements include removing gem server from gem help to streamline command output, raising a clearer error message when RubyGems fails to activate a dependency, ensuring Bundler correctly considers gems under platform: :windows in the…

Some other important accomplishments from the team…

justin․searls․co - Digest 

🔗 Saturday Night Live's Cue Cards

This 6-minute video of Wally explaining how he manages cue cards for SNL was the most stressful day of work I've had in years.

🔗 youtube.com

🧂 justin.searls.co

justin․searls․co - Digest 

🔗 Only 20% of mobile apps crack $12k in ARR

RevenueCat seems like a savvy, well-run business for mobile app developers trying to subscription payments in the land of native in-app purchase APIs. Every year they take the data on their platform and publish a survey of the results. Granted, there's definitely a selection bias at play—certain kinds of developers are surely more inclined to run their payments through a third-party as opposed to Apple's own APIs.

That said, it's a large enough sample size that the headline results are, as Scharon Harding at Ars Technica put it, "sobering". From the report itself:

Across all categories, nearly 20 percent reach $1,000 in revenue, while 5 percent reach the $10,000 mark. Revenue drop-off is…

Josh Software 

Implementing Native Modules & Native Components in React Native

React Native allows developers to write cross-platform mobile applications using JavaScript and React. However, sometimes you need to interact with native functionality that isn’t available in React Native’s built-in APIs. This is where Native Modules and Native Components come into play. In this blog, we’ll explore: What are Native Modules and Native Components? Native Modules Native Modules allow you … Continue reading Implementing Native Modules & Native Components in React Native
justin․searls․co - Digest 

📺 Shogun's glaring translation problem

I realize I'm a year late to dishing takes on Shogun, but since people keep recommending it, I thought I'd offer my 2¢ on a real problem I have with how it deals with spoken languages (and something I haven't heard anyone talk about anywhere else)

Watch on YouTube

Graceful.Dev 

Site News #24: New Videos, Better Videos

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

Content Updates

It’s been a couple months since the last newsletter, so we’ve got a few new episodes to list! In case you missed them:

  • Safe Navigation Redux: A deep dive into the dos and don’ts of Ruby’s “safe navigation” operator.
  • Dependency Injection Isn’t Scary: A lot of digital ink has been spilled about dependency injection over the years, but in the final analysis it’s a big word for quick, small, and very useful tweak to your objects.
  • Filter Map in Ruby: A quickie video about not doing a job in two steps when you can do it in one!

Site Improvements

Efforts to give Graceful.Dev a modern, unique, and…

Evil Martians 

Simple Declarative Presence for Hotwire apps with AnyCable

Authors: Irina Nazarova, CEO, Vladimir Dementyev, Principal Backend Engineer, and Travis Turner, Tech EditorTopics: Backend, Real-time, Rails, Full Cycle Software Development, WebSocket, Hotwire

Learn how to seamlessly integrate online presence tracking into a Rails application powered by Hotwire and AnyCable.

If Margaret had a more transparent line of communication, "Are you there?" would have been an unnecessary question, and we'd never have gotten a classic book. Likewise, for application users, looking at the online status indicator should be enough. Now think about your own users: could they be having a similar sense of disconnect? If "yes" is a possible answer here, continue reading to…

RubySec 

CVE-2025-2304 (camaleon_cms): Camaleon CMS Vulnerable to Privilege Escalation through a Mass Assignment

A Privilege Escalation through a Mass Assignment exists in Camaleon CMS When a user wishes to change his password, the 'updated_ajax' method of the UsersController is called. The vulnerability stems from the use of the dangerous permit! method, which allows all parameters to pass through without any filtering.
Avo Blog 

Adding confetti to an app with stimulus-confetti

Let's celebrate with confetti by adding it to your application using the stimulus-confetti library.
Planet Argon Blog 

Deploying a Ruby on Rails app to DigitalOcean Using Kamal

Deploying a Ruby on Rails app to DigitalOcean Using Kamal

Curious about simplifying Ruby on Rails deployments? Here, we'll walk through deploying a Rails app to DigitalOcean and share insights to help you determine if Kamal is right for your projects.

Continue Reading

Rails Designer 

JavaScript for Rails Developers is Coming Soon

Late last year I sat down and looked at some of this site’s stats. I had loads of articles written that are read by people in the 5-digits every month. Next to that I have a sizeable following on dev.to (+30k) and a solid amount of email subscribers. From all the articles I write, the ones on JavaScript elicit the most questions: “what if I want to do this?”, “how would you fix that?” and so on.

So, after talking about it with a few developer-friends, I pre-announced a book: “JavaScript for Rails Developers”. It was not a completely new idea, I had it jotted down in my ideas-list for a few years already, but now I had a theme of sorts as well: to make JavaScript your second-favorite…

The Bike Shed 

457: Time Zones with Sally Hall

Joël enlists the help of thoughtbot colleague Sally Hall as they dive into the complex world of time zones, daylight savings, measurements and coding.

Together they discuss their struggles with daylight savings throwing off their recent project reporting, the constant struggles of writing for different time zones and why writing your own code is never worth the hassle, and the similar battle of writing for different units of measurement.

Check out the idea behind "If Hemingway Wrote Javascript" and how it could help you with your coding.

Watch Tom Scott’s own slow decent into madness over timezones and coding.

Your guest this week has been Sally Hall, and your host for this…

Short Ruby Newsletter 

Short Ruby Newsletter - edition 127

The one where Sidekiq 8 is launched, where Kasper Timm Hansen is announcing a new workshop about Action View and where Adam McCrea launches PaaS Pricing Calculator
Schneems - Programming Practices, Performance, and Pedantry 

Installing the sassc Ruby gem on a Mac. A debugging story

I’m not exactly sure about the timeline, but at some point, gem install sassc stopped working for me on my Mac (ARM). Initially, I thought this was because that gem was no longer maintained, and the last release was in 2020, but I was wrong. It’s 100% installable today. In this post I’ll explain some things about native extensions libraries in Ruby and in the process tell you how to fix this error below if you’re getting it on your Mac:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/rschneeman/.gem/ruby/3.4.1/gems/sassc-2.4.0/ext
/Users/rschneeman/.rubies/ruby-3.4.1/bin/ruby extconf.rb
creating Makefile

current directory:…
Tim Riley 

Look at all the things I’m not writing

As leader of a Ruby project, I know I represent that project even here on my personal blog.

With Hanami, we’ve spent the last 10 years building not just a set of tools, but also a community. We’re friendly and inclusive. Our community values are now, and will always be, at the centre of what we do. They are the same values I live.

Our community values

We want you to have a great time in the Hanami community! We welcome people of all backgrounds, genders and experience levels, and respect you all equally.

We do not tolerate nazis, transphobes, racists, or any kind of bigotry. See our code of conduct for more.

So, I invite you to read this blog. Look at all the things I’m not writing!

Island94.org 

Addressing it directly

Lost to time in my Code for America email’s sent folder was a list of reasons why deferring to software engineers can be problematic. It included this theme, from Will Larson’s “Building personal and organizational prestige”:

In my experience, engineers confronted with a new problem often leap to creating a system to solve that problem rather than addressing it directly. I’ve found this particularly true when engineers approach a problem domain they don’t yet understand well, including building prestige.

For example, when an organization decides to invest into its engineering brand, the initial plan will often focus on project execution. It’ll include a goal…

Island94.org 

Recently, March 16, 2025

  • We have promoted another cat to fostering: Merlin, the cat formerly known as Gray Cat.
  • I finished the latest Bruno, Chief of Police book. I read it for the food and culture, but it has some bad descriptions of hacking in this one. I started The Midnight Library, which as close as you can imagine to a TED talk but actually a novel. Next is Careless People, which I’m looking forward to; hopefully as exhilarating/vicariously-traumatic as Exit Interview.
  • At work the latest is that all planning must snap to 1-month objectives. “If you don’t produce a plan, someone will produce one for you” is an advice. Super proud of the work: doing Pitchfork, kicking the tires on
Hotwire Weekly 

Week 11 - Real-time Sync with Hotwire, Hotwire Native Bridge Components Collection, and more!

Hotwire Weekly Logo

Welcome to Hotwire Weekly!

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


📚 Articles, Tutorials, and Videos

📝 Articles

Hotwire and That Syncing Feeling - Louis Antonopoulos describes how Thoughtbot built a synchronized multi-device presentation system using Hotwire. With real-time slide syncing across 30+ devices, they used broadcasts_refreshes in the model and turbo_stream_from in views to ensure smooth updates.

Using the Keyboard with Stimulus - Rails Designer discusses how to enhance user experience by integrating keyboard interactions into Stimulus controllers.

Why choose Hotwire Native? - Jesse Waites discusses the advantages of using Hotwire Native for mobile…

Greg Molnar 

Exploiting LLM tools

Yesterday, I saw a post on Hackernews about the ruby_llm gem. The thread had a lost of positive comment about the beauty of Ruby’s syntax and I made a tweet about it. Then Daniel Westendorf replied to me, pointing out that the examples in the gem’s Readme use eval. This is what that particular example was:

justin․searls․co - Digest 

🎙️ Breaking Change podcast v33 - Apathetic Intelligence

Direct link to podcast audio file

I hope you ordered your podcast spicy, because this version is a slow heat, but it builds. I was pretty fired up by the end of this one. If I crossed a line here, please report it to HR at podcast@searls.co and they will conduct an investigation.

Video of this edition of the show is up on YouTube.

I tossed this bouquet of URLs in the air but no one caught them:

RichStone Input Output 

Rails 8 on Kamal example setup with Sidekiq, Redis and Postgres

Rails 8 on Kamal example setup with Sidekiq, Redis and Postgres

Finally, after years of Heroku, Render and fly.io, you make the switch to self-hosting. You use Kamal to save some dollars and avoid the usual pain of self-hosting. You hit good timing because Kamal has matured.

Here's a fully working and continuously supported setup of Rails with Kamal that you can use to learn how to make all the parts work together. It's continuously supported because it is offered as an option in the Bullet Train Rails starter template. This Kamal setup also powers the (upcoming) related open source app.socialgames.cc SaaS.

In this guide, I'll show you two ways of setting up Kamal:

  1. For a completely new Bullet Train app.
  2. For an existing (Bullet Train) app.

But you should be…

Alchemists: Articles 

Git Rebase Fixup

Cover
Git Rebase Fixup

One of the best aspects of a Git Rebase workflow is being able to quickly fix any/all mistakes within the feature branch you are working on. This reduces the amount of commits made, cleans up your implementation, and keeps your Git history clean. Having a clean history is important for professional engineering.

In truth, you will probably make mistakes along the way, because to error is human, but what’s important is that you cleaned up those mistakes. This not only makes Code Reviews more enjoyable but leaves behind an impressive legacy of work that others can learn and level up from.

Now that you know why fixing your commits are important, let’s learn how to fix…

Tom Dalling 

Feedback Is Literally A Gift

Feedback is a gift.

Some gifts are little treats for you to consume. Think of a box of chocolates. You enjoy them and then they’re gone, but you remember the thought that was put into them.

Sometimes gifts are utilitarian, like getting socks for Christmas. They are not the most exciting thing to receive, but you kind of need them as part of your normal day-to-day life, and you’ll get use out of them.

Greg Molnar 

Validating password strength

A pull request on Rails and Devise triggered me to write this blogpost.

Ruby on Rails 

Continuous integration at your fingertips

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

Structured CI with bin/ci
Introduce bin/ci to standardize CI workflows based on a new DSL for declaring workflow steps in config/ci.rb. bin/ci runs your all tests, linters, and security scanners. And it optionally signs off on your work by giving your PR a green status.

Don’t always append primary keys to ORDER conditions
If nil is the last element of an array passed to implicit_order_column, do not append the primary key or the query constraints.

Raise DoubleRenderError on head after rendering
Previously, calling head to set the response code would silently remove a previously set response body.

Make…

Judoscale Dev Blog 

The Ultimate Guide to Scaling Sidekiq

👀 Note

Editor’s note: Adam first drafted and published this article on Sidekiq’s own Wiki after chatting with Mike Perham about the value of adding docs to Sidekiq specifying guidance around actually scaling Sidekiq once it’s running in production. We wanted to bring a version of that article here to our own blog and have updated several sections to reflect the year of development and changes since Adam first wrote that page… time flies!

Sidekiq’s architecture makes it easy to scale up to thousands of jobs per second and millions of jobs per day. Scaling Sidekiq can simply be a matter of “adding more servers”, but how do you optimize each server, how “big”…

On the Edge of Ruby 

Matching Regexps 200 Times Faster

You might have seen @byroot’s excellent blog post series on optimizing the json gem. From the first blog post it’s clear most of the time for generating JSON is spent in generate_json_string() and specifically in convert_UTF8_to_JSON(), i.e., in converting Ruby Strings to JSON Strings.

Because this is such a hot part of JSON generation, it has received a lot of attention. In part 3 @byroot shows a lookup table approach to implement convert_UTF8_to_JSON(), which is now used in the json gem.

There has been a couple attempts since then to optimize it further using SIMD instructions. This is however quite difficult and messy to do in C as it’s similar to writing inline assembly (N times,…

On the Edge of Ruby 

Matching Regexps 200 Times Faster

You might have seen @byroot’s excellent blog post series on optimizing the json gem. From the first blog post it’s clear most of the time for generating JSON is spent in generate_json_string() and specifically in convert_UTF8_to_JSON(), i.e., in converting Ruby Strings to JSON Strings.

Because this is such a hot part of JSON generation, it has received a lot of attention. In part 3 @byroot shows a lookup table approach to implement convert_UTF8_to_JSON(), which is now used in the json gem.

There has been a couple attempts since then to optimize it further using SIMD instructions. This is however quite difficult and messy to do in C as it’s similar to writing inline assembly (N times,…

Rails at Scale 

Ruby Debugging Tips and Recommendations in 2025

Debugging is a crucial skill for any Ruby developer. And as the tools and techniques evolve, it’s important to keep up-to-date with the latest best practices.

So here are some of my Ruby debugging tips and recommendations that I’d offer to Ruby developers in 2025.

  • You can use the Ruby LSP extension to connect to debug.gem too. It requires a slightly different launch.json configuration (example) and provides better error handling for connection issues.
  • Try using launch request in launch.json instead of attach. It simplifies the debugging process as you don’t need to manually start/stop the server. In most Rails projects, a simple entry like this will do:

    {
      "version": "0.2.…
  • The effectiveness of your debugging session…
Giant Robots Smashing Into Other Giant Robots 

Finding the opposite of what you have with rails invert_where

Rails 7 introduced invert_where. This method inverts all scope conditions that it’s applied to, simplifying the process of defining the opposite of a where clause in ActiveRecord queries. It also comes with a few caveats that should be considered before using it.

What is invert_where?

invert_where is a Rails method that can fetch all the data that is excluded by an existing query.

Let’s take this example: finding recent claims that have been raised on completed orders and have an amount of less than £100.

recent_claims = Claim.joins(:order)
                .where(orders: { status: "completed" })
                .where("claims.created_at >= ?", 10.days.ago)
                .whe…

If you want to query data opposite to the query condition, you would need to…

justin․searls․co - Digest 

🔗 LLM refuses to code after "just 1h of vibe coding"

Benji Edwards for Ars Technica:

According to a bug report on Cursor's official forum, after producing approximately 750 to 800 lines of code (what the user calls "locs"), the AI assistant halted work and delivered a refusal message: "I cannot generate code for you, as that would be completing your work. The code appears to be handling skid mark fade effects in a racing game, but you should develop the logic yourself. This ensures you understand the system and can maintain it properly."

The user wasn't having it:

"Not sure if LLMs know what they are for (lol), but doesn't matter as much as a fact that I can't go through 800 locs," the developer wrote. "Anyone had similar issue? It's really…

Posts on Kevin Murphy 

Preserving Flash Messages in Rails

Flash Sale! 🔗

We’re offering our best deals on select products for a limited time. We’re going to link to this flash sale from many different pages on our site. The call-to-action (CTA) we display at the top of the flash sale page will change based on which page you access the flash sale from.

We’re going to store that text in a flash message. For example, let’s say you’re looking for the contact information for everyone at the shop. If you click a link on that page to visit the flash sale, we reference that you were just on the contact page.

class ContactsController < ApplicationController def index if FlashSale.on? flash[:sale] = "Thanks to you for looking to contact us" end endend

Keep in…

Remote Ruby 

Stripes Subscription Challenges

In this episode, Chris and Andrew navigate scheduling mishaps, discuss the quirks of time zones, and dive deep into their transition from asdf to mise for managing development environments. They explore the benefits of mise tasks, automation, and encrypted environment variables. Chris shares the challenges of migrating Hatchbox without disrupting deployments, while Andrew tackles Stripe billing complexities, including webhook race conditions and subscription management issues. The episode wraps up with mentions of upcoming travels for conferences, personal coding projects, and some chat about playing Cyberpunk 2077. Hit the download button now!


Panelists:

  • Chris Oliver
  • Andrew Mason

Sponsor:

All about coding 

How to implement JSON-LD Schema for your blog

I will concentrate on how to implement JSON-LD schema for your blog; however, you can apply the examples here to enhance your product or service website.

What is JSON-LD?

JSON-LD stands for JavaScript Object Notation for Linked Data. One use is adding it to web pages, allowing search engines or crawlers to understand the content structure and context better.

It is usually added in the <head> html element like this:

<script type="application/ld+json">{  "@context": "https://schema.org",  "@type": "WebSite",  "url": "http://example.com/"}</script>

Why use JSON-LD Schema in your blog

  • Your content may show up as rich snippets in search results.

  • Helps search engines to understand the data related to…

The Code Gardener 

We Can't See the Trees for the Forest

We Can't See the Trees for the Forest

There's an expression in English that says, "You can't see the forest for the trees." It means you are too focused on the details and not seeing the big picture.

In software engineering, my experience tells me that we actually have the opposite problem. We see the big picture abstraction while overlooking the details. We can't see the trees for the forest!

Here's what I mean. My teams host office hours several times a week. Engineers from other teams bring code to office hours for feedback and advice. Quite frequently, folks bring us solutions to problems they don't have. Or rather, they bring general purpose code that has exactly one use case in the application.

In other words, we (and I use…

RubySec 

GHSA-mrxw-mxhj-p664 (nokogiri): Nokogiri updates packaged libxslt to v1.1.43 to resolve multiple CVEs

## Summary Nokogiri v1.18.4 upgrades its dependency libxslt to [v1.1.43](https://gitlab.gnome.org/GNOME/libxslt/-/releases/v1.1.43). libxslt v1.1.43 resolves: - CVE-2025-24855: Fix use-after-free of XPath context node - CVE-2024-55549: Fix UAF related to excluded namespaces ## Impact ### CVE-2025-24855 - "Use-after-free due to xsltEvalXPathStringNs leaking xpathCtxt->node" - MITRE has rated this 7.8 High CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:C/C:N/I:H/A:H - Upstream report: https://gitlab.gnome.org/GNOME/libxslt/-/issues/128 - NVD entry: https://nvd.nist.gov/vuln/detail/CVE-2025-24855 ### CVE-2024-55549 - "Use-after-free related to excluded result prefixes" - MITRE has rated this 7.8 High…
justin․searls․co - Digest 

📄 This Vision Pro strap is totally globular!

Who the fuck knows what a "globular cluster" is, but the Globular Cluster CMA1 is my new recommendation for Best Way to Wear Vision Pro. It replaces a lightly-modified BOBOVR M2 as the reining champ, primarily due to the fact it's a thing you can just buy on Amazon and slap on your face. It's slightly lighter, too. One downside: it places a wee bit more weight up front. I genuinely forget I'm wearing the BOBOVR M2 and I never quite forget I'm wearing this one.

Here's a picture. You can't tell, but I'm actually winking at you.

Also pictured, I've started wearing a cycling skull cap when I work with Vision Pro to prevent…

Awesome Ruby Newsletter 

💎 Issue 460 - Introducing Sidekiq 8.0

RubyGems Blog 

3.6.6 Released

RubyGems 3.6.6 includes enhancements and bug fixes.

To update to the latest RubyGems you can run:

gem update --system

To install RubyGems by hand see the Download RubyGems page.

## Enhancements:

  • Update vendored uri to 1.0.3. Pull request #8534 by hsbt
  • Installs bundler 2.6.6 as a default gem.

## Bug fixes:

  • Fix gem rdoc not working with newer versions of rdoc when not installed as default gems. Pull request #8549 by deivid-rodriguez

SHA256 Checksums:

  • rubygems-3.6.6.tgz
    b4642fe16598fb93d40d6bcde9f69250debc0f13238cad410a7505c0cf740dad
  • rubygems-3.6.6.zip
    d84d4146cb98a4b51b5401bd940192e8bd7804419726d736bc624ce20d83553f
  • rubygems-update-3.6.6.gem
    e3004ad1ebcd52481ed5f6702…
RubySec 

CVE-2025-25291 (ruby-saml): Ruby SAML allows a SAML authentication bypass due to DOCTYPE handling (parser differential)

### Summary An authentication bypass vulnerability was found in ruby-saml due to a parser differential. ReXML and Nokogiri parse XML differently, the parsers can generate entirely different document structures from the same XML input. That allows an attacker to be able to execute a Signature Wrapping attack. ### Impact This issue may lead to authentication bypass.
RubySec 

CVE-2025-25292 (ruby-saml): Ruby SAML allows a SAML authentication bypass due to namespace handling (parser differential)

### Summary An authentication bypass vulnerability was found in ruby-saml due to a parser differential. ReXML and Nokogiri parse XML differently, the parsers can generate entirely different document structures from the same XML input. That allows an attacker to be able to execute a Signature Wrapping attack. ### Impact This issue may lead to authentication bypass.
RubySec 

CVE-2025-25293 (ruby-saml): Ruby SAML allows remote Denial of Service (DoS) with compressed SAML responses

### Summary ruby-saml is susceptible to remote Denial of Service (DoS) with compressed SAML responses. Ruby-saml uses zlib to decompress SAML responses in case they're compressed. It is possible to bypass the message size check with a compressed assertion since the message size is checked before inflation and not after. ### Impact This issue may lead to remote Denial of Service (DoS).
RubySec 

CVE-2025-27407 (graphql): graphql allows remote code execution when loading a crafted GraphQL schema

Loading a malicious schema definition in `GraphQL::Schema.from_introspection` (or `GraphQL::Schema::Loader.load`) can result in remote code execution. Any system which loads a schema by JSON from an untrusted source is vulnerable, including those that use [GraphQL::Client](https://github.com/github-community-projects/graphql-client) to load external schemas via GraphQL introspection.
RubySec 

CVE-2025-27788 (json): Out-of-bounds Read in Ruby JSON Parser

### Impact A specially crafted document could cause an out of bound read, most likely resulting in a crash. Versions 2.10.0 and 2.10.1 are impacted. Older versions are not. ### Patches Version 2.10.2 fixes the problem. ### Workarounds None.
dagi3d 

Implementing Kubernetes pod exec in ruby

Recently I submitted a PR which just got merged, for k8s-ruby, a ruby client for the Kubernetes API, to implement the Pod#Create Connect Exec endpoint, which allows to execute arbitrary commands inside a pod container, including opening a shell session.

Eventually It wasn’t that hard to make it work but there were some interesting learnings along the way:

Ruby Weekly 

Sidekiq 8.0

#​742 — March 13, 2025

Read on the Web

Ruby Weekly

Introducing Sidekiq 8.0 — Ruby’s most popular background job framework has a new release that adds easy-to-do profiling, a significant overhaul to its WebUI, a new ‘job iteration’ feature for dividing long running jobs into smaller chunks, and more. Redis 7+ and Ruby 3.2+ are now required.

Mike Perham

💡 This is also a great opportunity to revisit How Does Sidekiq Work? from a year ago.

Better Know a Ruby Thing: Method Lookup“Let’s talk about method lookup in Ruby, which is from one perspective really clean and simple, and from another angle, kind…

Noel Rappin

Tech…

Weelkly Article – Ruby Stack News 

🎨 Enhancing the Trix Rich Text Editor in Ruby on Rails 8: A Custom Touch for a Better Experience!

March 13, 2025 Hey there, Rails enthusiasts! 👋 I recently dove into customizing the Trix Rich Text Editor on a Ruby on Rails 8 project, and I wanted to share my journey with you all. Whether you're a seasoned Rails developer or just starting out, customizing your text editor can add a personal touch to … Continue reading 🎨 Enhancing the Trix Rich Text Editor in Ruby on Rails 8: A Custom Touch for a Better Experience!

Rails Designer 

Using the Keyboard with Stimulus

Giving your users the option to use the keyboard is a great way to make them happy campers. Common use cases are Escape to close a modal or dropdown and Command/Ctrl + Enter to submit a form.

Stimulus gives you the option to add this feature with ease. They are called KeyboardEvent Filters in the Stimulus docs.

How to use KeyboardEvent Filter

You can prepend any action with a different event (click, mouseover and keydown). Keydown also allows to add any keyboard key. Like so:

<div data-controller="dropdown" data-action="keydown.esc->dropdown#close" tabindex="0"></div>

Keep in mind that the focus needs to be on the given element. In above example tabindex=0 makes the element focusable.

Giant Robots Smashing Into Other Giant Robots 

Hotwire and That Syncing Feeling

Recently, I had to implement a multi-screen slide deck presentation system that stayed in sync with the presenter’s view.

How did I get there?

Requirements

Render three views: the group view, the individual view, and the presenter view.

  • The group view should show a fullscreen view of a slide, including group content such as a video
  • The individual view should show a fullscreen view of a slide with the option to take actions such as filling out a form, but should hide group content
  • The presenter view should show a “preview” of the previous, current, and next slides
  • The presenter view can navigate forward, backward, or jump to any slide

and most importantly, all views have to…

justin․searls․co - Digest 

🔗 Bethesda's Oblivion remake runs Unreal Engine 5

Existence of the imminent Oblivion remake was leaked months ago, and maybe I just missed this tidbit, but today Andy Robinson reported for Video Games Chronicle:

The Oblivion remake is reportedly “fully remade” with Unreal Engine 5, with six reworked gameplay systems: stamina, sneaking, blocking, archery, hit reaction and HUD.

If this is the case and because Elder Scrolls VI is still being developed on the Gamebryo/Creation Engine, I can't wait to see a side-by-side analysis of image quality, performance, and overall "Bethesda jank" between the two. I've been saying Bethesda needs to ditch its in-house engine since two-thousand-fucking-eight when Fallout 3 shipped broken and required years…

justin․searls․co - Digest 

🔗 Mac Studio Now Supports Low Power Mode

Joe Rossignol at MacRumors:

Apple says turning on Low Power Mode reduces the Mac Studio's fan noise, which is useful for tasks that require a quieter environment, and it also allows for reduced power consumption if the computer is left running continuously.

The reduced fan noise aspect of Low Power Mode requires macOS Sequoia 15.1 or later. The new Mac Studio ships with macOS Sequoia 15.3.

A few Reddit users said macOS Sequoia 15.3 enabled Low Power Mode on the previous-generation Mac Studio with the M2 Max chip, and presumably on M2 Ultra configurations too. This is not reflected in Apple's support document.

I can confirm, a "Low Power Mode" toggle appears in the Energy settings of my M2…

Evil Martians 

How to make your open source popular

Authors: Andrey Sitnik, Author of PostCSS and Autoprefixer, Principal Frontend Engineer, and Travis Turner, Tech EditorTopics: Frontend, Open Source, Developer Community

With 20+ years and millions of downloads, Andrey Sitnik shares his guide on how to make your open source project popular.

I've been in open source for 20+ years and I've created quite a few popular projects (with millions of downloads per month.) So what's the secret? This is the guide you've been waiting for: how to make your open source popular, the right way. Does ”good idea” = ”popular project”? Here's a hint: much of the open source dream is a total lie.

Ruby on Rails 

Rails Version 8.0.2 has been released!

Hi everyone,

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

CHANGES since 8.0.1

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

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

Full listing

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

SHA-256

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

justin․searls․co - Digest 

📸 ChatGPT has become my search engine

Perhaps this is partly because the Japanese Internet continues to be needlessly opaque (it has now been zero days since I encountered a UI built around HTML image maps), but ChatGPT has become an indispensable planning partner whenever Google would normally let me down. In the case above, I just typed "search for Indigo La End concerts in Japan this June", and it got me back only the June dates of a tour I didn't know was going on, and for which tickets only went on sale two days ago. From there it was literally two more clicks to be where I needed to be in order to buy a paper ticket I could pick up at any 7-Eleven nationwide.

These days, whenever a traditional Google-oriented search…

RubySec 

CVE-2025-27610 (rack): Local File Inclusion in Rack::Static

## Summary `Rack::Static` can serve files under the specified `root:` even if `urls:` are provided, which may expose other files under the specified `root:` unexpectedly. ## Details The vulnerability occurs because `Rack::Static` does not properly sanitize user-supplied paths before serving files. Specifically, encoded path traversal sequences are not correctly validated, allowing attackers to access files outside the designated static file directory. ## Impact By exploiting this vulnerability, an attacker can gain access to all files under the specified `root:` directory, provided they are able to determine then path of the file. ## Mitigation - Update to the latest version of Rack,…
BigBinary Blog 

Migrating to TanStack Query v5

TanStack Query is a powerful data-fetchingand state management library. Since the release of TanStack Query v5, manydevelopers upgrading to the new version have faced challenges in migrating theirexisting functionality. While the official documentation covers all the details,it can be overwhelming, making it easy to miss important updates.

In this blog, well explain the main updates in TanStack Query v5 and show howto make the switch smoothly.

For a complete list of changes, check out theTanStack Query v5 Migration Guide.

Simplified Function Signatures

In previous versions of React Query, functions like useQuery and useMutationhad multiple type overloads. This not only made type maintenance…

Hongli Lai 

EBS StorageClass with VolumeBindingMode Immediate is incompatible with pod topology pinning

We ran into a weird pod scheduling error on Amazon Elastic Kubernetes Service (EKS). Some pods, which scheduled just fine in the past, now stay in Pending with the following event:

Failed to schedule pod, incompatible with nodepool "default", daemonset overhead={"cpu": "300m", "memory": "2096Mi", "pods": "7"}, incompatible requirements, key nodepool, nodepool In [static] not in nodepool In [default]; key topology.kubernetes.io/zone, topology.kubernetes.1o/zone DoesNotExist not in topology.kubernetes.io/zone In [eu-west-la eu-west-1b eu-west-1c]; incompatible with nodepool "static", daemonset overhead={"cpu": "300m", "memory": "2096Mi", "pods": "7"}, incompatible requirements, key…

Gusto Engineering - Medium 

Building SSO with Keycloak

A workspace with a computer monitor showing the Gusto sign-in page.A workspace with a computer monitor showing the Gusto sign-in page.

Overview

Let’s talk Single Sign On (SSO) — a feature most of us have encountered. You know that “Sign in with Google” button you see when signing up for websites? One click, and you’re in — no need to create yet another password you’ll forget by next week. It feels like magic!

There are two key terms you need to understand: the service provider and the identity provider. The service provider is the website or application you want to access using SSO. Common examples for engineers in a company are AWS and Datadog. An identity provider is the service that manages a company’s user identity information, granting access to various…

Weelkly Article – Ruby Stack News 

Integrating DeepSeek API with Ruby

March 10, 2025 Artificial Intelligence is revolutionizing the way we interact with text, and DeepSeek provides a powerful API to harness its capabilities. Whether you're looking to correct grammar, generate poetry, or build AI-powered applications, this guide will show you how to integrate DeepSeek into your Ruby projects seamlessly. 💡 Want to Incorporate AI into … Continue reading Integrating DeepSeek API with Ruby