Rubyland

news, opinion, tutorials, about ruby, aggregated
Sources About
RichStone Input Output 

[4/4] Code with LLMs in parallel

[4/4] Code with LLMs in parallel

I have the strong feeling that this is one of the core skills to develop in the next couple of years as an engineer. The tooling is not great yet, but by the time you read this, it might be, so take this more as a primer and look under the hood of how future tools will and current tools already work to run agents in parallel.

I tried four methods of running agents in parallel, and I will explain why I currently prefer custom scripts or manual management over existing GUI/TUI tools.

If you haven't delved into planning and swarms extensively, you may not have encountered the scenario where you need parallel workers. But once your agents start to take on bigger tasks, you might start thinking…

justin․searls․co - Digest 

🎙️ Breaking Change podcast v42 - Free as in Remodel

Direct link to podcast audio file

Thanks for writing so many lovely emails to podcast@searls.co. Hell, thanks even for the unlovely ones.

Be sure to look out for me showing up on Dead Code at some point after it records next Tuesday. I'm realizing not all podcasts have a 1-hour-or-less turnaround time like this one does.

As promised, some URLs follow:

Ruby on Rails: Compress the complexity of modern web apps 

Structured Event Reporting lands in Rails!

Hi! Emmanuel Hayford here with some Rails codebase updates for you!

Add #assert_events_reported test helper
Rails added a new test helper that lets you assert multiple events were reported within a block— order-agnostic , with support for payload and tag matching, and it ignores extra events. Handy for workflows that emit several instrumentation events in one go.

assert_events_reported([
  { name: "user.created", payload: { id: 123 } },
  { name: "email.sent",   payload: { to: "user@example.com" } }
]) do
  create_user_and_send_welcome_email
end

Add deliver_all_later to enqueue multiple emails at once
You can now enqueue many emails in one go—reducing round trips to your queue backend.…

Alchemists: Articles 

Git Rebase Drop

Cover
Git Rebase Drop

Dropping a commit, when rebasing, can seem as mundane as when you use Git Rebase Pick but, like picking a commit, dropping a commit has a slight super power too. Not quite as a fancy but powerful (more on this shortly).

Let’s say, when using Git Rebase, you want to drop a commit. Dropping a commit is effectively the same as deleting the commit from your commit history. Extremely useful when composing commits that are highly atomic that adhere to a strong Git Commit Anatomy.

While working in your feature branch, you might want to perform an interactive rebase as follows:

git rebase --interactive

The above might yield the following in your text editor:

p…
Remote Ruby 

The Road To Rails 8

In this episode, Chris and Andrew discuss the recent release of Rails 8 and the improvements in upgrading processes compared to previous versions. They dive into specific technical challenges, such as handling open redirects and integrating configuration options, and chat about Chris's recent experience with Tailwind’s new Elements library, Bundler updates, and JSON gem changes.  They also touch on Heroku's evolving infrastructure and the potential benefits of using PlanetScale's new Postgres offerings. The episode concludes with a discussion about life without internet and Andrew’s countdown to his upcoming sabbatical.  Hit download now! 

Links

Awesome Ruby Newsletter 

💎 Issue 482 - Mouthguards that flash red with head impacts to be used at Rugby World Cup

RubySec 

CVE-2025-55193 (activerecord): Active Record logging vulnerable to ANSI escape injection

This vulnerability has been assigned the CVE identifier CVE-2025-55193 ### Impact The ID passed to `find` or similar methods may be logged without escaping. If this is directly to the terminal, it may include unescaped ANSI sequences. ### Releases The fixed releases are available at the normal locations. ### Credits Thanks to [lio346](https://hackerone.com/lio346) for reporting this vulnerability.
RubySec 

CVE-2025-24293 (activestorage): Active Storage allowed transformation methods that were potentially unsafe

Active Storage attempts to prevent the use of potentially unsafe image transformation methods and parameters by default. The default allowed list contains three methods allowing for the circumvention of the safe defaults which enables potential command injection vulnerabilities in cases where arbitrary user supplied input is accepted as valid transformation methods or parameters. This has been assigned the CVE identifier CVE-2025-24293. Versions Affected: >= 5.2.0 Not affected: < 5.2.0 Fixed Versions: 7.1.5.2, 7.2.2.2, 8.0.2.1 ## Impact This vulnerability impacts applications that use Active Storage with the image_processing processing gem in addition to mini_magick as the…
Rails Designer 

String Inflectors: bring a bit of Rails into JavaScript

The code from this article was taken from the book JavaScript for Rails Developers. Get your copy today! 🧑‍💻


Ruby developers working with JavaScript often miss the convenience of Ruby’s string manipulation methods. While Ruby (Rails) spoils us with elegant transformations like "user_name".camelize, JavaScript requires you to roll our own helpers or reach for external dependencies.

This article explores creating a lightweight collection of JavaScript string helpers, inspired by Rails’ ActiveSupport inflectors, instead of adding yet another package to your project. Let’s look at how to add these helpers in JavaScript and use them in your Rails app.

From snake_case to camelCase

In Rails,…

Ruby on Rails: Compress the complexity of modern web apps 

Rails Versions 7.1.5.2, 7.2.2.2, and 8.0.2.1 have been released!

Hi friends!

Rails Versions 7.1.5.2, 7.2.2.2, and 8.0.2.1 have been released!

These are security patches addressing two security issues:

  • An issue in Active Storage where transformation methods could potentially be unsafe, allowing for command injection vulnerabilities in image processing.
  • An ANSI escape injection vulnerability in Active Record logging that could affect log output.

The Active Storage vulnerability is not exploitable under the default configuration, and under most terminals the ANSI escape injection will have minimal impact. However we recommend upgrading as soon as possible.

Older versions of Rails are unsupported, and users are recommended to upgrade to at least…

Jardo.dev: Blog 

Undervalued: The Most Useful Design Pattern

On the ten year anniversary of my first RailsConf, I had the privilege to speak at RailsConf 2024 alongside two other Normans: my little brother, Alistair, and friend, Cody. The talk explores how we can use value objects and data objects (also called data transfer objects) alongside the factory pattern to write decoupled, easily-testable software.

The Problem: An XML Product Feed

Let’s examine some code. This code is production-like. It’s code that was taken from a real Solidus app and modified to fit in on my slides. We’re going to explore an approach to refactoring this code.

Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
  xml.rss(base_xml_params) do
   …
SINAPTIA 

Upscaling images with AI

In the world of online boat marketplaces, the user experience can make or break a sale. A beautiful yacht with poor quality photos might sit unsold, while an average boat with stunning visuals attracts multiple buyers. At SINAPTIA, we recently tackled this exact challenge for a leading boat marketplace, transforming thousands of low-quality images using AI-powered upscaling technology.

The problem

The marketplace we work with faces a common issue in the industry: image quality varies dramatically across listings. While some boat owners upload high-resolution, professional photos, many images come from third-party sources or older listings with significantly lower quality. The platform…

Evil Martians 

Circuit breakers and Ruby in 2025: don't break your launch

Authors: George Asfour, Backend Engineer, and Travis Turner, Tech EditorTopics: Open Source, Ruby

Take a deep dive into what circuit breakers are, why you might need them, and the options you have in Ruby.

It's 4 AM. Your team calls …the app is down. Time to wake up, grab a coffee, and investigate. You uncover a trail of fails: the payment processor you integrate with started responding slowly → your checkout requests began timing out → users started frantically refreshing → and now your entire Rails app is unresponsive. This is a cascading failure, something more common than you might think. In this post, we'll explore circuit breakers in Ruby, how they can prevent these cascading failures,…

DotRuby - Things we have to say. 

Organizing Mailer Templates with prepend_view_path in Rails

Tired of hunting for email templates scattered across your Rails app? If your mailer views are spread throughout `app/views` like confetti, there's a simple solution you might not know about. Learn how `prepend_view_path` can help you organize all your email templates in one clean, centralized location – and why your future self (and your team) will thank you for it.
Ruby Magic by AppSignal 

