Jean Boussier's Avatar

Jean Boussier

@byroot

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

1,740
Followers
158
Following
425
Posts
14.06.2023
Joined
Posts Following

Latest posts by Jean Boussier @byroot

I'm not even sure if I'd go as far as "idiot". It's impossible for me to guess what the intention is. They may very well have good intentions, but yeah, kinda doesn't give me the motivation to engage.

05.03.2026 12:44 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
ejson | RubyGems.org | your community gem host

It somewhat makes sense to me. That gives a place to get updates, changelogs, etc.

There are a few rubygems like that, e.g. rubygems.org/gems/ejson is mostly an empty gem with a Go binary in it.

05.03.2026 12:41 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

So far I think reviewing these normally is a waste of my time, if the person on the other end isn't gonna learn anything, why bother? I might as well do it myself. No?

But then what about attribution? Does the LLM wrangler deserve any credit on the final patch?

I'm a bit lost...

05.03.2026 09:56 πŸ‘ 8 πŸ” 0 πŸ’¬ 2 πŸ“Œ 1

But nowadays I get some PRs that are clearly LLM generated, even the feedback I give is clearly directly pasted in the LLM and then sent back to me. It's basically LLM coding by proxy, which begs the question of what to do?

05.03.2026 09:56 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I'm not even sure why I do that, I guess it's a teaching opportunity?

Sometimes it just needs a quick touch up, and I do it myself, as it's not worth the back and forth.

05.03.2026 09:56 πŸ‘ 1 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

Something I'm not yet clear on how to handle these days is what to do with obvious LLM PRs on Open Source projects.

When a human submit a PR that needs some work, often enough I'll go through rounds of review to progressively get the PR in a mergeable state.

05.03.2026 09:56 πŸ‘ 8 πŸ” 2 πŸ’¬ 2 πŸ“Œ 0

You should yes.

05.03.2026 08:26 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I mean, that somewhat holds true of at least one of his recent predecessors.

04.03.2026 23:03 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Preview
Multiprocessing is the most efficient way to serve Rails apps - Balkan Ruby 2026 You’ve been wondering how many threads Puma should be configured to use, or how much cool stuff you’ll be able to build once you’ve migrated to use fibers an...

Process maxing is the way balkanruby.com/talks/32

18.02.2026 18:14 πŸ‘ 7 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
[Euruko 2025] β€œConquering Massive Traffic Spikes in Ruby Applications with Pitchfork” – Sangyong Sim
[Euruko 2025] β€œConquering Massive Traffic Spikes in Ruby Applications with Pitchfork” – Sangyong Sim YouTube video by Euruko

TIL that STORES migrated to Pitchfork πŸ™‚

www.youtube.com/watch?v=vOH0...

08.02.2026 19:01 πŸ‘ 10 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

It depends :) The only way to know is to try.

05.02.2026 12:01 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I really really want to get rid of all the `require` decorators, it's really painful to have huge stacktraces when something break during boot.

And both bootsnap and zeitwerk get frequently blamed for third party issues because of it.

05.02.2026 11:10 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Right, most syscalls on macOS (especially the FS related ones) are generally an order of magnitude or two slower than on Linux.

It's quite awful.

05.02.2026 11:08 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

A few % of overall boot time, is pretty huge for Zeitwerk given it is already a few % itself.

Napkin math, that 6% figure would be over a full second saved for Intercom. The 3% for autoloading not so much though.

05.02.2026 10:32 πŸ‘ 0 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

Right, we mentioned autoload blocks a few years ago. I should try to prototype it.

But I suspect @eregon.me won't like it 😜

05.02.2026 10:30 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

In the case of bootsnap it already had to be one, so that optimized helper made sense, for Zeitwerk maybe not?

But also maybe Bootsnap could expose an API that Zeitwerk would use if present?

05.02.2026 07:43 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I'll try to find some time to try it on intercom.

For me personally, boot time is a bit of an obsession, so I'd be happy to shave a few %, but I get that adding a C extension to a gem is no small decision.

05.02.2026 07:43 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Oh but of course GitHub Actions is having an outage right as I push the fix...

I guess it's a sign I should go to bed...

02.02.2026 21:20 πŸ‘ 6 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Looks like I can procrastinate some more, I found a way to debug it without rr: github.com/ruby/json/pu...

02.02.2026 21:17 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Well, as I said, I need to stop procrastinating first, so that may take a few months πŸ˜….

02.02.2026 19:21 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I need to stop procrastinating and buy myself a proper development machine that run on Linux, and learn how to use the rr debugger.

I keep running into issues that would be way easier to debug that way...

02.02.2026 19:01 πŸ‘ 12 πŸ” 1 πŸ’¬ 2 πŸ“Œ 1

You might just be able to rip out the bootsnap version of it.

github.com/rails/bootsn...

And the Ruby fallback for other platforms: github.com/rails/bootsn...

02.02.2026 18:59 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

There are multiple possible strategies, bootsnap has one cache file per directory. But you could have a single cache file with the entire app tree in it, or one per load path entry.

But in all case, like bootsnap you'd need a user provided cache path. e.g. `Zeitwerk.cache_path = "blah"`.

02.02.2026 14:25 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Yes, you need to stat the dir, but then you save one stat per dir entry.

> I believe forbidding extensions in directories that represent namespaces

Good point.

02.02.2026 12:45 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

> but perhaps not a lot boot time/eager loading.

I had a persisted cache in mind, like bootsnap has.

Basically a cache for your `ls` helper. Instead of directly listing the directory, you lookup the cache, compare the cached mtime with the directory mtime, and then use the cached `ls`.

02.02.2026 11:54 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

However this mean a bit more config (or convention), and that's an annoying part of Bootsnap. But I guess it could be fully optional and Rails could set it up.

02.02.2026 10:30 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I wonder if there's an opportunity for caching here.

If you had a cache store, you could revalidate the entire directory scan by just checking the directory `mtime`.

That's what bootsnap does.

02.02.2026 10:30 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Could be interesting to try to git blame, but very old changes like this usually end up on one giant initial commit

22.01.2026 12:16 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I would assume it was done for consistency with method calls.

But I'm not familiar with parse.y, perhaps the syntax was shared between arrays and argument list and it came as a side effect.

22.01.2026 12:16 πŸ‘ 4 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0
Post image

🎀Meet our next speaker: @byroot.bsky.social β€” Senior Principal Engineer @ Intercom, Rails & Ruby Core team member, Ruby Prize 2022 finalist.

With 10+ years on large Ruby apps, he’s a long-time committer shaping the community.
πŸ—“οΈ 15-16 May, 2026
πŸ“ Sofia: balkanruby.com/talks/32

19.01.2026 10:00 πŸ‘ 25 πŸ” 5 πŸ’¬ 0 πŸ“Œ 0