NWRUG's (Manchester, UK) May 2025 Meeting — Rails AntiPatterns Revisited
NWRUG is back in Manchester, UK again this week for another session at Colony One.
Nearly 15 years ago, Rails 3 was born from the merger of Rails 2.x and Merb. Around the same time the book Rails AntiPatterns: Best Practice Ruby on Rails Refactoring was released.
Join Chad Pytel, author of Rails AntiPatterns and thoughtbot founder and CEO, as he revisits key AntiPatterns from the book, explores how their solutions hold up today, and reflects on what’s changed (or hasn’t!) in the Rails world since then.
To attend, all you have to do is register here, and turn up this Thursday!
Fatsoma are once again sponsoring the event, so expect plenty tasty pizza for everyone.
If you enjoyed this…
For developers to setup the basic authentication flow in Rails application, we have to do lot of manual configurations.
New developers and small projects teams don’t even need major authentication related feature. But they still need to rely on third party gems or write the whole codebase of the authentication flow from scratch, which is time consuming.
Rails has built in generators(eg: model, migration) for different features to avoid manaul coding and configurations. These generators allow developers to focus on building the core features of their application, rather than spending time on basic setup tasks.
Authentication generator
Rails 8 introduced the basic authentication generator…
In an ideal world, your database setup will reflect your business logic, as in if a field is required in your application, it is required in your database, if it is a number in your database, it is a number on your system. I’ve written about this in checking in with your database.
We don’t live in an ideal world, far from it. Sometimes your database will say one thing but your application needs it to act like something else. The “correct” fix would be to update the database to suit. That isn’t always possible or desirable. Luckily, Rails can help!
I was working on a codebase recently where the database used TEXT
for a lot of fields. Ideally these would be VARCHAR(30)
or similar. In this…
In this article I explored how I add recurring events in Rails. Let’s now look at how to add a natural language parser input field. Instead of having users select from dropdown menus with Daily, Weekly, etc., I want users to type things like every week or monthly on the 15th.
Something like this:
(not pretty, but it work! 😄)
This feature is built on top of the work from the previous article. View the complete implementation in this commit.
First, let’s look at the view changes. Replace the previous basic select input, in app/views/events/_form.html.erb, with a text field:
- <div>
- <%= form.label :recurring_type, "Repeats" %>
- <%= form.select :recurring_type, [
- ["Daily",…
Cloudflare R2 with Active Storage
Ruby on Rails has experienced a rebirth in recent years, offering a perfect balance of development speed, scalability, and maintainability suitable for both enterprises and startups. For enterprise, Rails provides a battle-tested foundation that can handle complex business logic and significant user loads while remaining maintainable over time. For startups, Rails enables rapid prototyping and iteration, allowing teams to validate ideas quickly and scale as they grow—all without needing to rebuild their tech stack from scratch.
Why Rails Over Node.js, Python, or PHP?
While each technology stack has its merits, Ruby on Rails offers distinct advantages that keep it in the…
- De…

Welcome to Hotwire Weekly!
Welcome to another issue of Hotwire Weekly! Happy reading! 🚀✨
📚 Articles, Tutorials, and Videos
Multistep forms with Rails and the Wicked gem - Exequiel Rozas published a guide on the Avo Blog on implementing multistep onboarding forms in Rails applications using the Wicked gem. This approach allows developers to create sequential forms without relying on custom JavaScript.
Part 1: How We Fell Out of Love with Next.js and Back in Love with Ruby on Rails & Inertia.js - Adam Fortuna shares Hardcover's journey from using Next.js to returning to Ruby on Rails with Inertia.js. Initially attracted to Next.js for its server-side rendering capabilities and SEO benefits,…
Last week, my team at Shopify released a new tool called Roast, a convention-oriented framework for creating structured AI workflows. Our vision is to enable A.I. agents to solve developer productivity problems at scale. Imagine continuously improving unit tests, or optimizing test performance across hundreds of thousands of tests with minimal human intervention!
As we embarked on this journey, we quickly learned that, like many junior Engineers, A.I. needs some help focusing, and may not be ready to roam free around millions of lines of code and not hallucinate random results. So we made Roast, which gave A.I. some structure.
In the following example I will grade a Ruby unit test.
If…
At FastRuby.io, we deeply value the Ruby and Rails communities and believe in giving back through open source contributions. We wouldn’t be where we are today if it wasn’t thanks to a lot of open source projects we use on a daily basis.
We actively use, maintain, and enhance several tools designed to empower developers and teams who want to handle Ruby and Rails upgrades themselves, especially those who might not have the budget to hire our services.
These open source projects facilitate upgrades by improving transparency, managing technical debt, and ensuring smooth transitions between Ruby and Rails versions.
Here’s an overview of each tool and how it can support your next upgrade…
Hi, it’s Vipul!. Let’s explore this week’s changes in the Rails codebase.
New Guides Pull Request for review
A new guides Pull Request is up, which updates the Rails Application Template Guide and also merges it with Rails Generators Guide.
If you are well versed in these areas, please review and submit your feedback on the PR!
Rails World updates!
Check out the latest updates on schedule, new ticket types and availability and a new Rails at Scale event!
Defer ActiveJob enqueue callbacks until after commit when enqueue_after_transaction_commit enabled
Active Job’s around_enqueue
callbacks are deferred until after the database transaction commits, but only when the enqueue_after_transacti…
I made a keychain
Jessitron has taken up making friendship bracelets lately. She has a lot of meetings and it’s something to do with her hands.
She makes bracelets. Except sometimes they turn out too short. They turn out to be… keychains, instead.



A couple weeks ago I saw Joel Drapper announce his strict_ivars gem, and I got really excited. I loved the concept. But I immediately thought of my own spin on it. Mostly, I wanted it to generate warnings instead of exceptions. I also wanted to solve the “repetitive initializer” problem at the same time.
It got my wheels spinning in a way they haven’t in a long time. Here was a Ruby…
🔒 Free SSL Certificates for Your Ruby on Rails App Using Let’s Encrypt
May 9, 2025 Security is no longer optional — every modern web app must support HTTPS. Thankfully, Let's Encrypt provides free SSL certificates, and with a bit of Ruby magic, you can integrate them directly into your Rails application. Recently, I worked on automating this setup and even contributed a pull request to simplify the … Continue reading Free SSL Certificates for Your Ruby on Rails App Using Let’s Encrypt
The other day I told Augment:
Use the Table Data Gateway pattern for this class
It did as it was told, perfectly, the first time. This is not something I could tell a junior without a great deal more hand-holding. It instantly understood me, because uncounted millions of lines of code and writing-about-code are baked into its probability matrix.
On the other hand, no matter how many times I refactor the agent’s work, or tell it how to refactor its own work, it will never learn from that experience. It will never get better than it is. It will never grow in taste and instincts.
Today’s coding agents aren’t like “working with a junior”. They are like working with Jason Bourne,…
Why is the Test Suite Hanging?!
In this episode of Remote Ruby, Chris and Andrew discuss various technical challenges and developments. Chris provides insights into recent updates and debugging issues with Stripe integration, including transitioning from usage records to billing meters. Andrew shares a complicated debugging session involving a mysterious test suite freezing problem on a friend’s computer. They dive into the intricacies of using tools like LLDB and GDB for troubleshooting and explore potential solutions. Chris also leaves us with a cliffhanger that includes an exciting new project!
Links
- Chris Oliver X
- Andrew Mason Bluesky
- Judoscale- Remote Ruby listener gift
- Learn Hotwire course
- Hotwire Native
- LLDB Debugger
- GDB
- O…
Honeybadger is an application health monitoring tool built…
Ridhwana took us behind the scenes of the official Rails Guides — how they’re updated, expanded, and reviewed — and gave us a real sense of the thoughtful, collaborative work that powers one of the best-documented frameworks out there. She also shared her personal journey: from freelancing into Rails doc writing, to her passion for building inclusive communities like Rails Girls South Africa…
https://avdi.codes/39927-2/?utm_source=rss&utm_medium=rss&utm_campaign=39927-2
Please do try out Ivar, I’m sure there are corner cases and I’d love to identify them
Coming back to Rails from Next.js
#749 — May 8, 2025
Ruby Weekly
'How We Fell Out of Love with Next.js and Back in Love with Rails' — The book reading/tracking service Hardcover has been working on a big migration from the Next.js world to using Rails coupled with Inertia.js to maintain a React-powered SPA vibe. This post goes into a lot of detail about how they made it work and will be useful for anyone looking to blend the two different worlds.
Adam Fortuna
🗣️ This post kicked off an extensive discussion on Hacker News.
How Contributions to RubySpec Look Over Time — RubySpec (started in 2006 as part of Rubinius) is the…
Recurring Calendar Events in Rails
Last week I released v1.14 of Rails Designer’s UI Components. With that release came a fully-customizable Calendar Component, built with ViewComponent and designed with Tailwind CSS.
Since that release I got two times the question via email about recurring events. Does that work? And indeed it does. The Calendar Component simply accepts an events
array/collection. And while this kind of functionality is out-of-scope of a UI component (and the support for it), I am currently working on something that just happens to need this kind of feature. It is not at all too difficult to start (the tricky bits start when hundreds of thousands of events are created 😬). So what else can I do then to…
Why aren’t people writing more types? Perhaps it’s because the intermediate and expert developers deleted the patterns that didn’t work and left no trace for beginners to learn from. This post details some code I recently deleted that has a pattern I call the “duplicate duck.” You can learn the process I used to develop the type, and why I deleted it. Further, I advocate for Rust developers to document and share their mistakes in the hope that we can all learn from them.
TLDR: What’s a duplicate duck?
A “duplicate duck” is a type that implements a subset of traits of a popular type with the same results. In my case I wrote a type, MultiError
, that I later realized was identically …
https://avdi.codes/39835-2/?utm_source=rss&utm_medium=rss&utm_campaign=39835-2
Check it out, I published a new RubyGem!
(I think the original post syndicated to the fediverse a little wonky so I’m re-linking it)
You should probably go tread this post instead.
JRuby 10.0.0.1 Released
The JRuby community is pleased to announce the release of JRuby 10.0.0.1.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
We’ve jumped to Ruby 3.4 compatibility and Java 21 minimum to bring you the best Ruby on JVM experience possible. We are confident this is the most compatible and stable major release we’ve ever had.
Security
- jruby-openssl has been updated to 0.15.4, which re-enables hostname verification by default. This addresses CVE-2025-46551 and GHSA-72qj-48g4-5xgx.
JRuby 9.4.12.1 Released
The JRuby community is pleased to announce the release of JRuby 9.4.12.1.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 9.4.12.x targets Ruby 3.1 compatibility.
Security
- jruby-openssl has been updated to 0.15.4, which re-enables hostname verification by default. This addresses CVE-2025-46551 and GHSA-72qj-48g4-5xgx.
The Ruby Central README: April 2025

Welcome to The Ruby Central README 🎉
Instead of combining updates on our Open Source Program, conferences, and organizational news into one, The README is a newsletter focused on Ruby Central as an organization, our events, and the broader community.
For Open Source Program news, check out our dedicated newsletter, The OSS Changelog, and subscribe here.
Welcome to Ruby Central’s New Executive Director!
Big news — Ruby Central is thrilled to welcome our new Executive Director, Shan Cureton!
Shan is joining our team at Ruby Central at a pivotal moment. Over the last few years, we launched our Open Source Program, redefined RubyConf as our flagship annual conference (beginning in 2026), expanded…
Becky Searls is a teacher-turned-trainer, but her true passion is learning and continuous growth. She shares everything she learns through her business, Better with Becky, which recently launched its first product: a strength-training app called Build with Becky (which she built in collaboration with her husband Justin using Ruby on Rails)
Show Notes
Sponsors
Hosting for The Ruby on Rails Podcast is provided by Fireside.fm. If you want to start a podcast and are looking for hosting, visit fireside.fm/rails to get started.
Alright, let’s talk about deploying code without having a full-blown panic attack. You ever push…
One of the most exciting additions to Rails 8 is undoubtedly Solid Queue, a new library for processing background jobs.
You might not think it's that big of a deal. After all, there are plenty of other queuing systems out there. If you work with Rails, you'll likely know about Sidekiq and Resque — both are exceptionally performant and reliable. There is also GoodJob and the venerable DelayedJob. With all those options available, do we really need another queuing system?
Let's find out together. In this two-part series, we'll dig deep into Solid Queue's internals, discover what makes it unique, and learn more about why it was created in the first place.
Why Solid Queue for Ruby on Rails?
Sin…
Catch you at Baltic Ruby
Baltic Ruby is coming! Just 36 days to go!
This will be my only speaking engagement for the year, and it’ll be my honour to close out the conference. I’ll be sharing something new, both more personal and broader in range than ever before.
I’ll also be at the conference’s OSS Expo representing Hanami (and Dry and Rom!). If you’d like some guidance in making your first contribution, or building your first app, this is your chance!
I love all the thought and care that’s being put into this conference. I can’t wait to get to Riga. I hope to see you there too!
Multi tenant applications with horizontal sharding and Rails Event Store
Multi tenant applications with horizontal sharding and Rails Event Store
Horizontal sharding has been introduced in Rails 6.0 (just the API, with later additions to support automatic shard selection). This enables us to easily build multi tenant applications with tenant’s data separated in different databases. In this post I will explore how to build such an app with separate event store data for each tenant.
Application idea
Let’s sketch some non-functional requirements for our sample application.
- First: all tenant data is separated into a shard database,
- Second: tenant’s management, shared data, cache & queues use a single shared database (admin’s application),
- Third: embrace async,…
And one last thing … the tenant database setup will be…
Rails World 2025: Two big updates
Hey everyone!
The Rails World 2025 website has been updated, and here are a few big updates you should know about this year’s event.
New ticket types, prices and release schedule
This year we will have two ticket types: Support tickets and General Admission tickets.
New: We’re introducing a limited batch of Corporate Support tickets, available for €899. These pre-released tickets, while still partially subsidized by the Rails Foundation, are ideal if your company wants to send your team and can use an L&D budget. Support tickets play a key role in making Rails World possible and also help keep General Admission tickets affordable for community members paying out of pocket. As a thank…
Adding MCP to a Rails app
Joël and Steve sit down to discuss the ins and outs of decomposition within their respective workflows and how they use it to their advantage when working on certain projects.
Together they look at working with vertical slices over other decomposition methods, when and how to break down code as efficiently as possible, and Joël lays out his three key principles that help him write code dubbed “The Triangle of Separation”.
—
The Sponsor for this episode has been Judoscale - Autoscale the Right Way. Check out the link for your free gift!
Learn more about Joël’s triangle of separation and working with vertical slices!
Your guest this week has been Steve Polito, and your host…
When working with large datasets in Rails, loading all records into memory can be expensive and inefficient. That’s where Active Record’s batch processing methods — find_each
and find_in_batches
— come to the rescue. They allow you to iterate over large numbers of records without blowing up your memory usage.
What is find_each
?
find_each is a convenient way to loop over records one at a time, but under the hood it processes them in batches.
1
2
3
User.find_each(batch_size: 1000) do |user|
user.send_weekly_email
end
- Records are fetched in batches of 1,000 by default.
- You get one record at a time in the block.
- Great for operations where you’re performing the same action on each…
What is find_in_batches
?
find_in_batches gives you access to each batch…
Frequently Played May 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.
De Profundis Borealis 🔗
Ghost dropped a new psalm (album) at the end of April, so that’s been my focus.
All the words that never came out right
Within reach, but out of sight
All the songs that couldn’t mend your heart
But slit it up and tore apart
Lachryma 🔗
I already told you: new Ghost.
In the middle of thе night, it feeds
In the middle of the night, it еats you
Everybody knows
Everywhere I go
I can never run and I cannot hideI’m done crying
Over someone like…
🔗 Connecting Ruby on Rails and React: Building a Simple User List API
May 5, 2025 In my recent project, I built a basic full-stack integration using Ruby on Rails as an API backend and React for the frontend, both running in Docker containers. The goal was simple: list users fetched from a Rails API into a React component. What surprised me the most? It turned out to … Continue reading Connecting Ruby on Rails and React: Building a Simple User List API



In Japan, it's common for bars to have a dice game with rules like:
- Snake eyes: free drink
- Even number: half off drink
- Odd number: double size, double price drink
I "lost" with both of these 1L whisky-fruit highballs. I sure don't feel like a loser, though.
Scaffold Templates

Welcome to Hotwire Weekly!
Welcome to another issue of Hotwire Weekly! Happy reading! 🚀✨
📚 Articles, Tutorials, and Videos
Hotwire Native Dev Tools - Leon Vogt announced and released Hotwire Native Dev Tools, a lightweight tool to debug and inspect Hotwire Native apps.
Active Storage & Form Errors: Preventing Lost File Uploads in Rails - Daniela Baron explains how to prevent file uploads from being lost when a form with validation errors is re-rendered. Her solution uses direct uploads, signed IDs, and a custom Stimulus controller to keep files attached across failed submissions.
Streaming LLM Responses with Rails: SSE vs. Turbo Streams - Justin Paulson explores two methods for streaming…
RubyKaigi 2025
Every year, Rubyists from all over the world converge on Japan for the focal point of Ruby world, RubyKaigi. This year, we sent a contingent of the Super Good team: Adam Mueller, Chris Todorov, Amy Norman, and myself.
The conference moves to a new city in Japan every year, and 2025 found it in Matsuyama. Matsuyama is the capital of Ehime prefecture on the island of Shikoku. It’s a beautiful city known for the Dōgo Onsen, Matsuyama castle, and oranges. So many oranges. Everything there is orange-themed. You’ll find Ehime’s mascot, Mikyan on everything.
If you’ve ever felt intimidated at the prospect of attending a conference in Japan (perhaps because you don’t speak…
Recently, May 4, 2025
Frontdoor Benefits, my new startup, posted our first newsletter/update. In doing our “planning” for it I took a lot from how I apprach this blog:
- We are writing to a single individual (”Dear treasured friend” not “Hey friends”).
- We are writing from each of our personal voices (”This is Charlotte. I have… ” or “This is Ben. I have…”)
- Tone is casual and informal, we are sharing the things we’ve done or are thinking about with a close and curious person.
- We write about what we have done or thought about. Not so much what we intend to do in the future (definitely no commitments!)
- We try to avoid talking about the newsletter itself. For example, we…
It’s been successful so far, in that we asked for some things in it and people have delivered.
I have been doing lots of research and having interesting conversations about customer/client/caseworker/constituent relationship management. Not so much “salesforce” or “hubspot” but how to break down…
In the end of March 2025, I had the honor to present at the Ruby Frankfurt meetup. The topic was a deep dive into Kamal, the deployment tool for Rails 8. You can find the online presentation in Reveal.JS here.
In summary: during the last 6 months I migrated a rather large Rails app from our company (our Applicant-Tracking-System for Empfehlungsbund) from a Capistrano-like Ansible playbook into a full-blown containerized deployment using Kamal. Meanwhile, I also migrated all of my side-projects to deploy with Kamal + Gitlab-CI. After upgrading some apps to Kamal 2, I would recommend now, to have a look. Prior to that, there were some rough edges, but now, it’s worth to have a look, if you…
Show, Don't Tell
On Monday night, I’m going to be on a panel in Melbourne, in front of a crowd of aspirational junior developers, answering questions and giving advice. I’ve been a proponent for junior developers for a very long time, and ran two successful iterations of my Junior Engineering Program at Culture Amp, ending in 2019, as well as continuing to mentor developers in my current line of work.
My advice to the juniors of 2025 is plain and simple: Show, Don’t Tell. The first time I hear from a lot of juniors is probably when they apply for a job, or reach out about one. It used to be meetups but the tyranny of distance got in the way.
When they reach out, that’s when I’ll find out the regular…
Último Tentativa de Treinar uma LLM com LoRa. Tiro de canhão, mas errando a mosca.
Ok, eu sou insistente. no post anterior expliquei tudo que eu sabia sobre tentar fazer fine-tuning de um modelo com LoRa. Mas é um processo tedioso, demorado, e limitado à "pobreza" da minha RTX 4090. Em 24GB de VRAM tem que caber o modelo, coisas como KV cache, dataset de treinamento e espaço pra processar tudo. Apertando, cabe o modelo Qwen3-8B e 1MB de dataset e já era. Vai usar 21GB constantemente durante mais de 1 hora e o resultado final, apesar do modelo conseguir responser "sim, eu sei Zig 0.14", não é bom - porque o modelo base de só 8B já não era grande coisa.
A saída: migrar meu treinamento pra uma máquina maior. Comecei tentando uma A40, pra ver se 40GB era suficiente pra caber…
Contributions to ruby/spec
As a maintainer of ruby/spec I sometimes wonder how much each Ruby implementation contributes to ruby/spec. Without further ado, here it is:
Interpretation
Rubinius started ruby/spec (called RubySpec back then) and was the main contributor until 2014. In 2015, Rubinius development slowed down significantly and so did their work on adding specs (more on that in this 10 years old post).
In 2014, TruffleRuby was started and quickly became the main contributor to ruby/spec, contributing more than half of all commits since then.
CRuby has contributed consistently to ruby/spec, around 20% of all commits each year. This is great to see as CRuby is in the unique position of implementing new…
Dois posts atrás eu demonstrei o Calcanhar de Aquiles das LLMs pra programação: eles não foram treinados com os dados mais recentes disponíveis. Então se perguntar sobre mudanças na versão da sua biblioteca, linguagem ou frameworks favoritos que saiu mês passado, ele não vai saber.
Nota: todos os códigos que vou mostrar mais abaixo estão disponíveis neste repositório no meu GitHub. Fucem lá depois de ler até o fim.
Por exemplo, eu perguntei ao modelo Qwen3-8b (que saiu poucos dias atrás), qual versão de Zig ele sabe e a resposta foi: 0.11 ou 0.12:
Aliás, é assim como na foto que se chama uma API compatível com OpenAI de LLMs com curl. De qualquer forma, foi por isso que eu sofri tanto…
One of the best parts of all these ridiculous side quests I accept is that I never run out of new situations to figure out. This week: how to iron my shirt and press my pants from a Japanese business hotel the day before a meeting.
Thankfully, we have YouTube
Of course, models vary between companies and I actually had to follow this less entertaining video to get figure out what to do with a standing "Twinbird" press (apparently the #1 seller in pants presses):
RANT - LLMs são LOOT BOXES!
Eu sei que vai soar negativo demais, e de novo, vou repetir que eu não sou anti-I.A., anti-LLM nem nada disso, pelo contrário, eu gosto TANTO, mas TANTO, que venho dedicando TODAS as minhas horas em pesquisar a fundo a respeito.
Tem sido muito útil pra mim especialmente pra resumir paper, conciliar pesquisas em vários sites, resumir tópicos e coisas do tipo.
"MAS .."
E é um enorme MAS, ele tem sido BEM inútil em programação de verdade. Não vou repetir todos os problemas que já encontrei: eu detalhei bastante nos posts anteriores. Mas minha conclusão é simples: ele pode ajudar em código, em tarefas pequenas, focadas, isoladas, com bastante prompt pra ajudar e você - programador - precisa…
fascists would rather we pay less attention to external facts (which they are lying to us about) and more attention to our feelings, because those are so easy to manipulate
It is always a good idea to read Amy Newell, but *especially* now.
Source: Facts, feelings, and fascism – by Amy Isikoff Newell
Hi, Wojtek here. Let’s see what’s new in the Rails.
Rails World tickets coming soon
We’ve been informed that General Admission tickets will be available May 13. More information is coming soon, but you can already mark your calendar!
Implement ability to skip creating parallel testing databases
With parallel testing, Rails will create a database per process. If this isn’t desirable or you would like to implement databases handling on your own, you can now turn off this default behavior.
To skip creating a database per process, you can change it via the parallelize method:
parallelize(workers: 10, parallelize_databases: false)
or via the application configuration:
config.active_support…
Active Storage & Form Errors: Preventing Lost File Uploads in Rails
There is a possibility for DoS by in the net-imap gem. This vulnerability has been assigned the CVE identifier CVE-2025-43857. We recommend upgrading the net-imap gem.
Details
A malicious server can send can send a “literal” byte count which is automatically read by the client’s receiver thread. The response reader immediately allocates memory for the number of bytes indicated by the server response. This should not be an issue when securely connecting to trusted IMAP servers that are well-behaved. It affects insecure connections and buggy, untrusted, or compromised servers (for example, connecting to a user supplied hostname).
Please update net-imap gem to version 0.2.5, 0.3.9,…
Como eu disse no meu post anterior de Rant sobre Desmistificar a I.A. pra programação, posso confirmar que muitos benchmarks sintéticos que dizem medir capacidade de programação, são MENTIRAS.
E não digo que é uma tentativa proposital de mentir, mas que quem está fazendo as pesquisas e compilando rankings e leaderboards, não divulgam exatamente os detalhes e só soltam o resultado sem contexto. Este é um exemplo que achei hoje: LiveBench, que é mais um pacote de benchmark de "programação". Olha que é testado exatamente:
São testes idiotas do tipo "carregue estes dois arquivos CSV e compare os valores". É ainda mais idiota que Leet Code. É ainda mais idiota que a maioria dos testes de…
https://avdi.codes/39202-2/?utm_source=rss&utm_medium=rss&utm_campaign=39202-2
Has anyone done self-hosted GitPod (or other self-hosted devbox) on their own cloud compute that ISN’T AWS? I wish I could just chuck it on a Vultr box but it needs KVM.
I’m just so allergic to doing this shit on AWS. I want A BOX with A NAME that is MINE but that lives in a datacenter. And I would rather gargle rusty nails than edit IAM policies.
Regression
Date: 10,000 BCE
Problem: crops failed
Diagnosis: crop gods angry with you
Plan: propitiate gods, hope for best
Date: 1999
Problem: emails missing
Diagnosis: DNS
Plan: fix DNS
Date: 2025
Problem: emails missing
Diagnosis: email reputation gods angry with you
Plan: propitiate gods, hope for best
After playing with JFreeChart and JRuby and writing up a lovely blog post called “Beautiful Charts with JRuby and JFreeChart” it seems that some folks did not agree with my assessment of the charts as “beautiful” and others did not realize the power of what they’d just seen.
So, let’s see if this one grabs your attention. As before, this example is available in the headius/jruby-charts repository.
Orson Charts
Along with a comprehensive and configurable set of 2D chart formats, the JFreeChart project also ships Orson Charts, an equally extensive set of 3D chart renderers. The library has been designed to work alongside JFreeChart and has all the same support for file output and GUI…
So…
All the gem statistics you can eat
#748 — May 1, 2025
Ruby Weekly

Itsi: A Fast, New Ruby Rack Server — Itsi is an interesting new player joining the world of Ruby app servers. It’s written in Rust, is Rack compliant, and works as a reverse proxy, API gateway and static file server. You can choose between a typical blocking model, an (optional) fiber-based scheduling approach, or even mix the two in a hybrid model.
Wouter Coppieters
📊 Ruby Gem Analytics Powered by ClickHouse and Ruby Central — How would you like to quickly run SQL queries to do analytics over every single Ruby gem download since 2017? Now you can. There’s…
Options Pattern

The Options Pattern provides a solution for making your applications configurable. The name of this pattern stems from .NET but we’ll learn how to implement this in Ruby.
Quick Start
To make any object configurable, you only need Structs to define the attributes you need and a class to inject the configuration into. Example:
Configuration = Struct.new :token, :uri
class Client
def initialize(settings = Configuration.new)
@settings = settings
yield settings if block_given?
end
end
Client.new do |set…
The above will produce an instance of a Client
as follows:
#<Client…

Ruby Central is excited to welcome our new Executive Director, Shan Cureton.
Over the past few years, Ruby Central has gone through a period of meaningful growth and change. We launched our Open Source Program to lead the ongoing development of RubyGems and Bundler, redefined RubyConf as our flagship annual conference (beginning in 2026), and expanded our grant program to support local Ruby meetups around the world. We also worked to overcome the challenges of the pandemic with a renewed focus on sustainability, ensuring we’re well-positioned to support the Ruby ecosystem for the long term.
As we step into our next chapter, we sought out an Executive Director who has the vision and drive to…
The Hotwire trifecta allows you to write modern (Rails) web apps, without the need to write (a lot of) cumbersome JavaScript with Turbo’s Drive, Frames, Streams or Morph. But with all these options, which one to use and when?
Hotwire, like Rails, needs a mental shift from you as the developer. You can try to use Stimulus on a per-component basis, but you get way more bang for your buck if you write general-purpose controllers instead. The same goes for the various Turbo options.
You get the most value out of Hotwire if you follow progressive enhancement, a web design strategy popularized in 2008 by Aaron Gustafson that ensures basic functionality for all users while layering advanced…
Vamos recaptular meus últimos artigos:
- Hello World de LLM - neste artigo explico como criar um programinha simples (educativo) de chat carregando um LLM (Qwen2.5) e até como usar prompts pra que ele consiga chamar scripts/agentes e executar algumas tarefas simples como carregar arquivos locais. Eu subi o código no GitHub como Tiny-Qwen-CLI e deixei o código "sujo" de propósito pra poder testar como as LLMs conseguem (ou não ajustar esse código).
- Seu Próprio Co-Pilot Gratuito - aqui eu explico mais sobre a ferramenta Aider, que é como se fosse um Co-Pilot ou Cursor, mas gratuito e open-source. Ele não exige plugins nem IDEs. Roda no terminal e é fácil de usar. Também mostro como integrar…
Ao longo dos últimos dias eu vim testando e postando no X minhas impressões sobre os…
In the world of Rails development, integrating large language models (LLMs) like OpenAI's GPT has become increasingly common. One challenge developers face is streaming these responses efficiently to provide a smooth user experience.
This post will explore some different techniques for streaming LLM…
I recently returned from RubyKaigi where I had the opportunity to sit down with members of the Japanese Ruby community and show them a little bit of JRuby. One of the items that came up a few times was the difficulty of utilizing external libraries from Ruby: if it’s a C library, typically you have to either write a C extension or do the extra work of writing up an FFI binding.
If the library is not implemented in C or Ruby, things get even weirder.
One example is the Charty library, one of the more popular options for generating beautiful chart graphics on Ruby. But Charty actually wraps a Python library called matplotlib, and the bindings for CRuby literally load Python into the current…
From PHP/Laravel to Rails: My First Conference with the Rails Community

Evil Martians partnered with GMI Cloud to design and launch a high-performance, Webflow-powered website in just 3.5 weeks—blending fast execution, cutting-edge 3D visuals, and analytics-ready conversion flows to help this $82M-funded AI startup win the GPU compute race.
In a matter of weeks, Evil Martians delivered a fully functional website with conversion-driven pages tailored specifically around the goals of GMI Cloud, a California-based GPU cloud infrastructure provider. We built a scalable foundation for future updates with CMS integration and analytics,…
Direct link to podcast audio file
I'm going away on a trip for an unexpectedly long time, and you'll never guess why! (You might guess why.) Anyway, here's something to remember me by.
If you've ever been worried about whether something you cared about would work out okay, email podcast@searls.co and tell me about it so that I can share your story with a bunch of strangers on the Internet.
Video of this edition of the show is up on YouTube.
References available upon request:
- Nobody knows how to turn on Vision Pro
- I released a new gem called searls-auth
- Aaron's puns, ranked
- CodeWeavers' founder's gracious post, Whisky’s Legacy, and the Spirit it Leaves Behind
- DeX for iPhones?…
Heroku has just launched their latest platform—Fir—and it’s their biggest launch in a decade. Built on Kubernetes and featuring expanded dyno options, cloud-native buildpacks, and integrated OpenTelemetry, Fir represents a significant evolution for Heroku. However, if you’re planning your migration to Fir, you’ve probably noticed something missing: autoscaling.
If you’re thinking, “Wait, no autoscaling? How am I supposed to manage my dynos?"—you’re not alone. Heroku is certainly hard at work on their own autoscaler for Fir, but your production apps can’t wait. Let’s explore how to autoscale on Heroku Fir today.
Is autoscaling optional?
Let’s face it—you could run your Fir app…
Bin folder
In a Rails application, the bin/
folder contains executable scripts that help manage the application. These scripts are generated when we create a new Rails project
and ensure that commands like rails
, rake
,
and bundle
use the correct environment
and gem versions defined in the Gemfile.lock
.
Example:
bin/rails
– Runs Rails commands.
bin/rake
– Runs Rake tasks.
bin/setup
– Prepares the app for development.
Basically, Rails encourages us to use bin/rails
rather than just rails
because that loads the rails executable from within the bin/
subfolder of our app, ensuring we get the correct version. If we run rails
all by itself, that could run any rails
executable anywhere on…
Run bin/rai…
Scaling your Python task queues can mean the difference between snappy user experiences and “why hasn’t this email arrived yet?” support tickets. When traffic spikes or your Python app starts doing intensive work in the background, tasks can pile up, queue latency climbs, and users start having problems.
Whether you’re drowning in tasks or spending too much on overprovisioned workers, you’re in the right place.
Why scaling a task queue matters for you
If your Python app is small, a single worker process handling your task queue might be enough. But as your web app grows, the volume of tasks often increases with it. Whether you’re using task queues to send emails or…
When working with Rails migrations, performance isn’t usually the first thing that comes to mind—until your schema starts getting big or you’re deploying changes to production environments with large databases. Fortunately, Rails provides a simple way to optimize schema changes: the bulk: true
option.
What is bulk: true
in Rails Migrations?
Introduced in Rails 5.2, the bulk: true
flag can be passed to methods like change_table
or create_table
to group multiple schema changes into a single SQL statement, when supported by your database.
This approach reduces the number of separate ALTER TABLE
calls, which not only improves performance but can also prevent potential locking or downtime…
CVE-2025-43857 (net-imap): net-imap rubygem vulnerable to possible DoS by memory exhaustion
Today, we’re spotlighting Will Alvarez Rodriguez, who has been with Gusto for a bit over eight months as an individual contributor on the Gusto Embedded API infrastructure team.
Rose: How did you join Gusto?
Wil: I have been at Gusto for a little over eight months now, but my journey as a software engineer spans 15 years. In my previous role, I found that the company’s culture and environment weren’t the right fit for me. Recognizing the importance of being in a place that truly resonated with my values, I decided to take a step back, reassess, and be deliberate about my next move. I wanted to join a company whose mission I could wholeheartedly stand behind — one where I could do meaningful…
Sorbet has greatly improved how we read, understand, and maintain code at Shopify. But let’s face it—sometimes, the syntax isn’t the friendliest.
In this post, I’ll walk you through how we added support for inline RBS comments into Sorbet, preserving Sorbet’s strong type safety and type checking speed while adopting the cleaner syntax of RBS, making Ruby development smoother and more enjoyable for us.
Sorbet at Shopify
Sorbet is a type checking tool for Ruby that enables developers to gradually add static type annotations, improving code stability and reliability by catching errors early and facilitating refactoring. It also includes a language server, enhancing the development…
What’s the difference between Rails’s try and the safe navigation (&.) operator? – Andy Croll
For those who don’t know. This is also something I’ve covered on Graceful.Dev.
Both try and the safe navigation operator (&.) both provide ways to safely call methods on objects that might be nil. However, they have some key differences.
Source: What’s the difference between Rails’s try and the safe navigation (&.) operator? – Andy Croll
A notícia quente do dia é o lançamento do novo modelo Qwen3. Eu mesmo postei a respeito hoje E já fiquei bem impressionado. Achei que ia deixar por isso mesmo, mas aí vi este tweet:
Veja o texto completo neste link
Mas ele dá dicas de como "tunar" esse novo modelo, mais pra questões matemáticas e fiquei pensando se tem como tunar pra desenvolvimento de software. Antes que pesquisadores mais avançados me xinguem: essa é minha primeira vez mexendo nos parâmetros de uma LLM, então se quiserem adicionar contexto nos comentários, sejam bem vindos.
Vamos lá. Primeiro, o que são esses TopP, TopK e tudo mais que o Ivan fala no tweet dele? São parâmetros de KEY SAMPLING (sorteio de chaves). É…

Before they were writing code, Aji Slater was working as a vaudevillian, touring with the Ringling Brothers and Barnum & Bailey Circus. As a “career changer,” their path into tech wasn’t traditional. But like many in the Ruby on Rails community, it has been driven by creativity, community, and a deep connection to the language that they were lucky enough to learn at a coding boot camp.
Today, Aji is a Development Team Lead at thoughtbot and has a decade of Ruby and Rails experience. They call Ruby their “native language”—the programming language that truly taught them how to think like a developer.
At RailsConf 2025, Aji will take the stage with a keynote that honors the history of the…
Joël talks with fellow thoughtboter Sara about the different ways developers can help one another across the various stages of an app’s lifecycle.
They highlight the importance of utilising notes early on to clarify your work for others who may need it later down the line, how tooling can aid with this at all stages of development, and what lessons can be learnt from coding decisions made by someone else.
—
The Sponsor for this episode has been Judoscale - Autoscale the Right Way. Check out the link for your free gift!
Check out Steve Polito’s Hotwire essentials project, featured in Episode 452.
Your host for this episode has been Joël Quenneville and was accompanied by Sara…
If you…

Welcome to Hotwire Weekly!
Welcome to another (slightly late 🙈) issue of Hotwire Weekly! Happy reading! 🚀✨
📚 Articles, Tutorials, and Videos
Announcing Hotwire Native 1.2 - Jay Ohms announces Hotwire Native 1.2, with a built-in button navigation controller, brand new demo apps and more.
Hotwire Native (and Hotwire 101) for Laravel Devs - Tony Messias published a new video in which he provides an introduction to Hotwire for Laravel developers, covering the core concepts of Turbo Drive, Turbo Frames, and Turbo Streams. He demonstrates how to integrate these features into Laravel applications.
Mobile Bridge: Making WebViews Feel Native - Mauricio de Meirelles on the Shopify Engineering Blog…
Eu acabei de postar ontem sobre Qwen2.5-Coder e HOJE (2025-04-28) a Qwen já chega e me lança o QWEN 3 que, obviamente, eles dizem que super supera o 2.5. E obviamente eu estava com a mão na massa, precisava testar.
Se estiver rodando um ollama instalado via pacotes como Pacman ou Apt, é possível que eles ainda não sejam compatíveis. Mas eu vi no X da Ollama que eles já estão suportando:
Então só tinha uma alternativa: baixar direto o source do repo deles e compilar da branch master:
git clone https://github.com/ollama/ollama.git
cd ollama
yay -S cmake
cmake -B build
cmake --build build
Pronto, ele vai usar as mesmas variáveis de ambiente apontando pro meu diretório certo de models,…
Keeping a reliable history of changes is essential for our users. They need to know when a record was updated, who made the change, and why. They could be anxiously awaiting a notification about a dependency that is blocking their work. Maybe they want to understand why a report looks different from the…
Eu detesto que a OpenAI fique mexendo no alinhamento ou prompt inicial ou mesmo treinamento do modelo, tentando fazer ele responder parecendo mais um "humano".
Todo mundo não-técnico fica achando que a I.A. está se tornando "consciente", ou que ela tem "emoções". E não entendem que são só frases pré-gravadas. E isso é extremamente irritante. Até mesmo a porcaria de jornalistas ficam caindo nessa:
Todo esse "comportamento pseudo-humano" pode ser DESLIGADO. Basta ir no menu do ChatGPT, embaixo do ícone da sua conta, e clicar em "customizar o chatgpt":
Traits:
You are an assistant to software engineering, I am a senior software engineer. I need you to answer questions directly,…
Company Spotlight: How Honeybadger Built a Profitable Bootstrapped Business on Rails

If you’ve worked on a Rails app in the last decade, there’s a good chance that Honeybadger has helped you fix a bug in your code or improve your application’s performance. But behind this essential monitoring tool is a story many developers aren’t aware of.
Honeybadger has never raised VC funding and doesn’t have a large engineering team working behind the scenes. The business started with a simple frustration shared by a small team of Rubyists and has grown organically and sustainably ever since. Today, its error monitoring service is hugely popular within the Ruby community and beyond.
In the early 2010s, Joshua Wood, Ben Curtis, and Starr Horne were working together as Ruby consultants.…
A Useful Command to Check If a Gem Is Loaded in Your Bundler Environment
Whether you’re debugging a dependency issue, checking for an optional gem, or just curious about what’s loaded in your Ruby app, there’s a handy command that can help:
puts Gem.loaded_specs.keys.grep(/your_pattern_here/)
In this article, we will discuss what this command does, what exactly it’s checking for, and its limitations.
Recently while working on upgrading our FastRuby.io web application, we ran the following command, after encountering an error regarding the mutex_m
gem requirement, to confirm whether the gem was already loaded in the project.
bundle exec ruby -e "puts Gem.loaded_specs.keys.grep(/mutex_m/)”
Since it was not, nothing was printed, indicating that the gem…
What’s the difference between Rails’s try and the safe navigation (&.) operator?
When working with objects in Ruby and Rails you often need to safely call a chain of methods without accidentally raising NoMethodError
, if it’s possible that any of the methods in the chain could return nil
.
Rails provides the try
method as a core extension to Object
, while Ruby (since 2.3) offers the safe navigation operator: an ampersand followed by a full stop (&.
).
Understanding which to use, and what the subtle differences between them are, can lead to cleaner, more robust code.
Instead of…
…using conditional checks or rescue blocks:
def display_username(user)
if user && user.profile && user.profile.name
user.profile.name
else
"Anonymous"
end
end
# Or (worse!)
def …
Use…
…try
or the safe navigation…
Enhanced debugging for Stimulus
Stimulus has a basic debug mode that shows if Stimulus is running and lists which controller are initialized and connected. But when you work with Stimulus controllers often, there’s a need to see a bit more detail, without manually expecting the DOM versus your controller’s logic.
So I explored a new idea and add it as a new FX to Stimulus FX: enableDebug. This is what it gives you:
It is easy to set up:
// app/javascript/controllers/application.js
+import { enableDebug } from "stimulus-fx"
-const application = Application.start()
+const application = enableDebug(Application.start())
Then you can enable debugging per controller like so:
export default class extends Controller {
…
I added…
Seguindo meu post sobre Aider e agora que você entende como LLMs funcionam pra código, resolvi experimentar rodar alguns modelos na minha própria máquina.
O setup é muito simples. Com Aider e Ollama instalado, primeiro temos que subir o ollama (eu subo manualmente, você pode criar um serviço de systemd pra subir automaticamente):
OLLAMA_FLASH_ATTENTION=1 ollama serve
Tanto pro Aider quanto o cliente do Ollama enxergarem o servidor, é bom colocar isso no seu .bashrc
ou similar no seu OS:
export OLLAMA_HOST=http://localhost:11434
export OLLAMA_API_BASE=http://localhost:11434
ATENÇÃO: levei um tempo pra descobrir porque o Aider falhava às vezes e foi porque eu não prestei atenção e às…

I saw this promoted post in my Reddit feed and thought, "huh, maybe WaPo is trying to entice new readers with ads pairing gift links to articles and targeted demographics that might engage with them."
LOL, no. You click anywhere on this and you instantly get hit with a paywall.
Who is this for? Current subscribers that don't read the Washington Post? People who planned to subscribe and forgot?
Absolute idiocy.
Sorting elegantly in Rails with in_order_of
Prior to rails 7 sorting a column in a custom order was not straightforward, typically requiring raw SQL or complex workarounds; the in_order_of
method offers a more elegant and efficient solution for custom sorting without resorting to raw SQL.
Custom Sorting Without in_order_of
Let’s take this example: You have a Task model with different statuses:
class Task < ApplicationRecord
enum status: { pending: 0, in_progress: 1, completed: 2, archived: 3 }
end
If you want tasks sorted in the order ['in_progress', 'pending', 'completed', 'archived']
. prior to rails 7 there are several ways you could achieve this:
1. Raw SQL
Task.order(Arel.sql("FIELD(status, 1, 0, 2, 3)"…
2. Using CASE WHEN
in SQL
Task.…
Introduction
I just returned from RubyKaigi 2025, which ran from April 16th to 18th at the Ehime Prefectural Convention Hall in Matsuyama. If you're unfamiliar with it, RubyKaigi is the biggest Ruby conference, with over 1,500 people showing up this year. It's always a bit crazy (in the best way possible).
The conference had an orange theme. Ehime is famous for its oranges, and the organizers love bringing local flavor to the event.
What I love most about RubyKaigi is how it bridges the gap between the Japanese and Western Ruby worlds. Despite Ruby coming from Japan, these communities often feel separate in day-to-day work. This weird divide affects not just developers but also businesses.…
April 24, 2025 In a world overflowing with data, compression isn't just a matter of saving space—it’s about efficiency, speed, and clean design. That’s where lossless data compression stands out: perfect reconstruction of original data, with zero information loss. Recently, I explored a classic algorithm—Run-Length Encoding (RLE)—and implemented it in pure Ruby. It’s a great … Continue reading The Art of Lossless Data Compression in Ruby
📸 This one's tough, Sam

One of my favorite things about OpenAI is when they A/B test ChatGPT responses and the computer arrives at two identical responses, but still insist you tell them which answer was better.
I'm feeling the response on the right, personally.
March 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 March.
RubyGems News
In March, we released RubyGems 3.6.6 and Bundler 2.6.6. These releases bring a series of enhancements and bug fixes designed to improve the overall developer experience with RubyGems. Notable improvements include fixing an ENAMETOOLONG
error when creating the compact index cache, showing clearer errors when writing a lockfile on a read-only filesystem, **and updating bundle doctor
to not report issues about unwritable files.
Some other important…
Unlocking Ractors: object_id
In a previous post about ractors, I explained why I think it’s really unlikely you’d ever be able to run an entire application inside a ractor, but that they could still be situationally very useful to move CPU-bound work out of the main thread, and to unlock some parallel algorithm.
But as I mentioned, this is unfortunately not yet viable because there are many known implementation bugs that can lead to interpreter crashes, and that while they are supposed to execute in parallel, the Ruby VM still has one true global lock that Ractors need to acquire to perform certain operations, making them often perform worse than the equivalent single-threaded code.
But things are evolving…
Hi, it’s Claudio Baccigalupo. Let’s explore this week’s changes in the Rails codebase.
Add –reset option to bin/setup
Makes it easier to zero out a database and load seeds during development.
Add assert_in_body/assert_not_in_body
Lets test checking a response body for a piece of text without going through DOM manipulation.
Add a load hook for ActiveRecord::DatabaseConfigurations
Offers a way to use an initializer to register a database config handler before database tasks were defined.
Ensure all railties tests require strict_warnings
Prevents warnings from getting merged without being notified about them.
Sort schema cache columns and indexes per table in the cache file
Completes the…
Seu Próprio Co-Pilot Gratuito Universal que funciona Local: AIDER-OLLAMA-QWEN
No meu post anterior eu mostro como fazer um chat LLM do zero com capacidade pra carregar arquivos de código pra refatoração. Eu demonstro os princípios por trás de ferramentas como Co-Pilot, Cursor ou Windsurf. O resumo é simples:
- UM BOM PROMPT DE REGRAS
- SCRIPTS que rodam localmente e adicionam mais contexto na sessão do chat.
É basicamente "só" isso (claro, mesmo o princípio sendo simples, ainda dá bastante trabalho implementar mesmo). E eu não preciso fazer tudo do zero. Já existe uma alternativa open source que faz exatamente tudo isso, a ferramenta que ficou mais popular nos últimos meses pra desenvolvimento de software, o AIDER
O que eu gosto no AIDER:
- funciona com praticamente…

Hello! Welcome to the April OSS 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.
Open Source Program Announcements
Reminder: New Ruby Central and RubyGems Policies
Reminder that we are still in the review-and-comment period for the new policies for Ruby Central and RubyGems we announced on March 20th. We appreciate the feedback we have received so far and encourage you to voice any concerns (or appreciation). If…
São Paulo to Sin City
In this episode of Remote Ruby, Chris and Andrew catch up on recent events and dive into their experiences with various conferences. They discuss their travels to Brazil, Philly, Chicago, and Vegas, sharing the highlights and challenges of each trip. The conversation then shifts to technical topics, including insights from the Tropical on Rails conference, live translations, the impressive quality of Hotwire's functionality, and the fun time they had reuniting and hanging out with Jason in Vegas. They also tackle complexities and changes in Stripe's API integration, debating the pros and cons of self-hosting versus using hosted services. Hit the download button now to hear more!
Links