Extend ActiveStorage for Ruby on Rails with Custom Previewers

In part one of this series, we looked at how to extend the ActiveStorage ingest process with custom analyzers.

In this post, we will reverse the procedure and explore how to utilize ActiveStorage previewers to display data.

What Are ActiveStorage Previewers for Ruby on Rails?

Not every uploaded blob is an image. Nonetheless, some non-image blobs can be converted into an image preview. ActiveStorage itself provides built-in previewers for videos and PDFs (via MuPDF or Poppler).

Displaying a preview in your ERB template works exactly the same as creating variants of an image:

<%= image_tag song.recording.preview(resize_to_fill: [640, 160]) %>

Here, we lazily create and display a song…

Avo's Publication Feed 

Referral System in Rails applications

Let's learn how to add a Referral System to a Rails application with the Refer gem and how to make it work for your application.
Josh Software 

Containerization Made Simple: Dockerize Your Rails App Today

Tired of Development Setup Headaches? Reclaim Your Coding Time with Docker! As software developers, we pour our energy into crafting new features daily. But what about the hidden time sink before you even write a line of code: setting up your machine to run existing legacy applications or sharing your new rails application with other … Continue reading Containerization Made Simple: Dockerize Your Rails App Today
Ruby on Rails: Compress the complexity of modern web apps 

Upgrading the Rails World App for 2025

Last year, we launched the official Rails World conference app, an open-source event app built in collaboration with Telos Labs to help attendees connect and up to date. (You can read more about the original build here and here.)

From the beginning, this was a project for the community, not just Rails World. So it’s been fun to see Tropical on Rails and Baltic Ruby also use the app for their events this year. That’s exactly what we hoped for when we made it open source. ❤️

This year, we asked Bram Janssen, a junior developer in the community, to take the lead on upgrading the app in collaboration with Telos Labs, getting it production-ready for this year’s event.

Under the hood, the…

Mintbit 

Chaining Transformations with .then in Ruby

Have you ever found yourself writing a series of operations in Ruby that felt a bit too verbose? The then method, introduced in Ruby 2.6, is a clean and elegant way to chain transformations on a value, avoiding intermediate variables and improving code clarity.

In this post, we’ll understand how then works using a simple and practical example: formatting a blog post title.

Scenario

Imagine you’re working with a blog post title that comes in messy. You want to:

  1. Remove extra whitespace;
  2. Convert everything to lowercase;
  3. Capitalize the first letter of each word.

Traditional code (without .then)

1
2
3
4
5
6
7
title = "   rUBY is     AWESOME   "
trimmed = title.strip
downcased = tri…
The Bike Shed 

469: How are we using AI? with Jimmy Thigpen

Joël and fellow thoughtbotter Jimmy Thigpen assess their AI workflows and question whether LLM partners really are as helpful as they claim to be.

Joël points out the blindspots AI can have when processing certain requests, they each share the ways they utilise AI into their workflow and pros and cons of doing so, as well as looking at some of the areas of improvement they would each like to see made to various AI agents in the future.

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

Your host for this episode has been thoughtbot’s own Joël Quenneville, and you can connect with this week’s…

Short Ruby Newsletter 

Short Ruby Newsletter - edition 145

The one where Vladimir Dementyev launched Redprints CFP, JRuby 10.0.2.0 was released and where Nate Berkopec launched their new gem sidekiq-memory_logger
byroot’s blog 

Unlocking Ractors: generic instance variables

In two previous posts, I explained that one of the big blockers for Ractors’ viability is that while they’re supposed to run fully in parallel, in many cases, they’d perform worse than a single thread because there were numerous codepaths in the Ruby virtual machine and runtime that were still protected by the global VM lock.

I also explained how I removed two of these contention points, the object_id method, and class instance variables.

Since then, the situation has improved quite drastically, as numerous other contentious points have been either eliminated or reduced by me and my former teammates. I’m not going to make a post for each of them, as in most cases it boils down to the same …

Jardo.dev: Blog 

The “Git” “Hub” Part Is No Longer the Product

I woke up this morning to the news that the CEO of GitHub was stepping down. GitHub hosts (what I assume is) the vast majority of open-source projects, so the company has a tremendous amount of power to shape the average developer’s interactions with the open-source world.

GitHub just got less independent at Microsoft after CEO resignation

I wouldn’t be writing about it if this was just a leadership change. The detail that prompted me to comment on the news was that GitHub is being stripped of its independence.

Microsoft isn’t replacing Dohmke’s CEO position, and the rest of GitHub’s leadership team will now report more directly to Microsoft’s CoreAI team.

It seems that GitHub will…

Max Chernyak 

Failover to Human Intelligence

There’s no denying that AI is getting very capable, but one thing keeps bothering me: what happens if something goes wrong?

Right now, self-driving cars still require human monitoring and intervention (outside of specially-designated areas). Isn’t this also true of a sufficiently complex system where you might need to intervene quickly in case AI fails to resolve an issue? Worth considering, right?

You might say — so what? AI-written code is arguably better (or will eventually be better), often with more comments and docs, humans would understand it faster anyway. And that may be true, but with human-written code you can usually find a human who wrote it and ask them questions. If AI

Hotwire Weekly 

Week 32 - Hotwire Native Modals, Drupal gets Turbo support, and more!

Hotwire Weekly Logo

Welcome to Hotwire Weekly!

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


📚 Articles, Tutorials, and Videos

Create a macOS-inspired stack UI with Stimulus and Tailwind CSS - Rails Designer shows how to create a macOS-inspired dock-style stack UI using Tailwind CSS and a lightweight Stimulus controller. The effect relies on CSS transforms and grouped data-state variants, with a simple whenOutside action used to toggle the stack’s open/closed state.

Hotwire Native Modals - Joe Masilotti demonstrates using a Rails helper to show Bootstrap modals on the web and native modals in iOS/Android Hotwire apps via path configuration.

Coordinating Rails and JavaScript with Custom…

justin․searls․co - Digest 

📸 Shout for DANGER

Free idea for anyone who wants it.

I've been juggling so many LLM-based editors and CLI tools that I've started collecting them into meta scripts like this shell-completion-aware edit dingus that I use for launching into my projects each day.

Because many of these CLIs have separate "safe" and "for real though" modes, I've picked up the convention of giving the editor name in ALL CAPS to mean "give me dangerous mode, please."

So:

$ edit -e claude posse_party

Will open Claude Code in ~/code/searls/posse_party in normal mode.

And:

$ edit -e CLAUDE posse_party

Will do the same, while also passing the --dangerously-skip-permissions flag, which I refuse to type.

Posts on Kevin Murphy 

Frequently Played August 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.

This Is The Killer Speaking 🔗

I pre-ordered the new The Last Dinner Party album right away. Yes, I buy music.I’m old. I’ll be receiving a “compact disc” when it’s released.

Full Lyrics

If only you’d been honest, could have spared this bloodshed
Now I’m wanted ‘cross several county lines
When your hand is bigger than my heart
You can crush it, just the way I like
You got a whole lotta’ nerve and a whole lotta’ spite
When you leave, don’t look me in the eye

As Alive As You Need Me To…

justin․searls․co - Digest 

🔗 Is a Technical Debt ZIRP a good thing?

A few days back, I linked to Scott Werner's clever insight that—rather than fear the mess created by AI codegen—we should think through the flip side: an army of robots working tirelessly to clean up our code has the potential to bring the carrying cost of technical debt way down, akin to the previous decade's zero-interest rate phenomenon (ZIRP). Scott was inspired by Orta Therox's retrospective on six weeks of Claude Code at Puzzmo, which Orta himself wrote after reading my own Full-breadth Developers post.

Blogging is so back!

If you aren't familiar with Brian Marick, he's a whip-smart thinker with a frustrating knack for making contrarian points that are hard to disagree with. He saw my…

Jardo.dev: Blog 

How to Tame Your Mastodon Feed

