<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: nh2</title><link>https://news.ycombinator.com/user?id=nh2</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 04 Jul 2026 21:39:37 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=nh2" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by nh2 in "I can haz smoller NixOS ISOs?"]]></title><description><![CDATA[
<p>Note that's somewhat out of date:<p>> `bin/switch-to-configuration` is a Perl script from the beginning<p>Since NixOS 24.11 the default is `switch-to-configuration-ng`, in Rust. That is a 2.8 MB binary, compared to NixOS's 55 MB Perl distribution. Thus such Perl-less systems shrunk that dependency by 20x regarding activation switching.<p>And since NixOS 25.11, `nixos-rebuild-ng` in Python replaces its former Perl counterpart, see <a href="https://wiki.nixos.org/wiki/Nixos-rebuild" rel="nofollow">https://wiki.nixos.org/wiki/Nixos-rebuild</a></p>
]]></description><pubDate>Wed, 24 Jun 2026 21:53:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48666064</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48666064</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48666064</guid></item><item><title><![CDATA[New comment by nh2 in "I can haz smoller NixOS ISOs?"]]></title><description><![CDATA[
<p>Seems to me that such boolean flags do not force you to think about "building up" or "building down". You just declare what _is_. Who cares what the default is? When you're building a minimal thing, changing some defaults is fine.</p>
]]></description><pubDate>Wed, 24 Jun 2026 21:39:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=48665949</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48665949</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48665949</guid></item><item><title><![CDATA[New comment by nh2 in "FUTO Swipe – A new swipe typing model"]]></title><description><![CDATA[
<p>I've been using SwiftKey for 10 years (typing not swiping), and test ran FUTO for the last month.<p>FUTO improved a lot (I had tried it a year earlier also) but SwiftKey's suggestions are still a lot better in my opinion.
With SwiftKey I can just type roughly in the right spot without looking and the correct words will come out most of the time. FUTO still suggests a lot of nonsensical next words that just do not follow after the previous in English.<p>I hope it improves further so I can switch.<p>The voice models are great though, and they can be used as part of the keyboard or standalone.</p>
]]></description><pubDate>Tue, 23 Jun 2026 22:56:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=48652684</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48652684</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48652684</guid></item><item><title><![CDATA[New comment by nh2 in "The perils of UUID primary keys in SQLite"]]></title><description><![CDATA[
<p>JSON has arbitrary length numbers in the spec only.</p>
]]></description><pubDate>Sat, 06 Jun 2026 08:11:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48422605</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48422605</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48422605</guid></item><item><title><![CDATA[New comment by nh2 in "Changing how we develop Ladybird"]]></title><description><![CDATA[
<p>> Would you mind sharing a link to one of the open source project you've been maintaining and reviewing contributions on for years<p>Github is in my profile; I am nixpkgs committer for ~10 years (which is one of the most active projects on Github with 450000 merged PRs).<p>There is no way I could have possibly written and (pre-tested, to arrive at the eventual code submitted) all the code that I have reviewed.<p>From the other side, I have spent thousands of hours debugging and writing PRs to over 100 FOSS projects (e.g. glibc, busybox, util-linux, lz4, GHC and tens of Haskell packages, Jenkins, Chromium, GTK, Consul, OpenCV, Signal, many more).<p>Many of them are small or medium fixes ("drive-by fixes"), where you propose a PR, the owner reviews, says "great, thanks", and the bug gets fixed.<p>This is a fundamental workflow for open source work. The project gets free contributions and time investment outsourced to "the community" who fix its bugs, the developer-users/community get their problems fixed upstream, permanently.<p>This not possible for projects that don't have an easy way to submit code with low effort for both sides.<p>Accepting drive-by fixes is what clears up developer time and helps clear out the countless small issues in software.<p>If AI slop PRs are a problem, it seems better to establish clear rules and reject contributions that don't follow them with a single click, rather than banning developer contributions altogether. It seems to work acceptably for nixpkgs so far.</p>
]]></description><pubDate>Fri, 05 Jun 2026 14:16:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48412876</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48412876</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48412876</guid></item><item><title><![CDATA[New comment by nh2 in "Changing how we develop Ladybird"]]></title><description><![CDATA[
<p>> You can still submit a bug report and tell them exactly how you did it.<p>Can you? The announcement says "There will not be a separate process for submitting patches by other means. We do not want to create a shadow contribution system through issues, comments, email, or forks".<p>So I, as a human, describe in prose which changes I made to e.g. 20 files?<p>How is that in the spirit of fighting LLM slop?<p>Also, if I can do that, the LLM slop contributers can also ... do that.</p>
]]></description><pubDate>Fri, 05 Jun 2026 11:22:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48410909</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48410909</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48410909</guid></item><item><title><![CDATA[New comment by nh2 in "Changing how we develop Ladybird"]]></title><description><![CDATA[
<p>> There will not be a [..] process for submitting patches by [any] means<p>> Outside involvement still matters: clear bug reports<p>So I can find a bug, I can fix it, but I am not allowed to tell them how exactly I did it.<p>Instead they have to re-figure it out. The team must be thrilled to re-do work they know was already put in by others, repeatedly.<p>As a user-and-eveloper, why would I sink time into a project with such rules that put a barrier to improving my life with the software? It seems much easier to use Firefox or Chromium, where my fixes actually meet open ears.<p>It was very useful for me in the past when a new Chromium version crashed on my product, that I could go and suggest a fix to V8, and it was rolled out in the next Chromium release so my product worked again (<a href="https://github.com/v8/v8/commit/4f8a70adca01c" rel="nofollow">https://github.com/v8/v8/commit/4f8a70adca01c</a>). Without this, maybe Chromium developers would have never bothered to fix it because of lack of time to figure it out.<p>> a pull request no longer tells us as much as it used to about the person submitting it<p>Nobody should need to know anything about any person submitting a pull request.
Hopefully whether code that makes it into Firefox or Chromium was never based on the "effort" or "faith" of the submitter, but based on the correctness of the code in review.<p>Reviewing code fixes is strictly easier than coming up with them yourself.<p>This holds true automatically: In any situation where it isn't, you can just write the code yourself and done.<p>As a project you can always ignore or close a PR you want to write yourself instead.
But it seems unwise to bar yourself from the _option_ of reviewing an outside contribution, or using it as input for your own re-write.</p>
]]></description><pubDate>Fri, 05 Jun 2026 09:10:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=48409957</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48409957</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48409957</guid></item><item><title><![CDATA[New comment by nh2 in "OpenAI frontier models and Codex are now available on AWS"]]></title><description><![CDATA[
<p>In contrast to Microsoft, OpenAI, and Anthropic, AWS has never done anything close to sneaking in unwanted training opt-outs after the fact.<p>They are the only ones I trust not to do that so far. And their terms are extremely clear on that, no fuzzy language. Exactly what we want to see. So we use Bedrock.</p>
]]></description><pubDate>Tue, 02 Jun 2026 00:31:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48364347</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48364347</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48364347</guid></item><item><title><![CDATA[New comment by nh2 in "Haskell Foundation 2026 Update"]]></title><description><![CDATA[
<p>No, this is not the reality of using Haskell packages.<p>The problem you describe was solved more than a decade ago.<p>You use a Stackage snapshot (<a href="https://www.stackage.org/lts" rel="nofollow">https://www.stackage.org/lts</a>) which is a curation of packages that work together, similar to a Linux distribution like Debian, carrying one version per package.<p>Our company using Haskell has not spent 1 minute doing "dependency resolution" in the last 10 years, not has anybody we know.</p>
]]></description><pubDate>Thu, 21 May 2026 10:20:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=48220312</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48220312</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48220312</guid></item><item><title><![CDATA[New comment by nh2 in "AI is a technology not a product"]]></title><description><![CDATA[
<p>Asking the grandparent:<p>The what is the idea behind the "ideally have already read the paper, but given 10-20 minutes in silence" part?<p>The fact that people that have already read it have nothing to do and waste time sitting around bored sounds like an obvious flaw, are we missing something?</p>
]]></description><pubDate>Mon, 18 May 2026 04:06:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48175467</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48175467</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48175467</guid></item><item><title><![CDATA[New comment by nh2 in "Space Cadet Pinball on Linux"]]></title><description><![CDATA[
<p>I wish somebody had as a passion project or company to build Space Cadet into a real physical pinball table.</p>
]]></description><pubDate>Sun, 10 May 2026 12:04:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=48083284</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48083284</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48083284</guid></item><item><title><![CDATA[New comment by nh2 in "Removing fsync from our local storage engine"]]></title><description><![CDATA[
<p>Even then, I also share the confusion of the poster you're replying to.<p>I don't see how a virtualised NVMe disk is different from a physical one.<p><i>Especially</i> if you don't have control over the underlying hardware (so you don't know if it has power-loss-protection PLP SSDs), you should send the FUA.<p>> O_DATA_SYNC<p>You mean `O_DSYNC`?<p>Why would you need `O_DSYNC` on-premise, but not on cloud VMs? (Or are you saying you'd include it everywhere?) Similar to my above point, surely it is the task of the VM to pass through any FUA commands the VM guest issues to the actual storage?<p>Further: Is `O_DSYNC` actually substantially different from writing and then `fdatasync()`ing yourself?<p>My understand is that no, it's the same. In particular, the same amount of data gets written. So if you believe that to avoid the "can trigger an order of magnitude more I/O" by avoiding `fdatasync()`, you would re-introduce it with `O_DSYNC`.<p>However, I suspect that that whole consideration is pointless:<p>The only thing that makes your O_DIRECT+preallocated-only-overwrites writes safe are enterprise SSDs with Power Loss Protection (PLP), usually capacitors.<p>On those SSDs, NVMe Flush/FUA are no-ops [1]. So you might as well `fdatasync()`/`O_DSYNC`, always. This is simpler, and also better because you do not need to assume/hope that your underlying SSDs have PLP: Doing the safe thing is fast on PLP [2], and safe on non-PLP.<p><pre><code>    [1] https://news.ycombinator.com/item?id=46532675
    [2] https://tanelpoder.com/posts/using-pg-test-fsync-for-testing-low-latency-writes/
</code></pre>
So the only remaining benefit of `O_DSYNC` over `fdatasync()` is that you save a syscall. That's an OK optimisation given they are equivalent, but it would surprise me if it had any noticeable impact at the latencies you are reporting ("413 us"), because [2] reports the difference beting 6 us.<p>Let me know if I got anything wrong.<p>The only remaining question is: Why do you then see any difference in your benchmark?<p><pre><code>    Configuration            Throughput (obj/s)
    -------------------------------------------
    ext4 + O_DIRECT + fsync             116,041
    Our engine                          190,985
</code></pre>
That is what I'd find very valuable to investigate.<p>The first suspicion I have is: Shouldn't you be measuring `+ fdatasync` instead?<p>So I'd be interested in:<p><pre><code>    ext4 + O_DIRECT + fdatasync
    ext4 + O_DIRECT + O_DSYNC
    Our engine + O_DSYNC (which you're suggesting above)
</code></pre>
Also I don't fully understand what the remaining diference between "ext4 + O_DIRECT + O_DSYNC" and "Our engine + O_DSYNC" would be.</p>
]]></description><pubDate>Sat, 09 May 2026 18:00:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48076873</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48076873</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48076873</guid></item><item><title><![CDATA[New comment by nh2 in "Removing fsync from our local storage engine"]]></title><description><![CDATA[
<p>> fsync doesn’t just sync the file’s data, it syncs every piece of metadata the file depends on: ...  directory entry<p>Famously not, as the man page says.<p>It is also said later in the article:<p>> POSIX strictly requires a parent-directory fsync to make a newly created file’s existence durable.<p>So I'm not sure why the dirent sync is claimed earlier.</p>
]]></description><pubDate>Sat, 09 May 2026 14:41:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=48075373</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48075373</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48075373</guid></item><item><title><![CDATA[Thunderbird donation page consumes CPU/GPU due to animation]]></title><description><![CDATA[
<p>Article URL: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2038287">https://bugzilla.mozilla.org/show_bug.cgi?id=2038287</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48069535">https://news.ycombinator.com/item?id=48069535</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 08 May 2026 22:28:03 +0000</pubDate><link>https://bugzilla.mozilla.org/show_bug.cgi?id=2038287</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48069535</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48069535</guid></item><item><title><![CDATA[New comment by nh2 in "Hardening Firefox with Claude Mythos Preview"]]></title><description><![CDATA[
<p>Given the commit is 4 weeks old, will it eventually get comments?<p>The code before the patch does not look obviously wrong. Now, some more lines were added, but would you now say it now looks less obviously wrong, or more obviously correct?<p>It seems that the invariants needed here are either in some person's heads, or in some document that is not referenced.<p>Reading the code for the first time, the immediate question is: "What other lines might be missing? How can I figure?"<p>If the "obviously correct" level of the code does not increase for a human reviewer, how is it ensured that a similar problem will not arise in the future? Or do we need more LLM to tell us which other lines need to be added?</p>
]]></description><pubDate>Fri, 08 May 2026 10:19:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=48061103</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48061103</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48061103</guid></item><item><title><![CDATA[New comment by nh2 in "Batteries Not Included, or Required, for These Smart Home Sensors"]]></title><description><![CDATA[
<p>A big benefit of piezo-powered electronics is that they can do all the usual stuff, such storing state, or cryptography to prevent spoofing, which the ultrasonic approach from the article cannot do.</p>
]]></description><pubDate>Wed, 06 May 2026 14:27:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48036689</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48036689</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48036689</guid></item><item><title><![CDATA[New comment by nh2 in "Ubuntu Chromium Snap prevents encrypted storage of passwords by default"]]></title><description><![CDATA[
<p>To see whether there are plain text passwords on your non-Snap chromium, change this line in the linked password dumper script:<p><pre><code>    -    db_path = os.path.expanduser("~/snap/chromium/common/chromium/Default/Login Data")
    +    db_path = os.path.expanduser("~/.config/chromium/Default/Login Data")</code></pre></p>
]]></description><pubDate>Tue, 05 May 2026 15:06:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=48023538</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48023538</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48023538</guid></item><item><title><![CDATA[New comment by nh2 in "Ubuntu Chromium Snap prevents encrypted storage of passwords by default"]]></title><description><![CDATA[
<p>Ubuntu ships a Chromium browser that has its abilitiy to store passwords safely sandboxed/containerized away.<p>I did not expect that, given that Ubuntu comes with a full GUI and thus safe password storage backend available <i>in theory</i>.<p>Because this issue is open since 2022, I wrote a repro that proves its existence:<p><a href="https://bugs.launchpad.net/ubuntu/+source/chromium-browser/+bug/1996267/comments/12" rel="nofollow">https://bugs.launchpad.net/ubuntu/+source/chromium-browser/+...</a><p>All credit goes to user "Erlenmayr" who reported this.</p>
]]></description><pubDate>Tue, 05 May 2026 14:38:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48023099</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48023099</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48023099</guid></item><item><title><![CDATA[Ubuntu Chromium Snap prevents encrypted storage of passwords by default]]></title><description><![CDATA[
<p>Article URL: <a href="https://bugs.launchpad.net/ubuntu/+source/chromium-browser/+bug/1996267">https://bugs.launchpad.net/ubuntu/+source/chromium-browser/+bug/1996267</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48023098">https://news.ycombinator.com/item?id=48023098</a></p>
<p>Points: 4</p>
<p># Comments: 3</p>
]]></description><pubDate>Tue, 05 May 2026 14:38:52 +0000</pubDate><link>https://bugs.launchpad.net/ubuntu/+source/chromium-browser/+bug/1996267</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=48023098</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48023098</guid></item><item><title><![CDATA[New comment by nh2 in "Haskell: Debugging"]]></title><description><![CDATA[
<p>This community wiki page is somewhere between 10 and 20 years out-of-date.<p><a href="https://wiki.haskell.org/index.php?title=Debugging&action=history" rel="nofollow">https://wiki.haskell.org/index.php?title=Debugging&action=hi...</a><p>In particular, it has no mention about the new actual ... debugger:<p><a href="https://well-typed.github.io/haskell-debugger/" rel="nofollow">https://well-typed.github.io/haskell-debugger/</a><p><a href="https://discourse.haskell.org/t/the-haskell-debugger-for-ghc-9-14/13499/2" rel="nofollow">https://discourse.haskell.org/t/the-haskell-debugger-for-ghc...</a></p>
]]></description><pubDate>Sun, 03 May 2026 15:40:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=47998048</link><dc:creator>nh2</dc:creator><comments>https://news.ycombinator.com/item?id=47998048</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47998048</guid></item></channel></rss>