<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: Darmani</title><link>https://news.ycombinator.com/user?id=Darmani</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 04 Jun 2026 08:51:48 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=Darmani" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by Darmani in "Didgeridoo playing as alternative treatment for obstructive sleep apnoea (2006)"]]></title><description><![CDATA[
<p>I started playing didgeridoo 10 years ago for precisely this reason. Sleep apnea already cured by weight loss, but I knew by air pathways were prone to it, and I never wanted it to come back.<p>It worked<p>It took me 1-2 years to learn circular breathing, but even just learning to play for 15 seconds on one breath can give the "oxygen high" from breathing so much.</p>
]]></description><pubDate>Mon, 25 May 2026 07:30:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48264349</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=48264349</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48264349</guid></item><item><title><![CDATA[New comment by Darmani in "OpenAI president forced to read his personal diary entries to jury"]]></title><description><![CDATA[
<p>> This is pretty damning for OpenAI<p>I don't see how. Cases are decided by facts and law, not feelings -- except to the extent those feelings are probative of state of mind,  which is relevant for some legal issues but not others.  My understanding is that the crux of the case is on the extent to which a number of informal messages should be considered a binding contract.<p>Trying to go from a single admission like this to an overall legal conclusion is a lot like seeing a single line in a program and then concluding there's a bug -- without having ever seen the rest of the program. You might think "this line always crashes, " but actually it's never called (does not go to any matter at issue), or none of the terms mean what you think they mean,  etc.</p>
]]></description><pubDate>Wed, 06 May 2026 14:09:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48036479</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=48036479</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48036479</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>Sounds like a fun life :)<p>Have found in that roadmap things that would help me personally like making async functions dyn-compatible. Have not found the deeper stuff I thought you were hinting at.<p>Last year,  I wanted to use the 5- line Result.flatten function,  abs then found it had been stuck in experimental....for 5 years.  That left me with no confidence of the language's dev velocity.</p>
]]></description><pubDate>Mon, 04 May 2026 12:03:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48007633</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=48007633</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48007633</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>This is getting pretty funny.  In this branch of the thread alone, I've seen the defenses of: (1) "Rust is fine, you're just expecting the affordances of a GC language." (2) "Rust is fine,  you're just expecting the affordances of Haskell," and now (3) "Rust is fine, you're just not used to systems programming"<p>It's okay if your language has problems (I have plenty of criticisms of my favorite languages), but I find it odd and concerning how frequently I've seen Rust programmers try to deflect instead of engaging in criticism.<p>I actually have a huge systems programming background and identify as a systems programmer. C and C++ by and large do not have the problems I've written about. These things are Rust problems, not systems problems.</p>
]]></description><pubDate>Mon, 04 May 2026 11:41:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=48007443</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=48007443</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48007443</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>Oy. It is also a common experience that, when I struggle in Rust to use a pattern that's common in nearly every other language or find another way to achieve the same goal,  people who know of my Haskell background call it a "Haskell pattern," and thereby avoid facing the suggestion that their favorite language is missing some pretty basic affordances.<p>No, boxing everything does not magically make things more dyn-compatible. It will not magically solve the issue that tokio does a whole-program transformation that does its most restrictive checking only after all local checks have been resolved. It will not magically allow more reuse between datatypes. It will solve none of the problems I encountered... because if beginner-Rust could solve any of these problems, then they would have ceased to be problems for me by the time I became intermediate.<p>> Rust programmers tend to obsess over minimizing those tradeoffs to get abstractions that are zero-cost. So doing it “the rust way” is often very complicated and tricky to get right while satisfying the borrow checker and type system, but once found is lean, fast, clean, and safe.<p>You and I must be using very different definitions of "lean." For me, "complicated" and "lean" do not go together</p>
]]></description><pubDate>Mon, 04 May 2026 02:47:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=48004061</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=48004061</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48004061</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>I respect that your experience is different.<p>Please respect the fact that I do not understand how one can like Rust without giving up caring about modularity.<p>I have pretty good reason for thinking this is a possibility.  Directly, because the Rust experts I asked for help did in fact advocate giving up modularity. Indirectly, in that I've seen something similar but much stronger in a different language. That culminated in a conversation with several of the creators of that language, in which they argued their language was great for generic programming...while revealing some pretty basic holes in their understanding of generic programming (while calling me a "Haskell weenie," among other abuse). I am very confident in my conclusion about this other language community and not interested in getting into the details of this event. I am just sharing where I'm coming from, in not immediately dismissing this idea as too absurd to consider even when I have no other hypothesis.<p>I acknowledge that you feel personally insulted by me having a hypothesis that requires a large group of people behave in ways I consider strange. I have evidence for that hypothesis, and have been unable to find a better one. I hope you can see how the comment I am responding to crosses an extra line and is directly personally insulting.<p>I would very much like to come away from this discussion no longer believing that Rust programminh is at odds with modularity. I have shared some fairly basic and detailed criticisms, the ones I still remember after a year out of the language. Perhaps your can play a role in offering solutions to them -- or admit that these are indeed problems your hadn't noticed before or had gotten used to</p>
]]></description><pubDate>Mon, 04 May 2026 02:20:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=48003916</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=48003916</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48003916</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>Just investigated -- looks like this works now! Yay!<p>For this family of examples, had been completely stymied by AsyncFnOnce not being released yet. IIRC it had been in the works for several years, was still an experimental feature when I was trying to use it, and I gave up after much frustration at trying to get a version of Rust with experimental features working under devenv (nix).<p>A subtraction then to my frustrations with Rust -- though I'd still be very wary of doing this, having seen how fragile higher-order functions have been in the past.</p>
]]></description><pubDate>Sun, 03 May 2026 18:45:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48000051</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=48000051</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48000051</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>*`dyn Writer`. `impl Writer` can only be used in function parameters.<p>This was one of the example approaches I gave. This works...at first. The problem is that, if you want to add a new function to the Writer trait which makes Writer no longer dyn-compatible, such as, say, any async function, then you can no longer write `Box<dyn Writer>` and need to rewrite all code that uses it.<p>(although you can dig under the hood and specify a pinned-down Future type, covering one kind of awfulness with another)</p>
]]></description><pubDate>Sun, 03 May 2026 12:45:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47996418</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47996418</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47996418</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>> Look up "callback hell". Basically they encourage spaghetti.<p>Ah. I think you're confusing the general idea of a callback with one particular style of use. "callback hell" refers to the deep indentation that occurs when trying to program in monadic style in languages without syntactic support for monads. It was mostly solved by adding async/await syntax, aka syntactic support for the continuation monad. "Callback hell" is not spaghetti in any deep sense, merely syntactically cumbersome.<p>But a "callback" is a more general term, sometimes a synonym for "function parameter," sometimes for more narrow kinds  of function parameter (e.g.: void function, invokable once). Many people will refer to the function argument of the `map` function as a callback, but no-one would refer to that as "callback hell."<p>Callbacks are quite universal, and most uses do not lead at all to callback hell. I've engaged with this topic a little bit at <a href="https://us16.campaign-archive.com/?u=8b565c97b838125f69e75fb7f&id=e2bcb81148" rel="nofollow">https://us16.campaign-archive.com/?u=8b565c97b838125f69e75fb...</a> , above the header "Serious Business."<p>> You got solutions to your problems didn't you?<p>Mostly no :(<p>And when I did, I largely got it by figuring stuff out myself, while being told by multiple Rust experts that I either shouldn't care about the verbosity and lack of modularity, or that if I have a problem like "using the interface instead of the implementation" it must be because I'm a Haskeller.<p>Well, my ultimate solution was to start working on a new product, and to not use any Rust, except for some performance-heavy libraries. With the first product, the market had changed too much by the time we were ready for prime-time, and I'd put somewhere between 25% and 70% of the reason for that delay on our choice to start building new parts of the backend in Rust.<p>> Macros are a perfectly reasonable thing to use in Rust, even if they are best avoided where possible. Exactly like unsafePerformIO.<p>Good comparison!<p>> Despite that it's still probably the best language we have for a surprisingly large range of domains.<p>I agree with this. I just don't agree that that list of domains has a very large intersection with the set of applications.</p>
]]></description><pubDate>Sun, 03 May 2026 12:41:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47996380</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47996380</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47996380</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>Good suggestion. I think started doing that kind of thing towards the end of my days with Rust. It's been close to a year now, and don't remember how well it worked out.</p>
]]></description><pubDate>Sun, 03 May 2026 12:25:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=47996254</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47996254</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47996254</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>Interesting. But when I search `"roadmap 2026" rust`, I only get results for the video game.<p>Am familiar with Linear Haskell (and actually went on a walk through Tokyo with one of the authors just a few months ago). IIRC: still no resources allocated to add the things that would actually make it useful. Had not been aware of most of those, except the dependently-typed ones. Cool to know about the others. Yay linear types becoming known.<p>You seem interesting, and I'm curious about your background now. All I can find so far is that you're from Europe and used to lead C++ in some major corporation.</p>
]]></description><pubDate>Sun, 03 May 2026 12:23:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47996239</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47996239</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47996239</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>Thanks! Very helpful. Pain is still there, but surfaced early.</p>
]]></description><pubDate>Sun, 03 May 2026 12:18:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=47996197</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47996197</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47996197</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>It seems to be a common reflex of Rust advocates that, whenever an issue with using the language is asked about, the response is "That's just a garbage-collected code pattern" followed by "and therefore you shouldn't want it." It's happened multiple times in this thread. [Edit: and both the times I was thinking of were from you, so need to weaken that conclusion]<p>Aside from having vibes of "I've chosen to get hit weekly in the face with a baseball bat, but have learned to like it, and so should you" it's also seldom true.<p>All three of these examples are also quite easy to do with C and C++. It's not about garbage collection.</p>
]]></description><pubDate>Sun, 03 May 2026 10:13:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=47995413</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47995413</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47995413</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>>  is unnecessarily insulting.<p>I know that it's insulting! And it doesn't make sense, because I generally think Rust programmers are smart people. But right now, it's the only explanation I've got, so it is alas necessarily insulting. So please, please, please give me a better explanation that actually makes sense.<p>> The truth is that some things are harder in Rust but a) often those things are best avoided anyway (e.g. callbacks), and b) it's worth the trade-off because of the other good things it allows.<p>This sounds like the seeds of a better explanation, but it needs a lot more to actually suffice. E.g.: why are callbacks best avoided anyway, when they're virtually required for a large number of important programming patterns? (In more technical language: they're effectively the only way to eliminate duplication in non-leaf-expressions. In even more technical language: they're the way to do second-order anti-unification.)<p>> Surely as a Haskell user of all things you must understand that sometimes making things harder is worth the trade-off. Yeay everything is pure! Great for many reasons. Now how do I add logging to this deeply nested function?<p>And this is a great illustration of the difference. First, you will seldom find Haskell programmers trying to argue that, actually, things like deeply-nested logging that everyone wants are actually "best avoided anyway." Second, you'll actually get a solution if you ask about them -- in this case, to either use MTL-style, to use a fixed alias for your monad stack, or that unsafePerformIO isn't actually that bad.<p>BTW, similar to my unpleasant conclusion for Rust above, I have another unpleasant conclusion for Haskell: Haskell is incredible for medium-sized programs, but it has its own missing modularity features that make it non-ideal for large programs (e.g.: >50k lines). But this is a much smaller problem than it sounds because Haskell is so compact that, while many projects can be huge, very few individual codebases will need to approach that size.</p>
]]></description><pubDate>Sun, 03 May 2026 10:08:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=47995380</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47995380</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47995380</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>That "and so on" is doing a lot of work. You may accept rejecting garbage collection as a reasonable trade-off, but the bulk of the cost is coming from a much more aggressive tradeoff Rust is making with is at odds with the goals of most application code.<p>A deeply-baked assumption of Rust is that your memory layout is static. Dynamic memory layout is perfectly compatible with manual memory management, but Rust does not readily support it because of its demands for static memory layout.<p>A very easy place to see this is the difference in decorator types between Rust and other languages like Java. Java's legacy File/reader API has you write things like `new PrintWriter(new BufferedWriter(new FileWriter("foo.txt")))`, where each layer adds some functionality to the base layer. The resulting value has principal type `PrintWriter` and can be used through the `Writer` interface.<p>The equivalent code in Rust would give you a value of type `PrintWriter<BufferedWriter<FileWriter>>` which can only be passed to functions that expect exactly that type and not, say, a `PrintWriter<BufferedWriter<StringStream>>`. You would solve this by using a template function that takes a `T where T: Writer` parameter and gets compiled separately for every use-site, thus contributing to Rust's infamous slow build times.<p>It would be perfectly sane, and desirable for application code, to be able to pass around a PrintWriter value as an owned pointer to a PrintWriter struct which contains an owned pointer to a BufferedWriter struct which contains an owned pointer to a FileWriter struct. You could even have each pointer actually be to a Writer value of unknown size, and thus recover modularity.<p>In Rust, there is sometimes a painful and very fragile way to do this: have each writer type contain a Box<&dyn Writer>, effectively the same as the Java solution above. This works, <i>except</i> that, if one day you want to add a method to the Writer trait that breaks dyn-compatibility, then you will no longer be able to do this, and will need to rewrite all code that uses this type.</p>
]]></description><pubDate>Sun, 03 May 2026 09:58:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=47995322</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47995322</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47995322</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>Rust is definitely very verbose.  I think it's a fine choice -- probably even the best choice -- if you're doing systems code or if performance is your most important feature. If not, I would pass.</p>
]]></description><pubDate>Sun, 03 May 2026 09:40:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47995222</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47995222</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47995222</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>I think Rust would be fine for application code if it kept the borrow checker, but had greater allowance for dynamically-sized variables, or even garbage collection. The reason calling things through an interface is so tough in Rust is because doing so requires having a pointer to a value of unknown size, which involves either heap allocation or alloca(), neither of which are very happy in Rust. Many of the other things I complained about are also downstream of this decision. Affine types are useful both in high-level state management as well as in low-level memory management. But it's Rust's focus on static memory layout that really cements it as a low-level systems language, not its inclusion of borrowing.<p>Way back as an undergrad in 2011, I contributed to Plaid, a JVM language whose main feature is based on affine and linear types. I'm one of the very few people in the world who knew what borrowing is before Rust had it. So I know first-hand that borrow-checking is perfectly compatible with garbage collection.</p>
]]></description><pubDate>Sun, 03 May 2026 09:39:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47995213</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47995213</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47995213</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>(1) Oh sure, the syntax is easy. Getting it to borrow-check is somewhere between insane and impossible. As I said, I've had friends who are actual Rust experts give up trying.<p>(2) No, it stems from a compiler limitation (imposed in large part by the need for static memory layout), not because there's anything intrinsically buggy about doing this.<p>(3) Look up "dyn-compatibility", for the largest, but not the only, problem with doing this.</p>
]]></description><pubDate>Sun, 03 May 2026 09:33:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47995182</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47995182</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47995182</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>I have heard this reaction from others before. One of the Rust expert friends I consulted with told me "I'm not convinced you're not trying to write Haskell-style code in Rust;" I told him the patterns I was struggling with were both trivial and common in Java.<p>The things I found quite difficult or impossible in Rust were to me pretty basic patterns for modularity and removing duplication that it's really shocking that these complaints are not more common.<p>I currently have but two hypotheses for why.<p>First, the second problem I mentioned only comes from using tokio, which causes your top-level program to secretly be using a defunctionalized continuation data type, derived from where exactly in other files you put your await's, that might not be Send. If you're not using tokio, you won't experience that issue.<p>Second...I was kinda told to just give up on deduplication and have lots of copy+pasted code. This raises the very uncomfortable hypothesis that Rust afficionados are some combination of people who came to Rust early and never learned traditional software design and don't know what they're missing, and people who were raised on traditional good software engineering but then got hit with Rust's metaphorical baseball bat of lack-of-modularity over and over until they got used to being hit with a baseball bat as a normal pain of life.<p>I don't like either of these explanations (esp. with tokio seeming quite dominant), so I'm awaiting an explanation that makes more sense. <a href="https://xkcd.com/3210/" rel="nofollow">https://xkcd.com/3210/</a></p>
]]></description><pubDate>Sun, 03 May 2026 08:19:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47994698</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47994698</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47994698</guid></item><item><title><![CDATA[New comment by Darmani in "A couple million lines of Haskell: Production engineering at Mercury"]]></title><description><![CDATA[
<p>Pretty surprising -- I had much the opposite experience.<p>On our last product, we decided to start switching from Typescript to Rust on the backend because we got tired of crashes. I consider that to be one of the greatest technical mistakes I've made ever, as our productivity slowed massively. I'll just share two time-draining issues that only occur in Rust: (1) Writing higher-order functions (e.g.: a function to open a database connection, do something, and then close it -- yes, I know you can use RAII for this particular example), which is trivial in Haskell and TypeScript and JavaScript and C++ and PHP, turned out to be so impossible in Rust [even after asking Rust-expert friends for help], that I learned to just give up and never try, though it sometimes worked to write a macro instead. (2) It's happened many times that I would attempt a refactoring, spend all day fixing type errors, finally get to the top-level file, get a type error that's actually caused somewhere else by basic parts of the design, and conclude the entire refactoring I had attempted is impossible and need to revert everything.<p>On top of that, Rust is the only modern language I can name where using a value by its interface instead of its concrete type lies somewhere between advanced and impossible, depending on what exactly you're doing.<p>I came away concluding that application code (as opposed to systems or library code) should, to a first approximation, never be written in Rust.</p>
]]></description><pubDate>Sun, 03 May 2026 06:59:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47994168</link><dc:creator>Darmani</dc:creator><comments>https://news.ycombinator.com/item?id=47994168</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47994168</guid></item></channel></rss>