<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: electroly</title><link>https://news.ycombinator.com/user?id=electroly</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 09 Apr 2026 12:34:49 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=electroly" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by electroly in "Union types in C# 15"]]></title><description><![CDATA[
<p>Practically speaking, I've found that Claude never uses collection expressions, so the feature has disappeared from my code. Before AI, the feature was looked at with skepticism by my coworkers. We like writing "var" for all variable declarations. You have to write the type on the left side if you want to declare a variable with a collection expression, and we would never do that otherwise. Can't do `foreach (var x in [1, 2, 3])`. Too often, you have to make specific accommodations in your code to allow the collection expression to be valid.<p>Collection expressions today are more the sort of thing that a code poet or golfer can do to prettify their code than something a newbie can count on using. It's tough to explain "you can only use this when the collection type is implied in that spot" to a newbie. The value of the base feature is still unproven for me. I'm not sure I agree, without some convincing, that collection expressions made the language more coherent rather than doing <a href="https://xkcd.com/927" rel="nofollow">https://xkcd.com/927</a>.</p>
]]></description><pubDate>Wed, 08 Apr 2026 22:46:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47697212</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47697212</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47697212</guid></item><item><title><![CDATA[New comment by electroly in "Veracrypt project update"]]></title><description><![CDATA[
<p>I see the same behavior with my MSIs. I've had better luck with my MSIXs. As much as I like being Store-free, I have a June 2025 release of an MSI-based app that <i>still</i> gets dinged by Edge and again by SmartScreen. A different MSIX-based app, with almost no users, gets dinged by Edge but <i>not</i> by SmartScreen. It's the same certificate. I can never be sure what other users are seeing, though.<p>tbh, I thought that I had built enough reputation on this particular MSI release, until testing it just now. Hate to see it :(</p>
]]></description><pubDate>Wed, 08 Apr 2026 22:02:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47696841</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47696841</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47696841</guid></item><item><title><![CDATA[New comment by electroly in "Veracrypt project update"]]></title><description><![CDATA[
<p>I believe you. I also found that many CAs will not deal with a solo developer; that's real. But Sectigo continues to offer HSMs to solo developers. The link I used is [1], you buy the HSM along with your first certificate and they ship it to you. $300/year for the cert, $90 one-time for the HSM. That's not cheap but I think for specific developers looking for an escape from the store, it's a good price for freedom. The HSM is a USB stick with an LED on the back. The software is called "SafeNet Authentication Client" and it sets up the certificate access in your Windows Certificate Store so that signtool can use it. Prompts for the password every time (annoying).<p>[1] <a href="https://comodosslstore.com/code-signing/comodo-individual-code-signing-certificate" rel="nofollow">https://comodosslstore.com/code-signing/comodo-individual-co...</a></p>
]]></description><pubDate>Wed, 08 Apr 2026 20:43:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47695999</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47695999</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47695999</guid></item><item><title><![CDATA[New comment by electroly in "Veracrypt project update"]]></title><description><![CDATA[
<p>I was afraid of the HSM at first but for an open source developer (rather than a big company) I found it wasn't a big deal. I can't sign in GitHub Actions and I have a USB stick that lights up when I sign releases, but it hasn't been a blocker. I got mine from Sectigo Store. This isn't hypothetical, I really did it, I've got the HSM, it works. It wasn't difficult. It just cost some money and a little bit of time. "Nigh impossible" is a tremendous exaggeration. I'll concede "annoying and expensive" perhaps. If you've got the money, you can get the HSM. You don't have to re-buy the HSM when you renew your certificate.<p>The Microsoft Store account <i>was</i> painful to set up, I'll note. My developer account had <i>also</i> been cancelled by Microsoft for unknown reasons, and I ultimately had to set up a brand new one. New email, new name. My new account has my middle initial because I couldn't clash with the existing, closed account. My first and last name alone are banished forever from the store.<p>The "same thing", as you concede, isn't the same thing. Quantity has a quality of its own: one happens all the time and we're reading an article about it happening right now. In the comments there's <i>another</i> prominent maintainer who it happened to, <i>and</i> it happened to me personally! That's three right here! The other happens so infrequently that people in this same HN thread are complaining that it <i>isn't happening enough</i>. Can you find an example that's like Veracrypt and WireGuard? In practice, it seems they rarely do this, even when they should. You can actually view the list under "Manage computer certificates" > "Untrusted Certificates." On my computer the entire list is 20 certificates.<p>I'm standing by my suggestion, 100%. These aren't equivalent risks at all.</p>
]]></description><pubDate>Wed, 08 Apr 2026 18:33:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=47694343</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47694343</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47694343</guid></item><item><title><![CDATA[New comment by electroly in "Veracrypt project update"]]></title><description><![CDATA[
<p>Perhaps not legally, but technically, you have an option: don't use the Microsoft Store. This isn't as wild a suggestion as it may seem to non-Windows users: the store is barely used by Windows users. You can get your own code signing certificate from a public CA, sign your own installer, and post it on your website. This is still the primary way that Windows software is distributed. Microsoft does not have a hand in any part of it; they <i>can't</i> cancel anything. Their only role is including the public CA in their root certificate store. If you're not shipping a kernel driver, you don't need Microsoft's permission for anything. You can still ship an .msix installer which is the same technology used by the Store.<p>I recently de-listed my app in the store and closed my Microsoft developer account. I was wrong for having bothered with it; just a waste of my time for no benefit. Stick to your own deployment.</p>
]]></description><pubDate>Wed, 08 Apr 2026 14:06:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=47690423</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47690423</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47690423</guid></item><item><title><![CDATA[New comment by electroly in "Microsoft hasn't had a coherent GUI strategy since Petzold"]]></title><description><![CDATA[
<p>Windows Forms is the answer you seek. It still receives updates to this day. I've been writing and shipping Windows Forms apps for 25 years. High DPI, dark mode, Edge web views, Blazor integration, we've got it all. Users don't even need to install .NET these days with self-contained deployment.<p>I will boldly claim Windows Forms is <i>more</i> stable than Gtk and Qt. Don't let random teams at Microsoft confuse you because they released yet another unrelated framework that you don't have to use. They are engineer-sirens trying to lure you from the true path. Let them pursue their promotions in peace while we rely on a stable workhorse.</p>
]]></description><pubDate>Mon, 06 Apr 2026 16:09:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=47662779</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47662779</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47662779</guid></item><item><title><![CDATA[New comment by electroly in "AWS engineer reports PostgreSQL perf halved by Linux 7.0, fix may not be easy"]]></title><description><![CDATA[
<p>Is that true? I haven't heard that before. Do you have a link?<p>Here's how they announced 24.04.0. It says LTS and doesn't mention anything about LTS coming in the .1 release: <a href="https://canonical.com/blog/canonical-releases-ubuntu-24-04-noble-numbat" rel="nofollow">https://canonical.com/blog/canonical-releases-ubuntu-24-04-n...</a></p>
]]></description><pubDate>Sun, 05 Apr 2026 17:28:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47651707</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47651707</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47651707</guid></item><item><title><![CDATA[New comment by electroly in "Big-Endian Testing with QEMU"]]></title><description><![CDATA[
<p>That sounds like a problem to deal with as part of your <i>paid</i> IBM s390x porting contract. I guess my point is: why deal with this before IBM is paying you? No other big endian platform matters, and s390x users are 100% large commercial customers. If IBM or one of their customers isn't paying you, there's nobody else who would need it. If IBM <i>is</i> paying you, you can test on a real z/VM that they provide. I see big endian as entirely their burden now; nobody else needs it. If they want it, they can pay for the work.</p>
]]></description><pubDate>Fri, 03 Apr 2026 14:58:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=47627406</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47627406</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47627406</guid></item><item><title><![CDATA[New comment by electroly in "Big-Endian Testing with QEMU"]]></title><description><![CDATA[
<p>> When programming, it is still important to write code that runs correctly on systems with either byte order<p>I contend it's almost never important and almost nobody writing user software should bother with this. Certainly, people who didn't already know they needed big-endian should not start caring now because they read an article online. There are countless rare machines that your code doesn't run on--what's so special about big endian? The world is little endian now. Big endian chips aren't coming back. You are spending your own time on an effort that will never pay off. If big endian is really needed, IBM will pay you to write the s390x port and they will provide the machine.</p>
]]></description><pubDate>Fri, 03 Apr 2026 14:48:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47627285</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47627285</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47627285</guid></item><item><title><![CDATA[New comment by electroly in "ChatGPT won't let you type until Cloudflare reads your React state"]]></title><description><![CDATA[
<p>I don't think that's true in this case; the React application loads first, fully initializes, and <i>then</i> sends its state via Cloudflare request. It can't happen at the same time, by design. It has to happen serially. The article's claim is that you can't type during this second request. Frankly, I wonder if this is actually true at all. The article did not demonstrate this, and there's no problem if you can actually interact as soon as the React application is running. ChatGPT running abuse prevention and React applications requiring JavaScript to work are both uncontroversial, I think.</p>
]]></description><pubDate>Mon, 30 Mar 2026 16:40:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47576553</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47576553</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47576553</guid></item><item><title><![CDATA[New comment by electroly in "ChatGPT won't let you type until Cloudflare reads your React state"]]></title><description><![CDATA[
<p>This doesn't seem to be the same thing. The article isn't about being unable to type before JavaScript starts executing. If I understand correctly, you're unable to type until a <i>network request to Cloudflare returns</i>. The question is: why not allow typing during that network request? JavaScript is running and it's observing the keystrokes. Everyone understands that you can't use a React application until JavaScript is running. They're asking why the <i>network request</i> doesn't happen in the background with the user optimistically allowed to type while waiting for it to return.<p>(Separately, I don't think the article has adequately demonstrated this claim. They just make the claim in the title. The actual article only shows that some network request is made, and that the request happens after the React app is loaded, but not that they prevent input until it returns. Maybe it's obvious from using it, but they didn't demonstrate it.)</p>
]]></description><pubDate>Mon, 30 Mar 2026 15:45:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=47575762</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47575762</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47575762</guid></item><item><title><![CDATA[New comment by electroly in "25 Years of Eggs"]]></title><description><![CDATA[
<p>From some minor historical experience with Mechanical Turk, I bet you could get humans to do this for one or two cents per receipt. You do them all three times for error checking for $0.03-$0.06 per receipt. I used to pay a nickel for much, much more than 5x this amount of transcription per job, and I got the feeling that I was overpaying based on how eagerly I got responses in and that I saw a lot of the same workers repeatedly.<p>These days, are MTurk workers simply feeding it into AI anyway, though? It's been a few years since I've run an MTurk campaign. At the time it was clear that humans were really doing it, as you get emails from the workers sometimes.</p>
]]></description><pubDate>Sun, 22 Mar 2026 21:51:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47482572</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47482572</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47482572</guid></item><item><title><![CDATA[New comment by electroly in "Ghostling"]]></title><description><![CDATA[
<p>You can use `xxd` from the vim package to generate these. You'll find out pretty quickly that this is only suitable for small resources: gcc and clang blow up in both time and space on very large literal arrays. If you need to ship more than a few megabytes, find a different technique.<p>I used this technique for awhile, but it was too problematic for my use case. Now, I use <a href="https://github.com/lief-project/LIEF" rel="nofollow">https://github.com/lief-project/LIEF</a> -- among other things, this project can modify Windows PE, macOS Mach-O, and Linux ELF binaries to add resources to them, then offers an API to read them back later. It's a little different for each format, but it's capable of doing all three and I was able to build a cross-platform resource-bundling system that doesn't care how big the resources are.</p>
]]></description><pubDate>Sat, 21 Mar 2026 00:28:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47462720</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47462720</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47462720</guid></item><item><title><![CDATA[New comment by electroly in "XML is a cheap DSL"]]></title><description><![CDATA[
<p>I shipped 20MB of XML with a product back in 2014; we loaded it at startup, validated it against the XSD, and the performance for this use case was fine. It was big because we did something kinda like what TFA suggests: I designed a declarative XML "DSL" and then wrote a bunch of "code" in it. We had lots of performance problems in that project, but the XML DSL wasn't the cause of any of them; that part was fine. I think "expensive" can mean a lot of different things. It was cheap in terms of development time and the loading/validation time, even on 20MB of XML, was not a problem. Visual Studio ships a tool that generates C# classes from the XSDs which was handy. I just wrote the XSDs and the framework provided the parsing, validation, node classes, and tree construction. This is as "XML proper" as I think it's possible to get.<p>I don't believe that .NET's XML serializer uses any of the open source projects mentioned in your post, so maybe we just have especially good XML support in .NET. I think Java has its own XML serializer, too. I bet most XML generated and consumed in the world is <i>not</i> one of those three open source C/C++ libraries. I think Java alone might be responsible for more than half of it.</p>
]]></description><pubDate>Sun, 15 Mar 2026 16:15:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47388822</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47388822</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47388822</guid></item><item><title><![CDATA[New comment by electroly in "Writing my own text editor, and daily-driving it"]]></title><description><![CDATA[
<p>Yes, Scintilla is a text editor <i>engine library</i>. It's not tied to any particular UI or technology. Out of the box it's not a text editor yet; you provide the frontend. You get all the "table stakes" right away if you build your editor on this library.<p>Here's Scintilla driving a TUI text editor: <a href="https://github.com/magiblot/turbo" rel="nofollow">https://github.com/magiblot/turbo</a><p>Here's Scintilla driving a custom GUI control (<i>not</i> the system text control): <a href="https://github.com/desjarlais/Scintilla.NET" rel="nofollow">https://github.com/desjarlais/Scintilla.NET</a><p>Same engine, different frontends. The engine has a series of hooks that you implement in whichever way you please for your particular interface. It's definitely the presumptive choice here.</p>
]]></description><pubDate>Wed, 11 Mar 2026 15:10:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47336661</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47336661</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47336661</guid></item><item><title><![CDATA[New comment by electroly in "Fontcrafter: Turn Your Handwriting into a Real Font"]]></title><description><![CDATA[
<p>This is what a teletype is: it's a typewriter with a serial connection. You send bytes over the serial cable and it types them.</p>
]]></description><pubDate>Mon, 09 Mar 2026 15:08:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47310107</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47310107</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47310107</guid></item><item><title><![CDATA[New comment by electroly in "Show HN: A physically-based GPU ray tracer written in Julia"]]></title><description><![CDATA[
<p>I think I finally nailed it? I needed to update JULIA_DEPOT_PATH since I was relocating the cache files. I knew that and was already doing it, but I didn't do it right: I needed a <i>trailing semicolon</i> so it would have an empty entry at the end! The documentation talks about this but I didn't understand it at the time: <a href="https://docs.julialang.org/en/v1/manual/environment-variables/#JULIA_DEPOT_PATH" rel="nofollow">https://docs.julialang.org/en/v1/manual/environment-variable...</a></p>
]]></description><pubDate>Thu, 26 Feb 2026 16:00:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47167822</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47167822</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47167822</guid></item><item><title><![CDATA[New comment by electroly in "Show HN: A physically-based GPU ray tracer written in Julia"]]></title><description><![CDATA[
<p>... Actually, this only worked for Linux. My Windows container is back to precompiling every time, again, and Windows was the slow one that I wanted to fix in the first place. I had to revert this. Back to the drawing board. I wish Julia would print some diagnostics about why it decided to precompile again.</p>
]]></description><pubDate>Mon, 23 Feb 2026 18:50:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=47126871</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47126871</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47126871</guid></item><item><title><![CDATA[New comment by electroly in "Show HN: A physically-based GPU ray tracer written in Julia"]]></title><description><![CDATA[
<p>It worked! I was able to drop the Windows install on a standard GitHub Actions worker from 1 hour to 27 minutes. Here's what worked:<p><pre><code>    ARG JULIA_CPU_TARGET="generic;skylake-avx512,clone_all;cascadelake,clone_all;icelake-server,clone_all;sapphirerapids,clone_all;znver4,clone_all;znver2,clone_all"
    ARG JULIA_PROJECT=[...]
    ENV JULIA_PROJECT=[...]
    RUN julia -e "using Pkg; Pkg.activate(\"[...]\"); Pkg.instantiate(); Pkg.precompile();"
</code></pre>
What I got wrong the first time: I failed to actually export JULIA_CPU_TARGET so it would take effect in the "Pkg.precompile()" command. In reality, I hadn't correctly tested with that environment variable set at all. I was only correctly setting it when running PackageCompiler.<p>Thank you so much for this! It's too late for me to edit my original post, but cutting the install time in half is a major win for me. Now it only needs to precompile, not also compile a sysimage.</p>
]]></description><pubDate>Fri, 20 Feb 2026 21:42:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=47094384</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47094384</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47094384</guid></item><item><title><![CDATA[New comment by electroly in "Show HN: A physically-based GPU ray tracer written in Julia"]]></title><description><![CDATA[
<p>That was the very first thing I tried, and I couldn't get it to work, but I'm sure I <i>am</i> doing something wrong. Everything seemed great at build time, and then it just precompiles again at runtime, without anything saying why it decided to do that. I'll give it another shot if you say it should be working. The PackageCompiler step is the longest part; if that can be removed, it'll make a big difference. I'd rather be wrong and have this working than the other way around :) I'll report back with what I find.</p>
]]></description><pubDate>Fri, 20 Feb 2026 01:47:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47082647</link><dc:creator>electroly</dc:creator><comments>https://news.ycombinator.com/item?id=47082647</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47082647</guid></item></channel></rss>