<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: jmillikin</title><link>https://news.ycombinator.com/user?id=jmillikin</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 13 Jul 2026 03:50:29 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jmillikin" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jmillikin in "Meta reuses old RAM in new servers with custom bridge chip"]]></title><description><![CDATA[
<p>That's the idea behind Taalas (<a href="https://taalas.com" rel="nofollow">https://taalas.com</a>), except as silicon rather than ROM. They run a demo at <a href="https://chatjimmy.ai/" rel="nofollow">https://chatjimmy.ai/</a> which serves an old open weights model (Llama 3.1 8B) at something like 15,000 tokens per second.</p>
]]></description><pubDate>Thu, 09 Jul 2026 14:25:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=48846412</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=48846412</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48846412</guid></item><item><title><![CDATA[Announcing Zstandard in Rust]]></title><description><![CDATA[
<p>Article URL: <a href="https://trifectatech.org/blog/announcing-zstandard-in-rust/">https://trifectatech.org/blog/announcing-zstandard-in-rust/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48356381">https://news.ycombinator.com/item?id=48356381</a></p>
<p>Points: 63</p>
<p># Comments: 8</p>
]]></description><pubDate>Mon, 01 Jun 2026 13:10:56 +0000</pubDate><link>https://trifectatech.org/blog/announcing-zstandard-in-rust/</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=48356381</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48356381</guid></item><item><title><![CDATA[New comment by jmillikin in "A recent experience with ChatGPT 5.5 Pro"]]></title><description><![CDATA[
<p><p><pre><code>  > The mathematician and the blog author are not the same person
  > (as you seem to understand). Nathanson (the mathematician) is
  > the one who is the expert verifier. He is the person who has
  > the higher value and won't be fired in some hypothetical.
