<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: rspeele</title><link>https://news.ycombinator.com/user?id=rspeele</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 10 Oct 2026 03:00:38 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=rspeele" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by rspeele in "Programming Isn't Special"]]></title><description><![CDATA[
<p>I'd love to take a principled stance on this because I <i>do</i> consider code an art or at least a craft and I appreciate a program written in a unique and clever way. In retrospect, SO MANY of my personal projects[0][1][2][3] over the years were DSLs that affected <i>how</i> you write something and how pretty or type-safe the code ends up being. They are libraries that can only be appreciated by another programmer, they mean nothing to an end user. It appears that whole genre of library will mean nothing to anybody in a few years. Shoulder of Orion, Tannhauser Gate, etc. etc.<p>[0] <a href="https://github.com/rspeele/infix.el" rel="nofollow">https://github.com/rspeele/infix.el</a><p>[1] <a href="https://github.com/rspeele/LicenseToCIL" rel="nofollow">https://github.com/rspeele/LicenseToCIL</a><p>[2] <a href="https://github.com/fsprojects/Rezoom.SQL" rel="nofollow">https://github.com/fsprojects/Rezoom.SQL</a><p>[3] <a href="https://rspeele.github.io/FParsec-Pipes/Intro.html" rel="nofollow">https://rspeele.github.io/FParsec-Pipes/Intro.html</a><p>Yet, it's utterly hopeless to try to take the same stance visual artists are nobly holding. Of the programs <i>I use</i> daily, how many have I ever even glanced at the source code? I could count them on my fingers. And I'm in the target audience: a programmer, enthusiastic about the trade, one who has contributed to open source...<p>Conclusion: within a rounding error of NOBODY cares about the code. Of the weavers who were displaced by the automated looms, or the furniture-makers displaced by mass produced pressboard, some of the most skilled could still ply their trade for the rich who wanted to flex their bespoke handmade goods. Programmers writing code by hand will not even have that luxury market. It makes me depressed but I don't see any way around it.<p>My hope is that I can use my knowledge, willingness to spend long hours fighting with a computer, and industry experience to at least make better software with agents than the average vibecoder. I sadly don't think I'll get anywhere trying to play John Henry  vs. the Steam Drill, trying to beat it with my hand-typed code. Maybe somebody who's 10x the dev I am can do that, and Godspeed to them, but I thought I was pretty decent and I don't have a chance.<p>Hell, it's not even possible to prove any code was written by hand, other than by having uploaded it pre-2024ish. For this reason I really feel bad for those coming up right now, who have the same enthusiasm and fascination for Real Programming that I did, but no way to prove themselves and no motivation to in a world that values that skill less all the time.</p>
]]></description><pubDate>Fri, 09 Oct 2026 18:40:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=50024943</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=50024943</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50024943</guid></item><item><title><![CDATA[New comment by rspeele in "Theranos.world"]]></title><description><![CDATA[
<p>Keep clicking the menus on the screen rather than clicking on the tray itself. When you click “load cartridge” on screen it materializes and closes.<p>I also initially looked around the desk for a physical cartridge, such was the effectiveness of the rest of the “game”.</p>
]]></description><pubDate>Fri, 09 Oct 2026 12:49:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=50019743</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=50019743</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50019743</guid></item><item><title><![CDATA[New comment by rspeele in "Yes, and"]]></title><description><![CDATA[
<p>Strong agree. School had me writing stuff myself on the order of a few KLOC at most, and maybe collaborating with a "group" in which at most 2 people actually did anything. What little exposure I got to reading a large codebase I didn't write, was all in personal projects trying to mod open source video games. I'm sure some people had more extensive experiences but that was my bachelor's.<p>First job had me using a programming language I wasn't super familiar with and trying to add a feature to a codebase 100s of KLOC, all written by other people. Definitely a sink-or-swim moment. My skills of reading and navigating the dreaded Other People's Code were all honed over the next dozen years.<p>That being said AI is a lot better at reading code than I am, as demonstrated by its ability to find incredibly subtle bugs in huge codebases. So I'm not even sure those code reading skills are all that useful now. When I have to review somebody else's code I get more mileage from pointing an AI at it and asking targeted questions like "how does this handle when a Foo's approval is revoked" than reading it myself line-by-line. I'm not saying I <i>never</i> use those reading skills but the ability to get the big picture, chase down deep callback chains, know where to look... those skills are likely to atrophy.<p>It's like using GPS vs. knowing the roads as well as a cabbie. GPS gets you pretty damn far for zero effort.</p>
]]></description><pubDate>Fri, 09 Oct 2026 00:13:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=50014254</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=50014254</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50014254</guid></item><item><title><![CDATA[New comment by rspeele in "Why isn't the industry freaking out about DeepSeek 4.1 Flash?"]]></title><description><![CDATA[
<p>On the Claude side of things I was previously following "strong model directs weak" with Fable directing Opus/Sonnet (its choice per-task). Since Opus 5.5 came out I've just been having Opus direct Opus.<p>The sub-agent separation is still valuable to keep context clean for the orchestrator, but I just have no reason to use Sonnet as the grunt-work implementer because I'm finding it hard to run out of tokens with Opus 5.5 on a $200 subscription plan. It's <i>really really</i> good at subjective quality of work per token used.</p>
]]></description><pubDate>Thu, 08 Oct 2026 20:48:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=50012037</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=50012037</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50012037</guid></item><item><title><![CDATA[New comment by rspeele in "Claude Code’s suggested message feature: I think the real customer is the model"]]></title><description><![CDATA[
<p>Sadly, I believe there are some geniuses being paid a half mil a year who are so misguided, they think the only <i>problem</i> is the skinwalker doesn't sound enough like me.<p>If they can just keep working on it and make sure to train it on all my past emails, it'll be a perfect simulacrum, and its oily token secretions will be impossible for my friends and colleagues to distinguish from my own writing. I'll have one that's just like me and you'll have one that's just like you. And then we can automate away those pesky distractions that occasionally delay us from consuming content perfectly matched to our interests. Won't that be grand?</p>
]]></description><pubDate>Wed, 07 Oct 2026 04:24:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=49988162</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49988162</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49988162</guid></item><item><title><![CDATA[New comment by rspeele in "Claude Code’s suggested message feature: I think the real customer is the model"]]></title><description><![CDATA[
<p>The worst is Gmail's recent feature to suggest an <i>entire goddamn email</i> that includes cheery little details, doing its best to mimic human pleasantries and small talk. Rather than simply offering "yep/nope" type short replies like it once did, it'll now auto-compose and suggest a multi-paragraph email responding to questions like "How's the family doing?" or "Is your older cat tolerating the new kitten yet?" with completely fabricated saccharine slop.<p>It's like Clippy pops up and goes "It looks like you're trying to maintain a shred of human connection in an online interaction. Would you like a smiling skinwalker to do that for you instead?"</p>
]]></description><pubDate>Tue, 06 Oct 2026 22:41:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=49985177</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49985177</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49985177</guid></item><item><title><![CDATA[New comment by rspeele in "Why Common Lisp is now the best programming language"]]></title><description><![CDATA[
<p>I recently wrote a comment on another thread that I think fits even better here:<p>In my circles I've noticed it's very easy for us to rationalize why our previous favorite language is also the perfect language for the agent era.<p>If your favorite language before was Python, why, LLMs are fluent in it! So much training data! So many libraries! Home of machine learning! None of that pesky compile time, agents don't need compile time safety anyway, they write such good test coverage! It's The Perfect Agentic Coding Language.<p>If it was Rust, by jove, an agent can easily handle the headache of satisfying the borrow checker, and now you get the best of all worlds! Safety! Near-C runtime performance! Abstractions! The only reason people didn't use Rust before was it was Too Hard and there were Too Many Furries and now it's not hard and you don't have to interact with them, so get on board. It's The Perfect Agentic Coding Language.<p>If it was Golang, oh my goodness, what a choice. Pretty fast compile time and pretty fast runtime. Agents get a tight feedback loop with build->run->test->edit. Not very complicated, code has to be written in a straightforward banging-rocks-together way. Good stable ecosystem! Rob Pike designed the language for people he said were "not capable of understanding a brilliant language but we want to use them to build good software." That's an arrogant, demeaning way to describe your colleagues but if they're LLM agents it's dead on! It's The Perfect Agentic Coding Language.<p>I could go on and on. I'm not immune either! My own favorite language is F# and when I feel like self-justifying, I play the same game:<p>It has access to the .NET ecosystem like C#, but I don't have to constantly remind the agents to prefer a style with immutable data and pure functions, they idiomatically do that in F#. Files have to be in order and can only refer to symbols defined "earlier" in order, if you want mutually-referential types or functions they have to be declared as such in a joint statement, so spaghetti is hard to create: each project's codebase naturally ends up in a layered bottom-to-top architecture. The language is terse enough to be token efficient, without being symbol soup. FSX scripts can be generated during agentic code reviews to demonstrate repros for discovered issues. If there's any type of code that still warrants me jumping in and writing some myself, that code would be data type definitions/domain modelling, and F# is a joy to write those in. It's The Perfect Agentic Coding Language.</p>
]]></description><pubDate>Tue, 06 Oct 2026 05:04:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=49974402</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49974402</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49974402</guid></item><item><title><![CDATA[New comment by rspeele in "Turbo Haskell"]]></title><description><![CDATA[
<p>The pre-LLM popularity of languages remains sticky because it influences what libraries are available, the sophistication of the tooling, and of course, sticky developer preferences. So while the playing fields may shift a little, it resembles what came before. Also, in my circles I've noticed it's very easy for us to rationalize why our previous favorite language is <i>also</i> the perfect language for the agent era.<p>If your favorite language before was Python, why, LLMs are fluent in it! So much training data! So many libraries! Home of machine learning! None of that pesky compile time, agents don't need compile time safety anyway, they write such good test coverage! It's The Perfect Agentic Coding Language.<p>If it was Rust, by jove, an agent can easily handle the headache of satisfying the borrow checker, and now you get the best of all worlds! Safety! Near-C runtime performance! Abstractions! The only reason people didn't use Rust before was it was Too Hard and there were Too Many Furries and now it's not hard and you don't have to interact with them, so get on board. It's The Perfect Agentic Coding Language.<p>If it was Golang, oh my goodness, what a choice. Pretty fast compile time <i>and</i> pretty fast runtime. Agents get a tight feedback loop with build->run->test->edit. Not very complicated, code has to be written in a straightforward banging-rocks-together way. Good stable ecosystem! Rob Pike designed the language for people he said were "not capable of understanding a brilliant language but we want to use them to build good software." That's an arrogant, demeaning way to describe your colleagues but if they're LLM agents it's dead on! It's The Perfect Agentic Coding Language.<p>I could go on and on. I'm not immune either! My own favorite language is F# and I play the same game:<p>It has access to the .NET ecosystem like C#, but I don't have to constantly remind the agents to prefer a style with immutable data and pure functions, they idiomatically do that in F#. Files have to be in order and can only refer to symbols defined "earlier" in order, if you want mutually-referential types or functions they <i>have</i> to be declared as such in a joint statement, so spaghetti is hard to create: each project's codebase naturally ends up in a layered bottom-to-top architecture. The language is terse enough to be token efficient, without being symbol soup. FSX scripts can be generated during agentic code reviews to demonstrate repros for discovered issues. If there's any type of code that still warrants me jumping in and writing some myself, that code would be data type definitions/domain modelling, and F# is a joy to write those in. It's The Perfect Agentic Coding Language.</p>
]]></description><pubDate>Fri, 02 Oct 2026 17:47:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=49936381</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49936381</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49936381</guid></item><item><title><![CDATA[New comment by rspeele in "Pi 1.0"]]></title><description><![CDATA[
<p>All the agentic coding models are multimodal and can understand pictures quite well. I routinely paste in primitive paint drawings to augment my textual descriptions and show an agent what I mean, and it seems pretty effective. This can be to rough out a UI layout but it can also be useful in pure backend work drawing diagrams, or in any domain where code manipulates geometric data.<p>For an example, see my MSPaint drawings in the README (scroll near the bottom) for this tiny little project: <a href="https://github.com/rspeele/meshorient" rel="nofollow">https://github.com/rspeele/meshorient</a><p>I redrew those for the README but IIRC, I drew something similar when explaining how the feature would work to the agent.<p>And in reverse, after describing an architecture or an algorithm to it, I'll sometimes ask it to draw a diagram for me to demonstrate its understanding. If it draws the picture in line with what I intended, I conclude that it has gained the necessary context to proceed. If not, I know I explained something wrong or at least insufficiently and need to provide clarification. There are some domains where a picture is worth a thousand words.<p>It also helps cut through the Claudese. "Your decision is needed for one edge case, found by the gate. When a T-joint meets an endcap that the mesher solves by a fan, should this bisect a fan slice or raise a warning?" I'm sorry Claude, I am not from Missouri but you <i>are</i> going to have to Show Me this one with a picture.<p>Of course you can save pictures to files and open them with external tools, but it's nicer to have them inlined into the chat history when that's exactly what they are: part of the conversation.</p>
]]></description><pubDate>Fri, 02 Oct 2026 14:52:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=49934179</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49934179</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49934179</guid></item><item><title><![CDATA[New comment by rspeele in "McDonald's push to have AI price your Big Mac"]]></title><description><![CDATA[
<p>Delightfully devilish, Seymour.</p>
]]></description><pubDate>Wed, 30 Sep 2026 03:41:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=49904120</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49904120</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49904120</guid></item><item><title><![CDATA[New comment by rspeele in "GPT 6.1 Sol: Near-Astra intelligence for a fifth of the price"]]></title><description><![CDATA[
<p>I strongly agree!<p>My biggest conclusion from this test was: the most efficient use of my weekly Astra budget is as a reviewer/consultant for work done by Opus. I don't have Astra write much code right now, but I do have it reading a lot of what Opus writes. Of course with the way the AI landscape shifts the balance could be the exact opposite 2 weeks from now, but either way having 2 "smart" models available from 2 different companies is a boon.<p>Seeing how each model preferred its own flavor of code shows that, even from a "blind" fresh context, a same-model reviewer will still often look at the work of another incarnation of itself and go "yep that's how I woulda done it" and not be as likely to realize that there was an alternative path or implicit assumption/mistake in the work.</p>
]]></description><pubDate>Tue, 29 Sep 2026 22:47:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=49901872</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49901872</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49901872</guid></item><item><title><![CDATA[New comment by rspeele in "GPT 6.1 Sol: Near-Astra intelligence for a fifth of the price"]]></title><description><![CDATA[
<p>While I have no experience comparing this brand-new model, OpenAI themselves call it "near-Astra" intelligence. I set Astra and Opus 5.5 independently working on the same large research/coding task in an experimental project (doing NURBS surface modeling stuff). They had the same starting repo state, same task packet, same test suite to try to meet. I have the $100 plan in both.<p>Astra used 215% of a week's budget (I burned 2 free resets) and took 13 hours. Opus used 20% of a week's budget and took 20 hours. Both were asked to use lesser sub-agents for implementation grunt work at their discretion (Luna, Sonnet) as long as they manage and review the output.<p>The timing comparison is not that interesting because the wall-clock speed <i>mostly</i> reflects how often they ran the (large, slow) test suite, not their coding speed. Although in the past my gut feeling is that OpenAI models do generally respond faster.<p>The quality of their implementation was more interesting. There turned out to be a bug in one of the unit tests the agents were trying to pass. Opus interpreted the natural-language requirements from the task packet, found the test bug, and fixed it. Astra tried hard to solve the problem without altering the test suite. In practical terms Opus got much, much farther into a useful implementation. Astra was still stubbing out and faking critical parts of the implementation (B-splines) and since it ultimately couldn't pass the full test suite, finally gave up on its implementation. Astra wrote some useful tooling in the process of its efforts which I ended up integrating into Opus's version of the code, but otherwise its approach was behind.<p>Now, this is just one comparison in one domain, and arguably Astra's strict adherence to the tests as-given is a good thing. But Opus wasn't merely loosening the rules / moving the goalposts to pass, it spotted an actual bug, and was more successful at doing what I actually wanted. And the cost difference was Astra-nomical.<p>Out of curiosity for an interpretation free from my personal bias, I gave Astra a hint from Opus and permission to change the test in question, which it did, and got a bit farther, but still ultimately didn't produce a working implementation (to be fair, Opus's was not completely working either, but was closer). I then fired up fresh agents to review the two repos. Predictably, an Opus agent thought the Opus-written repo was the better basis to build on, and an Astra agent thought the Astra-written repo was the one to keep. They were not explicitly told which was which nor did the commit trailers say, but I assume they can tell. However, after doing this twice each, I saved the 4 review reports into another folder and did yet another <i>meta-review</i> of the 4 reports, so each would see the arguments and critiques both directions. In this meta-review both Astra and Opus converged on preferring the Opus implementation.</p>
]]></description><pubDate>Tue, 29 Sep 2026 17:56:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=49897552</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49897552</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49897552</guid></item><item><title><![CDATA[New comment by rspeele in "Evolving programming languages in the AI era"]]></title><description><![CDATA[
<p>Even when no(human)body is reading the code, AI is still reading the code in order to "understand" it. Languages that can express high level concepts, use structured programming for recognizable control flow patterns instead of inscrutable jumps, and assign names to things have the same benefits for the AI-coders and AI-reviewers that they always have for humans.</p>
]]></description><pubDate>Sun, 27 Sep 2026 02:53:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=49862903</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49862903</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49862903</guid></item><item><title><![CDATA[New comment by rspeele in "Why building a Rust LSP is hard"]]></title><description><![CDATA[
<p>I feel like MS actually learned their lesson with synchronously integrating the language intelligence into the IDE. Old versions of VS would hang or crash based on bugs in the language tooling trying to provide intellisense. You'd restart and it'd work fine till you hit some other weird edge case. Generally this settled to a level of rare-bugginess where you were happy enough with the advantages not to go back to Emacs/VIM, but still annoyed at the occasional restart needed.<p>In no way does this mean LSP is a perfect solution, but anything synchronous would be a step backwards.</p>
]]></description><pubDate>Sat, 19 Sep 2026 04:31:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=49763319</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49763319</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49763319</guid></item><item><title><![CDATA[New comment by rspeele in "Everybody's Lost Their Minds"]]></title><description><![CDATA[
<p>I'm very happy with the performance and ability of AI. I think the best software ever will come out of this. It's very clear to me that AI empowers one to make "just ok" software effortlessly, and "incredibly excellent" software with the same level of effort we previously used to make "just ok" software. So there will be a lot of slop, but there will also be some real diamonds created by those who put the extra work in. The extra work might not involve manually writing or even reading much code, but it is work nonetheless.<p>I still count myself as "dejected" overall. I'm dejected by the economic shape of AI which seems destined to keep concentrating outsized rewards to the top few who own it or have enough capital to shackle it to their will. I'm fearful that intelligence, once it becomes a commodity you can rent any time you may need it, will be socially devalued in our already anti-intellectual society. I worry that in a couple decades we may resemble the world of "The Machine Stops" (1909), where nobody really knows how things work.<p>Of course we already live in such a complex world, no one person has complete knowledge of the "stack" they rely on. I can write software in C or assembler but I can't design a CPU and don't really understand how one is manufactured. (I may someday study that field, but I haven't yet!) But I take solace in the fact that <i>somebody</i> out there, has put the time in to study each of those things and is an expert in them. At every layer and in every niche of our engineering world there are masters of their craft, and there are students learning the fundamentals to keep that knowledge alive and growing. What if in 30 or 40 years that is not the case, and there are whole corners of knowledge the modern world depends on where <i>everybody</i> is reduced to "I dunno how it works, but Claude said..."?</p>
]]></description><pubDate>Thu, 17 Sep 2026 21:39:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=49746954</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49746954</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49746954</guid></item><item><title><![CDATA[New comment by rspeele in "Anecdotally, programmers dislike "reduce""]]></title><description><![CDATA[
<p>Map and filter <i>usually</i> have only one arg and if they have 2, the 2nd is almost always a 0-based index. They look identical in most languages, even when Microsoft chooses to call them Select and Where.<p>Reduce has an accumulator and a 2-arg function and languages are not very consistent amongst each other as to whether it's reduce(initial_acc, callback(acc,  elem)) or reduce(callback(acc, elem), initial_acc) or reduce(callback(elem, acc), initial_acc) or what.<p>Hard to remember. Also some languages have a version of reduce that doesn't take an initial accumulator at all, which is just a footgun waiting for you to hit an empty collection. Also ALSO, the accumulator can easily become awkward in languages that don't support anonymous types or don't support easy mutation of an anonymous type record. Which is most of them!</p>
]]></description><pubDate>Tue, 15 Sep 2026 04:11:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=49707608</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49707608</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49707608</guid></item><item><title><![CDATA[New comment by rspeele in "OpenAI begins rolling out GPT-6 Astra"]]></title><description><![CDATA[
<p>Amazing New Hyperbolic Chamber Greatest Invention In The History Of Mankind Ever[1]<p>[1]<a href="https://theonion.com/amazing-new-hyperbolic-chamber-greatest-invention-in-th-1819567821/" rel="nofollow">https://theonion.com/amazing-new-hyperbolic-chamber-greatest...</a></p>
]]></description><pubDate>Thu, 03 Sep 2026 19:27:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=49555379</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49555379</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49555379</guid></item><item><title><![CDATA[New comment by rspeele in "Paint.net 5.2 alpha now runs on Linux"]]></title><description><![CDATA[
<p>I'm not the Paint.NET developer (just a happy user of that software), but to me the moral logic would go something like this:<p>If Anthropic can absorb proprietary or GPL code into their models, which they rent usage of for tens of billions of dollars in revenue, and successfully claim that this violates no licenses, then I can also consider the output of those models "clean" for purposes of my software I give away for free.</p>
]]></description><pubDate>Wed, 02 Sep 2026 18:06:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=49540082</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49540082</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49540082</guid></item><item><title><![CDATA[New comment by rspeele in "Mushroom hunting with LLMs: what can go wrong?"]]></title><description><![CDATA[
<p>> ...even people in tech can vastly overestimate the capabilities...<p>I think people in (software) tech are currently <i>more</i> prone to overestimate the capabilities, because LLMs in a harness are genuinely excellent at programming. Programming is the <i>perfect</i> LLM task since 1. it's symbolic manipulation, 2. there is a vast corpus of high quality training data, and 3. most mistakes can be harmlessly caught at compile-time or unit-test-time. Especially point 3 makes it so that just throwing more "effort" at a problem, something the machine is endlessly willing to do, virtually guarantees an improved result.<p>In contrast there is no way for the machine to write a unit test to double-check its work when what it's offering the user is a legal document, or a medical diagnosis, or a recommendation of "yep that mushroom is safe to eat".<p>I've often seen the "Gell-Mann Amnesia Effect" referenced with respect to LLMs. It is said that most people can tell the LLM is not great at their own subject of expertise, yet they still trust it for other subjects where they can't personally assess the quality of its answers. Imagine how bad this is when the LLM <i>actually is</i> great at the thing you have expertise in.</p>
]]></description><pubDate>Wed, 02 Sep 2026 17:54:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=49539912</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49539912</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49539912</guid></item><item><title><![CDATA[New comment by rspeele in "Solving the 1+N Query Problem"]]></title><description><![CDATA[
<p>It <i>is</i> just a coding mistake, except that fixing that mistake leaves you with clunkier abstractions.<p>If you have Foos, and users have permissions that control what they can do to a Foo, you'd like to have a function `GetPermissions : (UserId, FooId) -> Async<Permissions>`. If users can frob Foos you'd like to have a `FrobFoo : (FooId) -> Async<void>` function.<p>But as soon as you let users select <i>multiple</i> Foos, or god forbid, an entire folder <i>containing</i> Foos, and bulk-frob them now you have to write `FrobFoos : (List<FooId>) -> Async<void>`. And to avoid the implementation of <i>that</i> causing another 1+N checking permissions, you also need `GetPermissionsBulk : (UserId, List<FooId> -> Async<Dictionary<FooId, Permissions>>`. The singular forms of those functions, to avoid duplication, now become wrappers over the bulk forms.<p>The logic becomes harder to trace in the rewritten, bulk forms of the functions, but they are efficient.<p>Next the customer hits you with a request like "let's have a smart-frob function that works on all the selected foos. For foos that are red, it frobs them, if they are blue, it fizzles them". Now you have to bulk-load to select the redness or blueness of all your Foos, build two separate lists, red and blue, then call your bulk-frob and bulk-fizzle functions accordingly on the two lists. Again the machinery to turn the requirement into a batch-shaped thing is not a <i>lot</i>, but it does kind of obscure the original business requirement.<p>At various times in the life of the project you will have a feature that starts as a "always done on one Foo" thing because it's triggered by a button on the detail screen. Then somebody will possibly come along and want to do it in bulk later and you have to rewrite the implementation. Unless you have very strict code review that everything MUST be written in batch-style taking a list of IDs up to the API layer.<p>I wrote a library[1] many years ago to solve this problem and allow the straightforward, non-batch versions of the functions to be automatically batchable. The idea is kind of like what React did for frontend dev: React was not faster than mutating the page with jQuery soup, but it was much faster than replacing the entire DOM on every render, and it let you write your code <i>as if</i> that was what you were doing. That was a very simple mental model and much less buggy than jQuery soup.<p>The idea of my library was basically borrowed from other functional languages with a resumption monad, meaning that instead of an opaque async task to go do a thing, you have a "plan" which could either be a. done or b. waiting on some errand that requires firing off a query. If you have a list of plans like from a loop, you could step all of them to the next errand they are waiting on, then fire those off in a batch. So plans could be composed linearly or "batch-style" depending on your preference[2].<p>What makes it very powerful is the combination with an F# type provider that could analyze your SQL and automatically determine a caching profile for each query. It knows what tables the query reads from, what tables it writes to, whether it uses any impure functions like random(), etc. So within one transaction, it wouldn't re-run the same pure query again, it would pull the results from a local cache -- except if another command issued in that transaction updates those tables, the cache is automatically invalidated. This solves the other code smell that starts to accumulate as you try to write efficient database code in a complex app -- keeping materialized objects loaded in memory and passing them around to other functions so they don't have to re-query for them.<p>Anyway, it was a little too weird to catch on, and I was a little too burnt out to maintain it.<p>[1]<a href="https://github.com/fsprojects/Rezoom.SQL" rel="nofollow">https://github.com/fsprojects/Rezoom.SQL</a><p>[2]<a href="https://fsprojects.github.io/Rezoom.SQL/doc/Rezoom/README.html" rel="nofollow">https://fsprojects.github.io/Rezoom.SQL/doc/Rezoom/README.ht...</a></p>
]]></description><pubDate>Tue, 25 Aug 2026 19:05:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=49438986</link><dc:creator>rspeele</dc:creator><comments>https://news.ycombinator.com/item?id=49438986</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49438986</guid></item></channel></rss>