Mastodon is a platform where you get out what you put in. The lack of recommendations make it hard to onboard. There's no algorithmic feeds of posts to browse or "who to follow" algorithms pushing you to start following immediately. This is definitely one of the many things that platforms like Bluesky do much better than Mastodon, helping drive their adoption.

I'm not here to critique Mastodon, though. My feed is plenty busy, in fact too busy. Fortunately, Mastodon's lists make it really easy to get to the content I care about, and provide me with something to look at when I just want to scroll.

In the web interface, lists are accessed on the right of the feed. Clicking on "Lists" there…

Jardo.dev: Blog 

Generating Custom Open Graph Images

Open Graph images are the images that you see when you share a page on social media. The goal of the Open Graph Protocol is to expose information about web pages so that they can "become a rich object in a social graph". I don't know how much that goal is achieved by the protocol, but I like when my posts have nice preview images. It helps them stand out.

There are a ton of different ways to use these images. Some bloggers have a big banner image for each post and use that for the social image. Some blogs just pull the first image in the post as the social sharing image. Others do what I do, render a custom image that contains the logo for my site, the title of the post, and a little…

Island94.org 

Everything I know about AI, I learned by reading the AWS Bedrock Client Ruby SDK code

This essay is a little bit about me and how I solve problems, and a little bit about AI from the perspective of a software developer building AI-powered features into their product.

The past week at my startup has been a little different. I spent the week writing a grant application for “non-dilutive funding to accelerate AI-enabled solutions that help governments respond to recent federal policy changes and funding constraints in safety net programs.” It wasn’t particurly difficult, as we’re already deep into doing the work 💅 …but it was an interesting experience breaking that work down into discrete 250-word responses, all 17 (!) of them on the grant application.

O…

Julik Tarkhanov 

If you need subdomains: just use subdomains

Eelco recently wrote about using subdomains in Rails, outlining a seemingly neat idea about having them as subdomains in production but using paths in development. It is clever and looks very usable at first sight. It’s also a very bad idea that is likely to get you side effects you really won’t be happy about. I normally don’t do “rebuttal” posts, but in this case — since I have dealt with that problem before — it feels warranted. Without being too lyrical about it, I want to outline why you don’t want to use that approach and propose a couple of alternatives.

So, the proposition is this. In production, your tenants/sites are on subdomains called something like site1.product.com, site2.pr…

Ruby on Rails: Compress the complexity of modern web apps 

Support for rack.response_finished callbacks in executor

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

Add support for “rack.response_finished” callbacks in Action Dispatch’s Executor
The executor middleware now supports deferring completion callbacks to later in the request lifecycle by utilizing Rack’s rack.response_finished mechanism, when available. This enables applications to define callbacks that may rely on state that would be cleaned up by the executor’s completion callbacks.

Enable configuring Action View’s render tracker
You can opt-in to the new parser with config.action_view.render_tracker = :ruby or load_defaults(8.1). This new render tracking implementation was added in Rails 7.2, the RubyTracker.

Add…

RubyGems Blog 

Update on Malicious Gems Removal

We are aware of a recent report about malicious gems that were targeting social media credentials. Our team first detected this activity on July 20th and began removing the affected gems immediately through our regular security processes.

We want to reassure the Ruby community that this issue has already been taken care of and is no longer an active threat. It involved a small number of gems from bad actors and does not impact widely used or trusted packages.

Security is part of our daily operations. We remove suspicious gems regularly, typically before issues are reported by third parties (our systems detect 70-80% of the gems we ultimately remove). While we don’t announce every action…

RubySec 

CVE-2025-54887 (jwe): JWE is missing AES-GCM authentication tag validation in encrypted JWE

### Overview The authentication tag of encrypted JWEs can be brute forced, which may result in loss of confidentiality for those JWEs and provide ways to craft arbitrary JWEs. ### Impact - JWEs can be modified to decrypt to an arbitrary value - JWEs can be decrypted by observing parsing differences - The GCM internal [GHASH key](https://en.wikipedia.org/wiki/Galois/Counter_Mode) can be recovered ### Am I Affected? You are affected by this vulnerability even if you do not use an `AES-GCM` encryption algorithm for your JWEs. ### Patches The version 1.1.1 fixes the issue by adding the tag length check for the `AES-GCM` algorithm. **Important:** As the [GHASH…
Remote Ruby 

Herb with Marco Roth

In this episode of Remote Ruby, Andrew and Chris chat with guest, Marco Roth, to discuss the challenges of working with ERB templates in Ruby on Rails, and Marco's ongoing project, Herb. They dive into Marco's inspiration from tools like Stimulus Reflex and Hotwire, and the broader vision for 'Herb' which includes syntax linting, formatting, enhanced error detection, and a future where React components can be seamlessly integrated with ERB templates. They also touch on the potential of using 'Herb' to make local development smoother via hot reloading, and the importance of community feedback and collaboration. Additionally, Marco shares his experiences speaking at various Ruby conferences…

Judoscale Dev Blog 

Post-mortem: No upscaling for 12 hours

It’s an embarrasing day for Judoscale. Last night through this morning we had our longest and most severe production incident in history, and we didn’t know anything was wrong for almost 12 hours. It was caused by some unexpected data and a line of code that never should have been written.

In this post I’ll air our dirty laundry and tell you exactly what happened, where we screwed up, and how we’re fixing it.

The timeline

  • 00:25 UTC: Upscaling stopped working for most Judoscale customers. We were not aware of this at the time.
  • 12:00 UTC: Carlos begins his day and opens our support queue to find 30 new messages (1-2 is typical). He updates our status page and begins investigating.
Awesome Ruby Newsletter 

💎 Issue 481 - The /o in Ruby regex stands for "oh the humanity "

Planet Argon Blog 

Solving Workflow Chaos with Dia Browser

Solving Workflow Chaos with Dia Browser

Mornings used to mean tab overload and tool chaos. Now, thanks to Dia, it starts with one script, one summary, and a clear head.

Continue Reading

JRuby.org News 

JRuby 10.0.2.0 Released

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

JRuby 10.0.2.x targets Ruby 3.4 compatibility.

Thank you to our contributors this release, you help keep JRuby moving forward!

7 Issues and PRs resolved for 10.0.2.0

Ruby Weekly 

Fixing the `json` gem's API

#​762 — August 7, 2025

Read on the Web

Ruby Weekly

What’s Wrong with the JSON Gem API? — Fed up with json’s unsafe defaults? Following on from his fantastic deep dive into json’s performance, Jean is back with thoughts on json’s API, changes he’s making, forthcoming deprecations, and why shedding global state is a worthwhile trade-off.

Jean Boussier

Wat?! Why Is Literally Everything Broken? — TFW you scale super fast: nothing works, everyone is frustrated with everything, and you don’t know what to fix or where to start. Our pragmatic assessments uncover root causes and prioritize real fixes we can help…

Te…

Rails Designer 

Create a macOS-inspired stack UI with Stimulus and Tailwind CSS

The other day I accidentally enabled the “fan” option in my dock’s application folder (I have it normally set to just “list”). But this incident inspired me to recreate the effect in Rails with a simple Stimulus controller and lots of Tailwind CSS goodies.

(side-note: an early reader of this article mentioned that Hey uses a similar effect for their “trays”)

It made for a good case to show how much can be done with (Tailwind-flavored) CSS. And while this article uses Tailwind CSS, it can be easily replicated with just CSS. 💡

This is the component I am aiming for:

What will be covered in this article:

  • Tailwind CSS grouping;
  • Data variants with group modifiers;
  • Using Stimulus FX…

As often the code…

Ruby Central 

Reflections on RailsConf 2025 From Shan Cureton, Executive Director of Ruby Central

Reflections on RailsConf 2025 From Shan Cureton, Executive Director of Ruby Central

This was my first time at RailsConf and my first time attending a Ruby Central-powered conference as Executive Director.

Going in, I had heard there was something magical about the Ruby community, but I didn’t yet understand what that meant. Throughout the conference, in small micro-conversations, I started to feel it.

