<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: diarrhea</title><link>https://news.ycombinator.com/user?id=diarrhea</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 17 Aug 2026 06:51:56 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=diarrhea" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by diarrhea in "Asynchronous I/O in DuckDB: Work, Thread, Work"]]></title><description><![CDATA[
<p>Does having the worker pool hold as many threads as cores work well alongside the async pool? It is basically oversubscribed by design.<p>I built a system once which had (this is Rust) a Rayon worker thread pool of 4 threads and a Tokio async pool of 2 (multithreaded runtime). On a system of 6 vCPU. This ended up working fine. Tokio was not starved so handled network requests at low latency.<p>One difference is DuckDB is a pure network client. If one of its async threads is starved it is not the end of the world (e.g. k8s does not kill your pod for failure of replying to health checks).</p>
]]></description><pubDate>Sun, 16 Aug 2026 07:53:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=49317845</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=49317845</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49317845</guid></item><item><title><![CDATA[New comment by diarrhea in "Kitesurf: Agent-first browser that runs in V8 isolates"]]></title><description><![CDATA[
<p>> uses the local models<p>That is fantastic. Last I checked models capable of running on commodity (anything below a dedicated GPU rack) hardware were very lackluster.</p>
]]></description><pubDate>Fri, 07 Aug 2026 17:16:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=49213498</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=49213498</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49213498</guid></item><item><title><![CDATA[New comment by diarrhea in "Show HN: NixOS-DGX-Spark – Nix and NixOS on the DGX Spark"]]></title><description><![CDATA[
<p>The Make target I use to deploy in this manner (MacBook to x86-64, single machine) is simply:<p><pre><code>    server:
        @echo "Deploying machine (with ssh-agent forwarding): '$(MACHINE)'"
        NIX_SSHOPTS="-A" \
        nix run nixpkgs#nixos-rebuild -- switch \
        --flake .#$(MACHINE) \
        --target-host $(MACHINE).$(DOMAIN) \
        --build-host $(MACHINE).$(DOMAIN) \
        --no-reexec \
        --verbose \
        --sudo

</code></pre>
Which has been working well. I admit I do not understand what all of these flags do in detail.<p>This uses ssh agent forwarding, and then sudo via PAM. That allows for passwordless sudo. Building (well, activating) without sudo is pretty involved last I checked, I could not get it to work.</p>
]]></description><pubDate>Mon, 03 Aug 2026 15:10:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=49156824</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=49156824</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49156824</guid></item><item><title><![CDATA[New comment by diarrhea in "The Tokio/Rayon Trap and Why Async/Await Fails Concurrency"]]></title><description><![CDATA[
<p>Exactly. I do not know the specifics, but for example if libraries you call into liberally spawn_blocking under the expectation that it is okay, you will be in trouble.<p>Says it right there actually:<p>> It’s recommended to not set this limit too low in order to avoid hanging on operations requiring spawn_blocking.<p>So a total like 6 - reasonable for a web backend - would be way too low.</p>
]]></description><pubDate>Thu, 16 Jul 2026 13:39:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48934405</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=48934405</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48934405</guid></item><item><title><![CDATA[New comment by diarrhea in "The Tokio/Rayon Trap and Why Async/Await Fails Concurrency"]]></title><description><![CDATA[
<p>Funnily enough, spawn_blocking is not the right tool here. It is meant for blocking I/O, such as DNS lookups, where your platform might not give you anything better.<p>For genuine CPU-bound work, submitting to a Rayon worker pool is the way to go. It solved a runtime starvation issue for us at work, spawn_blocking did not work.<p>The reason for all this is spawn_blocking having a very large underlying thread pool, in the hundreds. That is okay if you assume work will yield those threads and mostly sleep/wait. It is not okay if the work never yields, like pure data crunching. (Go solves this by forcefully preempting loops, no such thing in Rust without a language runtime)<p>Our solution shape was: multi-threaded Tokio (2 threads), then give the rest of available_concurrency to a Rayon thread pool. If you grant 6 vCPU you should see a thread pool of 4, and a maximum CPU consumption of about 400%, as the Tokio threads sit mostly idle (under low load single-threaded runtime should also suffice).<p>You inject the thread pool using an Arc.<p>Then, when work comes in, just spawn Tokio tasks liberally (cheap) and submit to the thread pool. Rayon will internally queue and limit concurrency and parallelism to 4 (this is the important bit compared to spawn_blocking: no way your system can hog all 6 threads with non-yielding work and starve Tokio runtime threads).<p>We use one-shot channels to submit results back, they are designed for exactly this. The tx aka sender end is sync, as there is never a wait (cannot block). The rx aka receiver side is async and can be awaited normally on the async side. This is a cheap operation, similar to Go.<p>Optionally you can reach for semaphores to also limit I/O concurrency. You probably want to do this for more control and avoiding resource exhaustion loudly (that is, not silently accidentally peg thousands of FDs, database connections, …).<p>It ended up working beautifully for our purposes and relatively simply. No lifetime woes, Arc solves those. Oneshot channels just transfer ownership etc.<p>Perhaps this is what TFA talks about, I have not read it.<p>One caveat: to reach all the above conclusions and designs, we had help from some genuine Rust experts. As much as I dislike Go, it "just works" there even if one writes naive code.</p>
]]></description><pubDate>Thu, 16 Jul 2026 06:02:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48930858</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=48930858</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48930858</guid></item><item><title><![CDATA[New comment by diarrhea in "TS-2026-009: Insecure argument handling in Tailscale SSH permitted root access"]]></title><description><![CDATA[
<p>NAT busting is a great point.</p>
]]></description><pubDate>Wed, 15 Jul 2026 06:12:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=48916869</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=48916869</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48916869</guid></item><item><title><![CDATA[New comment by diarrhea in "TS-2026-009: Insecure argument handling in Tailscale SSH permitted root access"]]></title><description><![CDATA[
<p>I do not understand this rebuttal.<p>I also run self-hosted Wireguard. Initially on a Debian box, nowadays it is integrated into my router (admittedly, this is closed source). For around 6 years at this point.<p>The whole thing could not be easier and simpler. It has never randomly broken on me. It is fast. It is free. There is no middle man, no vendor.<p>I never understood the popularity of Tailscale, though that is on me. I'm sure it is a great product, I just never tried it, do not seem the target audience.<p>What confuses me is the often accompanying, sometimes aggressive anti-selfhosting stance in these sorts of threads. I do not see this in other topics, e.g. someone mentioning they run Jellyfin isn't met with "why not Plex?". Where does that come from? We are on <i>Hacker</i>News, not ProductShillNews, aren't we? I guess self hosting Wireguard is too boring to warrant any further discussion? The VPN equivalent of a Toyota Corolla.</p>
]]></description><pubDate>Wed, 15 Jul 2026 05:39:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=48916660</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=48916660</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48916660</guid></item><item><title><![CDATA[New comment by diarrhea in "Postgres rewritten in Rust, now passing 100% of the Postgres regression tests"]]></title><description><![CDATA[
<p>Yeah. I don't think PG could even come close. Column-oriented is fundamentally different, and pairs well with all the SIMD acceleration ClickHouse is also doing. There's just no comparison. If a Postgres rewrite came close to that, it must've sacrificed something else.</p>
]]></description><pubDate>Fri, 10 Jul 2026 07:38:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=48856895</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=48856895</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48856895</guid></item><item><title><![CDATA[New comment by diarrhea in "Rewriting Bun in Rust"]]></title><description><![CDATA[
<p>But do the markets care about a Postgres in Rust? Probably not, or at least not right away. It is a long way towards commercial success.<p>> I suspect rather than hire less people we will just produce more code changes.<p>Why? Towards what end? Code changes are output, not outcome. It also needs to be connected to someone willing to pay you hard cash. That is the hard part, a race to the bottom, and the reason I also believe there will be downwards pressure on salaries and even employment.</p>
]]></description><pubDate>Thu, 09 Jul 2026 05:27:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48841340</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=48841340</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48841340</guid></item><item><title><![CDATA[New comment by diarrhea in "David Beazley – Programming Courses"]]></title><description><![CDATA[
<p>> People still learn math, despite the calculator existing. Accounts still learn accounting, despite Excel and accounting software existing.<p>They do, but you need far fewer or none of the original workers whose full-time job this sort of stuff was.<p>Raw math does not matter, but what you do with it. Similarly, you could earn a (modest) living knowing nothing but raw HTML, JavaScript and a bit of browser tech not too long ago. That is no longer possible.<p>Programming and software engineering will be devalued. These occupations won't disappear overnight, but you will see compensation and growth stagnate until equilibrium is reached again. Currently, supply outstrips demand, and I do think it is structural, not just hype.<p>I'm certainly not creative enough, but I currently do not see demand picking up sufficiently; Gen Z is bearish on social media, VR was a bust, blockchain was a bust, software has already penetrated almost all walks of live and lines of work. There is no next big thing (Internet, ...) on the horizon, to unlock the next order of magnitude of demand. There is certainly more work to do still, but it very suddenly does not require the same headcount, but something like 5%-30% less. Lots of the remaining work will be around integrating LLMs into existing software, which does not sound exciting either.</p>
]]></description><pubDate>Sat, 04 Jul 2026 07:36:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=48783419</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=48783419</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48783419</guid></item><item><title><![CDATA[New comment by diarrhea in "Excessive nil pointer checks in Go"]]></title><description><![CDATA[
<p>Yes, my point was not related to null. For all I care you can have `&T` and `Option<&T>` in your language, but allow `&T` to be null. In Rust, that would be `Option<*const T>`. Is that useful? I don't know. But it still separates the two orthogonal concepts. Go conflates them, rolling them into one, permanently removing useful expressivity.</p>
]]></description><pubDate>Sun, 21 Jun 2026 20:54:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48622498</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=48622498</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48622498</guid></item><item><title><![CDATA[New comment by diarrhea in "Excessive nil pointer checks in Go"]]></title><description><![CDATA[
<p>No, because RateLimiter is then copied on passing it around (pass by value).<p>That is problematic for two reasons: it might be a large type, so copying might be expensive. Second, more likely, it might violate invariants in your domain. For a rate limiter, this might mean accidentally copying around some internal state like a mutex, which then exists <i>n</i> times instead of <i>1</i> time, which can represent a problem (e.g. if you want to internally limit whole-app concurrency toward Redis).</p>
]]></description><pubDate>Sun, 21 Jun 2026 15:28:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=48619769</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=48619769</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48619769</guid></item><item><title><![CDATA[New comment by diarrhea in "Excessive nil pointer checks in Go"]]></title><description><![CDATA[
<p>This is the mess a language lands on when it conflates optionality (a semantic concept) with references/pointers (purely a machine concept). In Go, the requirement "<i>need</i> (non-optional) a <i>reference</i> to an object" is simply not expressible. This is a solved problem in other languages, for example `&T` vs. `Option<&T>` in Rust.</p>
]]></description><pubDate>Sun, 21 Jun 2026 07:39:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=48616570</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=48616570</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48616570</guid></item><item><title><![CDATA[New comment by diarrhea in "Security through obscurity is not bad"]]></title><description><![CDATA[
<p>As a fan and believer of obscurity in support of security, I do not understand why<p>> that step didn't add any security.<p>It is a decision that’s part of the entire process. A branch of many in the decision tree. Other branches are deciding which characters to type for the password; ASCII characters can be as little as 1 bit apart. Deciding between left and right is also 1 bit apart.<p>I think it boils down to what people commonly understand to be publicly knowable information versus understood-to-be-secret information.<p>One example: I self-host my password manager at pw.example.com/some-secret-path/. That extra path adds as much to security as a randomly picked username in HTTP Basic Auth: arguably none. Yet, it is as impossible for attackers to enumerate and find that path as it is with passwords.<p>The difference is that the path leaks easier. It’s not generally understood to be a secret. Yet I argue it helps security. (Example: leaking the domain name through certificate transparency logs AND even, say, user credentials means an attack is <i>still unsuccessful</i>; a strictly necessary piece of the puzzle is missing).</p>
]]></description><pubDate>Sun, 03 May 2026 20:28:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48001096</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=48001096</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48001096</guid></item><item><title><![CDATA[New comment by diarrhea in "Dropping Cloudflare for Bunny.net"]]></title><description><![CDATA[
<p>Just this month Google shipped what I understand as hard limits in AI Studio/Gemini/whatever it's called this week. I had existing billing <i>alerts</i> (best you could do before IIUC), but set these new hard limits up immediately. Feels good!</p>
]]></description><pubDate>Tue, 07 Apr 2026 17:37:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47678722</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=47678722</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47678722</guid></item><item><title><![CDATA[New comment by diarrhea in "Cloudflare targets 2029 for full post-quantum security"]]></title><description><![CDATA[
<p><a href="https://news.ycombinator.com/item?id=47677483">https://news.ycombinator.com/item?id=47677483</a></p>
]]></description><pubDate>Tue, 07 Apr 2026 17:21:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=47678537</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=47678537</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47678537</guid></item><item><title><![CDATA[New comment by diarrhea in "The cult of vibe coding is dogfooding run amok"]]></title><description><![CDATA[
<p>Interesting, though I disagree on basically all points...<p>> No Silver Bullet<p>As an industry, we do not know how to measure productivity. AI coding also does not <i>increase reliability</i> with how things are going. Same with simplicity, it's the opposite; we're adding obscene complexity, in the name of shipping features (the latter of which is not <i>productivity</i>).<p>In <i>some</i> areas I can see how AI doubles "productivity" (whatever that means!), but I do not see a 10x on the horizon.<p>> Kernighan's Law<p>Still holds! AI is amazing at debugging, but the vast majority of existing code is still human-written; so it'll have an easy time doing so, as indeed AI can be "twice as smart" as those human authors (in reality it's more like "twice as persistent/patient/knowledgeable/good at tool use/...").<p>Debugging fully AI-generated code with the same AI will fall into the same trap, subject to this law.<p>(As an aside, I do wonder how things will go once we're out of "use AI to <i>understand</i> human-generated content", to "use AI to understand AI-generated content"; it will probably work worse)<p>> just ask AI to rewrite the code<p>This is a terrible idea, unless perhaps there is an existing, exhaustive test harness. I'm sure people will go for this option, but I am convinced it will usually be the wrong approach (as it is today).<p>> Dijkstra on the foolishness of programming in natural language<p>So why are we not seeing repos of <i>just</i> natural language? Just raw prompt Markdown files? To generate computer code on-the-fly, perhaps even in any programming language we desire? And for the sake of it, assume LLMs could regenerate everything <i>instantly</i> at will.<p>For two reasons. The prompts would either need to raise to a level of precision as to be indistinguishable from a formal specification. And indeed, because complexity does become "exponentially harder"; inaccuracies inherent to human languages would compound. We <i>need</i> to persist results in formal languages still. It remains the ultimate arbiter. We're now just (much) better at generating large amounts of it.<p>> Lehman’s Law<p>This reminds me of a recent article [0]. Let AI run loose without genuine effort to curtail complexity and (with current tools and models) the project will need to be thrown out before long. It is a self-defeating strategy.<p>I think of this as the Peter principle applied to AI: it will happily keep generating more and more output, until it's "promoted" past its competence. At which point an LLM + tooling can no longer make sense of its own prior outputs. Advancements such as longer context windows just inflate the numbers (more understanding, but also more generating, ...).<p>The question is, will the market care? If software today goes wrong in 3% of cases, and with wide-spread AI use it'll be, say, 7%, will people care? Or will we just keep chugging along, happy with all the new, more featureful, but more faulty software? After all, we know about the Peter principle, but it's unavoidable and we're just happy to keep on.<p>> Jevons Paradox<p>My understanding is the exact opposite. We might well see a further proliferation of information technologies, into remaining sectors which have not yet been (economically) accessible.<p>0: <a href="https://lalitm.com/post/building-syntaqlite-ai/" rel="nofollow">https://lalitm.com/post/building-syntaqlite-ai/</a></p>
]]></description><pubDate>Mon, 06 Apr 2026 20:32:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=47666627</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=47666627</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47666627</guid></item><item><title><![CDATA[New comment by diarrhea in "Axios compromised on NPM – Malicious versions drop remote access trojan"]]></title><description><![CDATA[
<p>uv supports it, <a href="https://docs.astral.sh/uv/reference/settings/#exclude-newer" rel="nofollow">https://docs.astral.sh/uv/reference/settings/#exclude-newer</a></p>
]]></description><pubDate>Tue, 31 Mar 2026 16:18:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47589690</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=47589690</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47589690</guid></item><item><title><![CDATA[New comment by diarrhea in "Reports of code's death are greatly exaggerated"]]></title><description><![CDATA[
<p>This take was accurate about 2 years ago, up until perhaps one year ago. Current capabilities far exceed what you are outlining, for example using Claude Opus models in a harness such as Claude Code or OpenCode.</p>
]]></description><pubDate>Mon, 23 Mar 2026 20:04:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47494395</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=47494395</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47494395</guid></item><item><title><![CDATA[New comment by diarrhea in "Cloudflare flags archive.today as "C&C/Botnet"; no longer resolves via 1.1.1.2"]]></title><description><![CDATA[
<p>I use unbound (recursive resolver), and AdGuard Home as well (just forwards to unbound). Unbound could do ad-blocking itself as well, but it's more cumbersome than in AGH. So I use two tools for the time being.<p>The upside is there's no single entity receiving all your queries. The downside is there's no encryption (IIRC root servers do not support it), so your ISP sees your queries (but they don't <i>receive</i> them).</p>
]]></description><pubDate>Sun, 22 Mar 2026 11:57:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=47476596</link><dc:creator>diarrhea</dc:creator><comments>https://news.ycombinator.com/item?id=47476596</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47476596</guid></item></channel></rss>