<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>Sun, 24 May 2026 19:56:57 +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 "Is my blue your blue?"]]></title><description><![CDATA[
<p>I feel like there needs to be some sort of intermediate black screen between the questions, a visual "palette cleanser" if you will. I was actively noticing the saturation of the color decline as I stared at the screen.</p>
]]></description><pubDate>Mon, 27 Apr 2026 21:59:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47927941</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47927941</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47927941</guid></item><item><title><![CDATA[New comment by mbo in "Show HN: I made a calculator that works over disjoint sets of intervals"]]></title><description><![CDATA[
<p>Could this support a native datetime type? I shipped a much worse of this for managing repeated events and schedules.</p>
]]></description><pubDate>Sat, 18 Apr 2026 11:55:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=47815191</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47815191</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47815191</guid></item><item><title><![CDATA[New comment by mbo in "Let's talk space toilets"]]></title><description><![CDATA[
<p>A commonly trotted out argument for continued investment in manned space flight is technological spillover: that all the money we give to NASA generates positive benefits in other sectors of the economy. I'm not so sure space toilets are generating that spillover. This seems like a uniquely expensive humans-in-space engineering problem. I echo the sentiments of Why Not Mars (<a href="https://idlewords.com/2023/1/why_not_mars.htm" rel="nofollow">https://idlewords.com/2023/1/why_not_mars.htm</a>):<p>> The web of Rube Goldberg devices that recycles floating animal waste on the space station has already cost twice its weight in gold and there is little appetite for it here on Earth, where plants do a better job for free. [...] I would compare keeping primates alive in spacecraft to trying to build a jet engine out of raisins. Both are colossal engineering problems, possibly the hardest ever attempted, but it does not follow that they are problems worth solving. [...] Humanity does not need a billion dollar shit dehydrator that can work for three years in zero gravity, but a Mars mission can’t leave Earth without it.<p>Why are we doing human spaceflight again?</p>
]]></description><pubDate>Wed, 15 Apr 2026 19:17:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=47783872</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47783872</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47783872</guid></item><item><title><![CDATA[New comment by mbo in "Hegel, a universal property-based testing protocol and family of PBT libraries"]]></title><description><![CDATA[
<p>Given some system under test (SUT) with inputs (T, G...) and expected outputs derived from the inputs T', G' etc., a property based testing framework attempts to exercise the entire domain of values assignable to T, G, etc. against the SUT.<p>The generators of T, typically called an Arbitrary<T> can be constrained, e.g Arbitrary<number> could generate any float or just non-negative integers. Ideally we would define an Arbitrary<float64> or Arbitrary<u64>.<p>A sufficiently expressive type system makes it easier to narrow the gap between what is generated and what is assignable to type T, making it clearer what the valid input domain to the SUT is.</p>
]]></description><pubDate>Fri, 10 Apr 2026 14:04:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=47718359</link><dc:creator>mbo</dc:creator><comments>https://news.ycombinator.com/item?id=47718359</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47718359</guid></item><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></channel></rss>