By the end, it hit me a hundred times over.

Reflections on RailsConf 2025 From Shan Cureton, Executive Director of Ruby CentralShan Cureton, Executive Director of Ruby Central, at RailsConf 2025

There was something deeply meaningful about hearing from attendees about why they come to this conference, and how this year felt uniquely different from years past. That kind of feedback matters, especially as Ruby Central is asking big questions about what comes…

I sat across tables from passionate local meetup organizers who shared about their attendees and how they hope to work with us in the future. I could feel how…

naildrivin5.com - David Bryant Copeland's Website 

Please Create Debuggable Systems

When a system isn’t working, it’s far easier to debug the problem when that system produces good error messages as well as useful diagnostics. Silent failures are sadly the norm, because they are just easier to implement. Systems based on conventions or automatic configuration exacerbate this problem, as they tend to just do nothing and produce no error message. Let’s see how to fix this.

Rails popularized “convention over configuration”, but it often fails to help when conventions aren’t aligned, often silently failing with no help for debugging. This cultural norm has proliferated to many Ruby tools, like Shopify’s ruby-lsp, and pretty much all of Apple’s software design.

  • I asked…
Evil Martians 

Redprints CFP: an open source CFP management app built with Rails + Inertia.js

Authors: Vladimir Dementyev, Principal Backend Engineer, and Travis Turner, Tech EditorTopics: Open Source, Developer Community, Rails, JavaScript, Tailwind CSS, Vibe coding

Introducing Redprints CFP, an open source CFP management application built for the SF Ruby Conference with Rails and Inertia.js.

At Evil Martians, when it comes to writing custom software, we have a strong open-source-first culture. This means we're always thinking about which parts of our projects we can open-source as libraries or tools to share with the community. Our portfolio is massive and very diverse, but it's missing one particular "species" of open source: full-featured applications. But that changes today!…

Ruby on Rails: Compress the complexity of modern web apps 

Fullscript joins the Rails Foundation

The Rails Foundation is happy to welcome Fullscript our newest Contributing member.

Fullscript is a leading healthcare platform powering whole person care, helping over 100,000 providers and 10 million patients with seamless access to high-quality supplements, industry-leading labs, and smart adherence tools via a full suite of clinical tools built on Rails.

Fullscript launched on Rails 3.2 in 2011, and that original Rails monolith now runs on Rails 7.2 (with Rails 8 on the horizon), has over 1.6 million lines of Ruby, and leverages the new SolidQueue for background jobs. It serves both an internal GraphQL API for their React MPA, and an external REST API, and connects to 3 separate…

Matzにっき 

BenQ ScreenBar Halo 2商品レビュー

BenQ ScreenBar Halo 2商品レビュー

BenQさまからモニター用にScreenBar Halo 2をご提供いただきました。実は前作 ScreenBar Halo も頂いておりありがたい限りです。今回は前作との比較も含めてレビューします。

まず、設置はとてもかんたんで、ケーブルをつないで、モニターの上に乗せるだけです。前作でもかんたんでしたが、バネ部がよりソフトになったりいろいろと改良が加えられているようです。あと、接続ケーブルが独立したUSB-Cケーブルになったのは長さ調整の点からは嬉しいかな。

モニターランプとしては、前作よりもさらに広い範囲で手元が明るくなります。より手元が見やすくて嬉しいです。前作同様モニターへの映り込みもほとんどありません。より正確には、照らされて明るくなった手元が暗い画面だと少々映り込みますが、あまり気になりませんでした。

数字が見えるワイヤレスリモコン

今回、もっとも改善された点はこのリモコンでしょう。前作のリモコンは乾電池駆動でしたが、今回は充電式になっています。前作で時々取れやすかった電池蓋問題がないのはいいですね。バッテリーはずいぶん長持ちするようで、しばらく使っていますが数週間程度ではなくならないようです。他に改善点として、現在の明るさレベル、色温度などがデジタル表示されるようになりました。もちろん、明るさも色温度もランプを見ればわかることではあるのですが、デジタル表示はガジェット感が向上していますね。もうちょっと暖かみがほしいとか、クールな方が良いとか自由自在です。

センサー付きの賢いライト

センサーがついていて、オートモ…

Josh Software 

When Urgent Fixes Can’t Wait: How to Patch Packages in Production

There’s a special kind of panic that hits developers right before a big release.You’ve checked everything, your tests are passing, the staging environment is stable, and the business team is counting on you to go live today. Then, at the last minute, you discover something you didn’t expect: a bug, a missing feature, or an … Continue reading When Urgent Fixes Can’t Wait: How to Patch Packages in Production
Evil Martians 

What we learned from creating PostCSS

Authors: Andrey Sitnik, Author of PostCSS and Autoprefixer, Principal Frontend Engineer, and Travis Turner, Tech EditorTopics: Open Source, Accessibility, CSS, JavaScript

We share what have we learned creating PostCSS and the huge ecosystem around it. Get 8 key lessons from Andrey Sitnik, creator of PostCSS.

12 years ago, we created PostCSS, a CSS automation tool with 400M monthly downloads which is used by Google, Wikipedia, Tailwind, and 38% of developers. In this post, we share what we learned during this long journey maintaining such a popular open source project.

The Rails Tech Debt Blog 

Is It Ruby or Rails? Introducing Our New Discord Bot

At FastRuby.io, we spend our days deep in Rails codebases, upgrading, refactoring, and occasionally wondering, “Wait… is this method from Ruby or Rails?”.

Now, we’re turning that moment of confusion into a game. We’re excited to introduce Is It Ruby or Rails?, a brand new Discord bot that delivers daily puzzles to challenge your Ruby knowledge and fuel a little friendly competition.

You can install it using the Discord install link and start playing right away!

How It Works

Every day, the bot will share a new puzzle in the channel of choice.

Puzzle Example

The task is to correctly identify if what’s being shown comes from Ruby or Rails. Upon answering, the bot will provide immediate feedback.

Answer Feedback

justin․searls․co - Digest 

📄 Letting go of autonomy

I recently wrote I'm inspecting everything I thought I knew about software. In this new era of coding agents, what have I held firm that's no longer relevant? Here's one area where I've completely changed my mind.

I've long been an advocate for promoting individual autonomy on software teams. At Test Double, we founded the company on the belief that greatness depended on trusting the people closest to the work to decide how best to do the work. We'd seen what happens when the managerial class has the hubris to assume they know better than someone who has all the facts on the ground.

This led to me very often showing up at clients and pushing back on practices like:

  • Top-down mandates…
Short Ruby Newsletter 

Short Ruby Newsletter - edition 144

The one where Ruby Conf Austria is announced, Alexandru Golovatenco launches railsblocks.com with over 175 UI components, and Oskars Ezerins creates a website for Ruby LLM benchmarks.
Gusto Engineering - Medium 

From Practice to Pitch: A Tech Intern’s Guide to Interviewing

Graduating with a CS and Math degree from college was tough — but juggling that with collegiate soccer took it to another level. On top of that, the pressure to find the perfect internship and prepare for interviews made it an even greater challenge. I think a lot of students can relate.

When I first started interviewing, I felt like I needed to have it all: the perfect resume, flawless technical skills, and zero nerves. But over time, I realized interviewing is a lot like soccer. It’s not about being perfect — it’s about showing up prepared, staying confident under pressure, and performing when it counts.

My soccer career has taught me that there’s nothing more rewarding than showing up to a…

Avo's Publication Feed 

Building a Superglue App in Rails

Let's learn how to build a project tracking application for freelancers using Superglue and Vite.
Write Software, Well 

Create a Staging Environment in Rails and Deploy with Kamal

Create a Staging Environment in Rails and Deploy with Kamal

This is the third post in my series on building this blog from scratch with Ruby on Rails. Check out all the posts in the series here: Rails in Practice

