<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: mbo</title><link>https://news.ycombinator.com/user?id=mbo</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 08 Apr 2026 12:58:59 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mbo" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mbo in "We found an undocumented bug in the Apollo 11 guidance computer code"]]></title><description><![CDATA[
<p>Pangram has a very low false positive rate, but not the best false negative rate: <a href="https://www.pangram.com/blog/third-party-pangram-evals" rel="nofollow">https://www.pangram.com/blog/third-party-pangram-evals</a></p>
]]></description><pubDate>Tue, 07 Apr 2026 14:07:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=47675617</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47675617</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47675617</guid></item><item><title><![CDATA[New comment by mbo in "Number in man page titles e.g. sleep(3)"]]></title><description><![CDATA[
<p>Note that this is contrary to the convention used in the Erlang community, where the number is used to disambiguate function definitions with different parameter counts, e.g. in <a href="https://www.erlang.org/docs/18/man/supervisor.html" rel="nofollow">https://www.erlang.org/docs/18/man/supervisor.html</a> we see definitions of `start_link/2` and `start_link/3`.<p>It is a stylistic convention to always add this number to any reference to a function, even if there is only one definition.</p>
]]></description><pubDate>Mon, 06 Apr 2026 18:27:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=47664865</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47664865</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47664865</guid></item><item><title><![CDATA[New comment by mbo in "Artemis II is not safe to fly"]]></title><description><![CDATA[
<p>PICA-3, per <a href="https://caseyhandmer.wordpress.com/2025/10/31/nasas-orion-space-capsule-is-flaming-garbage/" rel="nofollow">https://caseyhandmer.wordpress.com/2025/10/31/nasas-orion-sp...</a><p>> All this would be inexplicable enough if, indeed, AVCOAT was the only known material from which heat shields could be built. But while Lockheed continues to soak the US taxpayer and play chicken with the lives of NASA’s astronauts with this “flight proven” (but completely different) design, Lockheed happily built a PICA heat shield for JPL’s large Mars rovers Curiosity and Perseverance, and SpaceX’s Dragon capsule also uses PICA-3.</p>
]]></description><pubDate>Tue, 31 Mar 2026 15:10:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=47588504</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47588504</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47588504</guid></item><item><title><![CDATA[New comment by mbo in "Meow.camera"]]></title><description><![CDATA[
<p>man, this cat is ranking pretty high on the feline grimace scale :( <a href="https://meow.camera/#4258783365322591678" rel="nofollow">https://meow.camera/#4258783365322591678</a> wondering how I would contact the hosts</p>
]]></description><pubDate>Fri, 27 Mar 2026 19:35:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47547221</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47547221</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47547221</guid></item><item><title><![CDATA[New comment by mbo in "Don't Wait for Claude"]]></title><description><![CDATA[
<p>I'm not sure I'm understanding this workflow. Perhaps a small tutorial / walkthrough hosted on YouTube or asciinema might help people understand.</p>
]]></description><pubDate>Fri, 27 Mar 2026 18:24:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47546391</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47546391</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47546391</guid></item><item><title><![CDATA[New comment by mbo in "An incoherent Rust"]]></title><description><![CDATA[
<p>I never understood why Rust couldn't figure this shit out. Scala did.<p>> If a crate doesn’t implement serde’s traits for its types then those types can’t be used with serde as downstream crates cannot implement serde’s traits for another crate’s types.<p>You are allowed to do this in Scala.<p>> Worse yet, if someone publishes an alternative to serde (say, nextserde) then all crates which have added support for serde also need to add support for nextserde. Adding support for every new serialization library in existence is unrealistic and a lot of work for crate authors.<p>You can easily autoderive a new typeclass instance. With Scala 3, that would be:<p><pre><code>  trait Hash[A]:
    extension (a: A) def hash: Int

  trait PrettyPrint[A]:
    extension (a: A) def pretty: String

  // If you have Hash for A, you automatically get PrettyPrint for A
  given autoDerive[A](using h: Hash[A]): PrettyPrint[A] with
    extension (a: A) def pretty: String = s"<#${a.hash.toHexString}>"
</code></pre>
> Here we have two overlapping trait impls which specify different values for the associated type Assoc.<p><pre><code>  trait Trait[A]:
    type Assoc

  object A:
    given instance: Trait[Unit] with
      type Assoc = Long

    def makeAssoc: instance.Assoc = 0L

  object B:
    given instance: Trait[Unit] with
      type Assoc = String

    def dropAssoc(a: instance.Assoc): Unit =
      val s: String = a
      println(s.length)

  @main def entry(): Unit =
    B.dropAssoc(A.makeAssoc) // Found: Playground.A.instance.Assoc Required: Playground.B.instance².Assoc²

</code></pre>
Scala catches this too.</p>
]]></description><pubDate>Mon, 23 Mar 2026 23:51:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47496771</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47496771</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47496771</guid></item><item><title><![CDATA[New comment by mbo in "The peculiar case of Japanese web design (2022)"]]></title><description><![CDATA[
<p>That's the fallback font when the font that is requested is not available locally (and the license doesn't permit them to be redistributed). I wanted it to be visually obvious.</p>
]]></description><pubDate>Thu, 26 Feb 2026 20:33:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47171640</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47171640</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47171640</guid></item><item><title><![CDATA[New comment by mbo in "The peculiar case of Japanese web design (2022)"]]></title><description><![CDATA[
<p>I have a little theory that a thing that makes Japanese website feel Japanese is their choice of typeface, which will almost always be something with robust CJK character support. This typeface is preserved when Chrome auto-translates the site.<p>But fonts with good CJK support have wider Latin letter-forms, even when not in `font-variant-east-asian: 'full-width'` mode. I write about this here: <a href="https://maxbo.me/subordinate-latin.html" rel="nofollow">https://maxbo.me/subordinate-latin.html</a> (and cite "the peculiar case of Japanese web design")</p>
]]></description><pubDate>Mon, 23 Feb 2026 18:56:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47126946</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47126946</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47126946</guid></item><item><title><![CDATA[New comment by mbo in "Facebook is cooked"]]></title><description><![CDATA[
<p>My mother is an international flight attendant in her 60s.<p>I recently caught a glimpse of her Facebook and I was shocked to discover a version of the website that seemed to be the platonic ideal of exactly what all the Facebook PMs intended. Her feed was filled with the photos of her friends and coworkers international trips and holidays, posts in groups for planning activities in her most frequented cities. But I discovered that my mum was also a frequent "poster" of the photos of her various trips around the world, and the comments sections were filled with with some beautiful messages from her many many friends and family.<p>From this I learned that there is a subset of the population that Facebook works perfectly for and meaningfully improves their real-world social relationships. And perhaps Facebook has been hyper-optimized for that kind of use case through relentless A/B testing. But I fear my mum is quite privileged  to have this kind of experience.</p>
]]></description><pubDate>Fri, 20 Feb 2026 20:25:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47093428</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47093428</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47093428</guid></item><item><title><![CDATA[New comment by mbo in "What functional programmers get wrong about systems"]]></title><description><![CDATA[
<p>This is an absolutely wonderful article. I helped build a system very similar to the one quoted below:<p>> A deploy pipeline that queries your orchestrator for running image tags, checks your migration history against the schema registry, diffs your GraphQL schema against collected client operations, and runs Buf’s compatibility checks: this is buildable today, with off-the-shelf parts.<p>that was largely successful at eliminating interservice compatibility errors, but it felt like we were scrambling around in a dark and dusty corner of software engineering that not many people really cared about. Good to see that there's a body of academic work that I was not entirely aware about that is looking into this.<p>The article successfully identifies that, yes, there are ways, with sufficient effort, to statically verify that a schema change is (mostly) safe or unsafe before deployment. But even with that determination, a lot of IDLs make it still very hard to evolve types! The compatibility checker will successfully identify that strengthening a type from `optional` to `required` isn't backwards compatible: _now what_. There isn't a safe pathway for schema evolution, and you need to reach for something like Cambria (<a href="https://www.inkandswitch.com/cambria/" rel="nofollow">https://www.inkandswitch.com/cambria/</a>, cited in the article) to handle the evolution.<p>I've only seen one IDL try to do this properly by baking evolution semantics directly into its type model, typical (<a href="https://github.com/stepchowfun/typical" rel="nofollow">https://github.com/stepchowfun/typical</a>) with it's `asymmetric` type label: it makes a field required in the constructor but not the deserialiser. I would like to see these "asymmetric" types find their ways into IDLs like Protocol Buffers such that their compatibility checkers, like Buf's `buf breaking` (<a href="https://buf.build/docs/reference/cli/buf/breaking/" rel="nofollow">https://buf.build/docs/reference/cli/buf/breaking/</a>), can formally reason about them. I feel like there is a rich design space of asymmetric types that are poorly described  (enum values that can only be compared against but never constructed, paired validations, fallback values sent over the wire, etc.)<p>Another one that I think makes a pretty good attempt is the config language CUE and its type system (<a href="https://cuelang.org/docs/concept/the-logic-of-cue/" rel="nofollow">https://cuelang.org/docs/concept/the-logic-of-cue/</a>), which allows you to do first-class version compatibility modelling. But I have yet to investigate whether CUE is fit for purpose for modelling compatibility over the wire / between service deploys.</p>
]]></description><pubDate>Tue, 10 Feb 2026 02:14:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=46954485</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=46954485</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46954485</guid></item><item><title><![CDATA[New comment by mbo in "The Mathematics of Tuning Systems"]]></title><description><![CDATA[
<p>If anyone wants to hear the practical effects of a 1/4 comma meantone temperament compared to an equal temperament, Brandon Acker gives a wonderful overview on the classical guitar: <a href="https://www.youtube.com/watch?v=tiKCORN-6m8" rel="nofollow">https://www.youtube.com/watch?v=tiKCORN-6m8</a></p>
]]></description><pubDate>Wed, 04 Feb 2026 17:39:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=46888861</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=46888861</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46888861</guid></item><item><title><![CDATA[New comment by mbo in "Buttered Crumpet, a custom typeface for Wallace and Gromit"]]></title><description><![CDATA[
<p>I've seen nostalgia expressed for the CLIP guided diffusion aesthetic of 2021!</p>
]]></description><pubDate>Fri, 30 Jan 2026 18:15:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46827832</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=46827832</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46827832</guid></item><item><title><![CDATA[New comment by mbo in "Ask HN: Share your personal website"]]></title><description><![CDATA[
<p><a href="https://maxbo.me/" rel="nofollow">https://maxbo.me/</a></p>
]]></description><pubDate>Wed, 14 Jan 2026 19:33:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=46621544</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=46621544</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46621544</guid></item><item><title><![CDATA[New comment by mbo in "Classical statues were not painted horribly"]]></title><description><![CDATA[
<p>This is somewhat an unfounded theory of mine and I was hoping if anyone has any insight: but I sense that this is perhaps a construction of Western restoration/preservationist theory. A lot of effort seems to be taken to either preserve original material, not take liberties etc. While touring temples and museums in Japan, I got a sense that restorations were much more aggressive, and less regard was taken to the preservation of material (or building "fabric"), with a greater focus on the use of traditional techniques during restoration.</p>
]]></description><pubDate>Thu, 18 Dec 2025 15:06:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=46313452</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=46313452</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46313452</guid></item><item><title><![CDATA[New comment by mbo in "Hashcards: A plain-text spaced repetition system"]]></title><description><![CDATA[
<p>Aren't the hashcards complaint recutils files too?</p>
]]></description><pubDate>Sun, 14 Dec 2025 20:35:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=46266600</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=46266600</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46266600</guid></item><item><title><![CDATA[New comment by mbo in "Transpiler, a Meaningless Word (2023)"]]></title><description><![CDATA[
<p>Partial evaluators would also be considered cispilers.</p>
]]></description><pubDate>Thu, 13 Nov 2025 16:13:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=45916656</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=45916656</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45916656</guid></item><item><title><![CDATA[New comment by mbo in "HTML Slides with notes"]]></title><description><![CDATA[
<p>self plug: one of my articles also has its own slide infrastructure (exposed to the reader as well!): <a href="https://maxbo.me/a-html-file-is-all-you-need.html#:~:text=Slide%20infrastructure" rel="nofollow">https://maxbo.me/a-html-file-is-all-you-need.html#:~:text=Sl...</a></p>
]]></description><pubDate>Fri, 07 Nov 2025 15:03:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=45847132</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=45847132</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45847132</guid></item><item><title><![CDATA[New comment by mbo in "Intent to Deprecate and Remove XSLT"]]></title><description><![CDATA[
<p>This is why I've needed to use XLST, to style my personal RSS feed. Great guide for this: <a href="https://andrewstiefel.com/style-atom-xsl/" rel="nofollow">https://andrewstiefel.com/style-atom-xsl/</a> Looks like it's been raised on the whatwg issue too: <a href="https://github.com/whatwg/html/issues/11523#issuecomment-3151679326" rel="nofollow">https://github.com/whatwg/html/issues/11523#issuecomment-315...</a></p>
]]></description><pubDate>Sat, 01 Nov 2025 15:12:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=45782271</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=45782271</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45782271</guid></item><item><title><![CDATA[New comment by mbo in "Kafka is Fast – I'll use Postgres"]]></title><description><![CDATA[
<p>This is an article in desperate need for some data visualizations. I do not think it does an effective job of communicating differences in performance.</p>
]]></description><pubDate>Wed, 29 Oct 2025 19:30:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=45751841</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=45751841</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45751841</guid></item><item><title><![CDATA[New comment by mbo in "Ask HN: Our AWS account got compromised after their outage"]]></title><description><![CDATA[
<p>This happened to me on Twitter maybe like, 9 years ago? What's the mechanism of action that causes this to happen?</p>
]]></description><pubDate>Tue, 21 Oct 2025 20:20:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=45661165</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=45661165</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45661165</guid></item></channel></rss>