<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: EdSchouten</title><link>https://news.ycombinator.com/user?id=EdSchouten</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 07 Sep 2026 12:27:44 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=EdSchouten" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by EdSchouten in "How Swiss tables work in Go built-in map"]]></title><description><![CDATA[
<p>I guess it took a bit longer to get it adopted within Go because of some additional challenges:<p><a href="https://go.dev/blog/swisstable#go-challenges" rel="nofollow">https://go.dev/blog/swisstable#go-challenges</a></p>
]]></description><pubDate>Sun, 06 Sep 2026 03:49:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=49583155</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=49583155</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49583155</guid></item><item><title><![CDATA[New comment by EdSchouten in "Balrogg: Demonically compacting (up to 15%) lossless Vorbis/Opus recompressor"]]></title><description><![CDATA[
<p>Interesting that it doesn’t use the same open source license as Vorbis/Opus itself. Otherwise improvements like these could be upstreamed?</p>
]]></description><pubDate>Sat, 05 Sep 2026 20:53:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=49580546</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=49580546</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49580546</guid></item><item><title><![CDATA[New comment by EdSchouten in "OTel isn’t going well"]]></title><description><![CDATA[
<p>> How does the monitoring system have any of the context to add labels? That would only exist in application memory.<p>Indeed. If you have a protocol that doesn’t allow exposing that kind of information, then that only lives in application memory. But my suggestion is that it’s exposed.</p>
]]></description><pubDate>Sat, 22 Aug 2026 03:14:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=49396265</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=49396265</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49396265</guid></item><item><title><![CDATA[New comment by EdSchouten in "OTel isn’t going well"]]></title><description><![CDATA[
<p>If I understand that correctly, it means your app always creates traces, and Grafana Cloud is responsible for sampling/aggregating. That may be prohibitively expensive in terms of CPU/network load.<p>What I’m suggesting is that your apps by default only send metrics to your monitoring system, but that the monitoring system can specifically ask to “upgrade” metrics to traces. Or to log entries.<p>The same thing with metric cardinality: by default, only report metrics in a fully aggregated manner. But do tell the monitoring system how they can potentially be broken up if needed (i.e., which labels to add).</p>
]]></description><pubDate>Sat, 22 Aug 2026 02:54:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=49396174</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=49396174</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49396174</guid></item><item><title><![CDATA[New comment by EdSchouten in "OTel isn’t going well"]]></title><description><![CDATA[
<p>What always puzzles me about OpenTelemetry is that tracing, metrics and logs are all designed independently. I wish there was a way I could just annotate my code base once, and let the ultimate decision to expose something as a metric/log/trace be dynamic at runtime.<p>For example, if I look at a graph in monitoring dashboard and see something suspicious, I’d like to say: “The next time something like this occurs again, please save me a trace.” I should be able to just do that with a single mouse click.<p>I remember them releasing the tracing spec/SDKs and saying “now let’s move on to metrics/logs.” That never sat right with me.</p>
]]></description><pubDate>Sat, 22 Aug 2026 02:46:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=49396130</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=49396130</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49396130</guid></item><item><title><![CDATA[New comment by EdSchouten in "Generic Methods in Go 1.27"]]></title><description><![CDATA[
<p>Go is often thought of as a successor of C. C doesn't have methods, only global functions. From my perspective, Go added methods primarily so that you can use them in combination with interfaces. Given that interfaces don't support generic methods, I'm personally not convinced that this feature was worth adding.</p>
]]></description><pubDate>Thu, 20 Aug 2026 17:02:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=49377267</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=49377267</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49377267</guid></item><item><title><![CDATA[New comment by EdSchouten in "NP-overrated"]]></title><description><![CDATA[
<p>> For the mathematicians that created Computation Science, the only interesting solutions are complete solutions to general questions<p>There is a bunch of research devoted to Polynomial Time Approximation Schemes (PTAS). Mathematicians also take part in it.</p>
]]></description><pubDate>Fri, 14 Aug 2026 05:28:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=49295025</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=49295025</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49295025</guid></item><item><title><![CDATA[New comment by EdSchouten in "Half of Europe's towns and villages have fewer residents than 60 years ago"]]></title><description><![CDATA[
<p>The area on the map that is green corresponds to the blue banana: <a href="https://en.wikipedia.org/wiki/Blue_Banana" rel="nofollow">https://en.wikipedia.org/wiki/Blue_Banana</a></p>
]]></description><pubDate>Tue, 11 Aug 2026 06:38:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=49254181</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=49254181</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49254181</guid></item><item><title><![CDATA[New comment by EdSchouten in "Show HN: Got sick of ads, so I made my own logic puzzle site"]]></title><description><![CDATA[
<p>Yeah, that Sudoku puzzle has multiple valid solutions, whereas the page only seems to accept a single one.</p>
]]></description><pubDate>Mon, 22 Jun 2026 14:58:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48631094</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=48631094</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48631094</guid></item><item><title><![CDATA[New comment by EdSchouten in "Re: [PATCH] OOM_pardon, a.k.a. don't kill my xlock (2004)"]]></title><description><![CDATA[
<p>It looks like the code of the course was 2WC16. Unfortunately the course material no longer seems to be available online.</p>
]]></description><pubDate>Mon, 01 Jun 2026 21:11:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48362699</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=48362699</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48362699</guid></item><item><title><![CDATA[New comment by EdSchouten in "Re: [PATCH] OOM_pardon, a.k.a. don't kill my xlock (2004)"]]></title><description><![CDATA[
<p>I still remember following Andries’s “Linux kernel hacker’s hut” course he taught at the Eindhoven University of Technology (TU/e) back in 2010. Every week we’d get an assignment where we had to write exploits for commonly occurring security vulnerabilities (e.g., buffer overflows, bad printf format). It was one of the most enjoyable courses I ever followed. Thanks for that, Andries!</p>
]]></description><pubDate>Sun, 31 May 2026 19:50:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48349108</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=48349108</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48349108</guid></item><item><title><![CDATA[New comment by EdSchouten in "Unsigned sizes: A five year mistake"]]></title><description><![CDATA[
<p>> If sizes are unsigned, like in C, C++, Rust and Zig – then it follows that anything involving indexing into data will need to either be all unsigned or require casts.<p>I don’t really get this claim. Indexing should just look up the element corresponding to the value provided. It’s easy to come up with semantics that are intuitive and sound, even if signed integers or ones smaller than size_t are used.</p>
]]></description><pubDate>Sat, 02 May 2026 19:32:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=47989642</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=47989642</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47989642</guid></item><item><title><![CDATA[New comment by EdSchouten in "I made my own Git"]]></title><description><![CDATA[
<p>You can always use a divide and conquer strategy to compute the chunks. Chunk both halves of the file independently. Once that’s done, you redo the chunking around the midpoint of the file forward, until it starts to match the chunks obtained previously.</p>
]]></description><pubDate>Wed, 28 Jan 2026 05:24:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46791405</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=46791405</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46791405</guid></item><item><title><![CDATA[New comment by EdSchouten in "I made my own Git"]]></title><description><![CDATA[
<p>It depends on the architecture. On ARM64, SHA-256 tends to be faster than BLAKE3. The reasons being that most modern ARM64 CPUs have native SHA-256 instructions, and lack an equivalent of AVX-512.<p>Furthermore, if your input files are large enough that parallelizing across multiple cores makes sense, then it's generally better to change your data model to eliminate the existence of the large inputs altogether.<p>For example, Git is somewhat primitive in that every file is a single object. In retrospect it would have been smarter to decompose large files into chunks using a Content Defined Chunking (CDC) algorithm, and model large files as a manifest of chunks. That way you get better deduplication. The resulting chunks can then be hashed in parallel, using a single-threaded algorithm.</p>
]]></description><pubDate>Tue, 27 Jan 2026 14:09:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46780099</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=46780099</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46780099</guid></item><item><title><![CDATA[New comment by EdSchouten in "Germany Forces Lexus to Remotely Kill Car Heating in Dead of Winter"]]></title><description><![CDATA[
<p>That’s great! People who do that are often inconsiderate of how it affect others. First of all, it generates unnecessary noise, which is annoying for neighbors who are still trying to sleep. Pedestrians/cyclists also need to breathe those exhaust gases.</p>
]]></description><pubDate>Wed, 21 Jan 2026 05:52:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=46701633</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=46701633</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46701633</guid></item><item><title><![CDATA[New comment by EdSchouten in "Spinlocks vs. Mutexes: When to Spin and When to Sleep"]]></title><description><![CDATA[
<p>I don’t understand why I would need to care about this. Can’t my operating system and/or pthread library sort this out by itself?</p>
]]></description><pubDate>Mon, 08 Dec 2025 06:24:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=46189037</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=46189037</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46189037</guid></item><item><title><![CDATA[New comment by EdSchouten in "CDC File Transfer"]]></title><description><![CDATA[
<p>Yeah, that's true. Having some kind of chunking algorithm that's content/file format aware could make it work even better. For example, it makes a lot of sense to chunk source files at function/scope boundaries.<p>In my case I need to ensure that all producers of data use exactly the same algorithm, as I need to look up build cache results based on Merkle tree hashes. That's why I'm intentionally focusing on having algorithms that are not only easy to implement, but also easy to implement <i>consistently</i>. I think that MaxCDC implementation that I shared strikes a good balance in that regard.</p>
]]></description><pubDate>Wed, 01 Oct 2025 17:48:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=45440750</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=45440750</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45440750</guid></item><item><title><![CDATA[New comment by EdSchouten in "CDC File Transfer"]]></title><description><![CDATA[
<p>In my case I observed a ~2% reduction in data storage when attempting to store and deduplicate various versions of the Linux kernel source tree (see link above). But that also includes the space needed to store the original version.<p>If we take that out of the equation and only measure the size of the additional chunks being transferred, it's a reduction of about 3.4%. So it's not an order of magnitude difference, but not bad for a relatively small change.</p>
]]></description><pubDate>Wed, 01 Oct 2025 10:03:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=45436048</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=45436048</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45436048</guid></item><item><title><![CDATA[New comment by EdSchouten in "CDC File Transfer"]]></title><description><![CDATA[
<p>Yeah, GEAR hashing is simple enough that I haven't considered using anything else.<p>Regarding the RNG used to seed the GEAR table: I don't think it actually makes that much of a difference. You only use it once to generate 2 KB of data (256 64-bit constants). My suspicion is that using some nothing-up-my-sleeve numbers (e.g., the first 2048 binary digits of π) would work as well.</p>
]]></description><pubDate>Wed, 01 Oct 2025 07:06:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=45435130</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=45435130</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45435130</guid></item><item><title><![CDATA[New comment by EdSchouten in "CDC File Transfer"]]></title><description><![CDATA[
<p>I’ve also been doing lots of experimenting with Content Defined Chunking since last year (for <a href="https://bonanza.build/" rel="nofollow">https://bonanza.build/</a>). One of the things I discovered is that the most commonly used algorithm FastCDC (also used by this project) can be improved significantly by looking ahead. An implementation of that can be found here:<p><a href="https://github.com/buildbarn/go-cdc" rel="nofollow">https://github.com/buildbarn/go-cdc</a></p>
]]></description><pubDate>Wed, 01 Oct 2025 05:35:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=45434599</link><dc:creator>EdSchouten</dc:creator><comments>https://news.ycombinator.com/item?id=45434599</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45434599</guid></item></channel></rss>