<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: jcalvinowens</title><link>https://news.ycombinator.com/user?id=jcalvinowens</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 28 Jul 2026 12:21:34 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jcalvinowens" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jcalvinowens in "ECC and DDR5"]]></title><description><![CDATA[
<p>> One thing that concerns me is the possibility of on-die ECC interacting with ECC on the motherboard and reducing it’s effectiveness<p>DDR5 on-die ECC detects and corrects one-bit errors. It cannot detect two-bit errors, so it will miscorrect some of them into three-bit errors. My understanding is that the on-die error correction scheme is specifically specially designed such that the resulting three-bit errors are mathematically guaranteed to be detected as uncorrectable two-bit errors by a standard full system-level ECC running on top of the on-die ECC. But I've never found a real authoritative reference that directly says that.</p>
]]></description><pubDate>Mon, 20 Jul 2026 14:29:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=48979378</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48979378</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48979378</guid></item><item><title><![CDATA[New comment by jcalvinowens in "AMD Readies Full Open-Source HDMI 2.1 Support for Linux"]]></title><description><![CDATA[
<p>HDCP1 is completely broken, you can buy HDCP2.x strippers on amazon (they're often marketed as "converters").</p>
]]></description><pubDate>Fri, 26 Jun 2026 15:39:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48687951</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48687951</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48687951</guid></item><item><title><![CDATA[New comment by jcalvinowens in "Benchmarking OpenZFS vs. EXT4 for My NAS"]]></title><description><![CDATA[
<p>+1 for btrfs<p>If a NAS has a 1G or even 2.5G NIC, improving the filesystem performance is a waste of time... the network is the bottleneck. My N100 two-disk btrfs-raid1 NAS hits line rate on a 2.5G NIC, that's all that matters to me.</p>
]]></description><pubDate>Thu, 18 Jun 2026 16:38:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=48587984</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48587984</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48587984</guid></item><item><title><![CDATA[New comment by jcalvinowens in "Linux 7.1"]]></title><description><![CDATA[
<p>It's actually faster than I remembered:<p><pre><code>  {0}[calvinow@sousa ~/git/linux] git describe
  v7.1
  {0}[calvinow@sousa ~/git/linux] git clean -dffxq
  {0}[calvinow@sousa ~/git/linux] zcat /proc/config.gz > .config
  {0}[calvinow@sousa ~/git/linux] time make -skj32 tar-pkg
  './System.map' -> 'tar-install/boot/System.map-7.1.0'
  '.config' -> 'tar-install/boot/config-7.1.0'
  './vmlinux' -> 'tar-install/boot/vmlinux-7.1.0'
  'arch/x86/boot/bzImage' -> 'tar-install/boot/vmlinuz-7.1.0'
  
  real    0m56.539s
  user    18m41.863s
  sys     2m8.754s</code></pre></p>
]]></description><pubDate>Mon, 15 Jun 2026 21:12:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48547078</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48547078</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48547078</guid></item><item><title><![CDATA[New comment by jcalvinowens in "Linux 7.1"]]></title><description><![CDATA[
<p>No, 90 seconds is the clean build time without ccache.</p>
]]></description><pubDate>Mon, 15 Jun 2026 15:31:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=48542783</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48542783</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48542783</guid></item><item><title><![CDATA[New comment by jcalvinowens in "Linux 7.1"]]></title><description><![CDATA[
<p>> The build takes about 30-45 minutes<p>If you don't actually need all the drivers, you can use "make localmodconfig" to substantially reduce that. My local kernels build in 90 seconds on a 32-thread desktop machine :)<p>The kernel is a lot more stable than people think: I run the daily linux-next on my Debian stable gaming PC to look for bugs, and I don't find very many.</p>
]]></description><pubDate>Sun, 14 Jun 2026 18:50:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=48531111</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48531111</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48531111</guid></item><item><title><![CDATA[New comment by jcalvinowens in "A key remapping daemon for Linux"]]></title><description><![CDATA[
<p>I love keyd, it uses uinput so it works on the vtty too.</p>
]]></description><pubDate>Sat, 13 Jun 2026 16:52:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=48519045</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48519045</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48519045</guid></item><item><title><![CDATA[New comment by jcalvinowens in "Magnetoelectric antennas could transform how underwater robots talk"]]></title><description><![CDATA[
<p><a href="https://arxiv.org/pdf/2411.09241" rel="nofollow">https://arxiv.org/pdf/2411.09241</a></p>
]]></description><pubDate>Wed, 10 Jun 2026 22:18:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=48483513</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48483513</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48483513</guid></item><item><title><![CDATA[New comment by jcalvinowens in "What is the purpose of the lost+found folder in Linux and Unix? (2014)"]]></title><description><![CDATA[
<p>XFS does use /lost+found, it calls it the "orphanage directory" and xfs_repair reparents children of corrupt directories there.<p>Based on comments in the kernel source, it seems like the userspace fsck for JFS and F2FS will also sometimes create /lost+found. There might be more that do.</p>
]]></description><pubDate>Sun, 07 Jun 2026 18:50:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48437546</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48437546</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48437546</guid></item><item><title><![CDATA[New comment by jcalvinowens in "Moving beyond fork() + exec()"]]></title><description><![CDATA[
<p>It is a weirdly common misconception that that fork() is cheap... it is O(N) on the size of the process, and it always has been.<p>Yes, it's copy on write... but there is a linear relationship between the size of the process and the number of page table entries required to represent it.</p>
]]></description><pubDate>Sat, 06 Jun 2026 16:28:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=48426518</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48426518</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48426518</guid></item><item><title><![CDATA[New comment by jcalvinowens in "32GB of DDR5 now costs $375 – AI shortage continues to squeeze PC building"]]></title><description><![CDATA[
<p>It's unbelievable and it's only getting worse.<p>A 2x32GB DDR5 kit I paid $150 for 11 months ago costs $910 today from the same retailer. A 2x16GB DRR4 kit that was $105 last year is now $230.<p>The RAM alone in my newest machine would sell for over double what I paid for the entire machine one year ago.</p>
]]></description><pubDate>Wed, 03 Jun 2026 16:54:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=48386490</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48386490</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48386490</guid></item><item><title><![CDATA[New comment by jcalvinowens in "Building a Host-Tuned GCC to Make GCC Compile Faster"]]></title><description><![CDATA[
<p>There's a tradeoff here people often ignore: how much does the power consumption increase? In my experience, you end up using more total power because the SIMD instructions are so much more power hungry.<p>In the cloud, you don't pay the power bill and you have no reason to care. But it's not always like that.</p>
]]></description><pubDate>Mon, 25 May 2026 15:29:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=48268011</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48268011</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48268011</guid></item><item><title><![CDATA[New comment by jcalvinowens in "Waymo expands pause to four cities as robotaxis keep driving into floods"]]></title><description><![CDATA[
<p>The waymos are so consistently badly overpriced I've stopped even bothering to look. Nobody I know rides them! But they have riders more than half the time I walk by them, so clearly they're making money off <i>somebody</i>...</p>
]]></description><pubDate>Sat, 23 May 2026 15:50:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=48248680</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48248680</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48248680</guid></item><item><title><![CDATA[New comment by jcalvinowens in "AI is just unauthorised plagiarism at a bigger scale"]]></title><description><![CDATA[
<p>Yeah. It's becoming unbelievable how different the prevailing opinions on this site are from those of real people I know and work with. That's always been true to some extent... but good lord, it's like reading the news in a parallel universe right now.</p>
]]></description><pubDate>Thu, 21 May 2026 14:55:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=48223799</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48223799</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48223799</guid></item><item><title><![CDATA[New comment by jcalvinowens in "The occasional ECONNRESET"]]></title><description><![CDATA[
<p>As others have noted, this usually happens because both sides wrote data and one side didn't read it before calling close().<p>Here's a little reproducer: <a href="https://gist.github.com/jcalvinowens/da57edda9a01ca9f4c4088a2b629877e" rel="nofollow">https://gist.github.com/jcalvinowens/da57edda9a01ca9f4c4088a...</a><p><pre><code>    $ gcc -O2 test.c -o test
    
    $ strace -e socket,connect,write,accept,read,close ./test --rx        
    <...>                                                                           
    socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3                                                                           
    accept(3, NULL, NULL)                   = 4                                                                            
    close(3)                                = 0                                                                            
    read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
    <...>
    read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
    read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 3035
    read(4, "", 4096)                       = 0
    close(4)                                = 0
    +++ exited with 0 +++

    $ strace -e socket,connect,write,accept,read,close ./test --tx
    <...>
    socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3
    connect(3, {sa_family=AF_INET, sin_port=htons(31337), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
    write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 600000) = 600000
    close(3)                                = 0
    +++ exited with 0 +++
</code></pre>
...versus:<p><pre><code>    $ gcc -O2 -DWRITE_TO_SOCKET_BEFORE_READ test.c -o test
    
    $ strace -e socket,connect,write,accept,read,close ./test --rx
    <...>
    socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3
    accept(3, NULL, NULL)                   = 4
    close(3)                                = 0
    write(4, "\250\3\0\0\0\0\0\0\250\3\0\0\0\0\0\0$\0\0\0\0\0\0\0$\0\0\0\0\0\0\0"..., 4096) = 4096
    read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
    <...>
    read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 997
    read(4, 0x7ffd45c2d3c0, 4096)           = -1 ECONNRESET (Connection reset by peer)
    <...>
    +++ exited with 1 +++
    
    $ strace -e socket,connect,write,accept,read,close ./test --tx
    <...>
    socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3
    connect(3, {sa_family=AF_INET, sin_port=htons(31337), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
    write(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 600000) = 600000
    close(3) 
    +++ exited with 0 +++</code></pre></p>
]]></description><pubDate>Sun, 17 May 2026 21:19:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=48173292</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48173292</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48173292</guid></item><item><title><![CDATA[New comment by jcalvinowens in "New Nginx Exploit"]]></title><description><![CDATA[
<p>If the workers weren't forked, the entire process would die to the SIGSEGV, and when it restarted the heap would be at a new address because of ASLR. This exploit couldn't work against a threaded daemon for that reason (only one guess).<p>In a world where they <i>are</i> forked, having a randomized heap base in each worker would also defeat the brute force approach. Instead of just fork(), it could execve() itself with some arguments that tell it to be a worker and where to find its brain, that effectively do an ASLR for each worker.</p>
]]></description><pubDate>Fri, 15 May 2026 17:00:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48151012</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48151012</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48151012</guid></item><item><title><![CDATA[New comment by jcalvinowens in "Bare-metal STM32: vector table, linker script, and startup code from scratch"]]></title><description><![CDATA[
<p>Does anybody else remember the Excel spreadsheet with a bunch of drop down menus that fed 1kloc of embedded visual basic to generate a C function to program the STM32 clock registers based on your selections? Top ten silliest things I've seen in my career for sure...<p>Related, I have a little end-to-end example of a piece of hardware with an STM32 running bare metal firmware like this: <a href="https://github.com/jcalvinowens/ledboard" rel="nofollow">https://github.com/jcalvinowens/ledboard</a></p>
]]></description><pubDate>Fri, 15 May 2026 07:05:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48145436</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48145436</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48145436</guid></item><item><title><![CDATA[New comment by jcalvinowens in "New Nginx Exploit"]]></title><description><![CDATA[
<p>I mean... you're missing the forest for the trees, but yes I meant "address space" generally not "stack" specifically. The nginx threads are forked, it would not be that terribly complex to set up a heap with a new random address base in each worker (the only real complexity is dealing with heap allocations which happened before fork()). But the stack matters too, generally moreso.</p>
]]></description><pubDate>Fri, 15 May 2026 06:19:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48145165</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48145165</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48145165</guid></item><item><title><![CDATA[New comment by jcalvinowens in "New Nginx Exploit"]]></title><description><![CDATA[
<p>> Apache used forked processes; I don't think that's unique or a particular issue.<p>Of course it is... in a typical threaded daemon, the threads have randomized stack addresses. Exactly as you observed, you get unlimited tries because nginx dutifully restarts the worker process with the same literal stack address every time it segfaults. I'm willing to bet the ASLR break they claim to have relies on that, but I'd be happy to be proven wrong if they publish it :)</p>
]]></description><pubDate>Fri, 15 May 2026 02:36:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=48143884</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48143884</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48143884</guid></item><item><title><![CDATA[New comment by jcalvinowens in "Int a = 5; a = a++ + ++a; a =? (2011)"]]></title><description><![CDATA[
<p>Both major compilers yell at you for this nowadays... it's pretty unforgivable IMHO for somebody to be asking it as an exam or interview question if the right answer isn't "undefined":<p><pre><code>    <source>:5:10: warning: multiple unsequenced modifications to 'a' [-Wunsequenced]
        5 |     a = a++ + ++a;
          |         


    <source>:5:7: warning: operation on 'a' may be undefined [-Wsequence-point]
        5 |     a = a++ + ++a;
          |     ~~^~~~~~~~~~~</code></pre></p>
]]></description><pubDate>Thu, 14 May 2026 22:12:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48141955</link><dc:creator>jcalvinowens</dc:creator><comments>https://news.ycombinator.com/item?id=48141955</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48141955</guid></item></channel></rss>