<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: mort96</title><link>https://news.ycombinator.com/user?id=mort96</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 10 Jun 2026 22:11:49 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mort96" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mort96 in "Upcoming breaking changes for npm v12"]]></title><description><![CDATA[
<p>What exactly is it that's now retired that used to be deprecated? Isn't this just a collection of breaking changes to defaults?</p>
]]></description><pubDate>Wed, 10 Jun 2026 05:48:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=48471952</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48471952</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48471952</guid></item><item><title><![CDATA[New comment by mort96 in "Upcoming breaking changes for npm v12"]]></title><description><![CDATA[
<p>Really? Retired? What does that even mean in this context, why not "breaking" or something else that suggests breaking change?</p>
]]></description><pubDate>Tue, 09 Jun 2026 22:45:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=48468861</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48468861</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48468861</guid></item><item><title><![CDATA[New comment by mort96 in "Upcoming breaking changes for npm v12"]]></title><description><![CDATA[
<p>Hahaha that's amazing, just a big red "RETIRED" badge above their blog post? What the hell</p>
]]></description><pubDate>Tue, 09 Jun 2026 21:56:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=48468308</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48468308</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48468308</guid></item><item><title><![CDATA[New comment by mort96 in "Are you expected to run five Python type-checkers now?"]]></title><description><![CDATA[
<p>The interpreter knows types at runtime, not at parse/compile time. The interpreter already does a lot of dynamic type checking. It has a much stricter type system than e.g JavaScript; JavaScript will pretty much <i>always</i> convert operands to produce <i>some</i> result (even if it's just NaN or the string "object Object"), while Python will often just give you a type error.<p>The interpreter doesn't know about static types.<p>I agree that they should've made typing more a proper part of the language and not left it in this weird half-defined state of "standard syntax and some standard typing imports but undefined semantics". But it's not just a matter of enforcing existing types.</p>
]]></description><pubDate>Tue, 09 Jun 2026 08:26:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=48458264</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48458264</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48458264</guid></item><item><title><![CDATA[New comment by mort96 in "Are you expected to run five Python type-checkers now?"]]></title><description><![CDATA[
<p>I <i>do</i> think it is somewhat of an all or nothing thing. I can write dynamic languages, sure; I prefer having static types, but I have written a lot of dynamically typed code. However if I'm working in an editor with LSP integration, the experience is <i>much worse</i> when some things are missing types.<p>As an example, I may have a variable with types:<p><pre><code>    const something = somelibrary.getSomething();
</code></pre>
and I can type `something.` and see methods and properties. However, if my own code doesn't use types consistently, it's so easy to lose type info. For example:<p><pre><code>    const something = someWrapper(someLibrary.getSomething())
</code></pre>
or:<p><pre><code>    function doSomethingWith(something) {
        ...
    }
    doSomethingWith(someLibrary.getSomething()
</code></pre>
or any number of other patterns which accidentally strips type info from the variable if you don't use types everywhere.<p>I would much rather have a language where the compiler complains if some variable doesn't have a static type, than a language where I can accidentally leave something untyped. I don't understand which case I would <i>want</i> a variable or function to not have associated static type information.</p>
]]></description><pubDate>Tue, 09 Jun 2026 08:12:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48458152</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48458152</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48458152</guid></item><item><title><![CDATA[New comment by mort96 in "Moving beyond fork() + exec()"]]></title><description><![CDATA[
<p>I would say that pipes and shared memory are the IPC mechanisms? Controlling the state of the exec'd process's file descriptors would counts as a way to <i>set up</i> interprocess communication, but once that's done, it's the pipe or SHM that does the actual communication.</p>
]]></description><pubDate>Sat, 06 Jun 2026 22:01:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48429431</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48429431</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48429431</guid></item><item><title><![CDATA[New comment by mort96 in "Moving beyond fork() + exec()"]]></title><description><![CDATA[
<p>fork/exec is not an IPC model...</p>
]]></description><pubDate>Sat, 06 Jun 2026 20:00:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48428442</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48428442</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48428442</guid></item><item><title><![CDATA[New comment by mort96 in "Moving beyond fork() + exec()"]]></title><description><![CDATA[
<p>CoW is probably a good idea regardless, yeah. Overcommit is more questionable. Regardless, both ought to be argued based on their own merits. It's unfortunate that both are necessary as a consequence of fork().</p>
]]></description><pubDate>Sat, 06 Jun 2026 18:47:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=48427768</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48427768</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48427768</guid></item><item><title><![CDATA[New comment by mort96 in "Moving beyond fork() + exec()"]]></title><description><![CDATA[
<p>"Faster IPC model" than what? Faster than writing to and reading from a pipe? Faster than POSIX shared memory?</p>
]]></description><pubDate>Sat, 06 Jun 2026 18:43:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48427721</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48427721</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48427721</guid></item><item><title><![CDATA[New comment by mort96 in "Moving beyond fork() + exec()"]]></title><description><![CDATA[
<p>anarazel's comment focuses entirely on performance, indicating that they have an impression that the discussion about why fork is bad is about performance. I'm not entirely sure where this impression came from, as it's not mentioned in  
rom1v's quote nor a point in the linked paper, "A fork() in the road".</p>
]]></description><pubDate>Sat, 06 Jun 2026 18:42:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48427711</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48427711</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48427711</guid></item><item><title><![CDATA[New comment by mort96 in "The perils of UUID primary keys in SQLite"]]></title><description><![CDATA[
<p>Yeah but now you have the world's biggest foot gun in your API.</p>
]]></description><pubDate>Sat, 06 Jun 2026 18:29:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=48427597</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48427597</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48427597</guid></item><item><title><![CDATA[New comment by mort96 in "Moving beyond fork() + exec()"]]></title><description><![CDATA[
<p>What do you mean by consistency here?</p>
]]></description><pubDate>Sat, 06 Jun 2026 18:07:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=48427405</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48427405</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48427405</guid></item><item><title><![CDATA[New comment by mort96 in "Moving beyond fork() + exec()"]]></title><description><![CDATA[
<p>Didn't I just say that "the problem with fork isn't really that it's slow"? It's all the other OS design choices it forces on you if you want it to be fast.</p>
]]></description><pubDate>Sat, 06 Jun 2026 17:31:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48427096</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48427096</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48427096</guid></item><item><title><![CDATA[New comment by mort96 in "Moving beyond fork() + exec()"]]></title><description><![CDATA[
<p>It says "(including memory)". It's pretty natural to read this as "(including the contents of allocated pages)".</p>
]]></description><pubDate>Sat, 06 Jun 2026 16:41:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=48426630</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48426630</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48426630</guid></item><item><title><![CDATA[New comment by mort96 in "Moving beyond fork() + exec()"]]></title><description><![CDATA[
<p>The problem with fork isn't really that it's slow. The problem is that if you want it to be not-slow, it locks you into a bunch of OS design decisions: you more or less need a memory subsystem where all writable pages are refcounted and copy-on-write when the refcount is bigger than 1, and you need overcommit.<p>Now these decisions aren't <i>objectively bad</i>, but they have significant trade-offs and it's <i>probably</i> not a good idea that they're forced simply because we use fork()+exec() for process creation.</p>
]]></description><pubDate>Sat, 06 Jun 2026 16:39:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48426614</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48426614</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48426614</guid></item><item><title><![CDATA[New comment by mort96 in "The perils of UUID primary keys in SQLite"]]></title><description><![CDATA[
<p>Oh, that's much worse! The JSON string `{"a":9007199254740993}` decodes to the object `{"a":9007199254740992}` with typical JSON parsers like JavaScript's `JSON.parse`.</p>
]]></description><pubDate>Sat, 06 Jun 2026 14:20:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=48425391</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48425391</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48425391</guid></item><item><title><![CDATA[New comment by mort96 in "The perils of UUID primary keys in SQLite"]]></title><description><![CDATA[
<p>And then you end up with strings on the other side, not numbers.</p>
]]></description><pubDate>Sat, 06 Jun 2026 10:27:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=48423459</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48423459</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48423459</guid></item><item><title><![CDATA[New comment by mort96 in "The perils of UUID primary keys in SQLite"]]></title><description><![CDATA[
<p>Completely and utterly irrelevant.</p>
]]></description><pubDate>Sat, 06 Jun 2026 10:26:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=48423451</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48423451</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48423451</guid></item><item><title><![CDATA[New comment by mort96 in "The perils of UUID primary keys in SQLite"]]></title><description><![CDATA[
<p>I hate this so much because you can’t nicely serialise a BigInt as JSON. Using a string is nicer but it 
<i>only</i> makes sense where int64 is used as an ID, not where it’s used as a number; and you don’t wanna have to configure this per field per query.</p>
]]></description><pubDate>Sat, 06 Jun 2026 07:27:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48422364</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48422364</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48422364</guid></item><item><title><![CDATA[New comment by mort96 in "ESP32-S31"]]></title><description><![CDATA[
<p>And even if you don't need WiFi + BLE for a particular project, you may need it for other projects, and it might have value for you to standardise on one ecosystem.</p>
]]></description><pubDate>Wed, 03 Jun 2026 17:24:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=48386903</link><dc:creator>mort96</dc:creator><comments>https://news.ycombinator.com/item?id=48386903</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48386903</guid></item></channel></rss>