<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: lilyball</title><link>https://news.ycombinator.com/user?id=lilyball</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 28 May 2026 17:42:46 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=lilyball" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by lilyball in "Root Persistence via macOS Recovery Mode Safari"]]></title><description><![CDATA[
<p>At the very least the author's submission and follow-ups to Product Security looks written by AI.</p>
]]></description><pubDate>Mon, 06 Apr 2026 21:40:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=47667558</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=47667558</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47667558</guid></item><item><title><![CDATA[New comment by lilyball in "Async Python Is Secretly Deterministic"]]></title><description><![CDATA[
<p>This claim sounds vaguely familiar to me (though the documentation on Dictionary does not state any reason for why the iteration order is unpredictable), though the more common reason for languages to have unstable hash table iteration orders is as a consequence of protection against hash flooding, malicious input causing all keys to hash to the same bucket (because iteration order is dependent on bucket order).</p>
]]></description><pubDate>Fri, 03 Apr 2026 19:47:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=47631307</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=47631307</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47631307</guid></item><item><title><![CDATA[New comment by lilyball in "In math, rigor is vital, but are digitized proofs taking it too far?"]]></title><description><![CDATA[
<p>> <i>If you formalize, you'll end up with one rigorous definition</i><p>Can't you just formalize both definitions and pick the one to work with based on what you want to do? Surely the only obstacle here is the time and effort it takes to write the formalization?<p>Or, alternatively, just because you've formalized the advanced calculus version doesn't mean you need to use the formalization when teaching basic calculus. The way we've proven something and the way we teach that something don't have to be the same.</p>
]]></description><pubDate>Mon, 30 Mar 2026 20:19:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47579234</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=47579234</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47579234</guid></item><item><title><![CDATA[New comment by lilyball in "My “grand vision” for Rust"]]></title><description><![CDATA[
<p>"View types" addresses one of the top pain points of the borrow checker, which is disjoint borrows on a single value. The compiler can understand values where only some fields are borrowed, so e.g. you can mutably borrow the currently-unborrowed fields, but there's no way to write these partial borrows and so you cannot write functions that either take or return these borrows. This often means having to restructure code to split up one struct into several child structs just to be able to borrow those substructs independently.</p>
]]></description><pubDate>Mon, 09 Mar 2026 02:38:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=47304264</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=47304264</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47304264</guid></item><item><title><![CDATA[New comment by lilyball in "What Every Experimenter Must Know About Randomization"]]></title><description><![CDATA[
<p>The argument against PRNGs this paper makes isn't that the PRNG produces results that can be distinguished from TRNG, but that the 256-bit seed deterministically chooses a single shuffling. If you need 300 bits to truly shuffle the assignment but you only have 256 bits, then that's a lot of potential assignments that can never actually happen. With this argument it doesn't matter what the PRNG is, the fact that it's deterministic is all that matters. And this invalidates the p-value because the p-value assumes that all possible assignments are equiprobable, when in fact a lot of possible assignments have a probability of zero.<p>I imagine you could change the p-value test to randomly sample assignments generated via the exact same process that was used to generate the assignment used by the experiment, and as you run more and more iterations of this the calculated p-value should converge to the correct value, but then the question becomes is the p-value calculated this way the same as the p-value you'd get if you actually went ahead and used equiprobable assignment to begin with?<p>Ultimately, this all comes down to the fact that it's not hard to use true randomness for the whole thing, and true randomness produces statistically valid results, if you use true randomness for assignment then you can't screw up the p-value test, and so there's no reason at all to even consider how to safely use a PRNG here, all that does is open the door to messing up.</p>
]]></description><pubDate>Wed, 18 Feb 2026 22:59:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47067592</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=47067592</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47067592</guid></item><item><title><![CDATA[New comment by lilyball in "Show HN: Echo, an iOS SSH+mosh client built on Ghostty"]]></title><description><![CDATA[
<p>This sounds nice, but since you're talking about using it with agents, to what extent was AI used to actually write the app?</p>
]]></description><pubDate>Wed, 18 Feb 2026 21:05:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=47066374</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=47066374</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47066374</guid></item><item><title><![CDATA[New comment by lilyball in "Nested code fences in Markdown"]]></title><description><![CDATA[
<p>For new implementations, sure. But it's harder to change existing implementations (anything not already CommonMark-compatible will introduce unexpected changes to existing content if you switch to CommonMark), and especially for anything that's not being actively developed it's unlikely to ever change.</p>
]]></description><pubDate>Thu, 22 Jan 2026 18:32:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=46723302</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=46723302</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46723302</guid></item><item><title><![CDATA[New comment by lilyball in "Nested code fences in Markdown"]]></title><description><![CDATA[
<p>Not all markdown implementations are CommonMark</p>
]]></description><pubDate>Wed, 21 Jan 2026 21:55:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=46712136</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=46712136</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46712136</guid></item><item><title><![CDATA[New comment by lilyball in "Tailscale state file encryption no longer enabled by default"]]></title><description><![CDATA[
<p>Apple Keychain syncing is end-to-end encrypted, Apple cannot see the contents of your synced keychain.</p>
]]></description><pubDate>Thu, 08 Jan 2026 18:27:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=46544566</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=46544566</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46544566</guid></item><item><title><![CDATA[New comment by lilyball in "Self-hosting my photos with Immich"]]></title><description><![CDATA[
<p>Is it? Why? If a NixOS module doesn’t support what you need, you can just write your own module, and the module system lets you disable existing modules if you need to. Doing anything custom this way still feels easier than doing it in an imperative world.</p>
]]></description><pubDate>Sat, 06 Dec 2025 11:34:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=46172519</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=46172519</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46172519</guid></item><item><title><![CDATA[New comment by lilyball in "Patterns for Defensive Programming in Rust"]]></title><description><![CDATA[
<p>In Pattern: Defensively Handle Constructors, it recommends using a nested inner module with a private Seal type. But the Seal type is unnecessary. The nested inner module is all you need, a private field `_private: ()` is only settable from within that inner module, so you don't need the extra private type.</p>
]]></description><pubDate>Fri, 05 Dec 2025 21:43:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=46167782</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=46167782</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46167782</guid></item><item><title><![CDATA[New comment by lilyball in "Homebrew no longer allows bypassing Gatekeeper for unsigned/unnotarized software"]]></title><description><![CDATA[
<p>I haven't used Homebrew in a long time, but if I ever did it would be in the way that you describe (so far I've always found reasonable alternatives for the software I want). What I'm wondering is if this is entirely to support unsigned casks, why does Homebrew not simply resign the software itself at install time with an adhoc signature as though it had just built it?</p>
]]></description><pubDate>Wed, 12 Nov 2025 23:45:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=45908540</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=45908540</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45908540</guid></item><item><title><![CDATA[New comment by lilyball in "The AirPods Pro 3 flight problem"]]></title><description><![CDATA[
<p>If you don't use ANC, then why is an ANC issue that only appears on flights a reason for you to not buy a product? If someone said they have weird ears and the AirPods Pro 3 simply doesn't fit their ears, would that be a reason for you to not buy it even though it fits yours?</p>
]]></description><pubDate>Tue, 28 Oct 2025 20:10:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=45738445</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=45738445</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45738445</guid></item><item><title><![CDATA[New comment by lilyball in "I spent a year making an ASN.1 compiler in D"]]></title><description><![CDATA[
<p>I'm fascinated by ASN.1, I don't know why it appeals to me so much but I find working with it oddly fun. I've always wanted to find the time to write an ASN.1 compiler for Rust, because for some reason all of the Rust implementations I've seen end up just either being derive macros on Rust structs (so going the other direction), or even just providing a bunch of ASN.1 types and functions and expecting you to manually chain them together using nom.</p>
]]></description><pubDate>Thu, 23 Oct 2025 21:50:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=45687724</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=45687724</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45687724</guid></item><item><title><![CDATA[New comment by lilyball in "Apple: SSH and FileVault"]]></title><description><![CDATA[
<p>LaunchDaemons don't rely on GUI login state so they should come up. If you use LaunchAgents then they won't start this way, but LaunchDaemons should be enabled once the data volume is unlocked and booting finishes.</p>
]]></description><pubDate>Fri, 19 Sep 2025 01:27:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=45296978</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=45296978</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45296978</guid></item><item><title><![CDATA[New comment by lilyball in "Apple: SSH and FileVault"]]></title><description><![CDATA[
<p>Unlock over SSH terminates the connection after unlocking the data volume, so it doesn't even attempt to start the shell until you reconnect after it's fully booted up.<p>FWIW you can fix the shell issue by wrapping your shell in a shim that essentially runs wait4path on the nix store before exec'ing your real shell. I set up my environment to install that shim binary directly onto the data volume at a known path so it can be used as my login shell.</p>
]]></description><pubDate>Fri, 19 Sep 2025 01:23:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=45296948</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=45296948</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45296948</guid></item><item><title><![CDATA[New comment by lilyball in "New knot theory discovery overturns long-held mathematical assumption"]]></title><description><![CDATA[
<p>It's not just 5 moves. It's 5 <i>crossing changes</i> (which don't change the number of crossings, they just change the order of the strings in a crossing). Unknotting also involves moving the strings around to add or remove crossings, without performing crossing changes (if you take a loop and twist it into a figure eight, you've moved the strings and created a crossing but you haven't cut the strings and performed a crossing change).<p>If you look at the preprint paper, the knot it starts with has 14 crossings, but they actually move the strings around to end up with 20 crossings prior to performing the first 2 crossing changes in the unknotting sequence. So the potential space for moves here is actually rather large.</p>
]]></description><pubDate>Thu, 04 Sep 2025 06:54:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=45124346</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=45124346</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45124346</guid></item><item><title><![CDATA[New comment by lilyball in "Unexpected productivity boost of Rust"]]></title><description><![CDATA[
<p>If you need to hold a lock across an await point, you can switch to an async-aware mutex. Both the futures crate and the tokio crate have implementations of async-aware mutexes. You usually only want this if you're holding it across an await point because they're more expensive than blocking mutexes (the other reason to use this is if you expect the mutex to be held for a significant amount of time, so an async-aware lock will allow other tasks to progress while waiting to take the lock).</p>
]]></description><pubDate>Wed, 27 Aug 2025 22:37:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=45046198</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=45046198</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45046198</guid></item><item><title><![CDATA[New comment by lilyball in "I Prefer RST to Markdown (2024)"]]></title><description><![CDATA[
<p>Your argument here is basically just "I already know Markdown". Sure, the Markdown image syntax is similar to its hyperlink syntax, so if you know the hyperlink syntax then the image syntax is easy, but the same argument works for reST but even better, the image syntax is the same as any other directive, so if you know how to write a directive then you know how to write an image.</p>
]]></description><pubDate>Mon, 18 Aug 2025 03:20:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=44937074</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=44937074</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44937074</guid></item><item><title><![CDATA[New comment by lilyball in "OpenBSD is so fast, I had to modify the program slightly to measure itself"]]></title><description><![CDATA[
<p>It's extremely distracting. I'm not normally one to have issues that require reduced motion, but the asteroids are almost distracting enough on their own, and the fact that it causes my cursor to vanish is a real accessibility issue. I didn't actually realize just how much I use my mouse cursor when reading stuff until now, partly as a fidget, partly as a controllable visual anchor as my eyes scan the page.</p>
]]></description><pubDate>Fri, 15 Aug 2025 21:24:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=44917423</link><dc:creator>lilyball</dc:creator><comments>https://news.ycombinator.com/item?id=44917423</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44917423</guid></item></channel></rss>