<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: justinpombrio</title><link>https://news.ycombinator.com/user?id=justinpombrio</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 12 Apr 2026 09:14:15 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=justinpombrio" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by justinpombrio in "Microsoft is employing dark patterns to goad users into paying for storage?"]]></title><description><![CDATA[
<p>Honestly I've had more technical problems installing Windows than Linux Mint recently, not to mention the multiple hours spent hunting down and disabling all of the telemetry and ads in Windows. Still can't believe they put ads in File Explorer.</p>
]]></description><pubDate>Fri, 10 Apr 2026 04:59:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47713816</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=47713816</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47713816</guid></item><item><title><![CDATA[New comment by justinpombrio in "71% Desk Workers Say Screen-Related Visual Discomfort Is Reducing Productivity"]]></title><description><![CDATA[
<p>This is a terrible source of information: it's talking about a survey about vision problems, by an eye care company, and you can't see the survey.<p>I'm completely sure that the way they worded the question the headline is about was very generously worded and that the phrasing in the headline misrepresents what it asked, because that's how these things work. Not that anyone is at <i>fault</i>, of course, the headline isn't a <i>lie</i>, and of course there are <i>other reasons</i> that the survey is hidden behind a subscription wall. It just <i>so happens</i> that the percent of people with screen-related visual discomfort according to the eye-care company survey is, I dunno, 2x higher than it would be if you asked the question directly. That's just how these things work.<p>(I suspect that someone is going to confuse this comment as me saying that eye-strain from screens isn't a problem for a lot of people. Pre-empting that by agreeing that, yes, of course eye-strain from screen is a problem for a lot of people.)</p>
]]></description><pubDate>Sun, 08 Mar 2026 21:05:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=47301454</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=47301454</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47301454</guid></item><item><title><![CDATA[New comment by justinpombrio in "Memory access is O(N^[1/3])"]]></title><description><![CDATA[
<p>Could you name one that seems likely to fail?</p>
]]></description><pubDate>Wed, 08 Oct 2025 22:08:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=45521153</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=45521153</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45521153</guid></item><item><title><![CDATA[New comment by justinpombrio in "Why haven't local-first apps become popular?"]]></title><description><![CDATA[
<p>I was going to say that that's not a CRDT because it <i>requires</i> a centralized server (the conflict resolution is "order in which the server received the messages", and clients aren't allowed to share updates with each other, they can only get updates from the server). But now I'm looking at definitions of CRDTs and it's not clear to me whether this is supposed to count or not.<p>Still, every algorithm that's actually labeled a CRDT shares a magical property: if my replica has some changes, and your replica has some changes, our replicas can share their changes with each other and each converge closer to the final state of the document, <i>even if other people have been editing at the same time, and different subsets of their changes have been shared with you or I</i>. That is, you can apply peoples' changes in any order and still get the same result. I don't think it's useful to call anything without that property a CRDT.</p>
]]></description><pubDate>Tue, 23 Sep 2025 01:35:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=45341848</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=45341848</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45341848</guid></item><item><title><![CDATA[New comment by justinpombrio in "The Expression Problem and its solutions (2016)"]]></title><description><![CDATA[
<p>Rust's traits _do_ solve the expression problem.<p>Each data type is a `struct`. Each operation is a trait. You `impl` each trait on each struct.<p>This works even if you're using a library that has declared `struct A` and `struct B` and `trait F` and `trait G`, and you want to add both a `struct C` and a `trait H`, and fill out the whole 3x3 grid without modifying the library.<p>The library says:<p><pre><code>    struct A { ... }
    struct B { ... }

    trait F { ... }
    impl F for A { ... }
    impl F for B { ... }

    trait G { ... }
    impl G for A { ... }
    impl G for B { ... }

    fn some_function<T: F + G>(data: T) { ... }
</code></pre>
Your code says:<p><pre><code>    use library::{A, B, F, G};

    struct C { ... }
    impl F for C { ... }
    impl G for C { ... }

    trait H { ... }
    impl H for A { ... }
    impl H for B { ... }
    impl H for C { ... }

    fn another_function<T: F + G + H>(data: T);
</code></pre>
Now `library::some_function()` can be called with an A, B, or C, even though C was defined by the user of the library. And `another_function()` can be called with A, B, or C, even though A was defined by the library.</p>
]]></description><pubDate>Sun, 07 Sep 2025 18:22:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=45160823</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=45160823</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45160823</guid></item><item><title><![CDATA[New comment by justinpombrio in "Show HN: I made a tool to port tweets to Bluesky mantaining their original date"]]></title><description><![CDATA[
<p>> (not an actual dictionary) Urban Dictionary<p><troll>
The definition of dictionary is just "Words about words" (source: Urban Dictionary), so I'd say that Urban Dictionary qualifies.
</troll></p>
]]></description><pubDate>Wed, 19 Mar 2025 05:06:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=43408421</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43408421</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43408421</guid></item><item><title><![CDATA[New comment by justinpombrio in "What can be computed? A practical guide to the theory of computation (2018) [pdf]"]]></title><description><![CDATA[
<p>> by assuming that a system that can be formally modeled can prove something that cannot be proven within a formal system<p>Something that cannot be proven within <i>which</i> formal system? Every true statement can be proven by <i>some</i> formal system. No formal system can prove <i>all</i> true statements.<p>(This is all about Godel incompleteness. Turing incomputability does apply though, see the sibling comments! It's important to keep them separate, they're saying different things.)</p>
]]></description><pubDate>Fri, 28 Feb 2025 17:03:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=43207839</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43207839</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43207839</guid></item><item><title><![CDATA[New comment by justinpombrio in "What can be computed? A practical guide to the theory of computation (2018) [pdf]"]]></title><description><![CDATA[
<p>Oof, I pattern matched OP to a different argument I've seen a lot. That's embarrassing.<p>Yes, that's correct, it's provably impossible to construct an LLM that, if you ask it "Will this program halt? <program>", answers correctly for all programs. Likewise humans, under the assumption that you can accurately simulate physics with a computer. (Note that QM isn't an obstacle, as you can emulate QM just fine with a classical computer with a mere exponential slowdown.)</p>
]]></description><pubDate>Fri, 28 Feb 2025 16:57:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=43207781</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43207781</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43207781</guid></item><item><title><![CDATA[New comment by justinpombrio in "What can be computed? A practical guide to the theory of computation (2018) [pdf]"]]></title><description><![CDATA[
<p>Gödel's Incompleteness Theorem places a limit on what you can prove <i>within a formal system</i>. Neither humans nor LLMs are a formal system, so it says nothing about them.<p>Someone's going to think that, since you can formally model computer programs (and thus formally model how an LLMs runs), that means that Gödel's Incompleteness Theorem applies to computer programs and to LLMs. But that's irrelevant; being model-able doesn't make something a formal system!<p>"Formal system" has a very technical meaning: it has a set of consistent axioms, and the ability to enumerate formal proofs using those axioms. For example, Zermelo-Fraenkel set theory is a formal system [1]. It has nine formal axioms, which you can see listed in its Wikipedia article. Utterly different kind of thing than humans or LLMs. Comparing an LLM to ZFC is like comparing a particular watermelon to the number 4.<p>[1] <a href="https://en.wikipedia.org/wiki/Zermelo%E2%80%93Fraenkel_set_theory#Axioms" rel="nofollow">https://en.wikipedia.org/wiki/Zermelo%E2%80%93Fraenkel_set_t...</a></p>
]]></description><pubDate>Fri, 28 Feb 2025 04:46:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=43201797</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43201797</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43201797</guid></item><item><title><![CDATA[New comment by justinpombrio in "Is this the simplest (and most surprising) sorting algorithm ever? (2021)"]]></title><description><![CDATA[
<p>Can you give a reference to your teaching materials? The way this sort works is bizarre enough that I'm curious what you said about it. (Also to verify that this is actually the algorithm you taught, given how many other people thought it was something else.)</p>
]]></description><pubDate>Tue, 25 Feb 2025 02:02:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=43167226</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43167226</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43167226</guid></item><item><title><![CDATA[New comment by justinpombrio in "Is this the simplest (and most surprising) sorting algorithm ever? (2021)"]]></title><description><![CDATA[
<p>Yeah, 2410 vs. 2509 swaps not including the first iteration. You should try measuring these things yourself, I'm not sure if it's doing what you think it's doing.</p>
]]></description><pubDate>Tue, 25 Feb 2025 00:56:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=43166817</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43166817</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43166817</guid></item><item><title><![CDATA[New comment by justinpombrio in "Is this the simplest (and most surprising) sorting algorithm ever? (2021)"]]></title><description><![CDATA[
<p>> Why is there any difference? Does the entire difference come from the iteration where i = 1?<p>Sometimes it's more swaps, and sometimes it's less. The vague pattern looks like Can't Believe Sort does slightly fewer swaps on larger lists, but that could also have been noise.<p>Why do you expect them to have exactly the same number of swaps?<p>> Bubble sort can do less than this.<p>Oh sorry yeah, I implemented bubble sort without any sort of early return, for a more direct comparison.</p>
]]></description><pubDate>Mon, 24 Feb 2025 22:40:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=43165797</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43165797</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43165797</guid></item><item><title><![CDATA[New comment by justinpombrio in "Is this the simplest (and most surprising) sorting algorithm ever? (2021)"]]></title><description><![CDATA[
<p>The number of swaps is nearly the same between Bubble Sort and Can't Believe Sort. For a random list with 100 elements, it's 2505 swaps vs. 2513 swaps.<p>The number of comparisons is of course about twice as large, because Bubble Sort always does exactly n(n-1)/2 comparisons while Can't Believe sort always does exactly n*n comparisons.<p><a href="https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=c72e58050b15bf76da23144685caefe4" rel="nofollow">https://play.rust-lang.org/?version=stable&mode=debug&editio...</a></p>
]]></description><pubDate>Mon, 24 Feb 2025 22:13:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=43165557</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43165557</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43165557</guid></item><item><title><![CDATA[New comment by justinpombrio in "Is this the simplest (and most surprising) sorting algorithm ever? (2021)"]]></title><description><![CDATA[
<p>I did search for "trivial sorting network", but the only networks that were called trivial were the ones for exactly two elements, while this algorithm sorts an arbitrary number of elements.<p>Could you link to what you're talking about? And what's its big-O runtime?</p>
]]></description><pubDate>Mon, 24 Feb 2025 18:15:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=43162858</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43162858</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43162858</guid></item><item><title><![CDATA[New comment by justinpombrio in "After 20 years, math couple solves major group theory problem"]]></title><description><![CDATA[
<p>The paper: <a href="https://arxiv.org/abs/2410.20392" rel="nofollow">https://arxiv.org/abs/2410.20392</a></p>
]]></description><pubDate>Thu, 20 Feb 2025 18:02:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=43117999</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43117999</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43117999</guid></item><item><title><![CDATA[New comment by justinpombrio in "JJ Cheat Sheet"]]></title><description><![CDATA[
<p>Yup, that's all correct. I drew `squash` and `backout` in terms of files in order to avoid needing notation for the opposite of an edit and the composition of two edits.</p>
]]></description><pubDate>Wed, 12 Feb 2025 06:19:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=43022442</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43022442</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43022442</guid></item><item><title><![CDATA[New comment by justinpombrio in "JJ Cheat Sheet"]]></title><description><![CDATA[
<p>Yes, I think you understand perfectly. `abandon` was the diagram I struggled the most to draw.<p>I like the idea of putting the edits on the arrows, but there are a couple senses in which the edit is associated with the change itself rather than an edge between two changes:<p>1. A change with two parents starts out by merging them, and then it can make edits on top of that merge. If the edits go on an edge instead of on a node, which of the two edges do those changes belong on?<p>2. If you move a change (e.g. by rebasing it), its diff comes with it. I guess you could say that when you rebase, you're not moving just the node but also the edge from it to its parent?<p>Even so, diffs on edges feels very right. I may update that diagram.<p>EDIT: Updated!</p>
]]></description><pubDate>Wed, 12 Feb 2025 03:49:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=43021667</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43021667</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43021667</guid></item><item><title><![CDATA[New comment by justinpombrio in "JJ Cheat Sheet"]]></title><description><![CDATA[
<p>This might be what you're looking for: <a href="https://jj-vcs.github.io/jj/latest/git-comparison/" rel="nofollow">https://jj-vcs.github.io/jj/latest/git-comparison/</a></p>
]]></description><pubDate>Wed, 12 Feb 2025 03:34:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=43021576</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43021576</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43021576</guid></item><item><title><![CDATA[New comment by justinpombrio in "JJ Cheat Sheet"]]></title><description><![CDATA[
<p>Thanks for the kind word!<p>Unfortunately the arrows are kind of confusing regardless of which way they go. You're suggesting they point forward in time, from the old commit to the new commit. The way they're drawn is the direction of the reference: a commit points at its parent. The argument in favor of each way the arrows could go feel about equally strong to me, and my understanding is that the convention in repo diagrams is for arrows to go in the direction of the reference, so that's what I went with.</p>
]]></description><pubDate>Wed, 12 Feb 2025 03:25:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=43021509</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43021509</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43021509</guid></item><item><title><![CDATA[JJ Cheat Sheet]]></title><description><![CDATA[
<p>Article URL: <a href="https://justinpombrio.net/2025/02/11/jj-cheat-sheet.html">https://justinpombrio.net/2025/02/11/jj-cheat-sheet.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43020180">https://news.ycombinator.com/item?id=43020180</a></p>
<p>Points: 186</p>
<p># Comments: 116</p>
]]></description><pubDate>Wed, 12 Feb 2025 00:23:16 +0000</pubDate><link>https://justinpombrio.net/2025/02/11/jj-cheat-sheet.html</link><dc:creator>justinpombrio</dc:creator><comments>https://news.ycombinator.com/item?id=43020180</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43020180</guid></item></channel></rss>