<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: ninkendo</title><link>https://news.ycombinator.com/user?id=ninkendo</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 06 Apr 2026 06:06:09 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=ninkendo" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by ninkendo in "I used AI. It worked. I hated it"]]></title><description><![CDATA[
<p>Eh… I get what you’re saying but the word “character” is super overloaded. C uses “char” to mean “byte”. Rust uses it to mean “Unicode scalar” (which still isn’t a user-perceived character.) The meaning that corresponds to “where should the caret move when I press the arrow keys in a text editor” turns out to only be meaningful in a tiny set of circumstances. The vast, vast, vast majority of the time, it doesn’t make sense to think about “characters” at all, and it’s just bytes you need to account for. I’m generally with you on AI needing serious review from knowledgeable humans or it can be a disaster, but “it misunderstood what I meant by characters” smells a lot more like you were unclear in your prompt.</p>
]]></description><pubDate>Sun, 05 Apr 2026 23:03:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=47654825</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47654825</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47654825</guid></item><item><title><![CDATA[New comment by ninkendo in "Lisette a little language inspired by Rust that compiles to Go"]]></title><description><![CDATA[
<p>To be fair, Go’s async story only works because there’s a prologue compiled into every single function that says “before I execute this function, should another goroutine run instead?” and you pay that cost on every function call. (Granted, that prologue is also used for other features like GC checks and stack size guards, but the point still stands.) Languages that aspire to having zero-cost abstractions can’t make that kind of decision, and so you get function coloring.</p>
]]></description><pubDate>Sun, 05 Apr 2026 22:28:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47654598</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47654598</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47654598</guid></item><item><title><![CDATA[New comment by ninkendo in "Renewables reached nearly 50% of global electricity capacity last year"]]></title><description><![CDATA[
<p>> solar at something like 25%<p>The graph at <a href="https://ourworldindata.org/grapher/solar-pv-energy-consumption-vs-solar-pv-capacity" rel="nofollow">https://ourworldindata.org/grapher/solar-pv-energy-consumpti...</a> seems to indicate the real world outcome is something more like 12.9%. That is, pick a dot on the graph and look at the capacity (watts) versus how much was generated in 2024 (watt-hours), and the number ends up vaguely looking like 1000 watt-hours generated for every watt of capacity. Given that there's 8760 hours in a year, that's vaguely in the 12% range.<p>The number for "World" is 2,110,000 GWh consumed for 1,866 GW of capacity, which means 2110000÷(1866×8760) = 12.9% of "capacity". Running the numbers for every country (there's a csv!) shows expected cloudy/northerly countries down near 8-9% (UK, germany, norway) and the sunnier ones near 20%... The USA is 19.8% which tracks given how popular solar is in the sunnier regions in particular.<p>Nobody in their right mind should be surprised by this, since the sun doesn't always shine, it gets dark at night, etc... it's unrealistic to assume this number will ever meaningfully change for solar. It's just the baseline expectation.<p>So yeah, "capacity" is misleading indeed. It means that for solar, "50% of global capacity" would mean something more like "6% of energy consumed".<p>But it's still super exciting to see the clear exponential growth here. (Speaking as someone who installed a 14KW array on his roof last year, solar makes me super excited.)</p>
]]></description><pubDate>Thu, 02 Apr 2026 21:14:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=47620283</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47620283</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47620283</guid></item><item><title><![CDATA[New comment by ninkendo in "Don't trust AI agents"]]></title><description><![CDATA[
<p>My goal is to mess around with an LLM, not just to mess around with a password manager. If you read literally any of my posts in this thread without the intention of throwing shade, maybe you would have gotten that point by now. I’ve certainly repeated it enough times.<p>> I don't think your password manager is good, and I don't think you think it's good either or you'd be using it.<p>Lol I am using it now though. In the time from yesterday’s post to now I have an iOS app, an iOS Password Autofill extension, a Mac app and the existing Linux CLI and Firefox browser extension. Automatically syncs conflict-free between everything too, using a simple web server for sync. It now covers every use case 1Password did for me, and no, none of the “rust password manager site:github.com” results do any of this.<p>It was an experiment to see if the effort of vibe coding a password manager would be easy enough that it would be worth doing, and guess what: resounding success. Cope more.</p>
]]></description><pubDate>Sun, 01 Mar 2026 23:23:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47211901</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47211901</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47211901</guid></item><item><title><![CDATA[New comment by ninkendo in "Don't trust AI agents"]]></title><description><![CDATA[
<p>So if you’re just going to complain about me reinventing the wheel (even though I already explained this is literally <i>an exercise to see what an LLM can do</i>), can we at least recognize the goalpost shift here?<p>I’m just going to assume that you’ve completely conceded your original point then, since you have absolutely zero to say about whether you agree the LLM did good work or not. Since <i>the moment I showed you its work</i>, you immediately shifted to insulting my intelligence for bothering with a password manager in the first place.<p>I honestly don’t know why I bother feeding trolls like you when it’s clear your only goal here is to find fault.</p>
]]></description><pubDate>Sun, 01 Mar 2026 18:57:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47209563</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47209563</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47209563</guid></item><item><title><![CDATA[New comment by ninkendo in "Why is the first C++ (m)allocation always 72 KB?"]]></title><description><![CDATA[
<p>I wonder why it’s opt-in. Maybe it’s part of the whole “you only pay for what you use” ethos, i.e. you shouldn’t have to pay the cost for a static emergency pool if you don’t even use dynamic memory allocation.</p>
]]></description><pubDate>Sun, 01 Mar 2026 14:56:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47207265</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47207265</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47207265</guid></item><item><title><![CDATA[New comment by ninkendo in "Don't trust AI agents"]]></title><description><![CDATA[
<p>> Did you investigate prior art before setting out on this endeavor<p>Lol no, I had no idea there was any other password managers! Thanks for the google search link! I didn't know search engines existed either!<p>> Wisdom means knowing when and where to apply cleverness, and where not to. like being able to recognize existing sub-components.<p>It says literally in the README that part of this is an exercise in seeing what an LLM can do. I am in no way suggesting anyone use this (because there's a bazillion other password managers already) nor would I even have made this public if you hadn't baited me into doing it.<p>The fact that there's a literal <i>sea</i> of password managers out there is why I'm curious enough to think "maybe a one that I get to design myself, written to exactly my tastes and my tastes alone could be feasible", and that's what this exercise is about. It literally took me less time to vibe-code what I have right now, than to pour through the sea of options that already exist to decide which one I should try. And having it be <i>mine</i> at the end means that I can implement my pet features the way I want, without having to worry one bit about fighting with upstream maintainers. It's also just fun. I thoroughly enjoy the process of thinking about the design and iterating on it.</p>
]]></description><pubDate>Sat, 28 Feb 2026 19:51:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=47199455</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47199455</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47199455</guid></item><item><title><![CDATA[New comment by ninkendo in "Don't trust AI agents"]]></title><description><![CDATA[
<p>Yeah, I guess that's kinda my point. LLM detractors on HN seem to straw-man what they think the average LLM user is doing. I'm an experienced programmer who is using an LLM as a speed boost, and the result of <i>that</i> is that it produces thousands of lines of code in a short time.<p>The impressive thing isn't <i>merely</i> that it produces thousands of lines of code, it's that I've reviewed the code, it's pretty good, it <i>works</i>, and I'm getting use out of the resulting project.<p>> What would you say is your multiplier, in terms of throughly reviewing code vs writing it from scratch?<p>I'd say about 10x. More than that (and closer to 100x) if I'm only giving the code a cursory glance (sometimes I just look at the git diff, it looks pretty damned reasonable to me, and I commit it without diving that deep into the review. But I sometimes do something similar when reviewing coworkers' code!)</p>
]]></description><pubDate>Sat, 28 Feb 2026 18:38:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=47198723</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47198723</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47198723</guid></item><item><title><![CDATA[New comment by ninkendo in "Don't trust AI agents"]]></title><description><![CDATA[
<p>Ugh, you made me spend the 20 minutes it takes to spin up a new github account to share this (my existing one uses my real name and I don't really want to doxx myself that much. Not that it's a huge deal, my real identity and the "ninkendo" handle have been intertwined a lot in the past.)<p><a href="https://github.com/ninkendo84/kenpass" rel="nofollow">https://github.com/ninkendo84/kenpass</a><p>I'm not saying it's perfect, there's some things I would've done differently in the code. It's also not even close to done/complete, but it has:<p>- A background agent that keeps the unsealed vault in-memory<p>- A CLI for basic CRUD<p>- Encryption for the on-disk layout that uses reasonably good standards (pbkdf2 with 600,000 iterations, etc)<p>- Sync with any server that supports webdav+etags+mTLS auth (I just take care of this out of band, I had the LLM whip up the nginx config though)<p>- A very basic firefox extension that will fill passwords (I only did 2 or 3 rounds of prompting for that one, I'm going to add more later)<p>Every commit that was vibe-coded contains the prompt I gave to Codex, so you can reproduce the entire development yourself if you want... A few of the prompts were actually constructed by ChatGPT 5.2. (It started out as a conversation with ChatGPT about what the sync protocol would look like for a password manager in a way that is conflict-free, and eventually I just said "ok give me a prompt I can give to codex to get a basic repo going" and then I just kept building from there.)<p>Also full disclosure, it had originally put all the code for each crate in a single lib.rs, so I had it split the crates into more modules for readability, before I published but after I made the initial comment in this thread.<p>I haven't decided if I want to take this all the way to something I actually use full time, yet. I just saw the 1password subscription increase and decided "wait what if I just vibe-coded my own?" (I also don't think it's even close to worthy of a "Show HN", because literally anybody could have done this.)</p>
]]></description><pubDate>Sat, 28 Feb 2026 17:44:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=47198117</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47198117</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47198117</guid></item><item><title><![CDATA[New comment by ninkendo in "Don't trust AI agents"]]></title><description><![CDATA[
<p>Respectfully, it feels like your position requires a very low, if not brain-dead level of incompetence on the part of LLM users, in order for your conclusion to be correct.<p>My personal anecdote: I used an LLM recently to basically vibe code a password manager.<p>Now, I’ve been a software engineer for 20 years. I’m very familiar with the process of code review and how to dive in to someone else’s code and get a feel for what’s happening, and how to spot issues. So when I say the LLM produced thousands of lines of working code in a very short time (probably at least 10 times faster than I would have done it), you could easily point at me and say “ha, look at ninkendo, he thinks more lines of code equals better!” And walk away feeling smug. Like, in your mind perhaps you think the result is an unmaintainable mess, and that the only thing I’m gushing about is the LOC count.<p>But here’s the thing: it actually did a good job. I was personally reviewing the code the whole time. And believe me when I say, the resulting product is actually <i>good</i>. The code is readable and obvious, it put clean separation of responsibilities into different crates (I’m using rust) and it wrote tons of tests, which actually validate behavior. It’s very near the quality level of what I would have been able to do. And I’m not half bad. (I’ve been coding in rust in particular, professionally for about 2 years now, on top of the ~20 years of other professional programming experience before that.)<p>My takeaway is that as a professional engineer, my job is going to be shifting from doing the actual code writing, to managing an LLM as if it’s my pair programming partner and it has the keyboard. I feel sad for the loss of the actual practice of coding, but it’s all over but the mourning at this point. This tech is here to stay.</p>
]]></description><pubDate>Sat, 28 Feb 2026 14:58:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=47196077</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47196077</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47196077</guid></item><item><title><![CDATA[New comment by ninkendo in "Firefox 148 Launches with AI Kill Switch Feature and More Enhancements"]]></title><description><![CDATA[
<p>You never, ever need to interrupt the user or stop them from what they’re doing in order to show them some new feature.<p>Here’s what you do:<p>- Make a “what’s new” section in settings.<p>- Put a link in there that takes me to a webpage where I can see what’s new.<p>- That’s it.<p>Instead what always seems to happen is that I’m in the middle of trying to <i>do something with the software</i> and in order to do that I <i>must</i> close whatever popup you’re shoving in my face to tell me about the new feature. I don’t have time to read it now because <i>I opened the software with an intention to finish a task</i> and I don’t have time to read it now. And then later when I finally <i>do</i> have the time to look at your new feature? Nobody bothers actually putting that information anywhere persistent, so I guess I’m out of luck <i>even if I care about the feature</i>.<p>Updating to a new iOS version is a perfect example of this. Say there are a dozen apps that have a new feature popup on first launch when you update iOS. Imagine a typical day waking up and trying to use my phone. I have to drive somewhere so I try to put an address into Maps and have to immediately fend off the “what’s new in maps” dialog so I can type the address I need to go to. Then I want to put on the song my kid is yelling at me to play and have to fend off the “what’s new in Music” popup. Later I’m trying to respond to an important text and have to fend off “What’s new in messages”, etc etc etc.<p>That first day using iOS is an absolute nightmare because of this.<p>Now imagine the alternative: a simple badge icon in the settings app, and I tap it and see a link to “what’s new in iOS”, and guess what, it can be a fucking webpage! I can bookmark it! I can add it to my reading list and see it later! Hell, I can even share it with my friends!<p>But no, instead apps insist on trying to increase “engagement” with their new feature, because some PM’s promo packet wants to include “this many users used my new feature” and the only way they can think to do this is to (1) stop the user from accomplishing their task until they tap the cutesy “Got It!” button, and (2) don’t bother with persisting it anywhere, because the idea that the user <i>doesn’t have time to check out the feature now</i> is so foreign to these sociopaths it never even crossed their mind.</p>
]]></description><pubDate>Wed, 25 Feb 2026 12:13:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=47150521</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47150521</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47150521</guid></item><item><title><![CDATA[New comment by ninkendo in "What it means that Ubuntu is using Rust"]]></title><description><![CDATA[
<p>> but that's just as true of C<p>Right, that's the whole point of this thread. The only stable ABI rust has is one where you can only use C's features at the boundaries. It would be really nice if that wasn't the case (ie. if you could express "real" rust types at a stable ABI boundary.)<p>As OP said, "I don't think deflecting by saying "but C is no safer" is super interesting". People seem intent on steering that conversation that way anyway, I guess.</p>
]]></description><pubDate>Tue, 24 Feb 2026 14:51:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47137872</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47137872</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47137872</guid></item><item><title><![CDATA[New comment by ninkendo in "What it means that Ubuntu is using Rust"]]></title><description><![CDATA[
<p>> But you can express Option<Foo> for a concrete Foo<p>I don’t think that’s true?<p><a href="https://users.rust-lang.org/t/option-is-ffi-safe-or-not/29820/5" rel="nofollow">https://users.rust-lang.org/t/option-is-ffi-safe-or-not/2982...</a><p>You could maybe say that a pointer can be transmuted to an Option<&T> because there’s an Option-specific optimization that an Option<&T> uses null as the None value, but that’s not always guaranteed. And it doesn’t apply to non-references, for instance Option<bool>’s None value would be indistinguishable from false. You could get lucky if you launder your Option<T> through repr(C) and the compiler versions match and don’t mangle the internal representation, but there’s no guarantees here, since the ABI isn’t stable. (You even get a warning if you try to put a struct in your function signatures that doesn’t have a stable repr(C).)</p>
]]></description><pubDate>Tue, 24 Feb 2026 12:51:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=47136467</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47136467</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47136467</guid></item><item><title><![CDATA[New comment by ninkendo in "What it means that Ubuntu is using Rust"]]></title><description><![CDATA[
<p>Swift’s approach still monomorphizes within a binary, and only has runtime costs when calling code across a dylib boundary. I think rust could do something like this as well.</p>
]]></description><pubDate>Tue, 24 Feb 2026 12:41:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47136374</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47136374</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47136374</guid></item><item><title><![CDATA[New comment by ninkendo in "Firefox 148 Launches with AI Kill Switch Feature and More Enhancements"]]></title><description><![CDATA[
<p>(This post is directed to all software that shoves features like this in my face, and especially Microsoft more than Firefox.)<p>My problem with all software that shoves these AI features in my face, is that I don’t use features under duress.<p>If you interrupt what I’m doing to push me to use a feature, I won’t use it. If you’re a web designer and you block the page to tell me to sign up for an account, I close the tab and vow to never create an account. If you stop what I’m doing to ask me to rate your app, I’m going to give it 1 star. Et cetera.<p>Now I’ll be the first to admit this is <i>childish</i>… it’s a flaw in my character. When I feel pushed, I push back, and software pushing me makes me irrationally angry for reasons I can’t quite articulate. In some ways I wish I wasn’t like this. But I can’t be alone. I’m certain there is a non-negligible number of people like me, and when a browser immediately shoves AI features in my face on first launch, well, the first thing I’m going to do is disable them.<p>The especially tragic part is that I personally find LLMs useful! And I’m at the point where I sorta want to install a Firefox extension for ChatGPT now. But the actual browser AI features were pushed on me in a way that made me feel violated, so I can’t use them on principle. Maybe in a few years I guess.<p>If instead these companies would just <i>dial it back</i> several notches, I would have had the curiosity to try these features out myself, and I’d likely be using them by now. But the way they’ve tried so hard to force them on me has destroyed my trust and now, not only am I not using whatever feature they promote, I hate their product more than I otherwise would.<p>Firefox isn’t actually <i>that</i> bad here, and now that there’s a simple kill switch, I may actually try their chatbot sidebar thing. But for companies like MS, I will never, ever, ever use any of their AI features for the reasons above. (I’ve literally uninstalled Windows now, it’s gotten so bad.)</p>
]]></description><pubDate>Tue, 24 Feb 2026 11:26:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47135763</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47135763</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47135763</guid></item><item><title><![CDATA[New comment by ninkendo in "What it means that Ubuntu is using Rust"]]></title><description><![CDATA[
<p>IME, a 1.0 version is usually when a project starts taking backwards compatibility seriously. A pre-1.0 library may be plenty stable enough in terms of bugs, but being pre-1.0 means they’re likely going to change their mind on the API contract at some point.<p><i>That</i> is the major problem for me… I don’t actually mind that much if a library has bugs… those can always be fixed. But when a library does a total 180 on the API contract, or removes things, or just changes their mind on what the abstraction should be (often it feels like they’re just feng shui’ing things), that’s a major problem. And it’s what people mean when they say “immaturity”: if I build on top of this, is it all going to break horribly at some point in the future when the author changes their mind?<p>People often say “just don’t update then”, but that’s (a) a sure fire way to accumulate tech debt in your codebase (because some day may come when you must update), and (b) you’re no longer getting what could be critical updates to the library.</p>
]]></description><pubDate>Tue, 24 Feb 2026 00:25:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=47131093</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47131093</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47131093</guid></item><item><title><![CDATA[New comment by ninkendo in "What it means that Ubuntu is using Rust"]]></title><description><![CDATA[
<p>I don’t think GP is moving the goalposts at all, rather I think a lot of people are willfully misrepresenting GP’s point.<p>Rust-to-rust code should be able to be dynamically linked with an ABI that has better safety guarantees than the C ABI. That’s the point. You can’t even express an Option<T> via the C ABI, let alone the myriad of other things rust has that are put together to make it a safe language.<p>You can look to Swift for prior art on how this can be done: <a href="https://faultlore.com/blah/swift-abi/" rel="nofollow">https://faultlore.com/blah/swift-abi/</a><p>It would be very hard to accomplish. Apple was extremely motivated to make Swift have a resilient/stable ABI, because they wanted to author system frameworks in swift and have third parties use them in swift code (including globally updating said frameworks without any apps needing to recompile.) They wanted these frameworks to feel like idiomatic swift code too, not just be a bunch of pointers and manual allocation. There’s a good argument that (1) Rust doesn’t consider this an important enough feature and (2) they don’t have enough resources to accomplish it even if they did. But if you could wave a magic wand and make it “done”, it would be <i>huge</i> for rust adoption.</p>
]]></description><pubDate>Mon, 23 Feb 2026 19:28:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=47127476</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47127476</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47127476</guid></item><item><title><![CDATA[New comment by ninkendo in "Git's Magic Files"]]></title><description><![CDATA[
<p>> IMO, it's best to keep things that are "your fault" (e.g. produced by your editor or OS) in your global gitignore, and only put things that are "the repository's fault" (e.g. build artifacts, test coverage reports) in the repository's gitignore file.<p>Very well put. This should be in the git-ignore manpage.</p>
]]></description><pubDate>Sun, 22 Feb 2026 22:21:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=47115382</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47115382</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47115382</guid></item><item><title><![CDATA[New comment by ninkendo in "Show HN: Iron-Wolf – Wolfenstein 3D source port in Rust"]]></title><description><![CDATA[
<p>Was this translated automatically from C? I picked a spot totally at random and saw in <a href="https://github.com/Ragnaroek/iron-wolf/blob/main/src/act1.rs" rel="nofollow">https://github.com/Ragnaroek/iron-wolf/blob/main/src/act1.rs</a> in place_item_type:<p><pre><code>    let mut found_info = None;
    for info in &STAT_INFO {
        if info.kind == item_type {
            found_info = Some(info);
            break;
        }
    }
</code></pre>
When typically in rust this is just:<p><pre><code>    let found_info = STAT_INFO.iter().find(|info| info.kind() == item_type);
</code></pre>
Now I want to go through and feng shui all the code to look more like idiomatic rust just to waste some time on a saturday...</p>
]]></description><pubDate>Sat, 21 Feb 2026 20:14:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=47104236</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47104236</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47104236</guid></item><item><title><![CDATA[New comment by ninkendo in "Tailscale Peer Relays is now generally available"]]></title><description><![CDATA[
<p>Literally nothing to do with that distinction.</p>
]]></description><pubDate>Wed, 18 Feb 2026 23:47:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47068014</link><dc:creator>ninkendo</dc:creator><comments>https://news.ycombinator.com/item?id=47068014</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47068014</guid></item></channel></rss>