<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: jaen</title><link>https://news.ycombinator.com/user?id=jaen</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 25 Jul 2026 23:05:42 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jaen" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jaen in "GC and Exceptions in Wasmtime"]]></title><description><![CDATA[
<p>Links to discussions about why WASM GC in its current state is not suitable for .NET: <a href="https://github.com/WebAssembly/gc/issues/77" rel="nofollow">https://github.com/WebAssembly/gc/issues/77</a><p>What should be improved: <a href="https://github.com/dotnet/runtime/issues/94420" rel="nofollow">https://github.com/dotnet/runtime/issues/94420</a></p>
]]></description><pubDate>Sat, 25 Jul 2026 12:06:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=49046889</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=49046889</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49046889</guid></item><item><title><![CDATA[New comment by jaen in "JEP 540: Simple JSON API (Now in Incubator)"]]></title><description><![CDATA[
<p>The alternative has bad ergonomics, chained `.get`s which are <i>the</i> most common operation become:<p><pre><code>   json.asObject().get("prop1").asObject().get("prop2")...</code></pre></p>
]]></description><pubDate>Fri, 24 Jul 2026 12:54:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=49034882</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=49034882</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49034882</guid></item><item><title><![CDATA[New comment by jaen in "Why TypeScript 7.0 Was Rewritten in Go"]]></title><description><![CDATA[
<p>Misleading article. Probably partially AI written? Presents nonsense such as eg. the diamond inheritance example as valid-seeming argumentation.<p>Quite a few points are plain wrong and outdated and under-researched, eg. Python has uv, ruff and Pyrefly, and with that combination, has roughly the same agent ergonomics as Go and lower token count due to higher abstraction level.</p>
]]></description><pubDate>Wed, 08 Jul 2026 07:40:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48828804</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48828804</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48828804</guid></item><item><title><![CDATA[New comment by jaen in "Show HN: Frond – a frontend runtime for your app's dependency graph"]]></title><description><![CDATA[
<p>What's the advantage of this over Jotai / atomic state / computed signals, which seems to require 10× less code with mostly the same benefits?</p>
]]></description><pubDate>Wed, 01 Jul 2026 14:19:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=48747286</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48747286</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48747286</guid></item><item><title><![CDATA[New comment by jaen in "Anthropic says Alibaba illicitly extracted Claude AI model capabilities"]]></title><description><![CDATA[
<p>Ugh, please don't read strawmen into other's arguments and try to follow the HN guidelines.<p>Also, how about making proper arguments yourself? The vast majority of the training data isn't generated by company-paid AI experts <i>either</i>.<p>Notably, books, even though they don't form a large part of the training data, significantly improve performance on some tasks (same way as expert-generated data).<p>Why do you think the AI labs are so eager about scanning (and then destroying) every book on the planet?<p>If you removed <i>all</i> copyrighted works from the training corpus, the model would be notably weaker.</p>
]]></description><pubDate>Thu, 25 Jun 2026 16:25:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48675753</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48675753</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48675753</guid></item><item><title><![CDATA[New comment by jaen in "Anthropic says Alibaba illicitly extracted Claude AI model capabilities"]]></title><description><![CDATA[
<p>Indeed, that's exactly why I replied - you omitted one side from the discussion.</p>
]]></description><pubDate>Thu, 25 Jun 2026 14:42:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48674195</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48674195</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48674195</guid></item><item><title><![CDATA[New comment by jaen in "Anthropic says Alibaba illicitly extracted Claude AI model capabilities"]]></title><description><![CDATA[
<p>...and the rest of the training data (ie. the entire corpus of copyrighted works) was not written by experts expecting compensation? Double standards.</p>
]]></description><pubDate>Thu, 25 Jun 2026 14:38:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=48674123</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48674123</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48674123</guid></item><item><title><![CDATA[New comment by jaen in "The case against geometric algebra (2024)"]]></title><description><![CDATA[
<p>Ideally, yes. Depends on the context. Same way you don't use unit algebra when doing trivial everyday math. At <i>some</i> level of complexity, it becomes worthwhile.</p>
]]></description><pubDate>Mon, 22 Jun 2026 13:39:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=48629976</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48629976</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48629976</guid></item><item><title><![CDATA[New comment by jaen in "window.showDirectoryPicker opens up a whole new world"]]></title><description><![CDATA[
<p>Unfortunately currently only supported by Chrome/Chromium:<p><a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/showDirectoryPicker" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/API/Window/show...</a></p>
]]></description><pubDate>Mon, 22 Jun 2026 13:34:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=48629922</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48629922</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48629922</guid></item><item><title><![CDATA[New comment by jaen in "The case against geometric algebra (2024)"]]></title><description><![CDATA[
<p>This is like a type theory question - do you like it untyped or typed?<p>In physics, values have units too. Analogously, you could say - why incorporate units <i>into</i> the algebra in physics (as is often done)? Why not just add scalars etc. and not bother carrying around the units everywhere?<p>Well, because doing anything else is mostly nonsensical - it does not make sense to add meters and seconds together. Using unit algebra is the most basic sanity check as to whether your formula makes any sense.<p>Sometimes it makes sense to convert/cast between representations, but that should be explicit - distinguishing eg. objects and operations is more readable and more safe, and only comes with a bit of notational overhead. Nothing is free, but I think the benefits far outweigh the downsides.</p>
]]></description><pubDate>Sun, 21 Jun 2026 16:28:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48620245</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48620245</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48620245</guid></item><item><title><![CDATA[New comment by jaen in "Project Valhalla, Explained: How a Decade of Work Arrives in JDK 28"]]></title><description><![CDATA[
<p>Could you actually explain/exemplify any of the gotchas and what's been made better (or is this just handwaving)?</p>
]]></description><pubDate>Fri, 19 Jun 2026 13:25:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=48598300</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48598300</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48598300</guid></item><item><title><![CDATA[New comment by jaen in "Project Valhalla, Explained: How a Decade of Work Arrives in JDK 28"]]></title><description><![CDATA[
<p>> -Linq is nice but has a huge caveat: if a Linq provider does not implement it fully to falls back to the .NET collections. So trying to 'Skip' and 'Take' on a ActiveDirectory will fall back to collections in memory and cause a crash on a huge AD in production (Yes had the pleasure).<p>How do you expect this to work then? If the provider is bad, blaming LINQ for it makes no sense...<p>You either have a high level of abstraction and possible performance pitfalls - or a low level of abstraction, and <i>also</i> performance pitfalls since the code is less modular, more coupled and harder to read.<p>LINQ can in many cases improve performance significantly in large applications when used properly, since it avoids N+1 query problems due to implementation hiding/modularity, and allows composing parts of queries across different vertical subsystems of the application (vs. each subsystem doing its own query and then joining them with more boilerplate).<p>Nothing in Java compares to this. jOOQ and Hibernate (and the rest in the ORM ecosystem) are pale shadows, exactly due to lacking language features (such as reified expression trees), and even then, they only work with databases.</p>
]]></description><pubDate>Fri, 19 Jun 2026 13:17:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48598236</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48598236</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48598236</guid></item><item><title><![CDATA[New comment by jaen in "Unix GC Remastered"]]></title><description><![CDATA[
<p>I think this is a good example of complex lifetimes involving reference cycles that can <i>not</i> be safely modeled by eg. Rust.<p>Is the next step formal methods (theorem proving) or is there a less complex lifetime system still out there that could model this?</p>
]]></description><pubDate>Thu, 11 Jun 2026 19:51:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48495530</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48495530</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48495530</guid></item><item><title><![CDATA[New comment by jaen in "More Molly Guards"]]></title><description><![CDATA[
<p>You can generally configure the power button to require a 5s press or to suspend the computer in the motherboard's firmware UI (UEFI/BIOS).</p>
]]></description><pubDate>Wed, 10 Jun 2026 19:17:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=48481263</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48481263</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48481263</guid></item><item><title><![CDATA[New comment by jaen in "WebAssembly 3.0"]]></title><description><![CDATA[
<p>Changelog: <a href="https://webassembly.github.io/spec/core/appendix/changes.html#release-3-0" rel="nofollow">https://webassembly.github.io/spec/core/appendix/changes.htm...</a></p>
]]></description><pubDate>Wed, 10 Jun 2026 18:11:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48480361</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48480361</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48480361</guid></item><item><title><![CDATA[New comment by jaen in "Warm up your MacBook (2019)"]]></title><description><![CDATA[
<p>Changing orientation affects which parts of the display processor are used. In general, the low power states on GPUs are <i>very</i> capricious.<p>eg. from personal experience, on older Nvidia cards (1080 Ti), just adding +1Hz to the refresh rate (or using a slightly higher resolution, or 10-bit color, or no DSC etc. etc.) caused it to never enter low power mode, changing power consumption permanently from 10W -> 50W.<p>AMD GPUs on even the most modern Linux kernels don't enter low power states properly. If you do change the power profile to do it more often, browsers become a laggy mess.</p>
]]></description><pubDate>Mon, 01 Jun 2026 08:47:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=48354189</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48354189</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48354189</guid></item><item><title><![CDATA[New comment by jaen in "Voxel Space (2017)"]]></title><description><![CDATA[
<p>The game originally used a "voxel" engine [1], but the final release switched to affine texture mapping (with a heightmap-based terrain, still).<p>The voxel-style engines tend to feature a longer draw distance (due to it being cheaper to render, as you can easily use various hacks to eg. halve texture accesses far away).<p>For a detailed look into the rendering of Magic Carpet, start from Slide 8 of [2].<p>[1]: <a href="https://tcrf.net/Prerelease:Magic_Carpet_(DOS)#1993" rel="nofollow">https://tcrf.net/Prerelease:Magic_Carpet_(DOS)#1993</a>
[2]: <a href="https://web.archive.org/web/20180330004301/http://www.glenncorpes.com/procedural-landscapes-gdce-2001" rel="nofollow">https://web.archive.org/web/20180330004301/http://www.glennc...</a></p>
]]></description><pubDate>Sat, 30 May 2026 17:50:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48338900</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48338900</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48338900</guid></item><item><title><![CDATA[New comment by jaen in "Bijou64: A variable-length integer encoding"]]></title><description><![CDATA[
<p>There's still speculation though - if eg. most values are of 1 or 2-byte length, you can <i>speculate</i> that any control-valued byte <i>is actually</i> control. You can even do a compensation pass to try to fix some amount of mis-speculations, and then bomb out if that fails.<p>With that, it's <i>mostly</i> byte-parallel (though data-dependent as I mentioned).</p>
]]></description><pubDate>Fri, 29 May 2026 18:00:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48326885</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48326885</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48326885</guid></item><item><title><![CDATA[New comment by jaen in "Bijou64: A variable-length integer encoding"]]></title><description><![CDATA[
<p>Right, I think we have a slightly different definition of SIMD: You mean byte-parallel, I mean "doable with SIMD instructions". I also didn't imply the performance would be <i>better</i> than other methods...<p>Even though decoding the lengths must be serial (since's there's no unambiguous way to differentiate a tag and data byte), it's still doable within the <i>wider</i> SIMD registers, so there's some <i>theoretical</i> efficiency gain to be had (depending on the shape of the data).<p>On a general note, the continuation bit and prefix byte forms are <i>equivalent</i>, you just broadcast the prefix byte and compare against an increasing vector to convert it to a mask. Yeah, there's probably more fiddly SIMD if there are multiple prefixes in the register, but doable (it's just not <i>byte-parallel</i>, you eg. unroll the serial decode loop 8 times or whatever your maximum output byte width is, and mask out).<p>Simplified:<p><pre><code>  // Just maps a byte to its position in the register
  __m128i idx = _mm_setr_epi8(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
  // Broadcast the prefix
  __m128i nn = _mm_set1_epi8((char)prefix_byte);
  // Get applicable locations: prefix_byte contains the length, if byte_pos < len, the corresponding byte will be set
  __m128i m = _mm_cmpgt_epi8(nn, idx);
  // If you *really* want a high-bit mask:
  m = _mm_and_si128(m, _mm_set1_epi8((char)0x80));</code></pre></p>
]]></description><pubDate>Fri, 29 May 2026 17:33:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48326454</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48326454</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48326454</guid></item><item><title><![CDATA[New comment by jaen in "Bijou64: A variable-length integer encoding"]]></title><description><![CDATA[
<p>This doesn't seem particularly hard to SIMD, especially when the CPU architecture has "compress/expand" horizontal instructions. The first byte fully encodes the length, which is not harder than the continuation bits of (U)LEB128. It's a basically a common length-prefixed encoding with an extra subtract added in, so someone has probably figured out an efficient algorithm.<p>It might be <i>slightly</i> more <i>instructions</i> than some other serial VL (variable-length) integer codec choices, but overall I don't think it's more <i>difficult</i>.<p>The very efficient SIMD VL codecs tend to stripe (separate) the control and data bits, so they're in a different design space anyway.</p>
]]></description><pubDate>Fri, 29 May 2026 16:57:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48325932</link><dc:creator>jaen</dc:creator><comments>https://news.ycombinator.com/item?id=48325932</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48325932</guid></item></channel></rss>