I’m Rebuilding Write Software, Well Blog in Ruby on Rails
After three years on Ghost, I’m rebuilding this blog from scratch with Ruby on Rails. In a new series, I’ll document the journey of building a production Rails application, from development to deployment. Follow along as I build the new home for Write Software, Well.
Create a Staging Environment in Rails and Deploy with Kamal

Now that we've provisioned the app and database servers, the next step is to create a staging environment in our Rails application so we can deploy and test the blog in a safe place before we…

In this post, we'll…

justin․searls․co - Digest 

📄 "There Will Come Soft Rains" a year from today

Easily my all-time favorite short story is "There Will Come Soft Rains" by Ray Bradbury. (If you haven't read it, just Google it and you'll find a PDF—seemingly half the schools on earth assign it.)

The story takes place exactly a year from now, on August 4th, 2026. In just a few pages, Bradbury recounts the events of the final day of a fully-automated home that somehow survives an apocalyptic nuclear blast, only to continue operating without any surviving inhabitants. Apart from being a cautionary tale, it's genuinely remarkable that—despite being written 75 years ago—it so closely captures many of the aspects of the modern smarthome. When sci-fi authors nail a prediction at any point in…

RubyMine : Intelligent Ruby and Rails IDE | The JetBrains Blog 

RubyMine 2025.2: Junie and AI Assistant Upgrades, Faster Rails Project Startup, Enhanced Bundler Management, and More

RubyMine 2025.2 is out!

In this blog post, we briefly go over the highlights of this release. For a detailed description, check out our What’s New page. 

You can get the new build from our website or via the free Toolbox App.

AI Assistant

JetBrains AI Assistant has received a major upgrade, offering smarter code completion, greater project awareness, and more control over AI in your IDE. Below is an overview of the main improvements. Read the full article here.

Code completion for ERB

Cloud-based code completion for ERB has been expanded to work directly within ERB tags like <% <caret> -%> and <%= <caret> %>. This feature builds on RubyMine’s existing AI-based code…

RichStone Input Output 

[3/4] Code with LLM teams

[3/4] Code with LLM teams

Your LLM agent will launch subagents to perform the tasks you give it in teams.

Remember in [1/4] Code with LLMs and a PLAN I talked about how I tweaked an effectively working prompt to skip the step of asking the LLM to first add what it will do to the existing PLAN.md? And in [2/4] Code with LLMs and default instructions how does CLAUDE.md help your agent get the right setup for each conversation? Subagents execute the tasks you assign them in a well-prepared manner, well-equipped for each step with the proper context.

The Claude On Rails gem automates the setup of these subagents by creating an .md file for each subagent specialist tailored to Rails. For example, if views need to be made…

Hotwire Weekly 

Week 31 - AnyCable for Laravel, How Hotwire Native works, and more!

Hotwire Weekly Logo

Welcome to Hotwire Weekly!

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


📚 Articles, Tutorials, and Videos

Add Konami Codes with Stimulus - Rails Designer demonstrates how to implement the classic Konami cheat code using a reusable Stimulus controller. It captures key sequences, compares them against the defined pattern, and dispatches a custom sequence:matched event.

AnyCable for Laravel: reliable WebSocket infrastructure - Vladimir Dementyev introduces AnyCable for Laravel, a Go‑powered, production‑grade WebSocket server that integrates with Laravel events and Echo for at‑least‑once delivery, automatic reconnection, and fallback transports.

Simplicity, vanished?!…

justin․searls․co - Digest 

🎙️ Breaking Change podcast v41 - Liquid Glasshole

Direct link to podcast audio file

I've made it! I'm over the hump! I'm actually writing* my language-learning app in Swift!

Send an email expressing how proud you are of me to podcast@searls.co. Or if there's any news worth following that isn't about AI. Too much AI stuff lately.

*And by "I'm writing", I admit Claude Code is doing a lot of the heavy lifting here.

Hyperlinks:

Drifting Ruby Screencasts 

Model Context Protocol

Model Context Protocol (MCP) is an API interface for your applications that are formatted in a way that machine learning platforms can interact with them. They can be used to generate AI insights, perform tasks based on user input or other things.
code.dblock.org | tech blog 

How to Disagree and Commit like Switzerland

The most abused principle in dysfunctional organizations is “Disagree and Commit”. In Don’t Tell Engineers What to Do I said that “telling people what to do, especially if they are in your direct reporting chain, must not be mistaken for “Disagree and Commit”.

So, what is a healthy “Disagree and Commit”?

The best example I know is the Swiss government. Even when individual members of the Federal Council personally oppose a popular initiative, they publicly defend and implement it once it’s approved, acting as a unified body. This approach ensures stable governance and respect for democratic decisions, as officials set aside personal views to uphold the collective will and present a united…

justin․searls․co - Digest 

🔗 There is no 'AI' in 'Team'

Scott Werner, who is frustratingly good at writing what I'm thinking about LLMs, has a new post out where he compares being an "agentic" coder to being an octopus, with each arm being a separate instance of Claude Code independently thinking and acting on its own. It's a good post and you should read it.

In the middle, he said the thing that was what first came to mind when I saw the image of the octopus in this context:

Here's the thing about teams now:

Two developers on one codebase is like two octopuses sharing one coral reef. Technically possible. Practically ridiculous. Everybody's arms getting tangled. Ink everywhere. The coral is screaming (coral doesn't scream, but work with me…

RichStone Input Output 

[2/4] Code with LLMs and default instructions

[2/4] Code with LLMs and default instructions

This will be a quick one, and if you get this one right, your coding buddies will run more smoothly on average because they will get stuck less and have clearer directions for each conversation session.

I guess for the Cursor and Co. people, it will be something like the cursor/rules file. For the state-of-the-art models like Codex, Claude Code, and Amp you'll have something like a CLAUDE.md file. This piece of information is typically ingested as context on the start-up of the conversation.

This is where you give the LLM a basic overview of your codebase and project. When you set up Claude Code for a project, there is an /init option that makes Claude analyze your project and fill the CLAUDE…

byroot’s blog 

What’s wrong with the JSON gem API?

As I mentioned at the start of my Optimizing Ruby’s JSON series of posts, performance isn’t why I candidated to be the new gem’s maintainer.

The actual reason is that the gem has many APIs that I think aren’t very good, and some that are outright dangerous.

As a gem user, it’s easy to be annoyed at deprecations and breaking changes. It’s noisy and creates extra work, so I entirely understand that people may suffer from deprecation fatigue. But while it occasionally happens to run into mostly cosmetic deprecations that aren’t really worth the churn they cause (and that annoys me a lot too), most of the time there’s a good reason for them, it just is very rarely conveyed to the users, and…

Jardo.dev: Blog 

Let's Get Baked

I just made the same mistake I always make; I named a file containing some Rake tasks with the wrong file extension, .rb instead of .rake. This is made all the more embarassing because I'm not working on a Rails app. This is the Ruby/Rack app we're building at Super Good and I'd just written the code that grabbed all the lib/tasks/*.rake files and loaded them. Old habits die hard.

When I posted about it, Sean Collins pointed me towards Bake, an alternative to Rake created by Samuel Williams. (That sentence had too many links.) There's nothing wrong with Rake, but the Bake README explains that it improves on Rake in four main ways:

  • On demand loading of files following a standard…
RubySec 

CVE-2025-54572 (ruby-saml): Ruby SAML DOS vulnerability with large SAML response

### Summary A denial-of-service vulnerability exists in ruby-saml even with the message_max_bytesize setting configured. The vulnerability occurs because the SAML response is validated for Base64 format prior to checking the message size, leading to potential resource exhaustion. ### Details `ruby-saml` includes a `message_max_bytesize` setting intended to prevent DOS attacks and decompression bombs. However, this protection is ineffective in some cases due to the order of operations in the code: https://github.com/SAML-Toolkits/ruby-saml/blob/fbbedc978300deb9355a8e505849666974ef2e67/lib/onelogin/ruby-saml/saml_message.rb ```ruby def decode_raw_saml(saml, settings = nil) …
Ruby Central 

