<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: byroot</title><link>https://news.ycombinator.com/user?id=byroot</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 09 Apr 2026 09:23:47 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=byroot" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by byroot in "France pulls last gold held in US"]]></title><description><![CDATA[
<p>Nitpick, but France never left NATO proper, only the integrated command, and reintegrated it in 2008 under Sarkozy.</p>
]]></description><pubDate>Mon, 06 Apr 2026 11:43:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47659651</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=47659651</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47659651</guid></item><item><title><![CDATA[New comment by byroot in "I’m leaving Redis for SolidQueue"]]></title><description><![CDATA[
<p>That's also something Rails helps abstract away by automatically deferring enqueues to after the transaction completed.<p>Even SolidQueue behave that way by default.<p><a href="https://github.com/rails/rails/pull/51426" rel="nofollow">https://github.com/rails/rails/pull/51426</a></p>
]]></description><pubDate>Wed, 14 Jan 2026 21:22:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=46623694</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46623694</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46623694</guid></item><item><title><![CDATA[New comment by byroot in "I’m leaving Redis for SolidQueue"]]></title><description><![CDATA[
<p>> The ideal situation with Rails would be if there is a simple way to switch back to Redis<p>That's largely the case.<p>Rails provide an abstracted API for jobs (Active Job). Of course some application do depend on queue implementation specific features, but for the general case, you just need to update your config to switch over (and of course handle draining the old queue).</p>
]]></description><pubDate>Wed, 14 Jan 2026 14:40:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=46616552</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46616552</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46616552</guid></item><item><title><![CDATA[New comment by byroot in "Can Bundler be as fast as uv?"]]></title><description><![CDATA[
<p>You are describing bootsnap.<p>And yes I proposed to integrate bootsnap into bundler ages ago, but got told to go away.</p>
]]></description><pubDate>Fri, 02 Jan 2026 09:11:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=46462932</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46462932</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46462932</guid></item><item><title><![CDATA[New comment by byroot in "Can Bundler be as fast as uv?"]]></title><description><![CDATA[
<p>> none of the providers really do this out of the box<p>CircleCI does. And I'm sure many others.</p>
]]></description><pubDate>Fri, 02 Jan 2026 09:03:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=46462877</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46462877</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46462877</guid></item><item><title><![CDATA[New comment by byroot in "Can Bundler be as fast as uv?"]]></title><description><![CDATA[
<p>> My experience with GHA default caches is that it’s absolutely dog slow.<p>GHA is definitely far from the best, but it works:, e.g 1.4 seconds to restore 27 dependencies <a href="https://github.com/redis-rb/redis-client/actions/runs/20519158916/job/58951585454#step:3:123" rel="nofollow">https://github.com/redis-rb/redis-client/actions/runs/205191...</a><p>> The only way docker caching works is if you have a persistent host.<p>You can pull the cache when the build host spawns, but yes, if you want to build efficiently, you can't use ephemeral builders.<p>But overall that discussion isn't very interesting because Buildkite is more a kit to build a CI than a CI, so it's on you to figure out caching.<p>So I'll just reiterate my main point: a CI system must provide a workable caching mechanism if it want to be both snappy and reliable.<p>I've worked for over a decade on one of the biggest Rails application in existence, and restoring the 800ish gems from cache was a matter of a handful of seconds. And when rubygems.org had to yank a critical gem for copyright reasons [0], we continued building and shipping without disruption while other companies with bad CIs were all sitting ducks for multiple days.<p>[0] <a href="https://github.com/rails/marcel/issues/23" rel="nofollow">https://github.com/rails/marcel/issues/23</a></p>
]]></description><pubDate>Fri, 02 Jan 2026 00:04:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=46459675</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46459675</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46459675</guid></item><item><title><![CDATA[New comment by byroot in "Can Bundler be as fast as uv?"]]></title><description><![CDATA[
<p>GHA with the `setup-ruby` action will cache gems.<p>Buildkite can be used in tons of different ways, but it's common to use it with docker and build a docker image with a layer dedicated to the gems (e.g. COPY Gemfile Gemfile.lock; RUN bundle install), effectively caching dependencies.</p>
]]></description><pubDate>Thu, 01 Jan 2026 23:13:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=46459253</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46459253</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46459253</guid></item><item><title><![CDATA[New comment by byroot in "Can Bundler be as fast as uv?"]]></title><description><![CDATA[
<p>Ye,s but if your CI isn't terrible, you have the dependencies cached, so that subsequent runs are almost instant, and more importantly, you don't have a hard dependency on a third party service.<p>The reason for speeding up bundler isn't CI, it's newcomer experience. `bundle install` is the overwhelming majority of the duration of `rails new`.</p>
]]></description><pubDate>Thu, 01 Jan 2026 22:36:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=46458931</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46458931</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46458931</guid></item><item><title><![CDATA[New comment by byroot in "Ruby 4.0.0"]]></title><description><![CDATA[
<p>I know that tweet, it's real, but that doesn't contradict my comment.<p>They indeed replaced Unicorn by Falcon in one application, but falcon is configured in "Unicorn mode" (no concurrent requests). So the gain is effectively 0.<p>Also note how they don't share any performance metrics, contrary to <a href="https://railsatscale.com/2023-10-23-pitchfork-impact-on-shopify-monolith/" rel="nofollow">https://railsatscale.com/2023-10-23-pitchfork-impact-on-shop...</a></p>
]]></description><pubDate>Thu, 25 Dec 2025 10:47:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=46383610</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46383610</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46383610</guid></item><item><title><![CDATA[New comment by byroot in "Ruby 4.0.0"]]></title><description><![CDATA[
<p>> GC still stops the world, right?<p>Yes, Ractor local GC is the one feature that didn't make it into 4.0.<p>> Can't you just have completely separate boxes with their own copies of all classes etc, or does that use too much memory?<p>Ruby::Box is kinda complicated, and still need a lot of work, so it's unclear how the final implementation will be. Right now there is no CoW or any type of sharing for most classes, except for core classes.<p>Core classes are the same object (pointer) across all boxes, however they have a constant and method table for each box.<p>But overall what I meant to say is that Box wouldn't make GC any easier for Ractors.</p>
]]></description><pubDate>Thu, 25 Dec 2025 10:43:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=46383596</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46383596</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46383596</guid></item><item><title><![CDATA[New comment by byroot in "Ruby 4.0.0"]]></title><description><![CDATA[
<p>They already truly run in parallel in Ruby 4.0. The overwhelming majority of contention points have been removed in the last yet.<p>Ruby::Box wouldn't help reducing contention further, they actually make it worse because with Ruby::Box classes and modules and an extra indirection to go though.<p>The one remaining contention point is indeed garbage collection. There is a plan for Ractor local GC, but it wasn''t sufficiently ready for Ruby 4.0.</p>
]]></description><pubDate>Thu, 25 Dec 2025 09:43:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46383348</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46383348</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46383348</guid></item><item><title><![CDATA[New comment by byroot in "Ruby 4.0.0"]]></title><description><![CDATA[
<p>> It seems Ractor is still work in progress<p>The Ractor experimental status could almost be removed. They no longer have known bugs, and only one noticeable performance issue left (missing Ractor local GC).<p>But the API was just recently changed, so I think it's better to wait another years.<p>> I vaguely remember reading Shopify is using Fiber / Rack / Async in their codebase.<p>Barely. There is indeed this management obsession for fibers even when it doesn't make sense, so there is some token usage there and there, but that's it.<p>There is one application that was converted from Unicorn to Falcon, but falcon isn't even configured to accept concurrent requests, the gain is basically 0.<p>As for Rails, there isn't much use cases for fibers there, except perhaps Active Record async queries, but since most users use Postgres and PG connections are extremely costly, few people are using AR async queries with enough concurrency for fibers to make a very noticeable difference.</p>
]]></description><pubDate>Thu, 25 Dec 2025 09:19:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=46383240</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46383240</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46383240</guid></item><item><title><![CDATA[New comment by byroot in "Programmers and software developers lost the plot on naming their tools"]]></title><description><![CDATA[
<p>It was removed because rubygems was made to be required by default so it was now useless.<p>The stdlib still contains `un.rb` though: <a href="https://github.com/ruby/ruby/blob/d428d086c23219090d68eb2d027498c6ea999b89/lib/un.rb#L12-L27" rel="nofollow">https://github.com/ruby/ruby/blob/d428d086c23219090d68eb2d02...</a></p>
]]></description><pubDate>Fri, 12 Dec 2025 12:13:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=46243407</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=46243407</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46243407</guid></item><item><title><![CDATA[New comment by byroot in "Ruby Symbols"]]></title><description><![CDATA[
<p>> They aren't interned frozen strings<p>Doesn't matter. The parent claim was:<p>> You'd just have a broken VM if you used mutable strings for metaprogramming in Ruby<p>From day one it was possible to freeze strings used in metaprograming. I mean Ruby Hashes do that to strings keys.<p>>  Ruby 3.4 making it unnecessary because it is on by default.<p>That's incorrect: <a href="https://byroot.github.io/ruby/performance/2025/10/28/string-literals.html" rel="nofollow">https://byroot.github.io/ruby/performance/2025/10/28/string-...</a></p>
]]></description><pubDate>Wed, 19 Nov 2025 08:21:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=45977087</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=45977087</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45977087</guid></item><item><title><![CDATA[New comment by byroot in "Ruby Symbols"]]></title><description><![CDATA[
<p>Ruby always had immutable (frozen) strings, so no, this never was a reason for Symbols existence.</p>
]]></description><pubDate>Tue, 18 Nov 2025 18:37:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=45970189</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=45970189</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45970189</guid></item><item><title><![CDATA[New comment by byroot in "Ruby Symbols"]]></title><description><![CDATA[
<p>HashWithIndifferentAccess was added because back in the day symbols were immortal, hence could not be used for request parameters.<p>It no longer make sense today, and any new use of it is a smell.</p>
]]></description><pubDate>Tue, 18 Nov 2025 15:00:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=45967083</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=45967083</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45967083</guid></item><item><title><![CDATA[New comment by byroot in "Ruby Symbols"]]></title><description><![CDATA[
<p>No they’re not.<p>String can be interned in Ruby, but it’s always possible for an equal string that is not interned to also exist. Hence interned strings can’t benefit from the same optimization than symbols.<p>You can first compare them by pointer, but on a mismatch you have to fallback to comparing content. Same for the hashcode, you have to hash the content.</p>
]]></description><pubDate>Tue, 18 Nov 2025 14:59:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=45967052</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=45967052</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45967052</guid></item><item><title><![CDATA[New comment by byroot in "Compiling Ruby to machine language"]]></title><description><![CDATA[
<p>Is it? Smaller business usually comes with smaller applications. Most cloud and hardware vendors give you about 4GiB of RAM per core, maybe only 2 when using "CPU optimized instances", that's huge and leave plenty of space for a couple hundred MB of JITed code.</p>
]]></description><pubDate>Tue, 18 Nov 2025 08:58:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=45962910</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=45962910</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45962910</guid></item><item><title><![CDATA[New comment by byroot in "Friendly attributes pattern in Ruby"]]></title><description><![CDATA[
<p>> I understand that rails thrives as a DSL, but to me having a method such as .month on an Integer, is simply wrong<p>It's not that different from `1.times` or `90.chr` which are vanilla Ruby.<p>> HashWithIndifferentAccess<p>HashWithIndifferentAccess was an unfortunate necessity to avoid DOS attacks when Symbols used to be immortal. There's no longer a reason to use it today, except for backward compatibility.</p>
]]></description><pubDate>Sat, 08 Nov 2025 10:50:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=45855780</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=45855780</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45855780</guid></item><item><title><![CDATA[New comment by byroot in "Frozen String Literals: Past, Present, Future?"]]></title><description><![CDATA[
<p>>  can be any of latin-1, UCS-2 or UCS-4, as described in PEP 393<p>My bad, I haven't seriously used Python for over 15 years now, so I stand corrected (and will clarify the post).<p>My main point stands though, Python strings have an internal representation, but it's not exposed to the user like Ruby strings.<p>> Article also says PHP has immutable strings. They are mutable, although often copied.<p>Same. Thank you for the correction, I'll update the post.</p>
]]></description><pubDate>Wed, 05 Nov 2025 07:58:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=45820518</link><dc:creator>byroot</dc:creator><comments>https://news.ycombinator.com/item?id=45820518</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45820518</guid></item></channel></rss>