Xavier Noria
@fxn.bsky.social
Everlasting student · Rails Core · Zeitwerk · Freelance · Life lover
"Disclaimer: this post was proudly written without the help of AI, so deal with my English grammar, but the author here took the time to write every single word"
LOL, have thought about something like that for my PRs, patches, and the book I am (slowly but humanly) writing.
LOL, have thought about something like that for my PRs, patches, and the book I am (slowly but humanly) writing.
I wrote a very long blog post about all I learned about HNSWs in the last year: "Scaling HNSWs" -> antirez.com/news/156
Scaling HNSWs - <antirez>
antirez.com
November 11, 2025 at 1:22 PM
"Disclaimer: this post was proudly written without the help of AI, so deal with my English grammar, but the author here took the time to write every single word"
LOL, have thought about something like that for my PRs, patches, and the book I am (slowly but humanly) writing.
LOL, have thought about something like that for my PRs, patches, and the book I am (slowly but humanly) writing.
Reposted by Xavier Noria
#Ruby namespace will be renamed to `Ruby::Box`
An MR about this was merged to the Ruby master a couple of days ago
github.com/ruby/ruby/p... by @tagomoris.bsky.social
An MR about this was merged to the Ruby master a couple of days ago
github.com/ruby/ruby/p... by @tagomoris.bsky.social
Rename Namespace to Ruby::Box by tagomoris · Pull Request #15075 · ruby/ruby
github.com
November 11, 2025 at 8:30 AM
#Ruby namespace will be renamed to `Ruby::Box`
An MR about this was merged to the Ruby master a couple of days ago
github.com/ruby/ruby/p... by @tagomoris.bsky.social
An MR about this was merged to the Ruby master a couple of days ago
github.com/ruby/ruby/p... by @tagomoris.bsky.social
In the last days I have counted breaths during meditation (zazen). Was curious about the rythm.
Turns out, I seem to do 10 every 4 minutes quite consistently. (Have done meditation for decades, with hiatuses.)
Also I often feel my heart beating, probably something related to increased vagal tone.
Turns out, I seem to do 10 every 4 minutes quite consistently. (Have done meditation for decades, with hiatuses.)
Also I often feel my heart beating, probably something related to increased vagal tone.
November 7, 2025 at 8:09 PM
In the last days I have counted breaths during meditation (zazen). Was curious about the rythm.
Turns out, I seem to do 10 every 4 minutes quite consistently. (Have done meditation for decades, with hiatuses.)
Also I often feel my heart beating, probably something related to increased vagal tone.
Turns out, I seem to do 10 every 4 minutes quite consistently. (Have done meditation for decades, with hiatuses.)
Also I often feel my heart beating, probably something related to increased vagal tone.
Reposted by Xavier Noria
Guess who's got two free tickets to give away for the first edition of @sfruby.com?
👉 🙋♂️👨💻 👈
Just comment below the answer to this riddle to get a chance to get one.
p [
[65, 118, 111],
[105, 115],
[116, 104, 101],
[98, 101, 115, 116]
].map { |w| w.map(&:chr).join }.join(' ')
👉 🙋♂️👨💻 👈
Just comment below the answer to this riddle to get a chance to get one.
p [
[65, 118, 111],
[105, 115],
[116, 104, 101],
[98, 101, 115, 116]
].map { |w| w.map(&:chr).join }.join(' ')
November 7, 2025 at 12:08 PM
Guess who's got two free tickets to give away for the first edition of @sfruby.com?
👉 🙋♂️👨💻 👈
Just comment below the answer to this riddle to get a chance to get one.
p [
[65, 118, 111],
[105, 115],
[116, 104, 101],
[98, 101, 115, 116]
].map { |w| w.map(&:chr).join }.join(' ')
👉 🙋♂️👨💻 👈
Just comment below the answer to this riddle to get a chance to get one.
p [
[65, 118, 111],
[105, 115],
[116, 104, 101],
[98, 101, 115, 116]
].map { |w| w.map(&:chr).join }.join(' ')
As a consultant, I have seen several takes on service objects in projects. This gem masterfully gathers best practices into a nice and coherent design.
Are you writing service classes in Ruby? You need strong_service github.com/shkm/strong_... by @jamie.schembri.me for the best integration with ruby service DSL with zero dependencies and full rails compatibility.
GitHub - shkm/strong_service: 💪🏼 The best Service Object Ruby gem.
💪🏼 The best Service Object Ruby gem. Contribute to shkm/strong_service development by creating an account on GitHub.
github.com
November 6, 2025 at 5:32 PM
As a consultant, I have seen several takes on service objects in projects. This gem masterfully gathers best practices into a nice and coherent design.
Reposted by Xavier Noria
Make sure to also read this amazing Gist “Ruby: The future of frozen string literals” written by Xavier Noria @fxn.bsky.social. If you read these 2 resources, should know everything there is to know about frozen string literals in Ruby.
gist.github.com/fxn/bf4eed2...
gist.github.com/fxn/bf4eed2...
ruby-the-future-of-frozen-string-literals.md
GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
November 4, 2025 at 4:45 PM
Make sure to also read this amazing Gist “Ruby: The future of frozen string literals” written by Xavier Noria @fxn.bsky.social. If you read these 2 resources, should know everything there is to know about frozen string literals in Ruby.
gist.github.com/fxn/bf4eed2...
gist.github.com/fxn/bf4eed2...
Reposted by Xavier Noria
Watching the keynote "giants, standing on the shoulders of" by Daniel Stenberg (cURL's maintainer).
daniel.haxx.se/blog/2025/09...
#recommended
daniel.haxx.se/blog/2025/09...
#recommended
giants, standing on the shoulders of
This was the title of my keynote at the Open Source Summit Europe 2025 conference in Amsterdam that I delivered on August 25, 2025. The giants, as in fact large parts of modern infrastructure, stand o...
daniel.haxx.se
November 1, 2025 at 7:13 PM
Watching the keynote "giants, standing on the shoulders of" by Daniel Stenberg (cURL's maintainer).
daniel.haxx.se/blog/2025/09...
#recommended
daniel.haxx.se/blog/2025/09...
#recommended
The post has some stereotypes, but essentially there's truth there.
A good novel takes you to other places, in a broad sense of the word. And that is an experience in itself.
(Reading "The Temple of the Golden Pavillion" these days, after my trip to Japan.)
A good novel takes you to other places, in a broad sense of the word. And that is an experience in itself.
(Reading "The Temple of the Golden Pavillion" these days, after my trip to Japan.)
And this equally applies to conference talks. You need a story and not just release notes.
www.joanwestenberg.com/p/why-stori...
www.joanwestenberg.com/p/why-stori...
Why Stories Make You Smarter Than Self-Help Books
The Smartest People You Know Still Read Novels
www.joanwestenberg.com
October 31, 2025 at 6:22 PM
The post has some stereotypes, but essentially there's truth there.
A good novel takes you to other places, in a broad sense of the word. And that is an experience in itself.
(Reading "The Temple of the Golden Pavillion" these days, after my trip to Japan.)
A good novel takes you to other places, in a broad sense of the word. And that is an experience in itself.
(Reading "The Temple of the Golden Pavillion" these days, after my trip to Japan.)
Reposted by Xavier Noria
If you want to make change or add new feature to Ruby, I suggest to read www.a-k-r.org/pub/howto-pe...
Ruby's decision-making process isn't democratic or based on voting. It's more like a game of persuading Matz and Module maintainers.
Ruby's decision-making process isn't democratic or based on voting. It's more like a game of persuading Matz and Module maintainers.
www.a-k-r.org
October 28, 2025 at 9:56 PM
If you want to make change or add new feature to Ruby, I suggest to read www.a-k-r.org/pub/howto-pe...
Ruby's decision-making process isn't democratic or based on voting. It's more like a game of persuading Matz and Module maintainers.
Ruby's decision-making process isn't democratic or based on voting. It's more like a game of persuading Matz and Module maintainers.
Reposted by Xavier Noria
I was recently reminded that not everyone fully understand what the frozen string literal magic comment is about.
So I figured it was the occasion for another deep dive.
byroot.github.io/ruby/perform...
So I figured it was the occasion for another deep dive.
byroot.github.io/ruby/perform...
Frozen String Literals: Past, Present, Future?
If you are a Rubyist, you’ve likely been writing # frozen_string_literal: true at the top of most of your Ruby source code files, or at the very least, that you’ve seen it in some other projects.
byroot.github.io
October 28, 2025 at 12:25 PM
I was recently reminded that not everyone fully understand what the frozen string literal magic comment is about.
So I figured it was the occasion for another deep dive.
byroot.github.io/ruby/perform...
So I figured it was the occasion for another deep dive.
byroot.github.io/ruby/perform...
Reposted by Xavier Noria
Hello, friends! After 10(!) years of #AdventOfCode, I've made some changes to preserve my sanity: there will be 12 days of puzzles each December (still starting Dec 1) and there is no longer a global leaderboard. Read more:
adventofcode.com/2025/about#f...
adventofcode.com/2025/about#f...
adventofcode.com/2025/about#f...
adventofcode.com/2025/about#f...
October 22, 2025 at 2:32 AM
Hello, friends! After 10(!) years of #AdventOfCode, I've made some changes to preserve my sanity: there will be 12 days of puzzles each December (still starting Dec 1) and there is no longer a global leaderboard. Read more:
adventofcode.com/2025/about#f...
adventofcode.com/2025/about#f...
adventofcode.com/2025/about#f...
adventofcode.com/2025/about#f...
Rails 8.1 ships with a feature I wrote for Gusto as a monkey patch they decided to contribute: the ability to deprecate an association.
This is a first. Consulting is separate from OSS for me, access to Rails is not part of my value proposition, and I do not pursue "being paid for doing OSS".
This is a first. Consulting is separate from OSS for me, access to Rails is not part of my value proposition, and I do not pursue "being paid for doing OSS".
October 24, 2025 at 6:22 PM
Rails 8.1 ships with a feature I wrote for Gusto as a monkey patch they decided to contribute: the ability to deprecate an association.
This is a first. Consulting is separate from OSS for me, access to Rails is not part of my value proposition, and I do not pursue "being paid for doing OSS".
This is a first. Consulting is separate from OSS for me, access to Rails is not part of my value proposition, and I do not pursue "being paid for doing OSS".
Reposted by Xavier Noria
I use a modified version where I set `$debug` in a test causing an issue, then check it in the code to put debugging info
Debug technique I use in some occasions:
Define global variable $foo where you collect stuff, maybe in different places.
Then, at_exit { pp $foo }.
Define global variable $foo where you collect stuff, maybe in different places.
Then, at_exit { pp $foo }.
October 23, 2025 at 1:21 PM
I use a modified version where I set `$debug` in a test causing an issue, then check it in the code to put debugging info
Debug technique I use in some occasions:
Define global variable $foo where you collect stuff, maybe in different places.
Then, at_exit { pp $foo }.
Define global variable $foo where you collect stuff, maybe in different places.
Then, at_exit { pp $foo }.
October 23, 2025 at 11:31 AM
Debug technique I use in some occasions:
Define global variable $foo where you collect stuff, maybe in different places.
Then, at_exit { pp $foo }.
Define global variable $foo where you collect stuff, maybe in different places.
Then, at_exit { pp $foo }.
Here I am, discovering unheard details in my fav tracks after upgrading the headphones DAC/Amp.
October 21, 2025 at 3:36 PM
Here I am, discovering unheard details in my fav tracks after upgrading the headphones DAC/Amp.
When people complain Shopify is too prominent, only main company donor in RC, etc.
WTF folks. As if that was their choice!
Where are the other companies pushing Ruby and Rails with real money and resources to be on par?
Talk is cheap.
WTF folks. As if that was their choice!
Where are the other companies pushing Ruby and Rails with real money and resources to be on par?
Talk is cheap.
I wrote about some of my thoughts on the lessons we can learn from the RubyGems situation and how we can move forward. blog.peterzhu.ca/open-source-...
Open Source is the Most Fragile and Most Resilient Ecosystem - Peter Zhu
Some of my thoughts on the lessons we can learn from the RubyGems situation and how we can move forward.
blog.peterzhu.ca
October 18, 2025 at 7:29 PM
When people complain Shopify is too prominent, only main company donor in RC, etc.
WTF folks. As if that was their choice!
Where are the other companies pushing Ruby and Rails with real money and resources to be on par?
Talk is cheap.
WTF folks. As if that was their choice!
Where are the other companies pushing Ruby and Rails with real money and resources to be on par?
Talk is cheap.
Reposted by Xavier Noria
#hanami for #rails developers is a 4-part series showing how to learn Hanami: ryanbigg.com/2025/10/hana...
Ryan Bigg - Hanami for Rails Developers: Part 1: Models
Hanami for Rails Developers: Part 1: Models
ryanbigg.com
October 16, 2025 at 6:35 PM
#hanami for #rails developers is a 4-part series showing how to learn Hanami: ryanbigg.com/2025/10/hana...
Generally speaking, ancestor chains do not belong to public interfaces.
Say, if an instance of Foo::Bar provides method `foo`, generally speaking, whether the method comes from the class or a mixin is not a concern of the user. That, and the module constant, do not belong to the public contract.
Say, if an instance of Foo::Bar provides method `foo`, generally speaking, whether the method comes from the class or a mixin is not a concern of the user. That, and the module constant, do not belong to the public contract.
October 16, 2025 at 1:55 PM
Generally speaking, ancestor chains do not belong to public interfaces.
Say, if an instance of Foo::Bar provides method `foo`, generally speaking, whether the method comes from the class or a mixin is not a concern of the user. That, and the module constant, do not belong to the public contract.
Say, if an instance of Foo::Bar provides method `foo`, generally speaking, whether the method comes from the class or a mixin is not a concern of the user. That, and the module constant, do not belong to the public contract.
The one and only D'Angelo passed away today (51yo, pancreatic cancer).
He was the best.
Ledisi did Brown Sugar as a tribute to him.
He was the best.
Ledisi did Brown Sugar as a tribute to him.
October 14, 2025 at 8:49 PM
The one and only D'Angelo passed away today (51yo, pancreatic cancer).
He was the best.
Ledisi did Brown Sugar as a tribute to him.
He was the best.
Ledisi did Brown Sugar as a tribute to him.
Context for my recent RBS posts.
To use an API, or read source code, you need to know what do methods accept and return.
And that is orthogonal to dynamic typing.
I have always annotated my Ruby APIs internally, including private methods.
To use an API, or read source code, you need to know what do methods accept and return.
And that is orthogonal to dynamic typing.
I have always annotated my Ruby APIs internally, including private methods.
October 14, 2025 at 12:40 PM
Context for my recent RBS posts.
To use an API, or read source code, you need to know what do methods accept and return.
And that is orthogonal to dynamic typing.
I have always annotated my Ruby APIs internally, including private methods.
To use an API, or read source code, you need to know what do methods accept and return.
And that is orthogonal to dynamic typing.
I have always annotated my Ruby APIs internally, including private methods.
Correction: RBS itself supports interfaces, it is inline RBS what I had in mind.
YARD has notation for duck typing, and in Zeitwerk I made up my own (see for example these two attributes github.com/fxn/zeitwerk...)
YARD has notation for duck typing, and in Zeitwerk I made up my own (see for example these two attributes github.com/fxn/zeitwerk...)
October 14, 2025 at 11:04 AM
Correction: RBS itself supports interfaces, it is inline RBS what I had in mind.
YARD has notation for duck typing, and in Zeitwerk I made up my own (see for example these two attributes github.com/fxn/zeitwerk...)
YARD has notation for duck typing, and in Zeitwerk I made up my own (see for example these two attributes github.com/fxn/zeitwerk...)
The main limitation I find in RBS is that it does not support duck typing interfaces, so common and idiomatic in Ruby.
October 14, 2025 at 9:57 AM
The main limitation I find in RBS is that it does not support duck typing interfaces, so common and idiomatic in Ruby.
Has anyone tried the XREAL One Pro for programming? Is it practical?
October 12, 2025 at 10:22 AM
Has anyone tried the XREAL One Pro for programming? Is it practical?