Jean Boussier's Avatar

Jean Boussier

@byroot.bsky.social

Rails core, Ruby committer, Senior Principal Engineer at Intercom.

1,697 Followers  |  153 Following  |  388 Posts  |  Joined: 14.06.2023  |  2.2105

Latest posts by byroot.bsky.social on Bluesky

Read on Slack:

"And yeah schema based multi tenancy made me question my career choices"

πŸ˜„

25.11.2025 11:48 β€” πŸ‘ 3    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0

Nah, it's just that extending an object means creating a singleton class. If it's just for a single object it's fine, but you you are doing this for lots of objects, it means the class will be different every time and that trashes the VM caches.

24.11.2025 21:23 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

99.999% of the time it's best not to use it though.

24.11.2025 18:56 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Alright, you got a point :)

24.11.2025 13:55 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Not just conceptually!

24.11.2025 13:40 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

I'm not sure what the context is in your case.

It did happen that I declined discussing things further until some prototype was published.

It's super easy to talk over each others head with prose. With code, there's no misunderstanding, it makes it clear what the goal is.

But to each their own.

21.11.2025 20:09 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
Implement `env["puma.mark_as_io_bound"]` by byroot Β· Pull Request #3816 Β· puma/puma Fix: #3777 Workers can now be marked as "IO bound". This state last until the end of the current request. At the end of the request, the pool decide whether the "IO bound" threa...

So I took half an hour to open a prototype PR and then it was much more clear what I intended to do: github.com/puma/puma/pu...

21.11.2025 14:33 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
Feature: Add API to "remove" current thread from the pool Β· Issue #3777 Β· puma/puma Is your feature request related to a problem? Please describe. A common problem in applications is how to handle uneven mix of IO-heavy and CPU-heavy requests. It's not rare for application that ar...

Even for bigger changes, sometime a quick prototype PR help convey the intention much better than a long discussion.

Case in point, I opened github.com/puma/puma/is... to test the waters, but kept answering the same questions, clearly it wasn't clear to everyone what I had in mind.

21.11.2025 14:33 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

That's not actionable data though.

19.11.2025 22:02 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

All I can think of is: for the love of god, gimme the raw data!

I’m sure there are API that are just begging to be optimized.

19.11.2025 20:50 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
Optimizing Ruby performance: Observations from thousands of real-world services | Datadog Learn about trends in Ruby development and opportunities for improving performance that many organizations are leaving on the table.

"Our data backs up other findings that Ruby applications are generally less I/O-heavy, spending as much or more time on CPU as they do waiting on other services or database requests."

www.datadoghq.com/blog/ruby-pe...

19.11.2025 17:56 β€” πŸ‘ 28    πŸ” 8    πŸ’¬ 3    πŸ“Œ 0

Ruby and Rails are very similar in their versioning scheme. The major is used for marketing, the minor is equivalent to a major in SemVer term, and the patch is what SemVer people expect.

17.11.2025 11:25 β€” πŸ‘ 6    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

That’s more or less how we do it it Rails. There’s deprecation message mention the release that will remove the API.

17.11.2025 08:37 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
NameError: uninitialized constant Omniauth::Strategies::Shopify

Did you mean? Spotify

NameError: uninitialized constant Omniauth::Strategies::Shopify Did you mean? Spotify

Ruby is in a trolling mood today πŸ˜‚

14.11.2025 18:56 β€” πŸ‘ 22    πŸ” 1    πŸ’¬ 0    πŸ“Œ 1

Of course. I would never miss it!

11.11.2025 21:30 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Cupcake

Cupcake

Happy to share that today I'm starting as senior principal at Intercom!

11.11.2025 08:53 β€” πŸ‘ 93    πŸ” 0    πŸ’¬ 20    πŸ“Œ 0

Also please don't restrict bundler and ruby versions like `bundler < 3.0` and `required_ruby_version < 4.0` πŸ™

30.10.2025 23:17 β€” πŸ‘ 24    πŸ” 7    πŸ’¬ 0    πŸ“Œ 1

Congrats @joshuay03.bsky.social !

06.11.2025 17:00 β€” πŸ‘ 7    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I was pleasantly surprised by the T-shirts at Rails world. Probably the softest ones I ever got at a conf.

I just checked, the make is "Next Level Apparel".

05.11.2025 17:27 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
GitHub - Shopify/deprecation_toolkit: βš’Eliminate deprecations from your codebase βš’ βš’Eliminate deprecations from your codebase βš’. Contribute to Shopify/deprecation_toolkit development by creating an account on GitHub.

What you want to do with the warnings depends a lot on the environment. Forwarding them to Rails.logger isn't necessarily always the best thing to do.

e.g. github.com/Shopify/depr...

05.11.2025 12:25 β€” πŸ‘ 5    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
signalfd(2) - Linux manual page

It's so common Linux basically added an API to do it for you with `signalfd`: man7.org/linux/man-pa...

02.11.2025 08:08 β€” πŸ‘ 6    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

That's called the "Self Pipe Trick" It's pretty much textbook how to handle signals in an application with a main IO loop.

02.11.2025 07:59 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

But generally speaking, I think it's the right approach for integrating Ractors.

Don't try to run entire applications in Ractors, instead find some chunk of computations you can move into a Ractor.

31.10.2025 11:44 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Yeah, that design makes sense to me.

That should allow Puma to accept new requests faster when already relatively busy, but of course won't help with app code latency, so unsure how much that would really help in practice.

31.10.2025 11:44 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I think it's an interesting idea, would allow parsing code not to impact latency of applicative threads.

However:
- I think you can do that today, it's orthogonal to the parser.
- I'm not certain how backpressure is done in Puma. Does it stop accepting when all threads are busy?

31.10.2025 06:49 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

That’s much closer than what I would have guessed. With a bit of work it might be possible to close the gap.

I’d be more worried about its accuracy though. It’s always a tough sale to replace something that worked for ages.

30.10.2025 17:36 β€” πŸ‘ 6    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

I find it interesting that every time frozen string literal is discussed, symbols are brought up.

It seems like symbols purpose and semantic isn't well understood. Isn't there a good post explaining what they are and how they're meant to be used?

29.10.2025 11:34 β€” πŸ‘ 18    πŸ” 1    πŸ’¬ 2    πŸ“Œ 0

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.

28.10.2025 21:56 β€” πŸ‘ 22    πŸ” 8    πŸ’¬ 0    πŸ“Œ 0

Yeah, it's the double edged sword of bugs.rubylang.org, it's a big enough barrier of entry that we don't get many low effort bug reports and comments, but also it's far enough removed from where most users are that only a small minority interact with it.

28.10.2025 19:24 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

At the end of the day, I'm unsure what visibility Matz has of how Ruby is used by the community, and whether he's trying to cater to it or not.

But either way, as I said in the post, I'm quite tired of arguing for it by now.

28.10.2025 18:47 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

@byroot is following 20 prominent accounts