RubyGems.org Funding Model & A New Path For Community-Led Growth

RubyGems.org Funding Model & A New Path For Community-Led Growth

TL;DR: Today, we’re launching a sustainable and community-driven funding model for RubyGems.org infrastructure, maintenance, and security.

If you build with Ruby, join us in keeping RubyGems.org, RubyGems, and Bundler secure and sustainable for years to come. Contribute here or share this with your company leadership.


At Baltic Ruby in June, I delivered a keynote on building sustainable open source through the lens of RubyGems.org.

What struck me most was how many attendees didn’t realize that Ruby Central, a nonprofit dedicated to supporting the Ruby ecosystem, is responsible for maintaining RubyGems.

RubyGems.org powers over 1,500 gem requests per second, supports billions of downloads per…

Alchemists: Articles 

Ghosting

Cover
Ghosting

Ghosting is the loathsome act of cutting off all communication with someone without explanation, warning, or any sense of closure. The person being ghosted is left with no response to any form of communication which creates a sudden and absolute silence. This is akin to how a "ghost" might disappear without a trace.

Typically, ghosting occurs in interpersonal relationships: romantic, platonic, or professional. All are concerning, especially the latter, because professional conduct and reputation is important (maybe more than ever). What’s disturbing is the increase in the lack of responses when communicating with others.

