<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: gsliepen</title><link>https://news.ycombinator.com/user?id=gsliepen</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 21 Jun 2026 00:25:09 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=gsliepen" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by gsliepen in "Bootimus – A Self-Contained PXE and HTTP Boot Server"]]></title><description><![CDATA[
<p>Nice, although if you already are running your own DHCP and web server, it's very easy to add a TFTP server and configure everything to serve whatever you want. So it does feel a bit like reinventing the wheel to me.<p>A PXE boot server has many uses. The project already mentions using it for tools like GParted, Memtest86+ and so on. Booting live OS or OS installers via netboot.xyz is also great. But you can automate things even further; at a previous job (~18 years ago) I used PXE to serve a debian installer image with a preseed file to add user accounts with SSH keys, apt install all the dependencies, and install local binaries to get machines up and running useful stuff without needing to do any manual configuration. Nowadays you'd probably just have it do a minimal install + add just an SSH key, and then let another tool like Ansible take over the rest of the provisioning.</p>
]]></description><pubDate>Sat, 20 Jun 2026 15:33:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48609966</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=48609966</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48609966</guid></item><item><title><![CDATA[New comment by gsliepen in "Ask HN: Will programmers write more efficient code during the memory shortage?"]]></title><description><![CDATA[
<p>It's definitely possible, but I agree with many other commenters it probably will not happen.<p>I wrote an encrypted mesh networking library that runs on normal operating systems. A customer asked me if I could make it run on an ESP32 with 520 kiB of RAM. At first this seemed impossible, but it turned out that it was, and not even that hard. While the original library was not memory hungry at all for a desktop CPU, it still wasted space on unnecessarily large buffers. Cutting those out made the library run on an ESP32 while leaving plenty of room for an application.<p>Also, my first PC was a 200 MHz single-core 32-bit AMD k6 with 32 MiB of RAM. This ran a graphical OS with browsers, word processors, 3D games and so on. Nowadays you can get a CPU with more than that amount of RAM as just built-in cache.<p>So a good place to start optimizing code would be to actually get a "severely resource constrained" computer and start making your code work on it.</p>
]]></description><pubDate>Sat, 20 Jun 2026 09:23:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48607740</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=48607740</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48607740</guid></item><item><title><![CDATA[New comment by gsliepen in "Let's Encrypt had a higher error rate for 90 minutes today"]]></title><description><![CDATA[
<p>Ok, but that would just be your own website having a single point of failure, not that Let's Encrypt is a single point of failure. Otherwise you could call every certificate authority a single point of failure.</p>
]]></description><pubDate>Sat, 20 Jun 2026 09:11:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=48607657</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=48607657</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48607657</guid></item><item><title><![CDATA[New comment by gsliepen in "Many Let's Encrypt renewals had errors today"]]></title><description><![CDATA[
<p>No, it's not. You can always switch to a different SSL provider. There are other free ones (as mentioned in other comments).<p>However, thinking about how to make your own setup more robust without having to manually change configuration when one SSL provider stops working is a good exercise. I wonder if you can just get your server's private key signed by multiple SSL providers, and serve multiple certificates to clients, and whether all browsers handle that correctly.</p>
]]></description><pubDate>Fri, 19 Jun 2026 07:48:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48595963</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=48595963</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48595963</guid></item><item><title><![CDATA[New comment by gsliepen in "Show HN: We built an 8-bit CPU as 2nd year EE students"]]></title><description><![CDATA[
<p>Very nice. I wonder if implementing a one-instruction set computer (for example something that implements Adrian Cable's subleq VM, see <a href="https://www.ioccc.org/2025/cable/" rel="nofollow">https://www.ioccc.org/2025/cable/</a>) would be educational and whether it can make the design of a computer from discrete logic chips simpler or more complex. Though it would very likely not be as efficient.</p>
]]></description><pubDate>Thu, 18 Jun 2026 07:51:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=48582194</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=48582194</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48582194</guid></item><item><title><![CDATA[New comment by gsliepen in "The 29th International Obfuscated C Code Contest (IOCCC) 2025 Winners"]]></title><description><![CDATA[
<p>Nice! What surprised my about the IOCCC submission though was how fast it ran. Sure, subleq can at least do some useful arithmetic in one instructions, but it still requires a lot of instructions to do an integer multiplication, let alone a floating point operation. But DOOM was actually playable with a decent FPS.</p>
]]></description><pubDate>Mon, 08 Jun 2026 10:48:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=48443668</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=48443668</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48443668</guid></item><item><title><![CDATA[New comment by gsliepen in "WriteUp: 16 Bytes of x86 that turn Matrix rain into sound"]]></title><description><![CDATA[
<p>Seems like this does the reverse of the C64 demo "A Mind Is Born" (<a href="https://linusakesson.net/scene/a-mind-is-born/" rel="nofollow">https://linusakesson.net/scene/a-mind-is-born/</a>): that one is making music first, and simultaneously interprets it as graphics. Of course that C64 demo is huge compared to this x86 one :)</p>
]]></description><pubDate>Mon, 18 May 2026 07:51:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=48176635</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=48176635</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48176635</guid></item><item><title><![CDATA[New comment by gsliepen in "Boriel BASIC"]]></title><description><![CDATA[
<p>There was a wild range in capabilities in the various BASIC implementations of that time. I grew up with an Amstrad CPC6128, it came with Locomotive BASIC (<a href="https://en.wikipedia.org/wiki/Locomotive_BASIC" rel="nofollow">https://en.wikipedia.org/wiki/Locomotive_BASIC</a>), which was very capable: at one point I had written a multiplayer game with background music in it, without needing a single PEEK, POKE or CALL. The few times I saw Commodore BASIC programs it was littered with those three.</p>
]]></description><pubDate>Tue, 12 May 2026 07:36:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=48105328</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=48105328</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48105328</guid></item><item><title><![CDATA[New comment by gsliepen in "Hardware Attestation as Monopoly Enabler"]]></title><description><![CDATA[
<p>I'm happy that my bank (still) allows me to have both a stand-alone reader and a mobile app to authenticate. Because if you lose your authentication device, a lot of things suddenly get a lot harder.<p>I also tried to use an old phone as a backup device. However, most authentication apps only allow it to be installed on a single device.</p>
]]></description><pubDate>Mon, 11 May 2026 08:08:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=48092310</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=48092310</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48092310</guid></item><item><title><![CDATA[New comment by gsliepen in "Show HN: Building a web server in assembly to give my life (a lack of) meaning"]]></title><description><![CDATA[
<p>And even if you avoid external libraries, you still need to interact with the kernel to do I/O, and that involves system calls that are also non-portable.</p>
]]></description><pubDate>Sun, 10 May 2026 10:22:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48082625</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=48082625</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48082625</guid></item><item><title><![CDATA[New comment by gsliepen in "If I could make my own GitHub"]]></title><description><![CDATA[
<p>I would use RFC2822 as the underlying format to store any kind of message (pull request, review comment, issue etc.), and of course when displaying messages use CommonMark to style them. Any metadata goes into headers, and Message-ID/In-Reply-To/References headers can be used to link them all together. Using this well defined format you can then decide how to best store and transport all the messages, maybe in a git repo as well, use email, or whatever else works.<p>I personally think Gerrit works much better than whatever GitHub et al. have for code reviews. As for CI, I would try to keep that out of it as much as possible; just hooks to start a pipeline and to display the result and decide whether to allow a merge or not.</p>
]]></description><pubDate>Fri, 01 May 2026 12:20:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=47973950</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=47973950</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47973950</guid></item><item><title><![CDATA[New comment by gsliepen in ""Parse, don't validate" through the years with C++"]]></title><description><![CDATA[
<p>Rust's FromStr only deals with parsing a single object. However, ideally std::scan() would be an exact counterpart of std::print() and would be able to parse multiple objects. I totally agree that the C way of passing references to already existing variables is not great. Ideally you return a tuple of objects, but then it becomes very annoying to specify the types. Maybe something like this?<p><pre><code>    auto [value, text, goose] = std::scan<int, std::string, Goose>(input, "{} {} {}");
</code></pre>
A halfway solution would be to have the hypothetical std::scan() take references to std::optional<>s or std::expected<>s:<p><pre><code>    std::optional<int> value;
    std::optional<std::string> text;
    std::optional<Goose> goose;
    /* auto result = */ std::scan(input, "{} {} {}", value, text, goose);
</code></pre>
The latter would be type safe, close to how scanf() works, but less satisfying from a functional programming standpoint.<p>Orthogonal to that, adding support for scanning a Goose would be just like how you add a formatter for it, and would be quite similar to a Rust trait. One could imagine having to define something like this:<p><pre><code>    template<>
    struct std::scanner<Goose> {
        constexpr auto parse(std::format_parse_context& ctx) {…}
        auto scan(std::format_context& ctx) const -> std::optional<Goose> {…}
    };</code></pre></p>
]]></description><pubDate>Thu, 30 Apr 2026 19:52:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=47967393</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=47967393</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47967393</guid></item><item><title><![CDATA[New comment by gsliepen in ""Parse, don't validate" through the years with C++"]]></title><description><![CDATA[
<p>The C example could have implemented a lot of validation just by checking the return value of sscanf():<p><pre><code>    if (sscanf(user_input, "%4u-%2u-%2u", &year, &month, &day) != 3) {
        // return an error
    }
</code></pre>
This still does not catch trailing garbage, but you could check for that as well:<p><pre><code>    if (sscanf(user_input, "%4u-%2u-%2u%c", &year, &month, &day, &dummy) != 3) {
        // return an error
    }
</code></pre>
The result would be 4 if there was at least one trailing character. Too bad there is still no std::scan() companion to C++23's std::print().</p>
]]></description><pubDate>Thu, 30 Apr 2026 14:04:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47962694</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=47962694</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47962694</guid></item><item><title><![CDATA[New comment by gsliepen in "Fully Featured Audio DSP Firmware for the Raspberry Pi Pico"]]></title><description><![CDATA[
<p>Yes, but this project doesn't do anything analog to begin with. It could just have several S/PDIF and I2S inputs, and convert that to USB. You probably don't want any processing then, and just pass the digital inputs straight to USB. The limit of how many channels you could simultaneously process would then be the USB bandwidth.</p>
]]></description><pubDate>Mon, 27 Apr 2026 14:13:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=47921905</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=47921905</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47921905</guid></item><item><title><![CDATA[New comment by gsliepen in "Flipdiscs"]]></title><description><![CDATA[
<p>I wonder if you could have it play the music as well by the right timing of flipping, just like how the Floppotron works.</p>
]]></description><pubDate>Mon, 27 Apr 2026 07:59:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47918892</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=47918892</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47918892</guid></item><item><title><![CDATA[New comment by gsliepen in "Incident with multple GitHub services"]]></title><description><![CDATA[
<p>The SourceHut UI looks weird compared to commercial offerings, but every time I use it I am pleasantly surprised how fast it is and how little clutter there is.</p>
]]></description><pubDate>Fri, 24 Apr 2026 07:30:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47886843</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=47886843</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47886843</guid></item><item><title><![CDATA[New comment by gsliepen in "Ask HN: How did you land your first projects as a solo engineer/consultant?"]]></title><description><![CDATA[
<p>I worked on an open source application, and some people wanted to use parts of it as a library in their commercial applications. So I started a consultancy due to that demand. I still had a regular job at the same time though, so there was never a need to gather enough clients to make a living out of the consultancy job.<p>Things I learned:<p>- Get an accountant ASAP, even if the income is small. Just the peace of mind that my taxes were being filed correctly was worth the cost.<p>- You don't need a perfect solution from the start, you are working with your client towards something they can use.<p>- You need to stay on top of things and communicate regularly, even if your client doesn't.<p>- Almost all clients wanted me to either come work for them or sell all (rights of) my work to them. This is understandable from their side, but if you want to stay independent you need to set some boundaries.</p>
]]></description><pubDate>Sun, 19 Apr 2026 12:38:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47823866</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=47823866</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47823866</guid></item><item><title><![CDATA[New comment by gsliepen in "Surelock: Deadlock-Free Mutexes for Rust"]]></title><description><![CDATA[
<p>That's an easy answer, but multi-process mutexes are supported on Linux (and perhaps other OSes as well), and it would be nice if this could also be safely handled by something like Surelock. If it would, then it couldn't rely on VM addresses to order locks.</p>
]]></description><pubDate>Sun, 12 Apr 2026 19:48:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47743669</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=47743669</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47743669</guid></item><item><title><![CDATA[New comment by gsliepen in "Surelock: Deadlock-Free Mutexes for Rust"]]></title><description><![CDATA[
<p>What about mutexes living in shared memory, and each process having a different address mapping?</p>
]]></description><pubDate>Sat, 11 Apr 2026 20:05:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=47733540</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=47733540</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47733540</guid></item><item><title><![CDATA[New comment by gsliepen in "Raspberry Pi Pico as AM Radio Transmitter"]]></title><description><![CDATA[
<p>Something similar: <a href="https://www.youtube.com/watch?v=7t7_naYJnHo" rel="nofollow">https://www.youtube.com/watch?v=7t7_naYJnHo</a>
Source code can be found here: <a href="https://github.com/spookysys/attiny-synth" rel="nofollow">https://github.com/spookysys/attiny-synth</a></p>
]]></description><pubDate>Wed, 04 Mar 2026 22:13:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=47254693</link><dc:creator>gsliepen</dc:creator><comments>https://news.ycombinator.com/item?id=47254693</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47254693</guid></item></channel></rss>