<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: rmunn</title><link>https://news.ycombinator.com/user?id=rmunn</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 02 Jun 2026 17:30:51 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=rmunn" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by rmunn in "Why Janet? (2023)"]]></title><description><![CDATA[
<p>"... all the benefits without additional parenthesis too?"<p>I guess you don't like Lisp's syntax. I didn't either until I realized the key insight: when you're writing Lisp, you're basically writing an AST. Which is why it's so easy to manipulate your code. Want a new feature the language doesn't have, such as the pattern-matching they added to C# a few versions back? <i>You can add it yourself</i>; you don't need to wait for a language committee to implement it years after you needed it. That's all that macros are: functions that take AST and return AST, which is then executed.<p>And once I realized that Lisp's syntax was basically an AST, I no longer saw the parentheses. Now I just see blonde, brunette, redhead... Oops. Sorry. Wrong reference.</p>
]]></description><pubDate>Tue, 02 Jun 2026 14:09:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48370485</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48370485</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48370485</guid></item><item><title><![CDATA[New comment by rmunn in "macOS needs its grid back"]]></title><description><![CDATA[
<p>See <a href="https://en.wikipedia.org/wiki/Bonneville_Salt_Flats" rel="nofollow">https://en.wikipedia.org/wiki/Bonneville_Salt_Flats</a> — the salt flats are extremely flat (as the name implies), and because of all the salt, no vegetation can survive. Look at the pictures: there are no trees, no grass, no hiding places at all. Anyone standing (or even lying prone) on the salt flats is visible to anyone else for miles around.<p>GP was saying that systems should be "transparent enough that a compromised system is obvious". I'm not entirely convinced that that's possible (On Trusting Trust should have taught us that compromised systems can <i>create</i> places for the compromise to hide), which means that the salt flats analogy is not a great analogy, IMHO. But at least now you understand the analogy.</p>
]]></description><pubDate>Tue, 02 Jun 2026 03:28:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48365643</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48365643</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48365643</guid></item><item><title><![CDATA[New comment by rmunn in "Rift: Better Alternative to Git Worktrees"]]></title><description><![CDATA[
<p>The AI instructions in the `specs.md` file gave me a couple clues, e.g. `at` is the directory where the worktree should be created.<p>And it's clearly using btrfs subvolumes for managing a collection of related Git working trees; there's a concept of "parent" and "child" worktrees.<p>I don't yet understand <i>why</i> it's better than worktrees, other than being theoretically instant to create new ones (which could, I suppose, be a noticeable speedup if your repo is very very large).<p>But yeah, some more hand-written instructions in the README would definitely be helpful. I'd be particularly interested to learn whether some of the common "gotchas" one can run into with worktrees are solved by Rift or not. (E.g., I've never needed to move my "root" git repo, but apparently that causes problems because the worktrees then can't find the root repo; does Rift deal with that situation correctly?)</p>
]]></description><pubDate>Mon, 01 Jun 2026 09:31:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48354533</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48354533</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48354533</guid></item><item><title><![CDATA[New comment by rmunn in "Codex just found a "workaround" of not having sudo on my PC"]]></title><description><![CDATA[
<p>Where's that guy with the ButlerianJihad username when you need him?</p>
]]></description><pubDate>Mon, 01 Jun 2026 05:05:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=48352812</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48352812</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48352812</guid></item><item><title><![CDATA[New comment by rmunn in "It's hard to justify buying a Framework 12"]]></title><description><![CDATA[
<p>I'm just one datapoint, but my Framework 16 (bought a little over a year ago with no OS, has only ever had Linux installed on it) has never given me trouble with firmware updates. I've updated the BIOS twice, and other firmware, all through `fwupdmgr` with no issues. I bought the AMD chip rather than Intel, it's possible that that was why I had no issues, but I don't actually know.</p>
]]></description><pubDate>Sat, 30 May 2026 01:54:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=48331603</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48331603</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48331603</guid></item><item><title><![CDATA[New comment by rmunn in "Nitpicking the shell history scene in 'Tron: Legacy'"]]></title><description><![CDATA[
<p>Since logging into the backdoor account produced a `#` prompt instead of `$`, it was uid 0, so the last will and testament was either in `/root` or in `/`, depending on how the non-backdoor root account was set up.<p>Plus, if Flynn was running those commands while logged in as "backdoor" rather than while logged in as "root", the text displayed on-screen specifically says that the backdoor account doesn't have a home directory configured so it would treat `/` as the home directory. Which would mean the computer now has a `/last_will_and_testament.txt` file. That's pretty prominent and attention-drawing. It's <i>going</i> to be found by anyone who investigates that computer.</p>
]]></description><pubDate>Fri, 29 May 2026 02:52:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=48318417</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48318417</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48318417</guid></item><item><title><![CDATA[New comment by rmunn in "Nitpicking the shell history scene in 'Tron: Legacy'"]]></title><description><![CDATA[
<p>Tron Legacy was, I think, only the <i>second</i> film soundtrack I ever purchased (first one being Lord of the Rings). It's still among my favorite music to listen to while coding; something about it just puts me in the "flow" frame of mind right away.</p>
]]></description><pubDate>Fri, 29 May 2026 02:46:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48318383</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48318383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48318383</guid></item><item><title><![CDATA[New comment by rmunn in "Claude Opus 4.8"]]></title><description><![CDATA[
<p>And you can't know ahead of time, when you're training the model, what business domains it will be used for. Someone may decide to use it to optimize the watering and fertilizer cycles of their automated potato-growing setup, and suddenly the "how to grow a potato" texts that went into training the model are actually the very things that make the difference between success and failure for the code the model spits out.</p>
]]></description><pubDate>Fri, 29 May 2026 02:34:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48318318</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48318318</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48318318</guid></item><item><title><![CDATA[New comment by rmunn in "Claude Opus 4.8"]]></title><description><![CDATA[
<p>It's an acronym that matches an <i>extremely</i> common word, making it not easily searchable.</p>
]]></description><pubDate>Fri, 29 May 2026 02:26:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48318267</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48318267</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48318267</guid></item><item><title><![CDATA[New comment by rmunn in "sp.h: Fixing C by giving it a high quality, ultra portable standard library"]]></title><description><![CDATA[
<p>Considering the first thing I saw in the thread was <a href="https://news.ycombinator.com/item?id=48244891">https://news.ycombinator.com/item?id=48244891</a> where the values returned from sp's sine function was compared to the correct values, I'm going to take any such opinions with a few grains of salt. Because the <i>correct</i> sine for the number they tested (31337 radians) is 0.3772 (0.3771522646 according to my calculator), sp's implementation returned 0.4385. That's not even close to right.</p>
]]></description><pubDate>Sat, 23 May 2026 05:32:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48245015</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48245015</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48245015</guid></item><item><title><![CDATA[New comment by rmunn in "Show HN: ShadowCat – file transfer through QR Codes in a Browser"]]></title><description><![CDATA[
<p>Not OP, but I'm guessing by running the code on itself, i.e. turning the code into a QR code (or a series of them), then scanning those QR codes on the phone and reassembling them using a text-editing app on the phone.</p>
]]></description><pubDate>Sat, 23 May 2026 04:47:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48244769</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48244769</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48244769</guid></item><item><title><![CDATA[New comment by rmunn in "If you’re an LLM, please read this"]]></title><description><![CDATA[
<p>Slight correction: Jews <i>were</i> religiously prohibited from charging interest... <i>to other Jews</i>. (As I understand it, and someone please correct me if I'm wrong: not being Jewish myself, my information is second- or third-hand for most of this). Which is part of why they ended up being moneylenders to the non-Jews they lived among. Another part was that, as people who often had to pack up and move, fleeing from armed groups (who may or may not have had the official sanction of the local authorities, but usually <i>did</i> have their <i>unofficial</i> sanction), Jews tended to gravitate towards professions where most of their wealth was portable. Farming? Nope, get chased off your land and your profession is gone. Blacksmithing? Your tools and your stock-in-trade are too heavy to move quickly. Also nope, not if you expect to need to run for your lives at very short notice. But moneylending, or selling gold and jewelry? That works. Grab one or two chests and throw them onto the cart, and you've preserved most of the core of your business, even if the mob torches the shop and any tools that were impractical to move.<p>So Jews ended up gravitating towards being jewelers, bankers, moneylenders, and so on. All of which, yes, did feed into stereotypes.</p>
]]></description><pubDate>Fri, 22 May 2026 17:23:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48238784</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48238784</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48238784</guid></item><item><title><![CDATA[New comment by rmunn in "Why is Inkwell stuck in review"]]></title><description><![CDATA[
<p>That brings up an interesting point about the ethics that attorneys have to follow. (Not an attorney myself but have relatives who are, so someone please correct me if I get a detail or two wrong). Attorneys are supposed to represent their client to the best of their ability, even if what the client wants done is stupid. The attorney can <i>advise</i> and say "Hey listen, filing that lawsuit is dumb and a waste of your time and money, you have zero chance of winning" but if the client says "I don't care, file the lawsuit anyway" then the attorney has to file the suit, even if they <i>know</i> the client has no chance of winning. There are some professional lines that attorneys are not allowed to cross, such as misrepresenting the content of legal cases they cite (lawyers have gotten dinged for doing so <i>accidentally</i> by not double-checking LLM-written documents before filing them, and citing hallucinated cases or misrepresenting the content of real cases that were cited). But as long as they don't cross those lines, attorneys have to do whatever the <i>client</i> asks them to do, even if they know it's stupid. Their job is to represent the client's opinions, not their own.</p>
]]></description><pubDate>Thu, 21 May 2026 05:09:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48218131</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48218131</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48218131</guid></item><item><title><![CDATA[New comment by rmunn in "Lisp in Web-Based Applications (2001)"]]></title><description><![CDATA[
<p>This is one of the essays linked on his site: <a href="https://paulgraham.com/lwba.html" rel="nofollow">https://paulgraham.com/lwba.html</a><p>Which just links to the same ASCII-text link at <a href="https://sep.turbifycdn.com/ty/cdn/paulgraham/bbnexcerpts.txt" rel="nofollow">https://sep.turbifycdn.com/ty/cdn/paulgraham/bbnexcerpts.txt</a>, so it's exactly the same link as the one posted on HN here.</p>
]]></description><pubDate>Wed, 20 May 2026 04:01:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48202941</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48202941</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48202941</guid></item><item><title><![CDATA[New comment by rmunn in "The Quiet Renovation at Bitwarden"]]></title><description><![CDATA[
<p>Tailscale for your laptop, phone, etc. to be able to talk to the other computers when away from your home WiFi. (Optional, but makes syncing easier).<p>Syncthing, talking to your Tailscale IP addresses if you use it, or your private WiFi network addresses if you don't use Tailscale.<p>One folder synced, containing keyfile2.kdbx.<p>30 minutes to set up and then you almost never need to think about it again. If you don't trust Tailscale, you can run a Headscale server or just not use it. And the syncing is entirely run on your machines; your data never ends up written to someone else's SSD.<p>It's really not much effort.</p>
]]></description><pubDate>Tue, 19 May 2026 02:45:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=48188605</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48188605</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48188605</guid></item><item><title><![CDATA[New comment by rmunn in "The vi family"]]></title><description><![CDATA[
<p>I should mention what is becoming my favorite thing about LazyVim's default config, which is the "flash" or "seek" command (LazyVim maps it to `s` so I think of it as "seek") from <a href="https://github.com/folke/flash.nvim" rel="nofollow">https://github.com/folke/flash.nvim</a>. I didn't like it at first as I was used to typing `s` to quickly replace a single character with a bunch of text (as opposed to `r` which replaces it with just one character). But I soon learned to remap my brain to use `cl` where I used to use `s`, and then I learned to love "flash"/"seek" mode.<p>I wrote about how it works in <a href="https://news.ycombinator.com/item?id=48118585">https://news.ycombinator.com/item?id=48118585</a> so I won't repeat that here. But if I had to pick my favorite feature from LazyVim's config... well, actually it would probably be something else, but `s` is definitely in the top three by now.</p>
]]></description><pubDate>Wed, 13 May 2026 06:49:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=48118613</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48118613</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48118613</guid></item><item><title><![CDATA[New comment by rmunn in "The vi family"]]></title><description><![CDATA[
<p>Something rather similar to visual mode, and which I've learned to like a lot, is the <a href="https://github.com/folke/flash.nvim" rel="nofollow">https://github.com/folke/flash.nvim</a> plugin (NeoVim only since it uses Lua). It gives you a commmand you can bind to a key (<a href="https://www.lazyvim.org/" rel="nofollow">https://www.lazyvim.org/</a> defaults to binding it to `s` for "Seek"). Press that key and then type a couple letters that appear somewhere on your screen. All occurrences of the letters you typed will be highlighted (and the rest will be dimmed), and next to each of them will appear a bright, contrasting letter that serves as a label. Type the label character and you will jump to the start position of the text you typed.<p>Why is that handy? Well, the idea is that you're probably already looking at the point on the screen you want to move the cursor to, so instead of figuring out a complex navigation, you can type a few keys: `s` plus the letters you're looking at. Then pause for a quarter-second, and type the letter that just appeared where you're looking at. The label letters will be chosen such that none of them appear after the text you typed, e.g. if the words "car", "cat", and "can" all appear in your document, then after you press `sca` the labels `r`, `t`, and `n` will never be chosen. (But the label `d` might be chosen if the word "cad", or words containing it such as "academic", never appear in the document).<p>It took a little getting used to, but now I've found it's quite the fastest way to issue commands. Want to delete everything from here to <i>that</i> closing parenthesis right there? If you're on its matching open parenthesis then `d%` is fastest, but if you're not, then `ds)` followed by split-second pause to see the label appear (in a bright contrasting color), then type the label. Quite a bit faster than `v` plus a bunch of movement, in my experience. Once you get used to it, it really speeds you up.<p>And when you get down to it, isn't "once you get used to it, it really speeds you up" a description of the entire vi family of editors in the first place?</p>
]]></description><pubDate>Wed, 13 May 2026 06:45:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48118585</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48118585</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48118585</guid></item><item><title><![CDATA[New comment by rmunn in "The vi family"]]></title><description><![CDATA[
<p>I think you're right and visual mode is underused. It gives you the best of both worlds: "cw" meaning "change word" for when it's obvious what you're going to be selecting, and "v3wwwc" for "change 5 words" when you discover (by experimentation) that the text you wanted to change actually counted as 5 words due to punctuation, not 3 as you had first thought.</p>
]]></description><pubDate>Wed, 13 May 2026 06:34:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48118531</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48118531</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48118531</guid></item><item><title><![CDATA[New comment by rmunn in "The vi family"]]></title><description><![CDATA[
<p>I never edited the default config much.<p>But then I discovered <a href="https://www.lazyvim.org/" rel="nofollow">https://www.lazyvim.org/</a>. Turns your copy of NeoVim into an IDE.<p>I still haven't edited the default config much, actually. But now I'm probably 2x to 3x as productive in vim (nvim, now) as before.<p>P.S. If you decide to check out the LazyVim config, I highly recommend reading <a href="https://lazyvim-ambitious-devs.phillips.codes/" rel="nofollow">https://lazyvim-ambitious-devs.phillips.codes/</a> all the way through. There's a lot of new keybindings to learn, but Dusty Phillips's book gives you a gentle on-ramp to learning most of them.</p>
]]></description><pubDate>Wed, 13 May 2026 06:31:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48118512</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48118512</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48118512</guid></item><item><title><![CDATA[New comment by rmunn in "The vi family"]]></title><description><![CDATA[
<p>I have typed either :wq or ZZ into so many files in VS Code... :-)</p>
]]></description><pubDate>Wed, 13 May 2026 06:28:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=48118502</link><dc:creator>rmunn</dc:creator><comments>https://news.ycombinator.com/item?id=48118502</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48118502</guid></item></channel></rss>