<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: branko_d</title><link>https://news.ycombinator.com/user?id=branko_d</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 08 Jun 2026 15:39:02 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=branko_d" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by branko_d in "How's Linear so fast? A technical breakdown"]]></title><description><![CDATA[
<p>You can have it in one place without using background sync.<p>Our application uses classical "foreground update" paradigm, but each API call automatically shows an error to the user and returns him/her to the <i>same place</i> where error originated to fix the input and/or retry. As a bonus, we also automatically show progress indicator for any HTTP request that takes more than 1s (which is rare).<p>This is as simple as:<p><pre><code>    await context.api.explorer.rename(
        {
            objectKey,
            name
        }
    );

    // objectKey: ApiTypes.ObjectKey
    // name: string
</code></pre>
The above initiates an HTTP request:<p>- If that request succeeds, you know that the new name has been durably committed to the database.<p>- If it fails because the new name is not unique, the user sees the error, and can then enter a different name before retrying. The key is that the UI context is preserved during API failure, so everything the user had entered is still on the screen.<p>- If it takes more than 1s, the user sees a progress indicator which he/she can click to cancel the operation. This also returns him/her to the original UI.<p>The magic is in the `rename` itself - it was auto-generated from our back-end API such that it wires into our error reporting and progress UI.</p>
]]></description><pubDate>Mon, 08 Jun 2026 07:02:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=48442111</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=48442111</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48442111</guid></item><item><title><![CDATA[New comment by branko_d in "Nvidia RTX Spark"]]></title><description><![CDATA[
<p>I think a lot of it is down to Windows, not Prism itself.<p>For decades, Windows made it too easy for games and even some application to install drivers. Windows games use drivers for anti-cheat (and historically for copy protection too). Neither Apple Rosetta nor Microsoft Prism can translate/emulate drivers, but since drivers have been much more prevalent on Windows, now Windows has a much biggest compatibility problem.</p>
]]></description><pubDate>Tue, 02 Jun 2026 11:33:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=48368855</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=48368855</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48368855</guid></item><item><title><![CDATA[New comment by branko_d in "Nvidia RTX Spark"]]></title><description><![CDATA[
<p>Itanium was arguably not superior. The assumption behind it (that the compiler can bring order to the chaos) was wrong, making it slower, more expensive, and less efficient than x86 in real-world scenarios.</p>
]]></description><pubDate>Tue, 02 Jun 2026 05:39:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48366487</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=48366487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48366487</guid></item><item><title><![CDATA[New comment by branko_d in "SpaceX not the behemoth everyone thought"]]></title><description><![CDATA[
<p>No.<p>Palantir, possibly the most overvalued company on the stock marker, has P/S 63 and P/E 144.<p>Nvidia has P/S 21 and P/E 33.</p>
]]></description><pubDate>Fri, 22 May 2026 04:55:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=48232125</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=48232125</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48232125</guid></item><item><title><![CDATA[New comment by branko_d in "I Moved My Digital Stack to Europe"]]></title><description><![CDATA[
<p>Sounds like HPE GreenLake.</p>
]]></description><pubDate>Wed, 13 May 2026 13:24:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=48121605</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=48121605</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48121605</guid></item><item><title><![CDATA[New comment by branko_d in "The Zig project's rationale for their anti-AI contribution policy"]]></title><description><![CDATA[
<p>From <a href="https://kristoff.it/blog/contributor-poker-and-ai/" rel="nofollow">https://kristoff.it/blog/contributor-poker-and-ai/</a>:<p><i>"Unfortunately the reality of LLM-based contributions has been mostly negative for us, from an increase in background noise due to worthless drive-by PRs full of hallucinations (that wouldn’t even compile, let alone pass CI), to insane 10 thousand line long first time PRs. In-between we also received plenty of PRs that looked fine on the surface, some of which explicitly claimed to not have made use of LLMs, but where follow-up discussions immediately made it clear that the author was sneakily consulting an LLM and regurgitating its mistake-filled replies to us."</i></p>
]]></description><pubDate>Thu, 30 Apr 2026 07:39:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47959434</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=47959434</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47959434</guid></item><item><title><![CDATA[New comment by branko_d in "The zero-days are numbered"]]></title><description><![CDATA[
<p>This is just a footnote in the article, but is incredibly important, IMO:<p><i>”There’s a risk that codebases begin to surpass human comprehension as a result of more AI in the development process, scaling bug complexity along with (or perhaps faster than) discovery capability. Human-comprehensibility is an essential property to maintain, especially in critical software like browsers and operating systems.”</i><p>This aligns with my own experience, and I believe experience of most practitioners in the field: writing a piece of code is just a beginning of a very long journey.<p>We should be careful about optimizing that first step at the expense of the journey.</p>
]]></description><pubDate>Wed, 22 Apr 2026 13:26:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=47863296</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=47863296</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47863296</guid></item><item><title><![CDATA[New comment by branko_d in "I shipped a transaction bug, so I built a linter"]]></title><description><![CDATA[
<p>The wording "outside of transaction" irks me. <i>Everything</i> in a relational database is done within a transaction, the only question is whether it's the transaction you think it is, or some other.<p>I believe this is largely an API design problem. Many client APIs (especially ORMs) will start a transaction implicitly for you if you haven't explicitly specified your own, leading to problems like in the article.<p>Having implicit transactions is just wrong design, IMO. A better-designed API should make transactions very explicit and very visible in the code: if you want to execute a query, you must start a transaction yourself and then query on that transaction supplied as an actual parameter. Implicit transactions should be difficult-to-impossible. We - the programmers - should think about transactions just as we think about querying and manipulating data. Hiding from transactions in the name of "ergonomy" brings more harm than good.</p>
]]></description><pubDate>Tue, 14 Apr 2026 06:50:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=47762124</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=47762124</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47762124</guid></item><item><title><![CDATA[New comment by branko_d in "Decisions that eroded trust in Azure – by a former Azure Core engineer"]]></title><description><![CDATA[
<p>Dave Cutler and his team are a clear counter-example. They famously shipped Windows NT with zero known bugs, which clearly brought enormous shareholder value.<p>The problem, of course, is that this sort of thing doesn’t bring value next quarter.</p>
]]></description><pubDate>Sat, 04 Apr 2026 20:30:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=47643059</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=47643059</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47643059</guid></item><item><title><![CDATA[New comment by branko_d in "Decisions that eroded trust in Azure – by a former Azure Core engineer"]]></title><description><![CDATA[
<p>I think this is especially problematic (from Part 4 at <a href="https://isolveproblems.substack.com/p/how-microsoft-vaporized-a-trillion-2f5" rel="nofollow">https://isolveproblems.substack.com/p/how-microsoft-vaporize...</a>):<p><i>"The team had reached a point where it was too risky to make any code refactoring or engineering improvements. I submitted several bug fixes and refactoring, notably using smart pointers, but they were rejected for fear of breaking something."</i><p>Once you reach this stage, the only escape is to first cover everything with tests and then meticulously fix bugs, without shipping any new features. This can take a long time, and cannot happen without the full support from the management who do not fully understand the problem nor are incentivized to understand it.</p>
]]></description><pubDate>Fri, 03 Apr 2026 05:29:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47623463</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=47623463</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47623463</guid></item><item><title><![CDATA[New comment by branko_d in "People inside Microsoft are fighting to drop mandatory Microsoft Account"]]></title><description><![CDATA[
<p>If memory serves, Windows 2000 was the last version where search worked reliably. It was a simple linear search through files which could take a while on larger folders, but was reliable and predictable since it did not rely on a background indexing service which seems to get stale or just plain wrong most of the time.<p>If I search for “foo”, I’d like to get <i>all</i> files containing “foo” please, without a shadow of a doubt that some files were skipped, including those that I have recently created. I still can’t get that as of Windows 11!</p>
]]></description><pubDate>Fri, 27 Mar 2026 20:27:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=47547804</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=47547804</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47547804</guid></item><item><title><![CDATA[New comment by branko_d in "We rewrote our Rust WASM parser in TypeScript and it got faster"]]></title><description><![CDATA[
<p>My guess would be bad hashing, resulting in too many collisions.</p>
]]></description><pubDate>Sat, 21 Mar 2026 11:54:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47466211</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=47466211</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47466211</guid></item><item><title><![CDATA[New comment by branko_d in "Sqldef: Idempotent schema management tool for MySQL, PostgreSQL, SQLite"]]></title><description><![CDATA[
<p>> often you have to inject data into new tables or columns<p>No tool can help you with that, simply because this kind of data migration depends on your particular business logic that the tool has no way of knowing about.<p>While SQL Server Data Tools has its warts, it has been immensely useful for us in making sure every little detail gets handled during migration. That doesn't usually mean that it can do the entire migration itself - we do the manual adjustments to the base tables that SSDT cannot do on its own, and then let it handle the rest, which in our case is mostly about indexes, views, functions and stored procedures.<p>After all that, SSDT can compare the resulting database with the "desired" database, and reliably flag any differences, preventing schema drift.</p>
]]></description><pubDate>Thu, 05 Feb 2026 05:46:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=46896136</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=46896136</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46896136</guid></item><item><title><![CDATA[New comment by branko_d in "Using PostgreSQL as a Dead Letter Queue for Event-Driven Systems"]]></title><description><![CDATA[
<p>> Boolean is rarely enough for real production workloads. You need a 'processing' ... 'retrying'... 'failed' ...<p>If you have more than 2 states, then just use integer instead or boolean.<p>> Saving a few bytes on the index isn't worth losing that observability.<p>Not sure why having a few well-known string values is more "observable" than having a few well-known integer values.<p>Also, it might be worth having better write performance. When PostgreSQL updates a row, it actually creates a new physical row version (for MVCC), so the less it has to copy the better.</p>
]]></description><pubDate>Mon, 26 Jan 2026 13:23:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=46765332</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=46765332</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46765332</guid></item><item><title><![CDATA[New comment by branko_d in "Using PostgreSQL as a Dead Letter Queue for Event-Driven Systems"]]></title><description><![CDATA[
<p>Why use string as status, instead of a boolean? That just wastes space for no discernable benefit, especially since the status is indexed. Also, consider turning event_type into an integer if possible, for similar reasons.<p>Furthermore, why have two indexes with the same leading field (status)?</p>
]]></description><pubDate>Mon, 26 Jan 2026 03:31:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=46761549</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=46761549</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46761549</guid></item><item><title><![CDATA[New comment by branko_d in "Unconventional PostgreSQL Optimizations"]]></title><description><![CDATA[
<p>That's true for seeks into the clustered (primary) index because that index includes all fields, so you don't need to "jump" to the heap to get them.<p>However, seeking into a secondary index, and then reading a column not included in that index incurs an additional index seek (into the clustered index), which may be somewhat slower than what would happen in a heap-based table.<p>So there are pros and cons, as usual...</p>
]]></description><pubDate>Wed, 21 Jan 2026 07:40:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=46702353</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=46702353</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46702353</guid></item><item><title><![CDATA[New comment by branko_d in "Unconventional PostgreSQL Optimizations"]]></title><description><![CDATA[
<p>For inserts, you cannot escape writing into the base table and all indexes. However, my understanding is that for <i>updates</i> PostgreSQL has a write amplification problem due to the fact that each time a row is updated this creates a new row (to implement MVCC), and a new physical location in the heap, so all indexes need to be updated to point to the new location, even those not containing the updated columns.<p>OTOH, with a heap-less (aka. clustered, aka. index organized) table, you would only have to update the indexes containing the columns that are actually being updated. You don't need to touch any other index. Furthermore, only if you are updating a key column would you physically "move" the entry into a different part of the B-tree. If you update an included column (PK columns are automatically "included" in all secondary indexes, even if not explicitly mentioned in the index definition), you can do that in-place, without moving the entry.<p>Here is how this works in SQL Server - consider the following example:<p><pre><code>    CREATE TABLE T (

        ID int,
        NAME nvarchar(255) NOT NULL,
        AMOUNT int NOT NULL,

        CONSTRAINT T_PK PRIMARY KEY (ID)

    );

    GO

    CREATE INDEX T_I1 ON T (NAME);

    GO

    CREATE INDEX T_I2 ON T (AMOUNT);
</code></pre>
Now, doing this...<p><pre><code>    UPDATE T SET AMOUNT = 42 WHERE ID = 100;
</code></pre>
...will only write to T_PK and T_I2, but <i>not</i> T_I1. Furthermore T_PK's entry will not need to be moved to a different place in the B-tree. SQL Server uses row versioning similar to PostgreSQL, so it's conceivable that PostgreSQL could behave similarly to SQL Server if it supported clustered (index-organized) tables.</p>
]]></description><pubDate>Wed, 21 Jan 2026 07:28:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=46702253</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=46702253</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46702253</guid></item><item><title><![CDATA[New comment by branko_d in "Furiosa: 3.5x efficiency over H100s"]]></title><description><![CDATA[
<p>Yes, and the newest Panther Lake too!<p><a href="https://techtime.news/2025/10/10/intel-25/" rel="nofollow">https://techtime.news/2025/10/10/intel-25/</a></p>
]]></description><pubDate>Thu, 15 Jan 2026 08:00:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=46629493</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=46629493</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46629493</guid></item><item><title><![CDATA[New comment by branko_d in "Inlining – The Ultimate Optimisation"]]></title><description><![CDATA[
<p>On the other hand, if the compiler can prove at compile-time what type the object <i>must</i> have at run-time, it can eliminate the dynamic dispatch and effectively re-enable inlining.</p>
]]></description><pubDate>Tue, 13 Jan 2026 21:04:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=46607979</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=46607979</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46607979</guid></item><item><title><![CDATA[New comment by branko_d in "Accepting US car standards would risk European lives"]]></title><description><![CDATA[
<p>But only if they stand.<p>If they start driving, the situation changes dramatically!</p>
]]></description><pubDate>Wed, 03 Dec 2025 09:24:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46132260</link><dc:creator>branko_d</dc:creator><comments>https://news.ycombinator.com/item?id=46132260</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46132260</guid></item></channel></rss>