<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: sirwhinesalot</title><link>https://news.ycombinator.com/user?id=sirwhinesalot</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 30 May 2026 20:11:47 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=sirwhinesalot" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by sirwhinesalot in "Algebraic Effects for the Rest of Us"]]></title><description><![CDATA[
<p>Yeah, there's three things you're supposed to implement: try/handle, perform, and resume. The names can vary (e.g., perform is often called "raise" or "do"). They have well defined interactions.<p>I don't actually know what the original paper describing what algebraic effects are supposed to do is, I just know them informally from Koka, Effekt, etc.</p>
]]></description><pubDate>Sat, 30 May 2026 12:00:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=48335260</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=48335260</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48335260</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Algebraic Effects for the Rest of Us"]]></title><description><![CDATA[
<p>I'm thinking a less formally than that. Protocol in a very layman-y "perform is supposed to do this, resume is supposed to do this".<p>For example, Koka compiles handlers differently depending if they do multi-shot continuations or not. It can do this because all that matters is "perform is supposed to do this, resume is supposed to do this", not what they turn into (same as "if" turning into "cmov" in certain cases). I think it uses a continuation-passing style sort of implementation, but I can't quite remember.<p>Daan's libhandler implements effects for C in an entirely different manner. It captures the stack much like my example or a stackful coroutine library would.<p>I'm sure there a formal definitions in both the koka papers and the libhandler paper, but I just skim that stuff ;)</p>
]]></description><pubDate>Sat, 30 May 2026 11:09:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48334957</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=48334957</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48334957</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Algebraic Effects for the Rest of Us"]]></title><description><![CDATA[
<p>They're really just a protocol. You can implement them in various ways. They will always be some sort of delimited continuations but a "function call" or continuation passing style or anything of the sort does not have to be involved at all.<p>For example, let us say I don't allow "multi-shot" continuations like in your library, and I'm implementing Algebraic Effects in my own interpreted language.<p>One way I can implement effects and handlers is to have a handlers get registered in a stack, then when an effect is triggered, save the IP and current stackframe, search for the right handler and jump to it. "resume" then just resets the stackframe, pushes a value into the stack, and sets the saved IP.<p>(Only saw your edit after posting, sorry, but yes)</p>
]]></description><pubDate>Sat, 30 May 2026 10:51:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=48334846</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=48334846</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48334846</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Algebraic Effects for the Rest of Us"]]></title><description><![CDATA[
<p>I agree but I also think it's important to point out that Algebraic Effects typically refers both to a runtime feature (the try/handle delineated continuation stuff) and also a type system feature.<p>The latter is very important because in your example it would not really be hidden. If your function does not have the "exn" effect, it cannot call functions that throw exceptions, full stop. Same with any other effect including IO if you want.<p>Basically function coloring taken to the extreme. In a statically typed language with statically typed effects you actually cannot get surprised, which was your major complaint.<p>Type systems that support algebraic effects also typically support row polymorphic effects (fancy generics) so you can make a function generic over "color", avoiding the "function coloring" problem.<p>Now, having said that, why did I say I agree with you? Well because algebraic effects are a lousy user-facing feature. You almost never want to implement your own handlers, at best you'll plug in a custom handler for the IO effect and that's about it. (And for exceptions of course, but that's just exceptions with extra steps)<p>Where they shine is for the <i>language implementer</i>. They provide a framework on which exceptions, generators, async/await and even prolog-like backtracking can be implemented, while (very importantly) defining how they compose. That's really the bit that makes them so interesting from a research point of view and  why they might make it into the mainstream languages, even if the language doesn't actually ever expose them for you to use.</p>
]]></description><pubDate>Sat, 30 May 2026 10:34:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48334737</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=48334737</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48334737</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Algebraic Effects for the Rest of Us"]]></title><description><![CDATA[
<p>We disagree that they're just continuations (only one of many possible implementation strategies) but agree they're nothing special ;)</p>
]]></description><pubDate>Sat, 30 May 2026 10:24:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=48334663</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=48334663</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48334663</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Algebraic Effects for the Rest of Us"]]></title><description><![CDATA[
<p>Equating "algebraic effects" with "continuations" is like saying "if" is just "goto" (which isn't even true, e.g., an if can turn into a cmov or whatever).<p>The only mystique around algebraic effects is the same mystique there is around monads. I don't know if people have started equating algebraic effects to burritos yet but that's a pretty good way to take something simple and turn it into something confusing.</p>
]]></description><pubDate>Sat, 30 May 2026 09:29:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48334338</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=48334338</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48334338</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Native all the way, until you need text"]]></title><description><![CDATA[
<p>NSLinkAttributeName?</p>
]]></description><pubDate>Sun, 17 May 2026 12:51:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48168482</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=48168482</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48168482</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Native all the way, until you need text"]]></title><description><![CDATA[
<p>If you need to display HTML content (what Markdown usually translates to) then WKWebView is the control to use! Or use something like litehtml which should be more than enough for Markdown unless you want to support "Animated Gifs" (that are actually H.264 movies these days) or whatever else.<p>You can still use native controls for the rest of the UI and have 0 Javascript running. I'm not sure I understand what the problem with NSTextView was though. It's pretty performant as far as I can tell?</p>
]]></description><pubDate>Sun, 17 May 2026 12:49:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=48168467</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=48168467</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48168467</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "I'm going back to writing code by hand"]]></title><description><![CDATA[
<p>This is actually what I do. I'm extremely picky about the code and force the LLM to rewrite it 1000x times until it is basically exactly what I want. You might be wondering what is the point when it would be faster for me to just write the code myself?<p>I have ADHD and for whatever reason telling the LLM what to do instead of doing  it myself bypasses the task avoidance patterns and/or focus problems I tend to suffer from. I do not find it fun, but I am thankful for it.</p>
]]></description><pubDate>Mon, 11 May 2026 13:10:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48094526</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=48094526</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48094526</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "If more than 50% press blue, everyone survives. Red pressers always survive"]]></title><description><![CDATA[
<p>I love this thought experiment.<p>If you pick red you survive.<p>If you pick blue and at least 50% of people picked blue, you survive, otherwise you die.<p>There's 0 advantage to picking blue, none what so ever, the only reason you'd pick blue is because you assume there's some subset of people that is so unbelievably stupid that they'll pick blue. You're sacrificing yourself in the hope of saving them.<p>IMO, the reality is that everyone you think would pick blue would actually pick red. Very few people are that stupid, and even if they are they probably also have access to someone not as stupid who will tell them to press red.<p>The only people you'd be saving are other suicidal white knights that pick blue to save those imaginary "blue pressers", and the outcome of that, since that blue pressing base doesn't actually exist, is that you're all just committing collective suicide for absolutely no reason.<p>What "blue pressers vs red pressers" says about our society is best left to philosophers.</p>
]]></description><pubDate>Sun, 26 Apr 2026 21:30:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47914764</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=47914764</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47914764</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Microsoft offers buyouts up to 7% of US employees"]]></title><description><![CDATA[
<p>There is good quality stuff at Microsoft, it's just on some of the innards.<p>NT Kernel, Direct3D, .NET Runtime. Also a lot of stuff that came out of Microsoft Research like Z3.<p>Which also happen to be the sort of projects older devs would normally be working on.</p>
]]></description><pubDate>Fri, 24 Apr 2026 05:58:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=47886132</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=47886132</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47886132</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Swift 6.3"]]></title><description><![CDATA[
<p>> Swift 6.3 introduces the @c attribute, which lets you expose Swift functions and enums to C code in your project. Annotating a function or enum with @c prompts Swift to include a corresponding declaration in the generated C header that you can include in your C/C++ files<p>Why did this take so long to be added? Such strange priorities. Adding an entire C++ compiler for C++ interoperability before adding... C exports. Bizarre.</p>
]]></description><pubDate>Thu, 26 Mar 2026 09:48:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=47528443</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=47528443</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47528443</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Claude is an Electron App because we've lost native"]]></title><description><![CDATA[
<p>Then why are the APIs they provide such turds?<p>Cocoa is excellent but who knows when Apple will deprecate it for SwiftUI (which is not very good yet, if it ever will be)?<p>Windows is a disaster of half-finished APIs. Win32 doesn't even support dark mode. Windows Forms was on life support for ages and only now is getting some love, but it doesn't have a native look despite being built on Win32. WPF is stuck on DirectX 9 and was also on life support for a long time. UWP is dead, effectively. WinUI3 requires bundling 38MB worth of DLLs (many DLLs), is a pain to install and setup a project with and somehow performs worse than electron apps (don't look at the callstack when you click a button, it is scarier than RE9).<p>And Linux... well there's Qt which really wants you to drop QtWidgets and use QtQuick instead that nobody likes, and GTK is actively developer hostile with a severe disdain for backwards compatibility.</p>
]]></description><pubDate>Wed, 04 Mar 2026 11:54:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=47246201</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=47246201</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47246201</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Winapp, the Windows App Development CLI"]]></title><description><![CDATA[
<p>I remember the problems with the WinRT APIs being tied to specific Windows versions (still are, just a smaller surface area, so less of an issue). With the old service pack model it wouldn't be an issue but with constant OS releases it was too much churn.<p>I thought they had solved the worst problem with WinUI2, a bit like the compatibility library in Android, so you only had to bundle the more "volatile" bits while still delegating most things to the OS.<p>But then they went and threw all that out the windows (pun intended) with WinUI3 which even has its own separate implementation of DirectWrite for some god forsaken reason.<p>Unlike the DirectX redistributables of old it's not even backwards compatible so you can't tell people "just download the WinAppSDK runtime", they have to install the specific version you used when developing your app.<p>You get that download "for free" if you use a .appx, but with a regular installer you're on your own. Even the way apps link to the WindowsAppSDK is a mess with a weird bootstrapping process.<p>Not worth the headache.</p>
]]></description><pubDate>Thu, 29 Jan 2026 22:19:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=46817587</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=46817587</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46817587</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Winapp, the Windows App Development CLI"]]></title><description><![CDATA[
<p>If you use classic unstyled Win32 controls (Windows 95-2000 style) then you can do that. If you use uxthemed Win32 controls (Windows XP onwards) then there's no official dark theme support.</p>
]]></description><pubDate>Thu, 29 Jan 2026 14:30:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=46810672</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=46810672</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46810672</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Winapp, the Windows App Development CLI"]]></title><description><![CDATA[
<p>For those unaware, the current recommended way to develop "native" apps for Windows is to use WinUI3, distributed with the WindowsAppSDK.<p>Unlike regular Windows SDK, which lets you make use of the functionality provided by the OS, the WindowsAppSDK is entirely separate from the OS and requires the installation of a separate runtime on the user's machine. It also requires installing nuget packages on your machine to use it so good luck if you'd rather use straight CMake instead of Visual Studio.<p>As far as I can tell, there's no backwards or forwards compatibility, so the end user has to install the specific version of the SDK your app uses, or you need to bundle all the hundreds of DLLs with your app yourself.<p>A sane person might ask why not just use Qt (smaller distribution!) or Electron (about the same size) at that point, since they're cross platform and you can easily get fluent themes that look the same as WinUI3?<p>As far as I can tell there's no sane negative answer to this question. It's not like your app's "fluent theme" will be updated alongside the OS, it's no different from Qt or Electron in this regard.<p>There's no reason to do "native" windows development anymore, unless you mean using raw Win32 with no dark theme or a custom UI built on Direct2D/3D/Write. And if you are doing that, there's absolutely 0 reason to use this CLI.</p>
]]></description><pubDate>Thu, 29 Jan 2026 13:40:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=46810058</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=46810058</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46810058</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Second Win11 emergency out of band update to address disastrous Patch Tuesday"]]></title><description><![CDATA[
<p>They exist but are rare and don't hire often. I know a guy (self taught programmer) who got his first major a job at a company doing native ui (not even using OS frameworks, straight GPU stuff).<p>The company does highly complex simulation software used by movie studios for explosions and other effects.<p>He got hired by word of mouth recommendation from someone at the company that had met him.<p>It takes as much luck as it takes skill to get these sorts of jobs, sadly.</p>
]]></description><pubDate>Mon, 26 Jan 2026 08:29:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=46763150</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=46763150</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46763150</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Kotlin's rich errors: Native, typed errors without exceptions"]]></title><description><![CDATA[
<p>Exceptions are cheap on the happy path and super expensive on the error path.<p>Checked exceptions only make sense for errors that are relatively common (i.e., they aren't really exceptional), which calls for a different implementation entirely where both the happy path and the error path have around the same cost.<p>This is what modern languages like Rust and Go do as well (and I think Swift as well though don't quote me on that) where only actually exceptional situations (like accessing an array out of bounds) trigger stack unwinding. Rust and Go call these panics but they are implemented like exceptions.<p>Other errors are just values. They have no special treatment besides syntax sugar. They are a return value like any other and have the same cost. As they aren't exceptional (you need to check them for a reason), it makes no sense to use the exception handling mechanism for them which has massively skewed costs.</p>
]]></description><pubDate>Fri, 23 Jan 2026 19:01:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46736338</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=46736338</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46736338</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Ask HN: Do you have any evidence that agentic coding works?"]]></title><description><![CDATA[
<p>Yeah, CLAUDE.md. Sometimes it just ignores what was in there after the context window gets big enough (as it tends to with planning mode).</p>
]]></description><pubDate>Wed, 21 Jan 2026 11:01:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=46703862</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=46703862</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46703862</guid></item><item><title><![CDATA[New comment by sirwhinesalot in "Ask HN: Do you have any evidence that agentic coding works?"]]></title><description><![CDATA[
<p>The only approach I've tried that seems to work reasonably well, and consistently, was the following:<p>Make a commit.<p>Give Claude a task that's not particularly open ended, the closer to pure "monkey work" boilerplate nonsense the task is, the better (which is also the sort of code I don't want do deal with myself).<p>Preferably it should be something that only touches a file or two in the codebase unless it is a trivial refactor (like changing the same method call all over the place)<p>Make sure it is set to planning mode and let it come up with a plan.<p>Review the plan.<p>Let it implement the plan.<p>If it works, great, move on to review. I've seen it one-shot some pretty annoying tasks like porting code from one platform to another.<p>If there are obvious mistakes (program doesn't build, tests don't pass, etc.) then a few more iterations usually fix the issue.<p>If there are subtle mistakes, make a branch and have it try again. If it fails, then this is beyond what it can do, abort the branch and solve the issue myself.<p>Review and cleanup the code it wrote, it's usually a lot messier than it needs to be. This also allows me to take ownership of the code. I now know what it does and how it works.<p>I don't bother giving it guidelines or guardrails or anything of the sort, it can't follow them reliably. Even something as simple as "This project uses CMake, build it like this" was repeatedly ignored as it kept trying to invoke the makefile directly and in the wrong folder.<p>This doesn't save me all that much time since the review and cleanup can take long, but it serves a great unblocker.<p>I also use it as a rubber duck that can talk back and documentation source. It's pretty good for that.<p>This idea of having an army of agents all working together on the codebase is hilarious to me. Replace "agents" with "juniors I hired on fiverr with anterograde amnesia" and it's about how well it goes.</p>
]]></description><pubDate>Tue, 20 Jan 2026 15:05:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=46692521</link><dc:creator>sirwhinesalot</dc:creator><comments>https://news.ycombinator.com/item?id=46692521</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46692521</guid></item></channel></rss>