<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: kdps</title><link>https://news.ycombinator.com/user?id=kdps</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 13 May 2026 18:15:30 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=kdps" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by kdps in "Ask HN: We just had an actual UUID v4 collision..."]]></title><description><![CDATA[
<p>I get why sync of mutiple machines matters for ordering and causality, but why is it a problem for uniqueness?</p>
]]></description><pubDate>Fri, 08 May 2026 20:23:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48068310</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=48068310</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48068310</guid></item><item><title><![CDATA[New comment by kdps in "Data Processing Benchmark Featuring Rust, Go, Swift, Zig, Julia etc."]]></title><description><![CDATA[
<p>If you're referring to the SIMD aspect (I assume the other points don't apply here): It depends on your perspective.<p>You could say yes, because the C# benchmark code is utilizing vector extensions on the CPU while Go's isn't. But you could also say no: Both are running on the same hardware (CPU and RAM). C# is simply using that hardware more efficiently here because the capabilities are exposed via the standard library. There is no magic trick involved. Even cheap consumer CPUs have had vector units for decades.</p>
]]></description><pubDate>Sun, 01 Feb 2026 19:37:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=46848694</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=46848694</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46848694</guid></item><item><title><![CDATA[New comment by kdps in "Data Processing Benchmark Featuring Rust, Go, Swift, Zig, Julia etc."]]></title><description><![CDATA[
<p>It's not really surprising given the implementations. The C# stdlib just exposes more low-level levers here (quick look, correct me if I'm wrong):<p>For one, the C# code is explicitly using SIMD (System.Numerics.Vector) to process blocks, whereas Go is doing it scalar. It also uses a read-only FrozenDictionary which is heavily optimized for fast lookups compared to a standard map.
Parallel.For effectively maps to OS threads, avoiding the Go scheduler's overhead (like preemption every few ms) which is small but still unnecessary for pure number crunching. But a bigger bottleneck is probably synchronization: The Go version writes to a channel in every iteration. Even buffered, that implies internal locking/mutex contention. C# is just writing to pre-allocated memory indices on unrelated disjoint chunks, so there's no synchronization at all.</p>
]]></description><pubDate>Sun, 01 Feb 2026 14:25:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=46846426</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=46846426</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46846426</guid></item><item><title><![CDATA[New comment by kdps in "Java 25's new CPU-Time Profiler"]]></title><description><![CDATA[
<p>Yes. What I was trying to imply is that now there is a lightweight processing unit that still is able to suspend on  IO (independently and without involvement from the OS scheduler), but can do that without relying on async/reactive patterns on code level. This required significant changes to the standard lib and runtime.</p>
]]></description><pubDate>Sun, 14 Sep 2025 14:11:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=45239846</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=45239846</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45239846</guid></item><item><title><![CDATA[New comment by kdps in "Java 25's new CPU-Time Profiler"]]></title><description><![CDATA[
<p>> So, in theory, one can create 100K threads on one machine, but in practice that's going to keep burning processor for GC cycles.<p>The focus on "100k threads" and GC overhead is a red herring. The real win isn't spawning a massive number of threads, but automatically yielding on network I/O, like e.g. goroutines do. In an I/O bound web application, you'd have a single virtual thread handling the whole request, just like a goroutine does. The GC overhead caused by the virtual thread is minuscule compared to the heap allocations caused by everything else going on in the request.
If you really have a scenario for 100k virtual threads, they would not be short lived.<p>> But if they access limited resources (database, another HTTP service), etc. in real application you face the standard issue: you cannot hit the targeted system with any data you want<p>Then why would you do it? That sounds like an architectural problem, not a virtual thread problem. In an actor system, for example, you wouldn't hit the database directly from 100k different actors.<p>> The good thing in reactive programming is that it does not try to pretend that above problem does not exist.<p>This compares a high-level programming paradigm, complete with its own libraries and frameworks, to a single, low-level concurrency construct. The former is a layer of abstraction that hides complexity, while the latter is a fundamental building block that, by design, does not and cannot hide anything.<p>> It forces to handle errors, to handle backpressure, as those problems will not magically disappear when we switch to green threads, lightweight threads, etc.<p>Synchronous code handles errors in the most time-tested and understandable way there is. It is easy to reason about and easy to debug. Reactive programming requires explicit backpressure handling because its asynchronous nature creates the problem in the first place. The simplest form of "backpressure" in synchronous code with a limited amount of threads is the act of blocking. For anything more than that, there are the classic tools (blocking queues, semaphores...) or higher-level libraries built on top of them.</p>
]]></description><pubDate>Sat, 13 Sep 2025 22:48:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=45235923</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=45235923</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45235923</guid></item><item><title><![CDATA[New comment by kdps in "Serverless Horrors"]]></title><description><![CDATA[
<p>Don't they charge for every TB exceeding the included limit? (website says "For each additional TB, we charge € 1.19 in the EU and US, and € 8.81 in Singapore.")</p>
]]></description><pubDate>Sun, 07 Sep 2025 14:19:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=45158340</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=45158340</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45158340</guid></item><item><title><![CDATA[New comment by kdps in "Rust’s dependencies are starting to worry me"]]></title><description><![CDATA[
<p>I'd argue that the severity varies between languages, despite the core problem being universal. Languages with comprehensive standard libraries have an advantage over those with minimal built-in functionality, where people rely on external dependencies even for the most basic things (e.g. see Java/.NET vs JS/Node). Lightweight is not always better.</p>
]]></description><pubDate>Fri, 09 May 2025 22:14:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=43941418</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=43941418</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43941418</guid></item><item><title><![CDATA[New comment by kdps in "Don't Be Afraid of Types"]]></title><description><![CDATA[
<p>> Imagine we have immutable records that hold just data and static classes as function containers, and those functions just act on the records, return some new ones and change no state<p>Or imagine those functions are part of the immutable record and  create new instances. The aspect of (im)mutability is orthogonal to where you place your logic. In the context of domain models, if the logic is an inherent part of the type and its domain, then there are good reasons to model the logic as part of the type, and those have nothing to do with Java or the typical OOP dogma (Rust chrono: `let age = today.years_since(birthday)` - Yes, you could argue that the logic is part of the trait implementation, but the struct's data is still encapsulated and correct usage of the type is enforced. There is only one way to achieve this in Java.)</p>
]]></description><pubDate>Sat, 22 Mar 2025 19:32:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=43448030</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=43448030</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43448030</guid></item><item><title><![CDATA[New comment by kdps in "Don't Be Afraid of Types"]]></title><description><![CDATA[
<p>In this case, API does not refer to client/server. The API of the aforementioned static class is the set of its methods and their signatures.</p>
]]></description><pubDate>Sat, 22 Mar 2025 18:54:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=43447754</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=43447754</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43447754</guid></item><item><title><![CDATA[New comment by kdps in "JVM Anatomy Quarks"]]></title><description><![CDATA[
<p>> ...entirely missing the lightweight threading...<p>They deliberately took the longer route, aiming to integrate lightweight threads in a way that doesn't force developers to change their existing programming model. No need for callbacks, futures, coroutines, async/await, whatever. This required a massive effort under the hood and rework to many core APIs. Even code compiled with decade old Java versions can run on virtual threads and benefit, without any refactoring or recompilation.<p>> ...and/or async/await revolution of the last decade<p>async/await is largely syntactic sugar. Java has had the core building blocks for asynchronous programming for years, with CompletableFuture (2014, replacing the less flexible Future introduced in 2004) and NIO.2 (2011, building on the original NIO from 2002) for non-blocking I/O, along with numerous mature libraries that have been developed on top of them over time.</p>
]]></description><pubDate>Mon, 11 Nov 2024 19:45:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=42109910</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=42109910</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42109910</guid></item><item><title><![CDATA[New comment by kdps in "Show HN: Kameo – Fault-tolerant async actors built on Tokio"]]></title><description><![CDATA[
<p>> Right. It's not a very widespread use case, to be honest. You'd find that most would be N actors for M threads (where N <= M<p>What makes you think that? Having a large number of actors per thread is by far the most important use case. The Actor model is commonly used in communication systems where there are hundreds of thousands of actors per machine (often one for every single user). In this context, Actors are typically extremely lightweight and not CPU-bound. Instead, they mostly focus on network I/O and are often idle, waiting for messages to arrive or be sent.</p>
]]></description><pubDate>Sat, 05 Oct 2024 14:32:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=41750149</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=41750149</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41750149</guid></item><item><title><![CDATA[New comment by kdps in "Choose Postgres queue technology"]]></title><description><![CDATA[
<p>I don't get it :(. Why could the same task be executed more than once? From my understanding, if the UPDATE is atomic, only one worker will be able to set `used = 1`. If the update statement is not successful (affected != 1), then the worker should drop the task and do another select.</p>
]]></description><pubDate>Mon, 25 Sep 2023 08:15:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=37640845</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=37640845</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37640845</guid></item><item><title><![CDATA[New comment by kdps in "Twitter Blue breaks EU consumer law by showing prices without tax"]]></title><description><![CDATA[
<p>Zoom charges VAT based on the local country (or based on the VAT number if you are a company and provide one)</p>
]]></description><pubDate>Sun, 19 Mar 2023 11:34:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=35217987</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=35217987</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35217987</guid></item><item><title><![CDATA[New comment by kdps in "Hacker News Predictions"]]></title><description><![CDATA[
<p>I predict people on hn will use the the expression "I predict" much more often now.</p>
]]></description><pubDate>Sun, 14 Aug 2022 19:22:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=32462099</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=32462099</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32462099</guid></item><item><title><![CDATA[New comment by kdps in "Denmark bans Gmail and Co from schools due to privacy concerns"]]></title><description><![CDATA[
<p>Tutanota is a German company</p>
]]></description><pubDate>Tue, 26 Jul 2022 17:58:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=32241560</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=32241560</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32241560</guid></item><item><title><![CDATA[New comment by kdps in "Denmark bans Gmail and Co from schools due to privacy concerns"]]></title><description><![CDATA[
<p>Translation issue. In German, the expression "... und Co" is a synonym for et cetera.</p>
]]></description><pubDate>Tue, 26 Jul 2022 11:56:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=32237059</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=32237059</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32237059</guid></item><item><title><![CDATA[New comment by kdps in "New UUID Formats"]]></title><description><![CDATA[
<p>My main concern with random-based UUIDs always has been running out of entropy and cause the application to remain in a blocking state (e.g. as described here: <a href="https://blog.fastthread.io/2022/03/09/java-uuid-generation-performance-impact/" rel="nofollow">https://blog.fastthread.io/2022/03/09/java-uuid-generation-p...</a>). Not due to any negative experiences that I made myself, but due to a particular colleague of mine who sees it as a dealbreaker.<p>Is this an actual issue? Most people don't seem to care when talking about random UUIDs. The target platform of our applications is mostly Kubernetes on cloud environments, if that makes any difference.<p>Why I'm asking: UUID Version 7 looks quite interesting to me, and the document describes <i>rand_a</i> and <i>rand_b</i> just as "pseudo-random data"... which made me think that in the context of "uniqueness per millisecond", a source of entropy is <i>conceptually</i> not required. However, chapter 6.6 clearly advises the usage of CSPRNGs, so I guess the overall problem remains :(</p>
]]></description><pubDate>Mon, 13 Jun 2022 11:04:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=31723719</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=31723719</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31723719</guid></item><item><title><![CDATA[New comment by kdps in "Why have a blog? (2020)"]]></title><description><![CDATA[
<p>What's the current (2022) take on Hugo vs. Jekyll? 
I'm also wondering if Github Pages is a good alternative for hosting. Judging from their description, it seems to be free, without ads and can optionally be used with a custom domain.</p>
]]></description><pubDate>Wed, 08 Jun 2022 10:22:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=31665338</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=31665338</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31665338</guid></item><item><title><![CDATA[New comment by kdps in "How Akka Cluster Works: Actors Living in a Cluster"]]></title><description><![CDATA[
<p>Regarding garbage collection: do you think ZGC or Shenandoah could reduce the problems you mentioned?</p>
]]></description><pubDate>Sun, 17 Jan 2021 11:43:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=25809968</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=25809968</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25809968</guid></item><item><title><![CDATA[New comment by kdps in "Pfizer vaccine appears effective against mutation in new coronavirus variants"]]></title><description><![CDATA[
<p>That's what BioNTech has been researching for years. BNT162b2 is, slightly exaggerated, a by-product.<p>From <a href="https://en.wikipedia.org/wiki/BioNTech" rel="nofollow">https://en.wikipedia.org/wiki/BioNTech</a>:<p><i>It develops pharmaceutical candidates based on messenger ribonucleic acid (mRNA) for use as individualized cancer immunotherapies, as vaccines against infectious diseases and as protein replacement therapies for rare diseases, and also engineered cell therapy, novel antibodies and small molecule immunomodulators as treatment options for cancer.</i></p>
]]></description><pubDate>Sat, 09 Jan 2021 11:44:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=25699591</link><dc:creator>kdps</dc:creator><comments>https://news.ycombinator.com/item?id=25699591</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25699591</guid></item></channel></rss>