<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: Capricorn2481</title><link>https://news.ycombinator.com/user?id=Capricorn2481</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 19 Aug 2026 03:47:06 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=Capricorn2481" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by Capricorn2481 in "Firefox is now the last major browser that still supports uBlock Origin"]]></title><description><![CDATA[
<p>I would imagine a very small number of people on here rely on ads for income, but I could be wrong. That's just not the shape of company most devs work for.</p>
]]></description><pubDate>Mon, 17 Aug 2026 15:56:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=49333086</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49333086</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49333086</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "My Ten Years in No Man's Sky"]]></title><description><![CDATA[
<p>I can't articulate why, and I'm not even a big fan of Minecraft, but it honestly feels way deeper than NMS.<p>I think it's the fact that NMS has a lot of systems, but they are just separate, and they have a lot of limitations. Ships are separate from bases which are separate from freighters. They sometimes interact if it's explicitly coded, but nothing is allowed to be emergent.<p>In Minecraft I can put 100 nether portals in my basement if I feel like it, and I can set up a sheep farm in hell. I can pour water into my base and have a mini pool with fish. I can make copper golems that move items, and that opens a whole can of worms.<p>In NMS, it feels like I have no freedom to experiment at all. For that reason, it's been pretty hard to get into. Everything feels so baked in place. The only thing that really scratched that itch of mine was making big farming factories. But I was not interested after that.</p>
]]></description><pubDate>Mon, 17 Aug 2026 15:51:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=49333006</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49333006</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49333006</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "Firefox is now the last major browser that still supports uBlock Origin"]]></title><description><![CDATA[
<p>Care to share?</p>
]]></description><pubDate>Sat, 15 Aug 2026 07:39:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=49308589</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49308589</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49308589</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "Firefox is now the last major browser that still supports uBlock Origin"]]></title><description><![CDATA[
<p>> Somehow, Mozilla's decisions are enough to never use FF, but Google's infinitely many horrible ones are acceptable for.... What reason?<p>I think these people are real and predate AI. I think it comes down to a fundamental psychology in how the two browsers are marketed online. Firefox users would say "Firefox is better than Chrome." Chrome users would say "Chrome is good." Firefox is touted as a better browser on the principle of the freedom it gives its users, and paradoxically, that draws heavy scrutiny.<p>I don't think I am doing a Goomba fallacy here. People that claim to care about privacy and browser freedom will express disgust with Mozilla then, in the same breath, say they are opting into Chrome out of spite, which is 100x worse.</p>
]]></description><pubDate>Sat, 15 Aug 2026 07:37:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=49308577</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49308577</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49308577</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "Why Target Common Lisp for Code Generation?"]]></title><description><![CDATA[
<p>> CL lets you build real apps, for real. No toys. This has value.<p>As opposed to other languages where you don't build real apps? I don't think anyone was arguing you can't make real apps in CL</p>
]]></description><pubDate>Thu, 13 Aug 2026 15:51:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=49287824</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49287824</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49287824</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "uBlock Origin Is Giving Up the Fight to Keep Ads Off Facebook"]]></title><description><![CDATA[
<p>That's an underrated season, imo. Keith David is fantastic.</p>
]]></description><pubDate>Wed, 12 Aug 2026 16:08:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=49274640</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49274640</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49274640</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "Self-hosting Kimi K3: 20% more hardware cost, 20% better task resolution"]]></title><description><![CDATA[
<p>Sure, but it's an actual computer I am holding and can use, whereas we are soon to have cloud personal computing.</p>
]]></description><pubDate>Thu, 30 Jul 2026 16:50:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=49112552</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49112552</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49112552</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "OpenJDK Interim Policy on Generative AI"]]></title><description><![CDATA[
<p>I'm fairly confident mine doesn't. There'd be 0 benefit to using an LLM for something we've had near perfect tooling around for decades.<p>LSPs vs LLM Autocomplete are a different story, but I can just turn that off.</p>
]]></description><pubDate>Thu, 30 Jul 2026 13:53:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=49110061</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49110061</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49110061</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "Removing React.js from the codebase and adapting Htmx for UI interactivity (2023)"]]></title><description><![CDATA[
<p>Wouldn't constantly loading new items into a select form be super annoying? Can HTML even keep a select input open when new items are added?</p>
]]></description><pubDate>Mon, 27 Jul 2026 17:22:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=49072795</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49072795</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49072795</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "How to Block Some of the Bots"]]></title><description><![CDATA[
<p>Am I the only one that exclusively gets attacks with spoofed user agents and rotating TLS signatures? I feel like every post I see about not needing a CDN has tips that could be overcome in under an hour of scripting.</p>
]]></description><pubDate>Sun, 26 Jul 2026 19:53:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=49061794</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49061794</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49061794</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "The arguments against open source AI are bad"]]></title><description><![CDATA[
<p>I just don't see how policy makers, media, or the average person would find any utility in calling something "open source" over "free." Maybe an actual legal bill will. But in everday speech, everyone will refer to it as "free AI", because it describes the only part they actually care to know about.<p>Now I am living in a world where "ChatGPT" was being used in every day conversation so I can't underestimate people</p>
]]></description><pubDate>Fri, 24 Jul 2026 10:27:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=49033511</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49033511</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49033511</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "The arguments against open source AI are bad"]]></title><description><![CDATA[
<p>> But I'd argue the average person only really cares about the legal aspects of duplication (and not their ability to modify things) both when it comes to open source software and open weight LLMs.<p>The average person does not know the term "open source" to begin with, and is 100% not going to run an open source weight model on their computer. If they are, they will call them "free" models. I think the distinction is only going to enter the periphery of nerds.</p>
]]></description><pubDate>Fri, 24 Jul 2026 06:45:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=49031970</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=49031970</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49031970</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "How Our Rust-to-Zig Rewrite Is Going"]]></title><description><![CDATA[
<p>> Most of the people responding are probably those with a strong opinion because of what they work on.<p>I can assure you that's not the case on here. The people working in truly low latency environments are not commenting on GC threads to begin with because it's a non-starter for them. For whatever reason, there is just a chunk of people that eat a lot of FUD around GCs who are working in the exact domains they thrive in.</p>
]]></description><pubDate>Fri, 17 Jul 2026 00:21:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=48942004</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=48942004</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48942004</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "Running Gemma 4 26B at 5 tokens/sec on a 13-year-old Xeon with no GPU"]]></title><description><![CDATA[
<p>Yeah prediction models and many parentheses are probably not a good combination,  but we're not talking about anything exceptionally complicated here. I have had syntax issues in Python as well.</p>
]]></description><pubDate>Wed, 15 Jul 2026 21:15:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=48927078</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=48927078</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48927078</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "Running Gemma 4 26B at 5 tokens/sec on a 13-year-old Xeon with no GPU"]]></title><description><![CDATA[
<p>I'm not lamenting that they aren't close, I'm saying Qwen will frequently output code that isn't even syntactically correct, even when the syntax is simple. Which makes it unusable for coding.</p>
]]></description><pubDate>Wed, 15 Jul 2026 19:38:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=48926023</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=48926023</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48926023</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "SpaceX bond worth 10% less than issue price – heading for junk bond status"]]></title><description><![CDATA[
<p>HN is closer to Reddit than you think, there's just a little more ceremony to it.</p>
]]></description><pubDate>Wed, 15 Jul 2026 18:10:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48924879</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=48924879</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48924879</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "Running Gemma 4 26B at 5 tokens/sec on a 13-year-old Xeon with no GPU"]]></title><description><![CDATA[
<p>I tried Qwen3.6-35B-A3B, but it couldn't generate a 50-100 line Clojure file without having broken parens mismatches. I know Clojure isn't super popular, but the syntax is pretty simple and the frontier models do fine with it.</p>
]]></description><pubDate>Wed, 15 Jul 2026 18:06:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=48924821</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=48924821</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48924821</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "After 7 years in production, Scarf has reluctantly moved away from Haskell"]]></title><description><![CDATA[
<p>Could you go in depth on what you mean by Python being like Lisp? This is no the first time I've heard this but I don't understand it.<p>Is it just because it's easy to substitute code in on the fly? Doesn't that describe any interpreted language?</p>
]]></description><pubDate>Wed, 15 Jul 2026 16:03:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=48922914</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=48922914</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48922914</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "Biff.graph: structure your Clojure codebase as a queryable graph"]]></title><description><![CDATA[
<p>> Your resolvers take in an id and return an id.. That sets off a bunch of alarm bells for me. I wouldn't ever do that. There is no good reason to have that, even if the values are identical (if the values change then that's even more dangerous). I can't point to exactly what will go wrong, but you're exacerbating the problem of having multiple resolvers providing an input. Worse yet, in this example you are guaranteed that they are all running. So where is it going to take the ID from..? I don't even know<p>You mean don't return :users/id when that's what was passed in? That makes sense, but I don't think I ran into issues with it.<p>> The :fat-key isn't doing anything here<p>For me it is. The absence of it means only one of the resolvers is run regardless of data order.<p>> This is very explicit and about equivalent to your original thought of "why not just have explicit imperative function calls"<p>I've been playing with this more today. My big thing is I want some good guidelines for writing resolvers to begin with so query time is not an exercise in auditing the whole codebase. Here are some guidelines I played around with, let me know what you think.<p>- When a resolver gets an entity and related data (like `get-user-with-customer`), try to pack related entities into their own nested collections. I.E. don't return `[:users/email :customer/name]`, return [:users/email {:users/customer [name]}`. This makes it less ambiguous, as putting the customer information flat with the other user data can complicate queries later on. Like if you select a user and their last order, what does `:customer/name` refer to? The customer of the user or the customer of the order?<p>- If a resolver is really expecting to operate on a <i>users</i> customer id, make that explicit in the input with `{:users/customer [id]}`.<p>- If you want a resolver to stay "open" and not specify where its inputs come from (just takes `:customer/id`), you can make bridges between that resolver and the entity resolvers that translate to the right keys (A bridge that turns `{:users/customer_id}` into `:get-billing-method/customer_id)<p>- Careful seeding multiple entities. If you feed your query the params `{:users/id 16230 :admins/id 9}`, it's not clear what the requested data is applying to (is `:roles-and-permissions` applying to the admin or the regular user?)</p>
]]></description><pubDate>Wed, 15 Jul 2026 09:14:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48918190</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=48918190</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48918190</guid></item><item><title><![CDATA[New comment by Capricorn2481 in "Biff.graph: structure your Clojure codebase as a queryable graph"]]></title><description><![CDATA[
<p>On local it's customer, but I renamed it Company for you and forgot to rename it on the bridge. I will call it Customer below.<p>When I say cached result I misspoke, I mean Pathom, rather than running the one resolver that gets everything, will first see the resolver that gets only the user and grab that. Then it will consider :user/email satisfied and look for other resolvers. It seems to not look for the resolver that solves all the requested data, and instead goes first come first serve.<p>> In the first case, the situation looks largely the same. I mean you can either uses the same nested inputs strategy but have a special key that triggers the fat-query resolver. Something like :employed-user-id.<p>> The other alternative is using nested outputs. You have the resolver returned a keyed bundle. Something like {:fat-request [:users/email :company/phone_number]}. The downstream resolver then consumers a :fat-request and unpacks it using nested inputs.<p>> You can make resolverZZ output some dummy key :zz-was-run. If you request :zz-was-run then I think it should also take the branch? (or maybe it runs both branches)<p>I think that these tricks can work sometimes, but you might be surprised what odd behavior can come up if you rely on this. In your pathom query, <i>the order of your requested data matters</i>.<p><pre><code>    (pco/defresolver get-user [{:users/keys [id]}]
      {::pco/output [:users/id :users/email :users/customer_id :users/budget]}
      (println "get-user triggered")
      (-> (jdbc/execute-one! ds ["SELECT * FROM users WHERE id = ?" id])))
    
    (pco/defresolver get-customer [{:customers/keys [id]}]
      {::pco/output [:customers/id :customers/billing_number :customers/phone_number]}
      (println "get-customer triggered")
      (-> (jdbc/execute-one! ds ["SELECT * FROM customers WHERE id = ?" id])))

    (pco/defresolver get-user-with-customer [{:users/keys [id]}]
      {::pco/output [:users/id :users/email :users/customer_id :fat-key
                     :customers/id :customers/billing_number :customers/phone_number]}
      (println "get-user-with-customer triggered")
      (let [user (jdbc/execute-one! ds ["SELECT * FROM users WHERE id = ?" id])
            customer (jdbc/execute-one! ds ["SELECT * FROM customers WHERE id = ?" (:users/customer_id user)])]
        (merge user {:customers/id (:customers/id customer)
                     :customers/billing_number (:customers/billing_number customer)
                     :customers/phone_number (:customers/phone_number customer)
                     :fat-key true})))

    (def user-customer-bridge
  (pbir/alias-resolver :users/customer_id :customers/id))
    
    ;; ---- test1
    (p.eql/process env
                   {:users/id 1000}
                   [:fat-key
                    :customers/phone_number
                    :users/email]) 
    
    ;; ---- get-user-with-customer triggered
 

    ;; ---- test2 
    (p.eql/process env
                   {:users/id 1000}
                   [:customers/phone_number
                    :fat-key
                    :users/email])
    
    ;; ---- get-user triggered, 
    ;; ---- get-user-with-customer triggered
</code></pre>
I couldn't tell you why it shakes out this way. Something about the bridge and requesting `:customers/phone_number` first must be coercing Pathom to take the longer path to :customers/phone_number, even though the other resolver can get everything in one shot. This is the kind of subtle behavior that is unintuitive and could blow up production if you trigger the wrong resolver in the wrong hot path. So I don't see a reasonable argument for using Pathom in an application that needs reliability unless you make the resolved paths part of the test suite. Although, I still think it could be a powerful combination with something like Sqlite or Datalevin where many reads don't matter as much.</p>
]]></description><pubDate>Tue, 14 Jul 2026 17:52:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=48910569</link><dc:creator>Capricorn2481</dc:creator><comments>https://news.ycombinator.com/item?id=48910569</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48910569</guid></item></channel></rss>