</code></pre>
The article's author is <a href="https://en.wikipedia.org/wiki/Timothy_Gowers" rel="nofollow">https://en.wikipedia.org/wiki/Timothy_Gowers</a></p>
]]></description><pubDate>Mon, 11 May 2026 10:15:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=48093118</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=48093118</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48093118</guid></item><item><title><![CDATA[New comment by jmillikin in "Rewriting Every Syscall in a Linux Binary at Load Time"]]></title><description><![CDATA[
<p>This might be a very dumb question, but if the process is being run under KVM to catch `int 0x03` then couldn't you also use KVM to catch `syscall` and execute the original binary as-is? I don't understand what value the instruction rewriting is providing here.</p>
]]></description><pubDate>Sat, 18 Apr 2026 07:31:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47813923</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=47813923</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47813923</guid></item><item><title><![CDATA[New comment by jmillikin in "Lemonade by AMD: a fast and open source local LLM server using GPU and NPU"]]></title><description><![CDATA[
<p>Surprising that the Linux setup instructions for the server component don't include Docker/Podman as an option, its Snap/PPA for Ubuntu and RPM for Fedora.<p>Maybe the assumption is that container-oriented users can build their own if given native packages?</p>
]]></description><pubDate>Thu, 02 Apr 2026 12:42:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=47613702</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=47613702</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47613702</guid></item><item><title><![CDATA[New comment by jmillikin in "Libbbf: Bound Book Format, A high-performance container for comics and manga"]]></title><description><![CDATA[
<p>It doesn't matter, though. xxhash is better than crc32 for hashing keys in a hash table, but both of them are inappropriate for file checksums -- especially as part of a data archival/durability strategy.<p>It's not obvious to me that per-page checksums in an archive format for comic books are useful at all, but if you really wanted them for some reason then crc32 (fast, common, should detect bad RAM or a decoder bug) or sha256 (slower, common, should detect any change to the bitstream) seem like reasonable choices and xxhash/xxh3 seems like LARPing.</p>
]]></description><pubDate>Wed, 21 Jan 2026 14:14:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=46705978</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=46705978</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46705978</guid></item><item><title><![CDATA[New comment by jmillikin in "Libbbf: Bound Book Format, A high-performance container for comics and manga"]]></title><description><![CDATA[
<p><p><pre><code>  > It seems that JPEG can be decoded on the GPU [1] [2]
</code></pre>
Sure, but you wouldn't want to. Many algorithms <i>can</i> be executed on a GPU via CUDA/ROCm, but the use cases for on-GPU JPEG/PNG decoding (mostly AI model training? maybe some sort of giant megapixel texture?) are unrelated to anything you'd use CBZ for.<p>For a comic book the performance-sensitive part is loading the current and adjoining pages, which can be done fast enough to appear instant on the CPU. If the program does bulk loading then it's for thumbnail generation which would also be on the CPU.<p>Loading compressed comic pages directly to the GPU would be if you needed to ... I dunno, have some sort of VR library browser? It's difficult to think of a use case.<p><pre><code>  > According to smhasher tests [3] CRC32 is not limited by memory bandwidth.
  > Even if we multiply CRC32 scores x4 (to estimate 512 bit wide SIMD from 128
  > bit wide results), we still don't get close to memory bandwidth.
</code></pre>
Your link shows CRC32 at 7963.20 MiB/s (~7.77 GiB/s) which indicates it's either very old or isn't measuring pure CRC32 throughput (I see stuff about the C++ STL in the logs).<p>Look at <a href="https://github.com/corsix/fast-crc32" rel="nofollow">https://github.com/corsix/fast-crc32</a> for example, which measures 85 GB/s (GB, GiB, eh close enough) on the Apple M1. That's fast enough that I'm comfortable calling it limited by memory bandwidth on real-world systems. Obviously if you solder a Raspberry Pi to some GDDR then the ratio differs.<p><pre><code>  > The 32 bit hash of CRC32 is too low for file checksums. xxhash is definitely
  > an improvement over CRC32.
</code></pre>
You don't want to use xxhash (or crc32, or cityhash, ...) for checksums of archived files, that's not what they're designed for. Use them as the key function for hash tables. That's why their output is 32- or 64-bits, they're designed to fit into a machine integer.<p>File checksums don't have the same size limit so it's fine to use 256- or 512-bit checksum algorithms, which means you're not limited to xxhash.<p><pre><code>  > Why would you need to use a cryptographic hash function to check integrity
  > of archived files? Quality a non-cryptographic hash function will detect
  > corruptions due to things like bit-rot, bad RAM, etc. just the same.
</code></pre>
I have personally seen bitrot and network transmission errors that were not caught by xxhash-type hash functions, but were caught by higher-level checksums. The performance properties of hash functions used for hash table keys make those same functions less appropriate for archival.<p><pre><code>  > And why is 256 bits needed here? Kopia developers, for example, think 128
  > bit hashes are big enough for backup archives [4].
</code></pre>
The checksum algorithm doesn't need to be cryptographically strong, but if you're using software written in the past decade then SHA256 is supported everywhere by everything so might as well use it by default unless there's a compelling reason not to.<p>For archival you only need to compute the checksums on file transfer and/or periodic archive scrubbing, so the overhead of SHA256 vs SHA1/MD5 doesn't really matter.<p>I don't know what kopia is, but according to your link it looks like their wire protocol involves each client downloading a complete index of the repository content, including a CAS identifier for every file. The semantics would be something like Git? Their list of supported algorithms looks reasonable (blake, sha2, sha3) so I wouldn't have the same concerns as I would if they were using xxhash or cityhash.</p>
]]></description><pubDate>Wed, 21 Jan 2026 13:42:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=46705603</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=46705603</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46705603</guid></item><item><title><![CDATA[New comment by jmillikin in "Libbbf: Bound Book Format, A high-performance container for comics and manga"]]></title><description><![CDATA[
<p>I use CBZ to archive both physical and digital comic books so I was interested in the idea of an improved container format, but the claimed improvements here don't make sense.<p>---<p>For example they make a big deal about each archive entry being aligned to a 4 KiB boundary "allowing for DirectStorage transfers directly from disk to GPU memory", but the pages within a CBZ are going to be encoded (JPEG/PNG/etc) rather than just being bitmaps. They need to be decoded first, the GPU isn't going to let you create a texture directly from JPEG data.<p>Furthermore the README says "While folders allow memory mapping, individual images within them are rarely sector-aligned for optimized DirectStorage throughput" which ... what? If an image file needs to be sector-aligned (!?) then a BBF file would also need to be, else the 4 KiB alignment within the file doesn't work, so what is special about the format that causes the OS to place its files differently on disk?<p>Also in the official DirectStorage docs (<a href="https://github.com/microsoft/DirectStorage/blob/main/Docs/DeveloperGuidance.md" rel="nofollow">https://github.com/microsoft/DirectStorage/blob/main/Docs/De...</a>) it says this:<p><pre><code>  > Don't worry about 4-KiB alignment restrictions
  > * Win32 has a restriction that asynchronous requests be aligned on a
  >   4-KiB boundary and be a multiple of 4-KiB in size.
  > * DirectStorage does not have a 4-KiB alignment or size restriction. This
  >   means you don't need to pad your data which just adds extra size to your
  >   package and internal buffers.
</code></pre>
Where is the supposed 4 KiB alignment restriction even coming from?<p>There are zip-based formats that align files so they can be mmap'd as executable pages, but that's not what's happening here, and I've never heard of a JPEG/PNG/etc image decoder that requires aligned buffers for the input data.<p>Is the entire 4 KiB alignment requirement fictitious?<p>---<p>The README also talks about using xxhash instead of CRC32 for integrity checking (the OP calls it "verification"), claiming this is more performant for large collections, but this is insane:<p><pre><code>  > ZIP/RAR use CRC32, which is aging, collision-prone, and significantly slower
  > to verify than XXH3 for large archival collections.  
  > [...]  
  > On multi-core systems, the verifier splits the asset table into chunks and
  > validates multiple pages simultaneously. This makes BBF verification up to
  > 10x faster than ZIP/RAR CRC checks.
</code></pre>
CRC32 is limited by memory bandwidth if you're using a normal (i.e. SIMD) implementation. Assuming 100 GiB/s throughput, a typical comic book page (a few megabytes) will take like ... a millisecond? And there's no data dependency between file content checksums in the zip format, so for a CBZ you can run the CRC32 calculations in parallel for each page just like BBF says it does.<p>But that doesn't matter because to actually check the integrity of archived files you want to use something like sha256, not CRC32 or xxhash. Checksum each archive (not each page), store that checksum as a `.sha256` file (or whatever), and now you can (1) use normal tools to check that your archives are intact, and (2) record those checksums as metadata in the blob storage service you're using.<p>---<p>The Reddit thread has more comments from people who have noticed other sorts of discrepancies, and the author is having a <i>really</i> difficult time responding to them in a coherent way. The most charitable interpretation is that this whole project (supposed problems with CBZ, the readme, the code) is the output of an LLM.</p>
]]></description><pubDate>Wed, 21 Jan 2026 08:24:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=46702645</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=46702645</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46702645</guid></item><item><title><![CDATA[New comment by jmillikin in "Chromium Has Merged JpegXL"]]></title><description><![CDATA[
<p>I'm not (only) talking about the general population, but major sites. As a quick sanity check, the following sites are serving images with the `image/jpeg` content type:<p>* CNN (cnn.com): News-related photos on their front page<p>* Reddit (www.reddit.com): User-provided images uploaded to their internal image hosting<p>* Amazon (amazon.com): Product categories on the front page (product images are in WebP)<p>I wouldn't expect to see a lot of WebP on personal homepages or old-style forums, but if bandwidth costs were a meaningful budget line item then I would expect to see ~100% adoption of WebP or AVIF for any image that gets recompressed by a publishing pipeline.</p>
]]></description><pubDate>Tue, 13 Jan 2026 10:22:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46599210</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=46599210</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46599210</guid></item><item><title><![CDATA[New comment by jmillikin in "Chromium Has Merged JpegXL"]]></title><description><![CDATA[
<p>Most of the code in WebP and AVIF is shared with VP8/AV1, which means if your browser supports contemporary video codecs then it also gets pretty good lossy image codecs for free. JPEG-XL is a separate codebase, so it's far more effort to implement and merely providing better compression might not be worth it absent other considerations. The continued widespread use of JPEG is evidence that many web publishers don't care <i>that</i> much about squeezing out a few bytes.<p>Also from a security perspective the reference implementation of JPEG-XL isn't great. It's over a hundred kLoC of C++, and given the public support for memory safety by both Google and Mozilla it would be extremely embarrassing if a security vulnerability in libjxl lead to a zero-click zero-day in either Chrome or Firefox.<p>The timing is probably a sign that Chrome considers the Rust implementation of JPEG-XL to be mature enough (or at least heading in that direction) to start kicking the tires.</p>
]]></description><pubDate>Tue, 13 Jan 2026 09:12:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=46598783</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=46598783</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46598783</guid></item><item><title><![CDATA[First-class custom smart pointers]]></title><description><![CDATA[
<p>Article URL: <a href="https://nadrieril.github.io/blog/2025/11/11/truly-first-class-custom-smart-pointers.html">https://nadrieril.github.io/blog/2025/11/11/truly-first-class-custom-smart-pointers.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45912771">https://news.ycombinator.com/item?id=45912771</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 13 Nov 2025 09:34:45 +0000</pubDate><link>https://nadrieril.github.io/blog/2025/11/11/truly-first-class-custom-smart-pointers.html</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=45912771</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45912771</guid></item><item><title><![CDATA[Progress update on Clang's new constant expression interpreter]]></title><description><![CDATA[
<p>Article URL: <a href="https://developers.redhat.com/articles/2025/10/15/clang-bytecode-interpreter-update">https://developers.redhat.com/articles/2025/10/15/clang-bytecode-interpreter-update</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45654533">https://news.ycombinator.com/item?id=45654533</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 21 Oct 2025 11:20:41 +0000</pubDate><link>https://developers.redhat.com/articles/2025/10/15/clang-bytecode-interpreter-update</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=45654533</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45654533</guid></item><item><title><![CDATA[New comment by jmillikin in "Introduction to reverse-engineering vintage synth firmware"]]></title><description><![CDATA[
<p>The <a href="https://github.com/blackjetrock/ghidra-6303" rel="nofollow">https://github.com/blackjetrock/ghidra-6303</a> repository your post links to (containing a SLEIGH spec for the HD6303) is no longer available, did you happen to save a local clone that could be re-uploaded somewhere?</p>
]]></description><pubDate>Mon, 20 Oct 2025 06:27:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=45640601</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=45640601</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45640601</guid></item><item><title><![CDATA[Introduction to reverse-engineering vintage synth firmware]]></title><description><![CDATA[
<p>Article URL: <a href="https://ajxs.me/blog/Introduction_to_Reverse-Engineering_Vintage_Synth_Firmware.html">https://ajxs.me/blog/Introduction_to_Reverse-Engineering_Vintage_Synth_Firmware.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45639860">https://news.ycombinator.com/item?id=45639860</a></p>
<p>Points: 196</p>
<p># Comments: 27</p>
]]></description><pubDate>Mon, 20 Oct 2025 02:56:20 +0000</pubDate><link>https://ajxs.me/blog/Introduction_to_Reverse-Engineering_Vintage_Synth_Firmware.html</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=45639860</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45639860</guid></item><item><title><![CDATA[The biggest semantic mess in Futhark]]></title><description><![CDATA[
<p>Article URL: <a href="https://futhark-lang.org/blog/2025-09-26-the-biggest-semantic-mess.html">https://futhark-lang.org/blog/2025-09-26-the-biggest-semantic-mess.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45445260">https://news.ycombinator.com/item?id=45445260</a></p>
<p>Points: 63</p>
<p># Comments: 8</p>
]]></description><pubDate>Thu, 02 Oct 2025 00:38:38 +0000</pubDate><link>https://futhark-lang.org/blog/2025-09-26-the-biggest-semantic-mess.html</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=45445260</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45445260</guid></item><item><title><![CDATA[New comment by jmillikin in "Git: Introduce Rust and announce it will become mandatory in the build system"]]></title><description><![CDATA[
<p>There's at least one proprietary platform that supports Git built by via a vendor-provided C compiler, but for which no public documentation exists and therefore no LLVM support is possible.<p>Ctrl+F for "NonStop" in <a href="https://lwn.net/Articles/998115/" rel="nofollow">https://lwn.net/Articles/998115/</a></p>
]]></description><pubDate>Sat, 20 Sep 2025 13:50:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=45313407</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=45313407</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45313407</guid></item><item><title><![CDATA[New comment by jmillikin in "JSON is not a YAML subset (2022)"]]></title><description><![CDATA[
<p>Among ecosystems based on YAML-formatted configuration defaulting to YAML 1.1 is nearly universal. The heyday of YAML was during the YAML 1.1 era, and those projects can't change their YAML parsers' default version to 1.2 without breaking extant config files.<p>By the time YAML 1.2 had been published and implementations written, greenfield projects were using either JSON5 (a true superset of JSON) or TOML.<p><pre><code>  > While JSON numbers are grammatically simple, they're almost always distinct
  > from how you'd implement numbers in any language that has JSON parsers,
  > syntactically, exactness and precision-wise.
</code></pre>
For statically-typed languages the range and precision is determined by the type of the destination value passed to the parser; it's straightforward to reject (or clamp) a JSON number `12345` being parsed into a `uint8_t`.<p>For dynamically-typed languages there's less emphasis on performance, so using an arbitrary-precision numeric type (Python's Decimal, Go's "math/big" types) provide lossless decoding.<p>The only language I know of that really struggles with JSON numbers is, ironically, JavaScript -- its BigInt type is relatively new and not well integrated with its JSON API[0], and it doesn't have an arbitrary-precision type.<p>[0] See <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON#using_json_numbers" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...</a> for the incantation needed to encode a BigInt as a number.</p>
]]></description><pubDate>Fri, 01 Aug 2025 23:13:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=44763470</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=44763470</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44763470</guid></item><item><title><![CDATA[Tracking source locations in the Futhark compiler]]></title><description><![CDATA[
<p>Article URL: <a href="https://futhark-lang.org/blog/2025-07-29-tracking-source-locations.html">https://futhark-lang.org/blog/2025-07-29-tracking-source-locations.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44742359">https://news.ycombinator.com/item?id=44742359</a></p>
<p>Points: 43</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 31 Jul 2025 04:40:31 +0000</pubDate><link>https://futhark-lang.org/blog/2025-07-29-tracking-source-locations.html</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=44742359</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44742359</guid></item><item><title><![CDATA[Hacking Coroutines into C]]></title><description><![CDATA[
<p>Article URL: <a href="https://wiomoc.de/misc/posts/hacking_coroutines_into_c.html">https://wiomoc.de/misc/posts/hacking_coroutines_into_c.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44546640">https://news.ycombinator.com/item?id=44546640</a></p>
<p>Points: 160</p>
<p># Comments: 42</p>
]]></description><pubDate>Sun, 13 Jul 2025 01:12:37 +0000</pubDate><link>https://wiomoc.de/misc/posts/hacking_coroutines_into_c.html</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=44546640</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44546640</guid></item><item><title><![CDATA[Bin2Wrong: A fuzzer for uncovering semantic errors in binary-to-C decompilers [pdf]]]></title><description><![CDATA[
<p>Article URL: <a href="https://futures.cs.utah.edu/papers/25ATC.pdf">https://futures.cs.utah.edu/papers/25ATC.pdf</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44516637">https://news.ycombinator.com/item?id=44516637</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 10 Jul 2025 02:27:11 +0000</pubDate><link>https://futures.cs.utah.edu/papers/25ATC.pdf</link><dc:creator>jmillikin</dc:creator><comments>https://news.ycombinator.com/item?id=44516637</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44516637</guid></item></channel></rss>