During the latter part of the pandemic (roughly…

Ruby on Rails: Compress the complexity of modern web apps 

relative_time_in_words, current transaction’s isolation level and more!

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

New written & video tutorials for beginners
The Rails Foundation has launched a few more learning resources for beginners, in partnership with Chris Oliver and the team behind Typecraft - Chris Power and Robert Beene.

Log when rescue_from handles an exception
This pull request adds a log message indicating when an exception was raised in before_action callbacks.

Allow hosts redirects from hosts Rails configuration
With this change, it is possible to allow hosts redirects from the Rails configuration:

    config.action_controller.allowed_redirect_hosts << "example.com"

rate_limit notification instrumentation to…

Hi, we're Arkency 

Watch out for this one deprecation warning when upgrading from Rails 7.1 to 7.2 on Heroku

Watch out for this one deprecation warning when upgrading from Rails 7.1 to 7.2 on Heroku

We recently upgraded Rails from 7.0 to 7.1 for one of our clients. It went smoothly. When Rails 7.1 went live, we were pleased to see a new set of deprecation warnings. To avoid being overwhelmed by them, we decided to address the issue right away. However, we ran into a nasty issue…

The one with nasty issue

The application didn’t crash.

The server wasn’t throwing 500s like a crazy Viking throwing axes.

Either of those would have been better. The worst that can happen is silence.

The deprecation warning was:

[DEPRECATION] DEPRECATION WARNING: `Rails.application.secrets` is deprecated 
in favor of `R…

We moved all…

danielabaron.me RSS Feed 

Off the Chart: Candid Conversations in Health Care

A reflection on navigating the Canadian health care system during a loved one's medical crisis, and a proposal for a convention to foster more honest, human conversations between patients and clinicians.
Remote Ruby 

Rolling Out Features and Rails 8 Insights

Chris and Andrew catch up on their week, discussing Andrew’s recent successful feature launch, their love for South Park, and the recent news about a $1.5 billion deal with Paramount. They go back-and-forth on upgrades to Bundler 2.7 and the intricacies of emoji reactions in their app. Debugging, code refactoring, and the importance of testing are discussed, with mentions of pairing with coworkers and using WebSockets for real-time updates. They dive into technical discussions about Ruby, Rails updates, and their use of Flipper for feature toggles. They also talk about the new Rails tutorial, the implications of ongoing sanitization and upgrades, and the anticipation for upcoming Ruby…

Avo's Publication Feed 

Visual breakpoint debugging for responsive Rails applications with TailwindCSS

A development-only Rails ERB snippet that displays the current Tailwind CSS breakpoint in a fixed overlay, helping developers debug responsive layouts by showing which breakpoint is active.
Julik Tarkhanov 

Carried datasets, SQLite and Gaelic heritage

A while ago, Simon Willison expressed the idea that SQLite enables a very neat pattern whereby software can carry its datasets in the form of SQLite databases. Such a database is to be used only to read from, and actually presents a very neat, portable, universal data structure for querying a dataset that would otherwise need to be loaded into memory and structured manually. For dynamic and interpreted languages this is actually even more relevant, because loading a sizeable chunk of data from source code involves running the actual language parser over that dataset. That can be quite wasteful. Recently, I’ve bumped into a number of cases where I could apply that pattern, and the results…

RichStone Input Output 

[1/4] Code with LLMs and a PLAN

[1/4] Code with LLMs and a PLAN

I'm fortunate enough to work every day with the state-of-the-art coding agents, most recently Claude Code, and I've also explored various resources from developers who push the boundaries and produce significant work with top-tier agents. We all need to level up together in this wild west of AI coding and share the good, the bad, and the ugly along the way. So, I'll be flooding everyone's inboxes with four articles on my most recent experiences and learnings in the space over the next few days.

Your very fundamental first step to get right when coding with LLM agents is your process. It's actual teamwork. On the highest level, it should look like this:

🤖
1. Make the LLM agent create a PLAN.md…
Awesome Ruby Newsletter 

💎 Issue 480 - Announcing Passive Queue: The Rails Background Job System That Transcends Processing

Ruby on Rails: Compress the complexity of modern web apps 

New written & video tutorials for beginners

The Rails Foundation has launched a few more learning resources for beginners, in partnership with Chris Oliver and the team behind Typecraft - Chris Power and Robert Beene.

Here’s what they are and where you can find them:

New tutorial: Sign Up & Settings

When we updated the Getting Started tutorial last year, we designed it to be the foundation for a series of follow‑up tutorials that add real features to the e‑commerce app you build, helping you grow your Rails skills step by step.

This is also why we changed the app in the Getting Started tutorial from a blog to an e‑commerce shop. A shop offers more opportunity to add meaningful features (features that you might also add to a real…

Today, we’re…

Ruby Weekly 

Implementing code reloading for Rack apps

#​761 — July 31, 2025

Read on the Web

Ruby Weekly

Code Reloading for Rack Apps — If you’re working with Rack-backed apps that aren’t Rails apps, you might miss some of Rails’ niceties like code reloading. Jared shows how to use Zeitwerk, Listen and Concurrent Ruby to recreate the experience, whatever you’re using.

Jared Norman

💡 On the topic of Rack, Rack 3.2.0 has just been released.

🧰 Small Team? Big Rails App? Bonsai Can Bridge the Gap — Are you a team of one (or a few) juggling too much tech debt? Bonsai helps you stay productive by handling upgrades, dependency management, security patches, and…

Bons…

Judoscale Dev Blog 

How Judoscale's Utilization-Based Autoscaling Works

A few weeks ago we announced that we’d been cooking up a brand new way of autoscaling — a proactive scaling approach based on maintaining a preferred level of server ‘utilization’. That announcement and post served to explain how this new form of scaling works at a high level and what you should expect from it, but we’d like to pull back the curtain and give you some insight into the gritty details. What is “utilization”? What does it have to do with computers and servers? How are processes and threads involved here? Strap on your deep-dive snorkel, we’re going in!

On ‘Utilization’

One of the most difficult components of software development is naming. Determining the best…

Rails Designer 

Add Konami Codes with Stimulus

In almost every (SaaS) app (and marketing sites) I built, I added (at some point), a little Easter egg. Small, little things, tweaks or jokes to the UI I would tell no one about, but that would certainly put a smile on their face.

One way I have done this is by using a Konami code. The Konami code (↑ ↑ ↓ ↓ ← → ← → B A) originated in Japan in the 1980s as a cheat code for Konami video games. The code became legendary when it was included in Contra (1987), where it gave players 30 extra lives. Since then, it has appeared in hundreds of games and websites as a cultural Easter egg.

Today I like to show how to add this in a reusable way by using Stimulus’ Values API and using (dispatching) a…

Josh Software 

All Superheroes Don’t Wear Capes

We had the opportunity to visit the Pra Foundation, a safe home for children with special needs including those with Cerebral Palsy with the Josh team over the weekend. This was a pre planned one day road trip and just like myself the others on the team had an intent to help the institution and … Continue reading All Superheroes Don’t Wear Capes
Blogs on Noel Rappin Writes Here 

Programming Proverbs in 1975 and 2025

As developers, we tend to think that our best practices are universal laws that we’ve discovered and which get refined over time. That’s true to an extent, but I think we underrate the ways our environment and technology shape what a best practice even is or what the best way to use a developers time might be. Looking at the past can help us calibrate what is and is not part of our environment.

Recently, I was at a used book sale and I came across this:

The cover of Programming Proverbs by Henry F. Ledgard, from 1975

It’s a book called Programming Proverbs by Henry F. Ledgard and it was published in 1975, and apparently written even earlier than that. Naturally, I was intrigued, especially given the price (effectively zero, the sale was $1 for all the…

Planet Argon Blog 

Nostalgia Meets New Ideas at RailsConf 2025

Nostalgia Meets New Ideas at RailsConf 2025

RailsConf 2025 marked the end of an era and the start of new possibilities. From nostalgic reflections to fresh ideas and tools, here are the key takeaways and inspirations one of our developers brought back to Planet Argon.

Continue Reading

Evil Martians 

Simplicity, vanished?! Solving the mystery with Inertia.js + Rails

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

Has simplicity gone missing in web development? This investigative piece uncovers how Inertia.js + Rails defy JavaScript bloat and reclaim developer sanity.

The front-end development racket has been running the same con for years now. Walk into any dev shop and you'll see the same sorry picture: smart developers drowning in tooling they don't need, solving problems that didn't exist until someone sold them the solution.

Write Software, Well 

Let's Configure a PostgreSQL Database Server for the Blog

This is the second post in my series on building this blog with Ruby on Rails. You can read the following post for more context, and here’s the full list of posts in the series.
I’m Rebuilding Write Software, Well Blog in Ruby on Rails
After three years on Ghost, I’m rebuilding this blog from scratch with Ruby on Rails. In a new series, I’ll document the journey of building a production Rails application, from development to deployment. Follow along as I build the new home for Write Software, Well.
Let's Configure a PostgreSQL Database Server for the Blog
Let's Configure a PostgreSQL Database Server for the Blog

In the previous post, I created a new Rails application for my blog. In this post and the next one, I will deploy the app to a staging environment.

Personally, I prefer…

code.dblock.org | tech blog 

Don't Tell Engineers What to Do

A famous example where telling Engineers what to do backfired was the Space Shuttle Challenger disaster in 1986. Engineers at Morton Thiokol, the contractor responsible for the shuttle’s solid rocket boosters, warned NASA management that the O-rings in the boosters could fail in cold weather. The night before launch, engineers strongly recommended delaying the launch due to unusually low temperatures. Management, under pressure to proceed, overruled the engineers’ concerns and told them to “make a recommendation based on data, not emotion.” Eventually, management told the engineers to sign off on the launch, despite their objections. The shuttle launched in cold weather, the O-rings failed,…

Radan Skorić's website 

Turbo adapter: Hotwire Native's backdoor entrance

Understanding exactly how Hotwire Native integrates with the web app can be very helpful both in debugging issues and deciding if Hotwire Native is the right choice in the first place. In particular, it’s useful to understand how it takes over web navigation so it can make it feel native. This is exactly what this article explains. First, a Haiku version: A native embrace, The blossom of ...
code.dblock.org | tech blog 

Using Claude Code with Google Sheets

Let’s get Claude Code to connect to Google Sheets. We’ll use this Google Sample Spreadsheet.

Go to the Google Cloud Console, create a new project, and enable the Google Sheets API on it.

Install the Google Cloud CLI.

brew install google-cloud-sdk

Choose the newly created project on the command line.

~$ gcloud config set project gsheetscli

Updated property [core/project].

Login again, but this time enable Google Drive access.

gcloud auth login --enable-gdrive-access

You can now access the spreadsheet with curl.

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://sheets.googleapis.com/v4/spreadsheets/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/values…
{
  "range": 
Ruby Magic by AppSignal 

Build Custom ActiveStorage Analyzers for Ruby on Rails

In this series, we will take a close look at the architecture of ActiveStorage for Rails.

In this first part, we will examine how ActiveStorage treats uploaded data and how to extend this process. The second part will explore how to augment the presentation of uploaded assets.

But first, let's quickly define what ActiveStorage does.

What Is ActiveStorage for Ruby on Rails?

Without recounting the entire ActiveStorage documentation, in a nutshell, ActiveStorage is an adapter to various forms of storing (mostly) user-generated files in your Ruby on Rails application in a straightforward way. The available storage backends can be divided into:

  • Local disk storage
  • Diverse flavors of cloud…
justin․searls․co - Digest 

🔗 Upside-Down Development

Consider this one of a thousand signposts I'll erect for the sake of anyone on the journey to becoming a full-breadth developer. What's discussed below is exactly the sort of thing that will separate the people who successfully wrangle coding agents from the people doomed to be replaced by them.

This post by Jared Norman about the order in which we design computer programs got stuck in my craw as I was reading it:

When you build anything with code, you start somewhere. Knowing where you should start can be hard. This problem contributes to the difficulty of teaching programming. Many programmers can't even tell you how they decide where they start. It turns out that thinking of somewhere…

Evil Martians 

AnyCable for Laravel: reliable WebSocket infrastructure

Authors: Vladimir Dementyev, Principal Backend Engineer, and Irina Nazarova, CEOTopics: Real-time, Open Source, DX, Real-time features

We built AnyCable for Rails seven years ago. Now it's Laravel's turn.

SINAPTIA 

Scaling image classification with AI

At SINAPTIA, we’re always looking for innovative ways to leverage AI to solve real-world problems. Recently, we had the opportunity to work with Rightboat, a leading boat marketplace, to tackle a massive image classification challenge that was impacting both user experience and internal operations.

The Problem

Rightboat’s platform hosts thousands of boats. Some of them have more than 200 images. However, these images lacked any descriptive information or categorization. Some boats are manually loaded into the system. Their images are curated and sorted by the customer success team, so related images are next to each other. But the great majority of the loading work is automated. This…

katafrakt’s garden 

Micro-slices in Hanami

Slices are my favourite architectural feature in Hanami. They allude to the vertical slices architecture and let you host cross-functional “mini-apps” within your main Hanami projectThe feature itself is present from early days of Hanami, perhaps from the times when it was still called Lotus. Back then it was called apps..

A typical slice file structure (generated by Hanami slice generator) would look like this:

slices
└── admin
    ├── action.rb
    ├── actions
    ├── assets
    │   ├── css
    │   │   └── app.css
    │   ├── images
    │   │   └── favicon.ico
    │   └── js
    │       └── app.js
    ├── db
    │   ├── relation.rb
    │   ├── repo.rb
    │   └── struct.rb
    ├──…
Avo's Publication Feed 

Adding an MCP server to a Rails app

Let's learn how to add an MCP Server to a Rails application to better integrate our app with LLMs and achieve more things with AI.
Short Ruby Newsletter 

Short Ruby Newsletter - edition 143

The one where RubyCentral released all the videos from the final Rails Conf, a lot of new products built with Ruby or for Ruby launched and tickets for SF Ruby Conference are on sale
Jardo.dev: Blog 

Order-Driven Development

The other day, I posted about an article title Use Your Type System. Despite firmly believing that most Ruby applications do not need and should not adopt the static type systems on offer, I'm not anti-static types. I really like static types.

Ismael Celis pointed out that the article has some similarities to the idea of Parse, Don't Validate. That article links to another similar one, called Type Safety Back and Forth. That article got me thinking about how the direction from which we attack a problem affects our solution.

Type Safety Back and Forth

Type Design

The article isn't about outside-in versus inside-out design, so much as it is about the directions which developers do (or…

OmbuLabs Blog 

AI Agents: Implementing the ReAct Pattern in Ruby

AI Agents are everywhere. Every day, tools, libraries, new use cases, and new products come out using and leveraging AI Agents. Several frameworks have been developed to make them easy to build, but what happens under the hood?

A very popular pattern for building AI Agents is the ReAct pattern, meaning Reasoning and Acting. The idea is to get large language models (LLMs) to reason about a problem in a manner analogous to how humans do, by breaking down the problem into smaller steps, reasoning about each step, using tools, and then acting on the results.

Let’s walk through the ReAct pattern and how we can use it to build a simple AI Agent that writes blog posts in Ruby.

The ReAct…

Benoit Tigeot's blog 

Measuring SELECT ... FOR UPDATE Latency in PostgreSQL

At Lifen, we love digging into database performance issues. Recently, while monitoring one of our Rails applications using PgAnalyze and specific logging, we noticed something concerning: around 13–16% of a basic but frequently run query was taking more than 100ms to complete… and sometimes up to 1500ms. The culprit? SELECT ... FOR UPDATE queries that were experiencing intermittent slowdowns. The average time was normally 6ms.

Slow lock acquisition ? #

SELECT ... FOR UPDATE is used to acquire a lock on row during a transaction. We use it to prevent concurrent async tasks from modifying the same row. This can happen, for example, when consuming lots of events from a queue system with an “at…

The obvious…

Sam Saffron's Blog - Latest posts 

Discourse in a Docker container

Probably best ask on meta.discourse.org, our official docker installation support all sort of workflows

Sam Saffron's Blog - Latest posts 

Discourse in a Docker container

HI Sam
Need some suggestions on discourse local development
using vscode devcontianer for local discourse development

Can we run local development with https, for this we need to install ngnix ?
Can we run local development without any port(4200 is default) ?

For local we use discourse.git
For Production we need to use discourse_docker, if yes, after adding custom plugins, themes, using gitlab actions how we can push code to production

if we change any settings of theme, admin,navigation how we can export those to Production without manully adding again in Production site

if possible could you guide how you are manaing the blog for local and how code deploying to produciton

Hotwire Weekly 

Week 30 - RailsConf 2025 talks, Tailwind Primitives for HTML and Vanilla JS, and more!

Hotwire Weekly Logo

Welcome to Hotwire Weekly!

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


📚 Articles, Tutorials, and Videos

RailsConf 2025 Recordings published - The talk and workshop recordings of RailsConf 2025 were just published. You can check all recordings on RubyEvents or on YouTube. Here's a list of the Hotwire-adjecent talks:

RichStone Input Output 

Asking good questions for your product development

Asking good questions for your product development

Have you ever wanted to start a start-up, only to realize that you already run one? Or two?

As part of the Rails Builders group, I aimed to validate a new product idea for Rails shops that already have or want to implement a public API. My first baby step was to reach out to 20 people whom I can learn from about the idea.

But I couldn't. Primarily, I struggled with the topic I would be discussing during my customer conversations. It was challenging to come up with good questions and establish a red line for the upcoming conversation. The product was called unapi.dev, and its subheading contained all the directions it could go:

Asking good questions for your product developmentThe UnAPI team's bold promises.

So, I spent enough time thinking…

Julik Tarkhanov 

Hexatetrahedral Rails

Software is a creative endeavor and a craft. And like any creative endeavor and any craft, it is subject to fashions. About a decade ago, one of those fashions was Hexagonal Rails largely inspired by the DDD book, but also by the original Hexagonal Architecture work by Dr. Cockburn.

Some of these applications are now up for their Rails upgrade and an “oil change,” and it’s interesting to see them in the wild and how they get perceived through the lens of the years that have gone by since then. I call them “hexatetrahedral Rails applications” - in jest, of course - because they often end up presenting complexities that go beyond the intended benefits, sometimes becoming what I’d describe as …

justin․searls․co - Digest 

📄 I made Xcode's tests 60 times faster

Time is our most precious resource, as both humans and programmers.

An 8-hour workday contains 480 minutes. Out of the box, running a new iOS app's test suite from the terminal using xcodebuild test takes over 25 seconds on my M4 MacBook Pro. After extracting my application code into a Swift package—such that the application project itself contains virtually no code at all—running swift test against the same test suite now takes as little as 0.4 seconds. That's over 60 times faster.

Given 480 minutes, that's the difference between having a theoretical upper bound of 1152 potential actions per day and having 72,000.

If that number doesn't immediately mean anything to you, you're not alone.…

Closer to Code 

Announcing Passive Queue: The Rails Background Job System That Transcends Processing

0ms processing time. Infinite scalability. 100% success rate. Zero failures.

GitHub stars ← Give it a star if you enjoyed this zen approach!

The Moment of Zen Clarity

It was Day Two of RailsConf 2025 in sweltering Philadelphia when the idea crystallized. My friend Justin and I were discussing the endless cycle of Rails optimization - everyone building faster queues, better job processors, more efficient background systems.

That's when Justin sparked the initial concept: What if we built a "Passive Job" library?

The idea was brilliant, but as I thought it through, I realized it should align with the existing ecosystem. We weren't replacing ActiveJob itself - we were creating a queue backend.

The Problem…

Ruby on Rails: Compress the complexity of modern web apps 

PostgreSQL 18 warnings, secure password improvements and more!

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

Avoid dynamic encrypting in generated fixtures
Fixtures for passwords now generate a static hash. Previously, fixtures with password digest attributes regenerated the hash on each test run.

Don’t add bundler platforms for JRuby
Fixes Rails Apps on JRuby by not adding extra platforms that cause problems when installing gems.

Make ActiveSupport::Gzip.compress deterministic
ActiveSupport::Gzip.compress now produces consistent output by always setting the gzip timestamp to zero, which eliminates flaky tests while comparing compressed data.

Fix HashWithIndifferentAccess#transform_keys! to avoid collisions
Fixes a bug…

Write Software, Well 

Let's Create a New Rails Application for the Blog

This is the first post in the series on building this blog in Ruby on Rails. Check out the introduction to learn more.
I’m Rebuilding Write Software, Well Blog in Ruby on Rails
After three years on Ghost, I’m rebuilding this blog from scratch with Ruby on Rails. In a new series, I’ll document the journey of building a production Rails application, from development to deployment. Follow along as I build the new home for Write Software, Well.
Let's Create a New Rails Application for the Blog
Let's Create a New Rails Application for the Blog

In this post, we'll create a new Rails project for my blog. I'm assuming you already have the latest versions of Ruby and Rails installed on your machine, along with the PostgreSQL database. To learn how to install Ruby and…

Island94.org 

Consider Thruster with Puma on Heroku

To briefly catch you up to speed if you haven’t been minutely tracking Ruby on Rails performance errata: the Puma webserver has some mildly surprising behavior with the order in which it processes and prioritizes requests that are pipelined through keepalive connections; under load, it can lead to unexpected latency.

Heroku wrote ~3,000 words about this Puma thing, and very smart people are working on it. All of this became mildly important because: Heroku upgraded their network router (“Router 2.0”), which does support connection keepalive, which has the potential to reduce a little bit of latency by reducing the number of TCP handshakes going over Heroku’s internal…

Remote Ruby 

RailsConf 2025 Recap

In this episode of Remote Ruby, Chris and Andrew reflect on their experiences at the final RailsConf in Philly. They discuss their interactions, keynotes, the vibe of community, and favorite talks that stood out. Highlights include reminiscing about Aaron Patterson and Aji Slater's keynotes and their entertaining reflections on 20 years of RailsConf history. They also explore the recent updates and adjustments to technical practices, such as the FerrumPdf gem, handling Turbo Frames requests, and the excitement surrounding the emerging Hotwire Dev Tools extension. Hit the download button now! 

Links