<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: mtklein</title><link>https://news.ycombinator.com/user?id=mtklein</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 12 Oct 2026 18:27:57 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mtklein" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mtklein in "More floating point alternatives"]]></title><description><![CDATA[
<p>That's kind of exactly what floats are.  You store the log2 of the number, a bit for its sign, and in what remaining bits you have left some fixed-point scaling between adjacent powers.</p>
]]></description><pubDate>Tue, 22 Sep 2026 02:25:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=49796111</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=49796111</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49796111</guid></item><item><title><![CDATA[New comment by mtklein in "Compiler-style optimization for drawing via Skia"]]></title><description><![CDATA[
<p>That's how we felt answering performance questions of our own... we needed to know if our work was important, and the tools help keep that focus locked in.  I'm no longer on the Skia team, but like, welcome to the Skia team; if you use nanobench, you're legit.  :)<p>I'm the same user name @gmail.com if you ever have any questions.  It's been a while but I'd be happy to try to page things back in for a good cause.</p>
]]></description><pubDate>Sat, 19 Sep 2026 23:58:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=49771203</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=49771203</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49771203</guid></item><item><title><![CDATA[New comment by mtklein in "Compiler-style optimization for drawing via Skia"]]></title><description><![CDATA[
<p>As a former Skia contrib, this is cool as heck to read.  It's exactly the sort of optimization work we had in mind when we wrote that SkRecord system, and I'm pleased that you were able to make use of nanobench.  Back in those days we had just a few small optimizations that we could apply, mostly trying to eliminate unnecessary saveLayer() calls.  Very cool to see it done in a modern way with Lean.</p>
]]></description><pubDate>Sat, 19 Sep 2026 21:48:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=49770393</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=49770393</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49770393</guid></item><item><title><![CDATA[New comment by mtklein in "Just Bury Your Trash"]]></title><description><![CDATA[
<p>Decades ago they used to pull completely off the can (think Jimmy Buffet "stepped on a pop-top").</p>
]]></description><pubDate>Wed, 02 Sep 2026 14:43:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=49537071</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=49537071</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49537071</guid></item><item><title><![CDATA[New comment by mtklein in "I am no longer letting Claude Code add itself as Co-author in my commits"]]></title><description><![CDATA[
<p>I should barely be listed as a co-author on what Claude does for me.  Hiding Claude's contribution feels about as true as a combover to me.</p>
]]></description><pubDate>Sun, 30 Aug 2026 20:25:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=49502410</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=49502410</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49502410</guid></item><item><title><![CDATA[New comment by mtklein in "Does the Sumerian King List Align with Paleoclimate Events?"]]></title><description><![CDATA[
<p>That's kind of what reddit used to feel like when it was brand new.  Can you believe it?</p>
]]></description><pubDate>Sat, 29 Aug 2026 02:27:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=49486349</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=49486349</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49486349</guid></item><item><title><![CDATA[New comment by mtklein in "If this is true, the hyperscalers are toast"]]></title><description><![CDATA[
<p>I have found qwen 3.8's coding quality using opencode to be similar to claude or gpt from 6-9 months ago, except much slower.</p>
]]></description><pubDate>Thu, 20 Aug 2026 11:41:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=49373263</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=49373263</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49373263</guid></item><item><title><![CDATA[New comment by mtklein in "Moving integer division to floating-point is trivial"]]></title><description><![CDATA[
<p>My rule of thumb is that integer ops cost 1 cycle except divides, floats 3 but maybe divide is a bit more, then integer divides are like infinity at 20+ cycles that cannot be amortized by vectorization.<p>When you code simd it's best to assume the integer divide instruction does not exist.  Just an impossibility, if you need to divide ints, rethink your whole program.</p>
]]></description><pubDate>Fri, 14 Aug 2026 19:24:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=49303453</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=49303453</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49303453</guid></item><item><title><![CDATA[New comment by mtklein in "Moving integer division to floating-point is trivial"]]></title><description><![CDATA[
<p>They're typically like a 3-cycle op, right?  Obviously that's not zero, but as far as floating point ops get it's a cheap as it gets, like an add, mul, fma, that sorta thing.</p>
]]></description><pubDate>Fri, 14 Aug 2026 18:59:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=49303143</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=49303143</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49303143</guid></item><item><title><![CDATA[New comment by mtklein in "Delta"]]></title><description><![CDATA[
<p>Don't forget SubEthaEdit!  That was the first multiplayer editor I recall.<p>Never found a use for this sort of thing once novelty wore off.  :/</p>
]]></description><pubDate>Thu, 13 Aug 2026 02:10:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=49281058</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=49281058</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49281058</guid></item><item><title><![CDATA[New comment by mtklein in "The LLM Critics Are Right. I Use LLMs Anyway"]]></title><description><![CDATA[
<p>I don't think there is necessarily one ideal middle ground here.  It still feels to me like what's best is a function that depends on who and when.<p>I see it as something like a personal gradient descent.  You're working on a problem, there are solutions down there somewhere, and you can kind of feel the gradient of the tools-and-techniques ground around you.  Any way you walk means you're investing time improving some skill or another.  So you should go the way that personally feels to you will best get you moving in the direction that you want to go.<p>For some people it's obvious LLMs are competent coders, getting better, sticking around... and those people should lean into that gradient.  For some people what's obvious is nearly the exact opposites of all that, and I'd encourage those people to also follow their gradient/heart/nose down the path of sharpening their personal traditional coding skills.  Some people are in a relatively flat area where nothing is obvious, and need to explore and maybe just keep doing their best to hedge with a bit of both.</p>
]]></description><pubDate>Thu, 16 Jul 2026 12:52:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48933783</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=48933783</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48933783</guid></item><item><title><![CDATA[New comment by mtklein in "Ask HN: How do you use Vim in the era of AI?"]]></title><description><![CDATA[
<p>Yeah it makes me sad too.  It's a one-way veil, no going back once I experienced the new magic.<p>Sometimes I pop back into a terminal, mkdir, git init, crack my knuckles to do some all-natural hacking and the sadness sets in before the hour is up... "why am I insisting on doing this the long way?  I know this project would be better with me in a different role now."<p>Coding for me has always been a balance of process and ends. Getting done what I wanted done mattered most, but I can't pretend that I didn't also enjoy being the moving parts of that process.  And I am most grateful for what I learned by throwing myself over and over against problems I didn't quite know how to solve.  There's a satisfaction to doing a thing well that I always love being a part of, still do, anything, even doing the dishes or laundry.<p>And just recently with Opus I found myself having some really joyously manic days and weeks, making calls, picking tech, designing APIs, insisting on quality, keeping agents spinning.  But Fable just kind of came in with "oh, I can do that all for you too. You can relax," and that was both exactly what I wanted and what started making me realize this had all finally caught up to me.<p>I never wanted to be management, but I can't unsee that I am more effective now playing Fable's boss than I was the last few months as TLM of a squad of Opuses, and that was more effective than just coding myself the way I love.</p>
]]></description><pubDate>Fri, 10 Jul 2026 23:39:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48866771</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=48866771</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48866771</guid></item><item><title><![CDATA[New comment by mtklein in "How do you use Vim in the era of AI?"]]></title><description><![CDATA[
<p>On about day 2 of using Fable I realized that the .vimrc I'd been maintaining for 15-20 years would probably never change again.<p>With Opus I still feel like I'm pair coding and want to get in there and make some changes myself, but working with Fable (even Fable managing Opus agents) had me in a completely different mindset, one where I realized I would just be getting in the way.</p>
]]></description><pubDate>Fri, 10 Jul 2026 13:45:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48859845</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=48859845</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48859845</guid></item><item><title><![CDATA[New comment by mtklein in "The Garbage Collection Handbook: The Art of Automatic Memory Management (2nd Ed) (2023)"]]></title><description><![CDATA[
<p>I have never seen Codex or Claude get manual memory management wrong.  I used to be pretty fastidious about using leak sanitizer or other such tools to catch my own memory management issues, and while not quite useless, that sort of testing has dropped way down my list of worries the more I lean on LLMs.  I am constantly surprised by how many formerly tedious or error prone tasks stopped being either of those, and I expect to see practice shift away from middle-safe languages like C++ to not just much more safe languages like Rust but surprisingly also to much less safe ones like C and platform specific assembly.</p>
]]></description><pubDate>Fri, 26 Jun 2026 01:56:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48681494</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=48681494</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48681494</guid></item><item><title><![CDATA[New comment by mtklein in "C++26 Shipped a SIMD Library Nobody Asked For"]]></title><description><![CDATA[
<p>Part of that could be ABI constraints.  There are some surprising calling convention differences between a vector and a struct or union with vectors in it, and they vary platform to platform.  E.g. on ARM a struct with two 128-bit vectors will pass in two registers where on x86 it must pass via the stack.<p>Using __attribute__ to tweak calling conventions can often really clean this up, but that's just as obscure and non-portable as the problem it fixes.  So you either end up writing weird non-portable code one way or weird non-portable code another... Code working with these types doesn't get to benefit from zero-cost abstraction to the degree we're used to with normal scalar code.</p>
]]></description><pubDate>Sun, 17 May 2026 10:38:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48167701</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=48167701</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48167701</guid></item><item><title><![CDATA[New comment by mtklein in "Tesla is recalling its cheaper Cybertruck because the wheels might fall off"]]></title><description><![CDATA[
<p>I hate to admit it, but the Corona "Change your Latitude" ads are what locked it in for me.</p>
]]></description><pubDate>Fri, 08 May 2026 15:08:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=48064291</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=48064291</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48064291</guid></item><item><title><![CDATA[New comment by mtklein in "It's OK to compare floating-points for equality"]]></title><description><![CDATA[
<p>what I mean here about NaNs is that from a testing perspective, I want to be able to write a test that expects NaN in the same way that I write other expectations, and you can't do that with ==.<p><pre><code>    assert(x == 7);    // fine
    assert(y == NaN);  // never true
    assert(y != y);    // this is what you meant
</code></pre>
so this equiv() helper fixes that,<p><pre><code>    assert(equiv(x, 7));    // fine
    assert(equiv(y, NaN));  // also fine
</code></pre>
now, as far as treating NaNs equivalently, the IEEE 754 float format has a huge number of possible representations of NaN, and if you did something like a bitwise comparison, you might think that 0x7fc00000, 0x7f800001, 0xffc00000, 0x7fc0f00d were all different and not equivalent, but they're all NaNs, and I find that when I'm looking for a NaN, I very rarely care about exactly which one I'm looking at.  So checking (x!=x && y!=y) admits any two NaNs as equivalent.</p>
]]></description><pubDate>Sun, 19 Apr 2026 15:02:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=47824816</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=47824816</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47824816</guid></item><item><title><![CDATA[New comment by mtklein in "It's OK to compare floating-points for equality"]]></title><description><![CDATA[
<p>My preference in tests is a little different than just using IEEE 754 ==,<p><pre><code>    _Bool equiv(float x, float y) {
        return (x <= y && y <= x)
            || (x != x && y != y);
    }
</code></pre>
which both handles NaNs sensibly (all NaNs are equivalent) and won't warn about using == on floats.  I find it also easy to remember how to write when starting a new project.</p>
]]></description><pubDate>Sat, 18 Apr 2026 18:46:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=47818386</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=47818386</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47818386</guid></item><item><title><![CDATA[New comment by mtklein in "Qwen3.6-35B-A3B: Agentic coding power, now open to all"]]></title><description><![CDATA[
<p>Yes, it's a "Brain float", basically an ordinary 32-bit float with the low 16 mantissa bits cut off.  Exact same range as fp32, lower precision, and not the same as the other fp16, which has less exponent and more mantissa.</p>
]]></description><pubDate>Thu, 16 Apr 2026 16:37:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47795959</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=47795959</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47795959</guid></item><item><title><![CDATA[New comment by mtklein in "Google has the same AI adoption curve as John Deere"]]></title><description><![CDATA[
<p>The closest term I know is "just-so story".</p>
]]></description><pubDate>Mon, 13 Apr 2026 21:00:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47757754</link><dc:creator>mtklein</dc:creator><comments>https://news.ycombinator.com/item?id=47757754</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47757754</guid></item></channel></rss>