<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: cakoose</title><link>https://news.ycombinator.com/user?id=cakoose</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 05 Jun 2026 06:31:42 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=cakoose" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by cakoose in "Ohm's Peg-to-WASM Compiler"]]></title><description><![CDATA[
<p>> it avoids ambiguity by using ordered choice (the first matching rule wins)<p>PEG parsing tool authors often say that ordered choice solves the problem of ambiguity, that's very misleading.<p>Yes, ordered choice is occasionally useful as a way to resolve grammatic overlap. But as a grammar author, it's more common for me to want to express <i>unordered</i> choice between two sub-grammars. A tool that supports unordered choice will then let you know when you have an unexpected ambiguity.<p>PEG-based tools force you to use ordered choice for everything. You may be surprised later to find out that your grammar was actually ambiguous, and the ambiguity was "resolved" somewhat arbitrarily by picking the first sub-grammar.<p>> This makes working with Ohm/PEGs less painful in the initial phase of a project.<p>I do agree with this. But then what happens in the later phases? Do you switch to a tool that supports unordered choice to see if you have any ambiguities? And potentially have to change your grammar to fix them?</p>
]]></description><pubDate>Mon, 30 Mar 2026 09:21:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47572176</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=47572176</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47572176</guid></item><item><title><![CDATA[New comment by cakoose in "Show HN: Downloading a folder from a repo using rust"]]></title><description><![CDATA[
<p>Now I'm curious -- is that here a way to do this that avoids downloading any more than strictly necessary?<p>The command above downloads the whole repo history. You could do a depth=1 to skip the history, but it still downloads the he latest version of the entire repo tree.</p>
]]></description><pubDate>Wed, 10 Sep 2025 11:06:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=45195979</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=45195979</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45195979</guid></item><item><title><![CDATA[New comment by cakoose in "JavaScript Trademark Update"]]></title><description><![CDATA[
<p>Why will TypeScript 7 make Node.js irrelevant?<p>In TypeScript 7, the compiler will be written in Go instead of TS. But the compiler will still produce JS code as its output and so Node.js is still relevant for running that JS code.<p>Or is there something else about TypeScript 7 that will make Node.js irrelevant?</p>
]]></description><pubDate>Sat, 28 Jun 2025 20:13:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=44407797</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=44407797</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44407797</guid></item><item><title><![CDATA[New comment by cakoose in "Timescale Is Now TigerData"]]></title><description><![CDATA[
<p>> When we started 8 years ago, SQL databases were “old fashioned.” NoSQL was the future. Hadoop, MongoDB, Cassandra, InfluxDB – these were the new, exciting NoSQL databases. PostgreSQL was old and boring.<p>In 2017? I thought the NoSQL hype had subsided by then and everyone was excited about distributed transactions -- Spanner, Cockroach, Fauna, Foundation, etc.</p>
]]></description><pubDate>Wed, 18 Jun 2025 06:20:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=44307111</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=44307111</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44307111</guid></item><item><title><![CDATA[New comment by cakoose in "What the heck is AEAD again?"]]></title><description><![CDATA[
<p>Yup, the example doesn't make sense for the reason you pointed out.<p>You could water down the example a bit to make it work:<p>1. Assume there's some other authentication mechanism for client-server communication, e.g. TLS.<p>2. The client sends the user ID unencrypted (within TLS) so the server can route, but encrypts the message contents so the server can't read it.<p>3. The final recipient can validate the message and the user ID.<p>This saves the client from having to send the user ID twice, once in the ciphertext and once in the clear.<p>But another more interesting use case is when you don't even send the associated data: <a href="https://news.ycombinator.com/item?id=43827342">https://news.ycombinator.com/item?id=43827342</a></p>
]]></description><pubDate>Tue, 29 Apr 2025 01:26:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=43827887</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=43827887</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43827887</guid></item><item><title><![CDATA[New comment by cakoose in "AI PCs Aren't Good at AI: The CPU Beats the NPU"]]></title><description><![CDATA[
<p>Offload only makes sense if there are other advantages, e.g. speed, power.<p>Without those, wouldn't it be better to use the NPUs silicon budget on more CPU?</p>
]]></description><pubDate>Thu, 17 Oct 2024 00:01:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=41865137</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=41865137</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41865137</guid></item><item><title><![CDATA[New comment by cakoose in "Eliminating Memory Safety Vulnerabilities at the Source"]]></title><description><![CDATA[
<p><i>What happens if we gradually transition to memory-safe languages for new features, while leaving existing code mostly untouched except for bug fixes?</i><p>...<p><i>In the final year of our simulation, despite the growth in memory-unsafe code, the number of memory safety vulnerabilities drops significantly, a seemingly counterintuitive result [...]</i><p>Why would this be counterintuitive? If you're only touching the memory-unsafe code to fix bugs, it seems obviously that the number of memory-safety bugs will go down.<p>Am I missing something?</p>
]]></description><pubDate>Wed, 25 Sep 2024 21:17:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=41651984</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=41651984</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41651984</guid></item><item><title><![CDATA[New comment by cakoose in "Heroku Postgres is now based on AWS Aurora"]]></title><description><![CDATA[
<p>A few years ago I was considering Heroku for something new. But then I learned that Heroku Postgres's HA offering used async replication, meaning you could lose minutes of writes in the event that the primary instance failed. That was a dealbreaker.<p>That was very surprising to me. Most businesses that are willing to pay 2x for an HA database are probably NOT likely to be ok with that kind of data loss risk.<p>(AWS and GCP's HA database offerings use synchronous replication.)</p>
]]></description><pubDate>Fri, 31 May 2024 22:32:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=40541016</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=40541016</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40541016</guid></item><item><title><![CDATA[New comment by cakoose in "Rules of schema growth (2017)"]]></title><description><![CDATA[
<p>But the article claims it applies to SQL databases as well.<p>> Are these rules specific to a particular database?
>
> No. These rules apply to almost any SQL or NoSQL database. The rules even apply to the so-called "schemaless" databases.</p>
]]></description><pubDate>Wed, 01 Nov 2023 01:48:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=38093698</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=38093698</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38093698</guid></item><item><title><![CDATA[New comment by cakoose in "A practical way to detect cargo-cult thinking"]]></title><description><![CDATA[
<p>> Cargo-cult thinking means only looking for, and only accepting, confirming evidence.<p>This article's definition of cargo-cult thinking seems incorrect. The definition I'm familiar with: when you lack a true understanding of some idea and end up just mimicking the superficial qualities. It's a great metaphor that comes up all the time in software engineering.<p>For example, seeing a successful system that uses microservices and thinking that switching your system to microservices will make it successful. If you don't understand exactly what the tradeoffs are and why those tradeoffs worked well for the successful system, you're not going to get the result you want.<p>Maybe the author confused "cargo-cult thinking" with just plain "cult-like thinking"?</p>
]]></description><pubDate>Sat, 05 Aug 2023 21:28:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=37016462</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=37016462</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37016462</guid></item><item><title><![CDATA[New comment by cakoose in "Cap'n Proto 1.0"]]></title><description><![CDATA[
<p>I'm not the person you're responding to, but I interpreted their comment as, "doesn't the argument against having protobuf check for required fields also apply to all of protobuf's other checks?"<p>From the linked article the post: "The right answer is for applications to do validation as-needed in application-level code. If you want to detect when a client fails to set a particular field, give the field an invalid default value and then check for that value on the server. Low-level infrastructure that doesn’t care about message content should not validate it at all."<p>(I agree that "static typing" isn't exactly the right term here. But protobuf dynamic validation allows the programmer to then rely on static types, vs having to dynamically check those properties with hand-written code, so I can see why someone might use that term.)</p>
]]></description><pubDate>Sat, 29 Jul 2023 20:44:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=36924365</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=36924365</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36924365</guid></item><item><title><![CDATA[New comment by cakoose in "Coroutines for Go"]]></title><description><![CDATA[
<p>One core Lua thing that I think is an ugly mistake: trying to represent maps (dictionaries) and arrays using a single logical data type.<p>Most languages use different data types but with some API overlap, e.g. maps and arrays are both "iterable". Lua goes too far, I think, and tries to make them the exact same, a data type they call "table".<p>One side-effect is that you have some operations that only really make sense for maps or lists, but since they work on all tables, they're defined awkwardly, e.g:<p>> The length of a table t is defined to be any integer index n such that t[n] is not nil and t[n+1] is nil; moreover, if t[1] is nil, n can be zero. For a regular array, with non-nil values from 1 to a given n, its length is exactly that n, the index of its last value. If the array has "holes" (that is, nil values between other non-nil values), then #t can be any of the indices that directly precedes a nil value (that is, it may consider any such nil value as the end of the array).</p>
]]></description><pubDate>Tue, 18 Jul 2023 01:48:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=36766749</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=36766749</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36766749</guid></item><item><title><![CDATA[New comment by cakoose in "PostgreSQL reconsiders its process-based model"]]></title><description><![CDATA[
<p>It is also possible for a link-time optimizer to observe that a non-static global variable is never modified and optimize that away too.<p>But the Postgres mailing list is talking about 2000 global variables being a hurdle to multi-threading. I doubt they just didn't realize that most of them can be optimized into constants.</p>
]]></description><pubDate>Tue, 20 Jun 2023 17:22:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=36407373</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=36407373</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36407373</guid></item><item><title><![CDATA[New comment by cakoose in "PostgreSQL reconsiders its process-based model"]]></title><description><![CDATA[
<p>I think there might be a terminology mix-up here. In C, a global variable with the `static` keyword is is still mutable. So it typically can't be constant-folded/inlined.<p>The `static` modifier in that context just means that the symbol is not exported, so other ".c" files can't access it.</p>
]]></description><pubDate>Tue, 20 Jun 2023 02:27:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=36399014</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=36399014</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36399014</guid></item><item><title><![CDATA[New comment by cakoose in "PostgreSQL reconsiders its process-based model"]]></title><description><![CDATA[
<p>> I think as a straightforward, easily correct transition from 2000 globals, a giant structure isn't an awful idea.<p>Agree.<p>> It's not like the globals were organized before!<p>Using a struct with 2000 fields loses some encapsulation.<p>When a global is defined in a ".c" file (and not exported via a ".h" file), it can only be accessed in that one ".c" file, sort of like a "private" field in a class.<p>Switching to a single struct would mean that all globals can be accessed by all code.<p>There's probably a way to define things that allows you to regain some encapsulation, though. For example, some spin on the opaque type pattern: <a href="https://stackoverflow.com/a/29121847/163832" rel="nofollow noreferrer">https://stackoverflow.com/a/29121847/163832</a></p>
]]></description><pubDate>Mon, 19 Jun 2023 18:51:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=36395091</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=36395091</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36395091</guid></item><item><title><![CDATA[New comment by cakoose in "Migrating Netflix to GraphQL safely"]]></title><description><![CDATA[
<p>> We migrated Netflix’s mobile apps to GraphQL with zero downtime<p>Is "zero downtime" relevant here?<p>For example, when migrating a database that is the source-of-truth for data, then yeah, downtime is something you have to contend with. But for a client-server API change, isn't it trivial? Companies do this all the time -- expose a new version of an API then gradually migrate clients over.<p>(It's definitely not a trivial task overall! For example, you need thorough testing to make sure you don't break existing functionality and the article does talk about that.)</p>
]]></description><pubDate>Sun, 18 Jun 2023 23:59:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=36385780</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=36385780</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36385780</guid></item><item><title><![CDATA[New comment by cakoose in "Short, friendly base32 slugs from timestamps"]]></title><description><![CDATA[
<p>Having it be evenly divisible by all those bases is neat!<p>But I wouldn't say "no wasted bits" unless 120 bits is also exactly the right length for a particular use case. For example, if my use case would be served better by 64 bits, I'd prefer losing some bits to padding than extending it to 120 bits.</p>
]]></description><pubDate>Thu, 19 Jan 2023 07:46:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=34437754</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=34437754</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34437754</guid></item><item><title><![CDATA[New comment by cakoose in "Show HN: Portable Secret – How I store my secrets and communicate privately"]]></title><description><![CDATA[
<p>Offering a bounty like this has value, but probably only for finding shallow bugs.<p>Thoroughly evaluating security/cryptography takes deep expertise and a lot of time. You're not going to elicit that without more money, impact/fame, or technical excellence.<p>- Money: The original bounty was $400. An expert can probably earn $400 an hour just to investigate something, without needing to completely break it.<p>- Impact/fame: Barely anyone uses this project. There are tons of other tools and services that are more widely used.<p>- Technical excellence: There's no evidence of anything clever or interesting.<p>For example, researchers around the world spend <i>tons</i> of effort analyzing the algorithms in the various NIST cryptography competitions. There's significant impact/fame and clear evidence of technical excellence. But if some rando offers a $10k bounty for their encryption algorithm, it's not going to get the required level of scrutiny.<p>Plus, the bounty is just for the encryption mechanism. With security, it's usually the other moving parts that cause issues, especially in how they interact with human behavior. Phishing works without needing to break TLS, DKIM/SPF, browser sandboxing, etc.<p>(I read an article ~5-10 years ago by a security/crypto researcher that said basically this, but sadly I can't find it anymore.)<p>I still think it's great when people build things like this and when they offer any kind of bounty. I just worry that the presence of an unclaimed bounty might mislead people into overestimating the level of security.</p>
]]></description><pubDate>Wed, 21 Dec 2022 23:34:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=34087832</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=34087832</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34087832</guid></item><item><title><![CDATA[New comment by cakoose in "Idiot Proof Git"]]></title><description><![CDATA[
<p>"git undo" tool: <a href="https://github.com/arxanas/git-branchless/wiki/Command:-git-undo" rel="nofollow">https://github.com/arxanas/git-branchless/wiki/Command:-git-...</a></p>
]]></description><pubDate>Thu, 10 Nov 2022 21:29:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=33553682</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=33553682</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33553682</guid></item><item><title><![CDATA[New comment by cakoose in "Why I Two-Space (2012)"]]></title><description><![CDATA[
<p>> It's therefor also fine if you're writing in a monospace/fixed-width font.<p>This is the standard explanation I see everywhere, but I don't get it.<p>With two spaces, the gap after a period is longer than a gap after a comma. Why is that "obviously fine" in fixed-width but not in variable-width?</p>
]]></description><pubDate>Sun, 23 Oct 2022 02:03:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=33303899</link><dc:creator>cakoose</dc:creator><comments>https://news.ycombinator.com/item?id=33303899</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33303899</guid></item></channel></rss>