Sign in

Matheus Richard

@matheusrich.bsky.social
56 followers 58 following 77 posts

👨🏽‍🍼 Father 🇧🇷 Senior developer @ thoughtbot. 📝 Blogging @ tbot.io/blog/matheus 💎 Organizer of rubydf.com

PostsRepliesMedia
Matheus Richard @matheusrich.bsky.social · 16/06/2026
If touching production data gives you the shivers, this talk is for you. At @tropicalonrails, I shared some practical ways to make production data changes safer, calmer, and less scary: www.youtube.com/watch?v=c6l6...
youtube.com
Matheus Richard: Production Data Doesn't Have to Be Scary
YouTube video by Tropical on Rails
010
Reposted by Matheus Richard
Blastoff Rails @blastoffrails.bsky.social · 21/05/2026
Are you still having fun when you code? Have you ever wanted to make a game with Ruby? @matheusrich.bsky.social is here to reignite that fire in you!
032
Matheus Richard @matheusrich.bsky.social · 08/05/2026
Nice addition in Rails: now when validates_uniqueness_of fails, you'll be able to access the ID of the record that caused the conflict github.com/rails/rails/...
github.com
Add conflicting record ID to `validates_uniqueness_of` error details by bvicenzo · Pull Request #55826 · rails/rails
Motivation and Background Currently, when a validates_uniqueness_of validation fails, the errors.details hash only provides { error: :taken, ... }. This indicates that a conflict exists but offers ...
010
Matheus Richard @matheusrich.bsky.social · 30/04/2026
Just deleted ~1.6k LOC and ~770 KB of JS by replacing a chart library (and all of its deps) with a Ruby helper that renders the charts as plain HTML/CSS. CSS Anchor Positioning made this basically JS-free.
000
Matheus Richard @matheusrich.bsky.social · 22/04/2026
Inspired by @nateberkopec.bsky.social, I wrote about why and how you should enable MFA for your gems! If you don't have any gems, this can be one of the easiest open-source contributions you can make! Check it out: thoughtbot.com/blog/lets-en...
thoughtbot.com
Let's enable MFA for all Ruby gems
Supply chain attacks are getting more common. RubyGems might be next. Here’s how to help the ecosystem be safer.
010
Matheus Richard @matheusrich.bsky.social · 22/04/2026
What do you mean by "git into my media consumption habits"? You don't have a time to read these kind of articles?
100
Matheus Richard @matheusrich.bsky.social · 17/03/2026
No one sets out to write a slow test, and yet it happens. Prevent slow tests from creeping into your test suite again! Tests are not enough, we need *fast* tests! thoughtbot.com/blog/introdu...
thoughtbot.com
Introducing Test Budget: a linter for test performance
Your test suite didn’t get slow all at once. It won’t get fast all at once either. Start by making sure it stops getting worse.
000
Matheus Richard @matheusrich.bsky.social · 09/03/2026
Here's one of those things that are easy to miss on code review and will make your tests super slow. Good news: it's easy to fix! thoughtbot.com/blog/combine...
thoughtbot.com
Combine Capybara selectors to avoid the sequential timeout trap
How I shaved over a minute off a test suite with a one-line change.
000
Matheus Richard @matheusrich.bsky.social · 15/01/2026
TIL about Rails' image_submit_tag api.rubyonrails.org/v8.1.2/class...
api.rubyonrails.org
ActionView::Helpers::FormTagHelper
Action View Form Tag Helpers¶ ↑ Provides a number of methods for creating form tags that don’t rely on an Active Record object assigned to the template like FormHelper does.
010
Matheus Richard @matheusrich.bsky.social · 07/01/2026
This was a fun one to write!
010
Matheus Richard @matheusrich.bsky.social · 27/11/2025
I love seeing this UI evolve! What are you using for pagination?
120
Matheus Richard @matheusrich.bsky.social · 17/11/2025
Today I learned about Rails' Time.days_in_month and Time.days_in_year. So handy!
Time.days_in_month(2) # defaults to current year
# => 28
Time.days_in_month(2, 2024)
# => 29
Time.days_in_year # defaults to current year
# => 365
Time.days_in_year(2024)
# => 366
030
Matheus Richard @matheusrich.bsky.social · 24/10/2025
🎉 end_of_life 1.0.0.alpha is released! It includes: - Macos install via homebrew - Support for scanning EOL Node.js versions - Support for detecting versions from `mise.toml`. - A new `check` command to check if specific product releases are EOL - A revamped CLI Stay updated!
000
Matheus Richard @matheusrich.bsky.social · 20/10/2025
TIL about Git LFS: An open source Git extension for versioning large files git-lfs.com
git-lfs.com
Git Large File Storage
Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server like GitHub.co...
042
Matheus Richard @matheusrich.bsky.social · 10/10/2025
Wait, what? Where?
100
Matheus Richard @matheusrich.bsky.social · 10/10/2025
Does the bot log in? How do you handle auth?
100
Matheus Richard @matheusrich.bsky.social · 03/10/2025
Beautiful!
000
Matheus Richard @matheusrich.bsky.social · 01/10/2025
Where's @marcoroth.dev to add a proper parser to Stimulus? 🙈
110
Matheus Richard @matheusrich.bsky.social · 01/10/2025
From the little I know it seems a lot more than that? Most of the times I'm good with plain HTML and I want to add a few things here and there. Svelt seems like an overkill solution for me?
100
Matheus Richard @matheusrich.bsky.social · 01/10/2025
I keep wanting to try it, but at the same time I so don't want another JS tool.
100
Matheus Richard @matheusrich.bsky.social · 19/09/2025
I'm curious about what the European developer interests are (compared to what also) 👀
030
Matheus Richard @matheusrich.bsky.social · 19/09/2025
NOOOOO! I didn't have my chance to attend!
030
Matheus Richard @matheusrich.bsky.social · 17/09/2025
Just shaved 200-250ms from a CLI app by just requiring dependencies only when they're needed. It might not seem much, but it really matters to get that snappy feel.
010
Matheus Richard @matheusrich.bsky.social · 16/09/2025
This is my favorite 404 page
The RubyGems.org 404 page
120
Matheus Richard @matheusrich.bsky.social · 11/09/2025
Great font in those slides!
020
Matheus Richard @matheusrich.bsky.social · 10/09/2025
Did you know that Rails 7.1 stops receiving security updates in 3 weeks? Wished that you had a tool that would inform you about this kind of stuff? Well, end_of_life v0.5 was just released and it now supports Rails! Check it out: github.com/MatheusRich/...
000
Matheus Richard @matheusrich.bsky.social · 08/09/2025
This look amazing. I might not need to add config.action_view.annotate_rendered_view_with_filenames = true to every app now
110
Matheus Richard @matheusrich.bsky.social · 08/09/2025
That's exactly how it works. It uses Rails main by default, but you can specify any commit you want. It'll use the same name as your app, so you get meaningful diffs only.
110
Matheus Richard @matheusrich.bsky.social · 08/09/2025
Then, the easy change: adding support for Rails was just a 27loc change (not including tests). Amazing payoff! github.com/MatheusRich/...
github.com
Add support for scanning EOL Rails versions · MatheusRich/end_of_life@ba9a92a
End of Life looks for an exact Rails version on the `Gemfile` file or `Gemfile.lock`.
000
Matheus Richard @matheusrich.bsky.social · 08/09/2025
The code was not written in a generic way, so I followed Kent Beck's advice and started to make the change easy. It took a diff of +1160/-927 , and it was mostly backwards compatible. Luckily I had tests to ensure nothing was broken.
100
Matheus Richard @matheusrich.bsky.social · 08/09/2025
I've hacked the first version of end_of_life in a weekend. I had limited time, so I decided to only support Ruby. It served me well for years, but I thought it was time to expand support for other tools (Rails, Node, Python, databases, etc).
100
Matheus Richard @matheusrich.bsky.social · 04/09/2025
For example, I just found-out that the they add caching to rubocop runs on CI! github.com/rails/rails/...
github.com
Add RuboCop cache to GHA workflow templates · rails/rails@ceb0678
010
Matheus Richard @matheusrich.bsky.social · 04/09/2025
If you wanna use Rails 8.1 today, you can check if there's anything new in the dotfiles, Dockerfile, or the generated authentication system using rails-diff: github.com/MatheusRich/...
github.com
GitHub - MatheusRich/rails-diff: Compare Rails-generated files with the ones in your repository
Compare Rails-generated files with the ones in your repository - MatheusRich/rails-diff
220
Matheus Richard @matheusrich.bsky.social · 04/09/2025
I actually dig it.
110
Matheus Richard @matheusrich.bsky.social · 03/09/2025
The amount of event listeners LLMs suggest when writing Stimulus controllers makes me think most people are not making the most out of Stimulus targets.
000
Matheus Richard @matheusrich.bsky.social · 03/09/2025
TIL about the Zen browser. Looks cool! zen-browser.app
zen-browser.app
Zen Browser
Beautifully designed, privacy-focused, and packed with features.
000
Reposted by Matheus Richard
Tim Riley @timriley.info · 01/09/2025
Join me at @thoughtbot.com’s Open Summit this year! I’m extremely excited to be part of this event. Even better, it’s *free* and *online*, so I hope I can see you there! timriley.info/posts/join-m...
timriley.info
Join me at thoughtbot’s Open Summit! - Tim Riley
I’m delighted to be joining the thoughtbot Open Summit on 31st October this year! What is Open Summit? From the announcement: “a live, interactive, hands-on day of pairing and solving open...
024
Matheus Richard @matheusrich.bsky.social · 27/08/2025
I like rv beucase it has a quite literal analogy with RVs (Recreational Vehicles), which are a do-it-all kinda of car/house.
020
Matheus Richard @matheusrich.bsky.social · 27/08/2025
I'd love to read about this
110
Matheus Richard @matheusrich.bsky.social · 26/08/2025
This is exciting!
andre.arko.net
rv, a new kind of Ruby management tool
For the last ten years or so of working on Bundler, I’ve had a wish rattling around: I want a better dependency manager. It doesn’t just manage your gems, it manages your ruby versions, too. It doesn’...
030
Matheus Richard @matheusrich.bsky.social · 21/08/2025
Ha! An Havaianas on the wild! 🇧🇷
020
Matheus Richard @matheusrich.bsky.social · 19/08/2025
Do Google Wallet next!
110
Matheus Richard @matheusrich.bsky.social · 19/08/2025
I remember a time where GitHub had a team dedicated to fixing small user pain points. Now everyone complains about it being slow and adding AI features. What a change.
010
Matheus Richard @matheusrich.bsky.social · 19/08/2025
I use foragoodstrftime.com a lot (and some AI)
foragoodstrftime.com
For a Good Strftime | Easy Skeezy Ruby Date/Time Formatting
120
Matheus Richard @matheusrich.bsky.social · 19/08/2025
Maybe someone suggested this, but please allow the option to disable issues/pull requests. OSS != open to contribution =)
110
Matheus Richard @matheusrich.bsky.social · 15/08/2025
TIL about `ActiveRecord.to_param`. I've always defined `#to_param` manually ``` class User < ActiveRecord::Base to_param :name end user = User.find_by(name: 'Fancy Pants') user.id # => 123 user_path(user) # => "/users/123-fancy-pants" ```
000
Matheus Richard @matheusrich.bsky.social · 11/08/2025
What version manager are you using?
100
Matheus Richard @matheusrich.bsky.social · 07/08/2025
Love that BreakpointUtils
010
Matheus Richard @matheusrich.bsky.social · 07/08/2025
I forgot to share, but about a month ago I got my first commit into Crystal! You can use this if you're on Crystal >= 1.17
# Ensuring string suffix and prefix

New convenience methods String#ensure_suffix and String#ensure_prefix for adding a specific prefix or suffix but only if not already there (#157822):

```
"foo" .ensure_suffix("/") # => "foo/"
"foo/" .ensure_suffix("/") # => "foo/"
"Foo" .ensure_prefix("::") # => "::Foo"
"::Foo".ensure_prefix("::") # => "::Foo"
```
010
Matheus Richard @matheusrich.bsky.social · 06/08/2025
BTW, this was going to be a tweet, but grew enough to be a short blog post. Yay for searchability!
000