<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: csense</title><link>https://news.ycombinator.com/user?id=csense</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 13 Aug 2026 23:43:48 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=csense" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by csense in "The Art of 64-bit Assembly"]]></title><description><![CDATA[
<p>I'm sorry, MASM?  All the cool kids use NASM or YASM.</p>
]]></description><pubDate>Sat, 01 Aug 2026 16:17:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=49135690</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=49135690</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49135690</guid></item><item><title><![CDATA[New comment by csense in "RipGrep musl binaries occasionally segfault during very-large searches"]]></title><description><![CDATA[
<p>This is technical writing for kernel developers who already know how memory management works.  If you want to understand it better, you should study up on the x86 MMU and the kernel memory management subsystem.  I'm not a kernel expert but I found it pretty understandable, so I'll try to explain it.<p>MMU:  The memory management unit, part of the CPU designed to allow an OS kernel to flexibly control how memory addresses used by a program map to physical RAM.<p>Page:  A 4k region of memory addresses.<p>Anonymous:  The page is just regular old memory used by a single process for general purposes, it's not part of e.g. a memory-mapped file.<p>Backing:  The memory corresponding to a page.  The kernel can direct the MMU to map any page to any part of RAM, or delete the mapping entirely.<p>Zero page:  The kernel keeps a single 4 KB page filled with zeros (the "zero page").<p>Page fault:  An error that occurs when you try to write a page that's not present, or write to a read-only page.  Some page faults are normal and expected by the kernel, they support features like swapping, memory-mapped files, etc.  Such "expected" page faults are invisible to your program.  (On the other hand, an unexpected page fault occurs when your program just straight-up accesses an address it's not supposed to, which will end your program with a SIGSEGV signal -- an all-too-familiar experience for a C programmer.)<p>When you allocate say 4 MB of memory, the kernel simply sets it to 1k read-only copies of the 4 KB zero page.  Then when your program tries to write to a page, it faults.  The kernel handles this expected fault by assigning that page an individualized memory region.  If a program allocates a lot of memory, it's only assigned memory for what it actually uses, when it first uses it.  This is an optimization:  Every program that allocates more memory than it needs is wasteful, but the kernel can recover that waste by not backing the allocation with memory -- the program has to prove each page is needed by writing to it.<p>Store to a freshly-faulted anonymous page:  The program stored data to its own memory, which caused an expected page fault.<p>> becomes invisible to that same thread's reload ~10 instructions later<p>The thread fairly quickly tried to read the data from the same place in memory it had just written to.  It doesn't get the same data back.  <i>This is a major problem</i> that causes the program to malfunction and crash.<p>> A pagemap read at the instant of the fault shows the backing is the kernel's zero page<p>The expected fault occurred because the program tried to write to an address that was mapped to the zero page, probably because it's the first write to freshly allocated memory.  (This rules out other reasons it might be faulted, e.g. the page had been swapped to disk.)<p>> concurrent munmap's TLB shootdown<p>The page table is big and slow so the CPU caches parts of it in an area called the TLB (translation lookaside buffer).  munmap is a kernel function that removes the backing for an address region.  Since munmap changes the mapping, it has to inform the MMU the relevant part of the TLB is no longer valid.<p>> per-VMA-lock anonymous-fault fast path<p>This is what the kernel does when the program first writes to a zero page.  Saying it's the "fast path" implies there's some (slow) special case handling in the kernel code, but the bug doesn't trigger any of the special cases, we're in the most common case, which the kernel code tries to handle as quickly as possible because it has measurable impact on performance.  I would guess per-VMA-lock has to do with how the kernel synchronizes this code (a "lock" is a basic synchronization primitive, you should be familiar with it if you do any kind of multithreaded programming).<p>> The mechanism localizes to the interaction between the per-VMA-lock anonymous-fault fast path and a concurrent munmap's TLB shootdown. A source-level review of Linux 7.0.12 identifies a specific race in that interaction<p>The mechanism:  What's actually happening to cause the program not to be able to load data it just stored in memory.<p>Localizes:  The cause of a problem like this is a needle in a haystack -- it could be caused by the program, the kernel or the hardware.  The analysis has narrowed down the haystack to a specific part of the kernel code.<p>Race in that interaction:  Two parts of the kernel code, (1) The kernel code for munmap and (2) the kernel code to handle a program's first write to the read-only zero page for a fresh allocation.  These two parts work fine individually but the problem occurs when they both try to change the page tables / TLB at exactly the same time.  This is quite a small, specific haystack compared to "somewhere in the program, kernel or hardware" we started with.</p>
]]></description><pubDate>Sat, 01 Aug 2026 16:09:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=49135614</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=49135614</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49135614</guid></item><item><title><![CDATA[New comment by csense in "Iran struck Amazon data centers again amid widening war, satellites show"]]></title><description><![CDATA[
<p>Jeff Bezos is probably calling everyone he knows in Washington right now.  The big question is, does he say "End this war immediately to stop them from bombing my datacenters" or "Escalate this war immediately to get revenge for them bombing my datacenters"?</p>
]]></description><pubDate>Sat, 01 Aug 2026 00:39:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=49130060</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=49130060</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49130060</guid></item><item><title><![CDATA[New comment by csense in "Don't ask an LLM for a confidence score"]]></title><description><![CDATA[
<p>It's obvious to me that writing "Give me a confidence score from 1-5" in your prompt will have disappointing results if you use that score directly.  If you want self-reported confidence scores that are at all useful, you need to think about statistics and score calibration regardless of whether those scores are produced by an LLM or a human.<p>Take a corpus of problems you know the answers to, but the AI sometimes gets wrong [1].  Have the AI try to solve each problem and give you a 1-5 integer confidence score.  The known proportion of correct answers in each bucket gives you a mapping from scores to probabilities [2].<p>[1] One possible corpus creation strategy might be math problems that you really need to run a program to solve.  You can run the program to generate the correct answer key, but disallow tool calling for the AI.<p>[2] I'm pretty sure there's some stats wizardry that will let you put error bars on each bucket's probability based on the number of problems that end up in each bucket.</p>
]]></description><pubDate>Tue, 28 Jul 2026 15:04:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=49085035</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=49085035</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49085035</guid></item><item><title><![CDATA[Microsoft's 90s Weapon That Made Windows Fast [video]]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.youtube.com/watch?v=jH0BYAkPj78">https://www.youtube.com/watch?v=jH0BYAkPj78</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48769514">https://news.ycombinator.com/item?id=48769514</a></p>
<p>Points: 3</p>
<p># Comments: 2</p>
]]></description><pubDate>Fri, 03 Jul 2026 01:21:34 +0000</pubDate><link>https://www.youtube.com/watch?v=jH0BYAkPj78</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=48769514</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48769514</guid></item><item><title><![CDATA[New comment by csense in "30-year sentence for transporting zines is a five-alarm fire for free speech"]]></title><description><![CDATA[
<p>Was this a jury trial?</p>
]]></description><pubDate>Tue, 30 Jun 2026 12:24:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48731717</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=48731717</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48731717</guid></item><item><title><![CDATA[New comment by csense in ".self: A new top-level domain designed to support self-hosting"]]></title><description><![CDATA[
<p>Perfect attendance is not a good goal to aspire to.  Kids force themselves (or get forced by parents) to go to school while sick, which is probably bad for their health and also risks everybody else's health.</p>
]]></description><pubDate>Tue, 30 Jun 2026 12:21:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48731693</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=48731693</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48731693</guid></item><item><title><![CDATA[New comment by csense in "Solar generates more energy in US than coal for first time"]]></title><description><![CDATA[
<p>This is a great link.  The most interesting feature of the solar graph is the amplitude of the seasonal variations.  It looks like we typically generating ~100% more solar power in July than December.<p>If "we need to store solar energy from summer to winter" is indeed a significant issue, maybe you could use the extra power in summertime to make natural gas [1] and then store the gas until you need it in the winter.<p>[1] <a href="https://www.terraformindustries.com/" rel="nofollow">https://www.terraformindustries.com/</a> is a startup working on turning solar power into natural gas</p>
]]></description><pubDate>Thu, 11 Jun 2026 23:23:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48497803</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=48497803</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48497803</guid></item><item><title><![CDATA[New comment by csense in "When AI Builds Itself: Our progress toward recursive self-improvement"]]></title><description><![CDATA[
<p>> they shouldn't be allowed to?<p>Anthropic addresses this head-on in the final section of the paper titled "What should we do?"  If you convince the US government to slow AI development, you have to convince China too, otherwise you're not stopping self-improving AI at all, you're just throwing away the lead to China.  If you convince China too, China or the US or both might go back on their word and build self-improving AI secretly, for greed of the benefits it could bring or fear the other will go back on their word.<p>What you really need is a non-proliferation regime like the one for nuclear weapons, where every country makes potentially dangerous AI illegal and lets foreign or international inspectors monitor to check that nobody's building illegal AI in secret.  But monitoring seems hard; it's general-purpose computation.  How do you check whether a given datacenter is training an illegal AI and not just serving websites, running detailed protein folding simulations, or mining crypto?  For that matter, how do you know that a nondescript industrial facility hasn't been repurposed into a hidden datacenter for training illegal AI?</p>
]]></description><pubDate>Sat, 06 Jun 2026 03:34:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48421130</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=48421130</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48421130</guid></item><item><title><![CDATA[New comment by csense in "Dutch solar owners asked to switch off during peak to ease distribution crisis"]]></title><description><![CDATA[
<p>Central control of heat pumps sounds like a dystopian nightmare.  I don't want to give somebody outside my house the ability to shut off my heating or cooling.<p>The real problem is that the price of electricity isn't high enough.  When supply is running out, raise the price so supply and demand can find equilibrium, then invest the new revenue into increasing capacity.</p>
]]></description><pubDate>Sat, 06 Jun 2026 02:39:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=48420879</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=48420879</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48420879</guid></item><item><title><![CDATA[New comment by csense in "The abandoned war: Why no one is stopping the genocide in Sudan"]]></title><description><![CDATA[
<p>Let's be honest.  If someone did send in the troops to restore order, people would be screaming "How dare you invade a sovereign country" or "You're only doing this because you want oil" or "The President wants to make Sudan the 51st state" or "You're wasting money and soldiers' lives messing around in a place most of us can't even put on a map" or "You're just doing whatever the Jews tell you to do."</p>
]]></description><pubDate>Tue, 21 Apr 2026 14:06:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47849026</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=47849026</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47849026</guid></item><item><title><![CDATA[New comment by csense in "Michael O. Rabin has passed away"]]></title><description><![CDATA[
<p>Miller-Rabin primality test immediately came to mind.  But apparently he improved Berlekamp's algorithm, and is responsible for the pumping lemma [1] as well.<p>I agree with other posters; Rabin deserves an HN black bar.<p>[1] Basically, the pumping lemma says if you feed a finite state machine a long enough input, the FSM must loop.  You can delete the looping part of the input or insert extra copies of it; the FSM can't tell the difference, it has to give the same output.  In theoretical computer science, the pumping lemma is usually introduced early, as the simplest example of a theorem that proves there are things that cannot be computed by a certain class of computing machines (FSMs).</p>
]]></description><pubDate>Wed, 15 Apr 2026 17:20:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47782165</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=47782165</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47782165</guid></item><item><title><![CDATA[New comment by csense in "The rational conclusion of doomerism is violence"]]></title><description><![CDATA[
<p>"It’s not a safety movement. It’s a priesthood with an origin story written in fanfiction."  Is that the opinion of the author, or an LLM?<p>I feel like this is one topic where using an LLM detracts from the author's thesis; doubly so if they don't disclose it.</p>
]]></description><pubDate>Mon, 13 Apr 2026 21:25:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=47758022</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=47758022</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47758022</guid></item><item><title><![CDATA[New comment by csense in "Antimatter has been transported for the first time"]]></title><description><![CDATA[
<p>From a layman's point of view antimatter seems like an ideal spacecraft fuel.  It's as energy dense as E = mc^2 allows, and if you have infrastructure to make it, the only input you need to produce it is electricity.<p>Being able to transport it seems like an important piece of that puzzle.<p>Production and storage would need to be scaled by many orders of magnitude, but that's merely an engineering problem...right?</p>
]]></description><pubDate>Wed, 25 Mar 2026 16:31:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=47519618</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=47519618</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47519618</guid></item><item><title><![CDATA[New comment by csense in "Jury finds Meta liable in case over child sexual exploitation on its platforms"]]></title><description><![CDATA[
<p>We used to believe in freedom of speech and freedom of association.<p>Since the dawn of the Internet era, we've had a legal principle that platforms are relatively shielded from liability for what their users do.<p>It's the Internet.  There's sexual content and sketchy characters on it.  Occasionally people will encounter them -- even if they're under 18.<p>Anyone who grew up in the mid-1990s or later, think back to your own Internet usage when you were under 18.  You probably found something NSFW or NSFL, dealt with it, and came out basically OK after applying your common sense.  Maybe it was shocking and mildly traumatizing -- <i>but having negative experience is how we grow</i>.  Part of growing up is honing one's sense of "that link is staying blue" or "I'm not comfortable with this, it's time to GTFO".  And it seems a lot safer if you encounter the sketchy side of humanity from the other side of a screen.  Think about how a young person's exposure to the underbelly of humanity might have gone in pre-Internet times:  Get invited to a party, find out it's in the bad part of town and there are a bunch of sketchy people there -- well, you're exposed to all kinds of physical risks.  You can't leave the party as easily as you can put your phone down.<p>I stopped logging onto Facebook regularly around 2009; I only log in a couple times a year.  I hate what Facebook has become in the past decade and a half.<p>But giving a site with millions of users a multi-hundred-million-dollar fine because some of those users behave badly seems...asinine.<p>If your kid is old enough and responsible enough to be given unsupervised Internet access, you'd better teach them how to deal with the skeevy stuff they might encounter.</p>
]]></description><pubDate>Wed, 25 Mar 2026 13:49:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=47517333</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=47517333</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47517333</guid></item><item><title><![CDATA[New comment by csense in "Generating All 32-Bit Primes (Part I)"]]></title><description><![CDATA[
<p>I'm pretty sure you can get rid of the 0xFFFFFFFF / p and get some more speedup by manually implementing the bitarray ops.  You can get another boost by using BSF instruction [1] to quickly scan for the next set bit.  And you really only need to store odd numbers; storing the even numbers is just wasteful.<p>You can get even more speedup by taking into account cache effects.  When you cross out all the multiples of 3 you use 512MB of bandwidth.  Then when you cross out all multiples of 5 you use 512MB more.  Then 512MB again when you cross out all multiples of 7.  The fundamental problem is that you have many partially generated cache-sized chunks and you cycle through them in order with each prime.  I'm pretty sure it's faster if you instead fully generate each chunk and then never access it again.  So e.g. if your cache is 128k you create a 128k chunk and cross out multiples of 3, 5, 7, etc. <i>for that 128k chunk</i>.  Then you do the next 128k chunk again crossing out multiples of 3, 5, 7, etc.  That way you only use ~512MB of memory bandwidth <i>in total</i> instead of 512MB <i>per prime number</i>.  (Actually it's only really that high for small primes, it starts becoming less once your primes get bigger than the number of bits in a cache line.)<p>[1] <a href="https://en.wikipedia.org/wiki/Find_first_set" rel="nofollow">https://en.wikipedia.org/wiki/Find_first_set</a></p>
]]></description><pubDate>Sun, 15 Mar 2026 20:12:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=47391363</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=47391363</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47391363</guid></item><item><title><![CDATA[New comment by csense in "California's Digital Age Assurance Act, and FOSS"]]></title><description><![CDATA[
<p>Just in case your answers to the parent post's three questions were "Yes, yes and yes" here are some additional questions:<p>- Have you ever uploaded a container to Dockerhub or Quay.io?<p>- Does that container have an OS inside it that has user accounts?<p>- Before you answered parent post's questions, did it occur to you that you might have to update your Docker images to comply?<p>- Did you remember on your own that you also have to delete or update older Docker images to comply, or did you not think of that until you read this question?<p>After you've answered these questions, please re-answer the parent post's questions.</p>
]]></description><pubDate>Wed, 04 Mar 2026 08:36:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=47244719</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=47244719</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47244719</guid></item><item><title><![CDATA[New comment by csense in "California's Digital Age Assurance Act, and FOSS"]]></title><description><![CDATA[
<p>A lot of people people contributing to FOSS are volunteers.  The calculus of working on stuff for free involves an assumption that your worst-case outcome is you make $0.  This act's punitive fines change the worst-case outcome to somewhere around -$9999999 or more.<p>If you work on any programming project at all in any capacity:<p>- Are you confident your work doesn't fall afoul of this?<p>- Are you confident they won't decide to come after you anyway for insane political, bureaucratic or "seeing-like-a-state" dysfunctions?<p>- Are you willing to bet millions of dollars in potential fines that your answers to the previous two questions are correct?</p>
]]></description><pubDate>Wed, 04 Mar 2026 08:32:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=47244695</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=47244695</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47244695</guid></item><item><title><![CDATA[New comment by csense in "Ubuntu Planning Mandatory Age Verification"]]></title><description><![CDATA[
<p>Here's my suggestion for an implementation strategy:<p>- Keep the "Next" button greyed out until you add three forms of identification.<p>- Ask the user to take photos of their 3 forms of ID with a webcam.  Ask the user to hold them in increasingly bizarre poses -- left hand, right hand, woven between your fingers, behind your ear, between your toes.<p>- Add an "accessibility" button.  This button pops up a text box that advises you if you can't comply because you don't have hands, ears, feet or whatever (hey, some people don't and that's perfectly fine!) you can just use a picture of somebody else's body parts, and helpfully provides a menu of AI-generated pictures of human ears, hands, etc. for you to copy-paste.<p>- To preserve privacy, send the actual photos to /dev/null.<p>- The "verify the photo of my ID" button should check whether random.random() > 0.8.  On average the user will require 5 tries per photo, or 15 tries total.<p>- Add a checkbox that says "I am not in the state of California".  Upon clicking this checkbox the "Next" button becomes not grayed out and you can proceed without completing the identity checking process.<p>- If the user does not seem to have a webcam installed, all UI elements are grayed out except the "I am not in the state of California" checkbox.<p>- If the user is installing via command line, say "Are you in the state of California [y/n]?"  If the answer does not start with 'N' or 'n', it will simply repeat the question.<p>- The list of acceptable identification shall be:  Driver's license, learner's permit, Social Security card, library card, school identification, Boy / Girl Scout membership card, school yearbook photo, Burger King Kid's Club membership card, utility bill, ISP bill, Burger King receipt, Mahalo Rewards card, any receipt paid via credit card, birthday card, a photo of a printout of any email from OnlyFans, a photo of a DNS TXT record containing the string "CALIFORNIA", a photo of your X account with a blue check mark.</p>
]]></description><pubDate>Wed, 04 Mar 2026 00:03:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47241024</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=47241024</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47241024</guid></item><item><title><![CDATA[New comment by csense in "When AI writes the software, who verifies it?"]]></title><description><![CDATA[
<p>It seems like sound testing methodology to identify important theorems related to the code, prove them, and then verify the proof.<p>Verification gets sold as "bulletproof" but I'm skeptical for a couple reasons:<p>- How do you establish the relationship between the code and the theorem?  Lean theorem can be applied to zlib implemented in Lean, what if you want to check zlib implemented in a normal programming language like C, JS, Zig, or whatever?<p>- How do you know the key properties mean what you think they mean?  E.g. the theorem says "ZlibDecode.decompressSingle (ZlibEncode.compress data level) = .ok data" but it feels like it would be very easy to accidentally prove ∃ x s.t. decompress(compress(x)) == x while thinking you proved ∀ x, decompress(compress(x)) == x.<p>I've tried Lean and Coq and...I don't really like them.  The proofs use specialized programming languages.  And they seem deliberately designed to require you to use a context explorer to have any hope of understanding the proof at all.  OTOH a normal unit test is written in a general purpose programming language (usually the same one as the program being tested), I'm much more comfortable checking that a Claude-written unit test does what I think it's doing than a Claude-written Lean proof of correctness.</p>
]]></description><pubDate>Tue, 03 Mar 2026 23:51:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47240909</link><dc:creator>csense</dc:creator><comments>https://news.ycombinator.com/item?id=47240909</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47240909</guid></item></channel></rss>