<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: phiresky</title><link>https://news.ycombinator.com/user?id=phiresky</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 19 Aug 2026 14:44:15 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=phiresky" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by phiresky in "Linux 7.3 improves performance when running out of vRAM"]]></title><description><![CDATA[
<p>Which OS are you using? systemd-oomd (or similar) afaik is enabled in many modern releases and fixes it. The default settings (on Arch) make it kill stuff when your CPU is spending 60% of time on reclaiming memory over some time period. So you'll get 20 seconds of lag, then it is fixed.<p>By killing a program, yes, but how else do you expect it to work? If your RAM is not enough you have to kill stuff. And I really doubt you mean to say that Windows is _more RAM efficient_ than Linux, because that's kind of absurd. Maybe Firefox is less RAM efficient than Chrome.<p>Edit: MacOS I wouldn't doubt being better in RAM management than the others because they have been selling their devices with ridiculously low amounts of RAM for decades.</p>
]]></description><pubDate>Tue, 18 Aug 2026 18:57:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=49350818</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=49350818</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49350818</guid></item><item><title><![CDATA[New comment by phiresky in "Anthropic's ‘watermark’ text adulteration in Claude is a perversion of writing"]]></title><description><![CDATA[
<p>Well I was assuming your comment was saying it's _impossible_ to do this without affecting output, so I was just describing an option on how it IS possible. I saw that token list biasing post and yes that looks pretty bad. I didn't look in enough detail to see whether it's actually clear what Anthropic and SynthID really do. I would assume though their approach is of the smart kind.</p>
]]></description><pubDate>Mon, 17 Aug 2026 22:58:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=49338849</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=49338849</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49338849</guid></item><item><title><![CDATA[New comment by phiresky in "Anthropic's ‘watermark’ text adulteration in Claude is a perversion of writing"]]></title><description><![CDATA[
<p>An encrypted hard drive is EXACTLY uniformly distributed random bytes if you do not know the encryption key. No one would be able to tell the difference between a drive that is just purely random numbers or is actually filled with content. (Of course excluding the usually intentionally added readable header)<p>If this was not the case, the encryption would be broken, and most everyone agrees that good encryption does exist.<p>The "quality of the probability calculations" as you put it is 100% in this case and any less would be a huge deal (as in - breaks all of the internet).<p>So, now you just take those same random bytes and use them as the seed for your LLM token choices. The output has the _cryptographically_ proven exact same quality as if you were using a true RNG (which you likely weren't using anyways).<p>You just need to know your LLM distribution and the encryption key, then with each new token you exponentially increase the chance of knowing whether it fits your encryption key. Without actually affecting the token choice in a perceivable manner.<p>> choosing different words that it otherwise would<p>The "that is otherwise would" is carrying all the weight here. "Otherwise" is sampling from a distribution. You just sample from the same distribution but with a cryptographically secure, seeded RNG. <a href="https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator" rel="nofollow">https://en.wikipedia.org/wiki/Cryptographically_secure_pseud...</a><p>"Knowing the LLM distribution" seems to me like the only hard part because you don't know the context of any random snippet.</p>
]]></description><pubDate>Mon, 17 Aug 2026 09:33:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=49328394</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=49328394</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49328394</guid></item><item><title><![CDATA[New comment by phiresky in "EU Fines Google $1.02B for Favoring Its Own Services"]]></title><description><![CDATA[
<p>The EU told them they can not by default prefer their own maps product when linking from their search product, they have to allow the user to choose.<p>They could have simply added a selector when a user first clicks on the maps preview in the search result, and then remembered it on device or across that user's account.<p>But of course, then the user could choose a competitor's product and Google would have to honor it. That would be horrible, so instead they just made the user experience worse for everyone and elegantly made people blame the EU.</p>
]]></description><pubDate>Mon, 27 Jul 2026 07:33:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=49066209</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=49066209</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49066209</guid></item><item><title><![CDATA[New comment by phiresky in "Mounting tar archives as a filesystem in WebAssembly"]]></title><description><![CDATA[
<p>I actually first thought this wasn't possible at all because I'm used to zstd which by default uses a 128MB window and I usually set it to the max (2GB window). 32kB is _really_ tiny in comparison. On the other hand though, zstd also compresses in parallel by default and has tools built in to handle these things, so seekable zstd archives are fairly common.</p>
]]></description><pubDate>Fri, 24 Apr 2026 16:23:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47892338</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=47892338</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47892338</guid></item><item><title><![CDATA[New comment by phiresky in "Mounting tar archives as a filesystem in WebAssembly"]]></title><description><![CDATA[
<p>I think you're looking at a different perspective than me. At _build time_ you need to process O(n), yes, and generate O(n) additional data. But I said "The amount of data you need to decompress is a constant". At _read time_, you need to do exactly three steps:<p>1. Load the file index - this one scales with the number of files unless you do something else smart and get it down to O(log(n)). This gives you an offset into the file. *That same offset/32 is an offset into your gzip index.*<p>2. take that offset, load 32kB into memory (constant - does not change by number of files, total size, or anything else apart from the actual file you are looking at)<p>3. decompress a 1MB chunk (or more if necessary)<p>So yes, it's a constant.</p>
]]></description><pubDate>Fri, 24 Apr 2026 14:25:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47890765</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=47890765</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47890765</guid></item><item><title><![CDATA[New comment by phiresky in "Mounting tar archives as a filesystem in WebAssembly"]]></title><description><![CDATA[
<p>I'm a bit disappointed that this only solves the "find index of file in tar" problem, but not at all the "partially read a tar.gz" file problem. So really you're still reading the whole file into memory, so why not just extract the files properly while you are doing that? Takes the same amount of time (O(n)) and less memory.<p>The gzip-random-access problem one is a lot more difficult because the gzip has internal state. But in any case, solutions exist! Apparently the internal state is only 32kB, so if you save this at 1MB offsets, you can reduce the amount of data you need to decompress for one file access to a constant. <a href="https://github.com/mxmlnkn/ratarmount" rel="nofollow">https://github.com/mxmlnkn/ratarmount</a> does this, apparently using <a href="https://github.com/pauldmccarthy/indexed_gzip" rel="nofollow">https://github.com/pauldmccarthy/indexed_gzip</a> internally. zlib even has an example of this method in its own source tree: <a href="https://github.com/gcc-mirror/gcc/blob/master/zlib/examples/zran.c" rel="nofollow">https://github.com/gcc-mirror/gcc/blob/master/zlib/examples/...</a><p>All depends on the use case of course. Seems like the author here has a pretty specific one - though I still don't see what the advantage of this is vs extracting in JS and adding all files individually to memfs. "Without any copying" doesn't really make sense because the only difference is copying ONE 1MB tar blob into a Uint8Array vs 1000 1kB file blobs<p>One very valid constraint the author makes is not being able to touch the source file. If you can do that, there's of course a thousand better solutions to all this - like using zip, which compresses each file individually and always has a central index at the end.</p>
]]></description><pubDate>Fri, 24 Apr 2026 12:53:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47889530</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=47889530</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47889530</guid></item><item><title><![CDATA[New comment by phiresky in "ISBN Visualization"]]></title><description><![CDATA[
<p>There's a bit of an issue with the linked deployment (in my opinion). In the most zoomed out view you should see the first layer of blocks - very big blocks titled "English language", "French language", "German language". See <a href="https://phiresky.github.io/isbn-visualization/" rel="nofollow">https://phiresky.github.io/isbn-visualization/</a> maybe. That makes it a bit easier to read.<p>The point of the visualization is showing different attributes of books in the space of ISBNs. ISBNs correlate with country, publisher, and release date, that's why using it as a space is useful. You can clearly see the history of when blocks were created, which blocks are rarer than others (present in fewer libraries), and (on the AA hosting) which blocks are more present in AA vs not.<p>In any case though, yes ISBNs as spatial data are clearly not perfect. Do you have any suggestions that would order the 100 million data points better?</p>
]]></description><pubDate>Sat, 28 Mar 2026 19:47:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47557636</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=47557636</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47557636</guid></item><item><title><![CDATA[New comment by phiresky in "ISBN Visualization"]]></title><description><![CDATA[
<p>Here's my article on how I built it - and also an instance hosted on GitHub pages if the AA domain is blocked for you:  <a href="https://phiresky.github.io/blog/2025/visualizing-all-books-in-isbn-space/" rel="nofollow">https://phiresky.github.io/blog/2025/visualizing-all-books-i...</a><p>Happy to answer questions as always :)</p>
]]></description><pubDate>Sat, 28 Mar 2026 14:05:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=47554749</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=47554749</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47554749</guid></item><item><title><![CDATA[New comment by phiresky in "Netdata is a seriously impressive server monitoring tool"]]></title><description><![CDATA[
<p>Netdata used to be really impressively minimal, performant, and packed with functions. Fully GPL open source. You ran one install command and it started a web-ui at localhost:19999 in a few seconds. The UI loaded instantly and had hundreds of graphs. You could tell the author was a single opinionated person obsessed with the maximum of monitoring with the minimum footprint.<p>It auto-detects many programs like docker, nginx and postgresql and automatically creates dashboards for them. It also has many dashboards about system internals I didn't even know were great to monitor, so it taught me a lot. For example, seeing a CPU pinned at 100% processing interrupts because of a network interface overload or having time frames with high IOwait during a SQL query clearly meaning there's some larger seq scans happening.<p>You also needed zero configuration, no login, etc.<p>Then they added multi-instance monitoring purely client side - the browser remembers other instance domains and links between them - pretty neat and completely uninvasive.<p>Then they introduced their cloud login, where you can monitor multiple instances remotely/together. They had a `--no-cloud` flag though if you did not want it. But by now they've removed that flag and they say patching out the cloud functionality is bypassing their license [1]. Some functionality is locked behind premium upgrades, and you get prevented from adding more than N metrics or M instances. It's still _possible_ to use netdata without going through their cloud but you have to go through a nag window every time you try to open the local UI. It's clear they don't want you to use it anymore, and I don't really feel comfortable about their default auto-updating local install any more either.<p>Now it's still impressive and useful, but it's much more an enterprise focusued tool than an "i have this server i want to monitor" tool.<p>Of course I understand they need to make money, but what used to be trivial to understand (hooks into everything in your system it can and opens a single port to display it) has become a whole huge integrated ecosystem and for me personally it's competing in the space where I'd probably rather spend the time to make a proper Prometheus/Grafana setup instead.<p>[1] <a href="https://github.com/netdata/netdata/discussions/17594#discussioncomment-15518017" rel="nofollow">https://github.com/netdata/netdata/discussions/17594#discuss...</a></p>
]]></description><pubDate>Sun, 08 Mar 2026 08:03:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47295499</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=47295499</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47295499</guid></item><item><title><![CDATA[New comment by phiresky in "Don't rent the cloud, own instead"]]></title><description><![CDATA[
<p>A $120M spend on AWS is equivalent to around a $12M spend on Hetzner Dedicated (likely even less, the factor is 10-20x in my experience), so that would be 3% of their revenue from a single customer.</p>
]]></description><pubDate>Thu, 05 Feb 2026 10:30:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=46898105</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=46898105</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46898105</guid></item><item><title><![CDATA[New comment by phiresky in "Rust errors without dependencies"]]></title><description><![CDATA[
<p>Even then you can just err.downcast_ref::<std::Io::Error>() though to get the underlying IOError, no?</p>
]]></description><pubDate>Mon, 29 Dec 2025 12:50:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=46420138</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=46420138</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46420138</guid></item><item><title><![CDATA[New comment by phiresky in "ISBN Visualization"]]></title><description><![CDATA[
<p>I'm happy to answer any questions!  Nice to see this here again :)</p>
]]></description><pubDate>Sun, 21 Dec 2025 12:26:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=46344335</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=46344335</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46344335</guid></item><item><title><![CDATA[New comment by phiresky in "Arch-delta Saves 80% Of Bandwidth On Upgrades"]]></title><description><![CDATA[
<p>This is great! Especially the DB sync part, because that happens before a user interaction, so you actually have to wait for it (the update itself can run in the background).<p>It always felt like such a waste to me how the DB always downloads tens of megabytes of data when likely only 1kB has changed. I mean I also really appreciate the beauty of how simple it is. But I'd bet even a delta against a monthly baseline file would reduce the data by >90%.<p>Also, it would be interesting to see how zstd --patch-from compares to the used delta library. That is very fast (as fast as normal zstd) and the code is already there within pacman.<p>For the recompression issue, there is some hard to find libraries that can do byte-exact reproducible decompression <a href="https://github.com/microsoft/preflate-rs" rel="nofollow">https://github.com/microsoft/preflate-rs</a> but I don't know of any that work for zstd.</p>
]]></description><pubDate>Wed, 12 Nov 2025 23:16:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=45908266</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=45908266</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45908266</guid></item><item><title><![CDATA[New comment by phiresky in "Pikaday: A friendly guide to front-end date pickers"]]></title><description><![CDATA[
<p>There's an extension to ISO8601 that fixes this and is starting to become supported in libraries:<p><pre><code>    2019-12-23T12:00:00-02:00[America/Sao_Paulo]
</code></pre>
<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime#rfc_9557_format" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...</a></p>
]]></description><pubDate>Wed, 12 Nov 2025 16:41:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=45902295</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=45902295</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45902295</guid></item><item><title><![CDATA[New comment by phiresky in "NPM flooded with malicious packages downloaded more than 86k times"]]></title><description><![CDATA[
<p>That seems a bit excessive to sandbox a command that really just downloads arbitrary code you are going to execute immediately afterwards anyways?<p>Also I can recommend pnpm, it has stopped executing lifecycle scripts by default so you can whitelist which ones to run.</p>
]]></description><pubDate>Thu, 30 Oct 2025 23:49:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=45766830</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=45766830</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45766830</guid></item><item><title><![CDATA[New comment by phiresky in "Next steps for BPF support in the GNU toolchain"]]></title><description><![CDATA[
<p>I disagree, you can always spend one or two sentences at the top to immediately bring everyone to a good starting point, regardless of how much technical depth the rest of the article has.<p>For example in this case: "eBPF is a method for user space to add code to the running Linux kernel without compromising security. They have been tied [...]. The GNU toolchain, the historical and still by many preferred system to build Linux currently has no support.<p>The description of what LWN and Linux is would be in the about page linked in the article.<p>It costs almost nothing for an expert to skim/skip two sentences while saving loads of time for everyone else.<p>The article is also completely missing motivation (why do we care whether BPF is supported in  the second toolchain?) Which would be helpful for almost everyone, including people who think it is obvious.<p>Edit: To be clear though, I love LWN. But the articles are very often missing important context  that would be easy to add that I suspect would help a large portion of the reader base.</p>
]]></description><pubDate>Sat, 18 Oct 2025 10:54:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45626362</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=45626362</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45626362</guid></item><item><title><![CDATA[New comment by phiresky in "Redis is fast – I'll cache in Postgres"]]></title><description><![CDATA[
<p>If your cache fits in Redis then it fits in RAM, if your cache fits in RAM then Postgres will serve it from RAM just as well.<p>Writes will go to RAM as well if you have synchronous=off.</p>
]]></description><pubDate>Fri, 26 Sep 2025 09:10:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=45384424</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=45384424</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45384424</guid></item><item><title><![CDATA[New comment by phiresky in "SQL needed structure"]]></title><description><![CDATA[
<p>I think relational databases are great, but this is my biggest problem with SQL, even before the ridiculous syntax.<p>A query like<p><pre><code>    select users.*, orders.* from users left join orders on orders.user_id = users.id
</code></pre>
Should always have returned a structure like:<p><pre><code>    type SingleReturnRow = { users: {id: ..., }[], orders: {user_id: ..., id: ..., }[]}
    type Return = SingleReturnRow[]
</code></pre>
Mangling the columns together and _removing_ groupings that naturally appear is just so unnecessary.<p>I don't think a larger change in the query language would even be needed.<p>Even better of course would be a return value like<p><pre><code>    type SingleReturnRow = { user: User, orders: Order[] }
</code></pre>
But I see how that would require a fundamental change in the language.<p>Of course in PG now you can use<p><pre><code>    select users.*, json_agg(orders.*) as orders from users left join orders on orders.user_id = users.id group by users.id
</code></pre>
but using JSON as intermediate steps just feels unnatural.</p>
]]></description><pubDate>Fri, 05 Sep 2025 11:53:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=45137506</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=45137506</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45137506</guid></item><item><title><![CDATA[New comment by phiresky in "Inheritance was invented as a performance hack (2021)"]]></title><description><![CDATA[
<p>TypeScript does supports all of these - `C implements I` is not necessary but gives compile errors if not fulfilled.<p>You can use `o satisfies T` wherever you want to ensure that any object/instance o implements T structurally.<p>To verify a type implements/extends another type from any third-party context (as your third point), you could use `(null! as T1) satisfies T2;`, though usually you'd find a more idiomatic way depending on the context.<p>Of course it's all type-level - if you are getting untrusted data you'll need a library for verification. And the immutable story in TS (readonly modifier) is not amazing.</p>
]]></description><pubDate>Thu, 08 May 2025 09:34:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=43924569</link><dc:creator>phiresky</dc:creator><comments>https://news.ycombinator.com/item?id=43924569</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43924569</guid></item></channel></rss>