HN user

mbo

1,254 karma
Posts13
Comments236
View on HN

I will say that I find even in games that do pay some lip-service to the continued existence of subordinated peoples within large empires – I think particularly of Europa Universalis, Stellaris and Imperator – the mechanics and dynamics for managing those populations in a polyethnic, polylinguistic society are often sharply underdeveloped. In many games that don’t simply erase those populations, they are instead represented by a simple malus (e.g. “Non-primary culture, -x% production/stability/manpower/whatever).

Is this addressed in EU5 with its new population/culture system https://eu5.paradoxwikis.com/Population / https://eu5.paradoxwikis.com/Culture? I have not played it yet.

Given that the stock market completely crashed upon the release of DeepSeek-R1 it's fair to say that it was a negative billion dollar PDF.

I'm not sure this is a helpful comment. This is a common story with many medications, where someone notices their feelings are off and suddenly remembers that there is a probable root cause. It's why medications list side effects.

It is a win-win for Photobucket users who have their images (which OP is NOT a cohort of) preserved long term and the startup who snapped up Photobucket's data and liabilities. It is fair to say that OP experienced a win-loss in this specific situation.

I did not assume that OP got the images. That's why I explicitly called it out. In my first sentence. And again in my second last sentence. Jesus.

Yes that's exactly why I mentioned that in the first line of my comment. I quote directly:

(I do agree that it's bad that there were no images preserved and that component of the post is justifiable)

Why are we complaining about this as a corporate greed thing? (I do agree that it's bad that there were no images preserved and that component of the post is justifiable)

Obviously Photobucket completely failed to properly monetize, and was sold to Fox and then offloaded to some no-name startup called Ontela (https://en.wikipedia.org/wiki/Photobucket). The service could have been shutdown completely and the harddrives fed into the shredder. Instead some former PE vulture did the math and figured out that preservation might make some money. You _can_ access old Photobucket images (when it works) that would otherwise get a median of 0 hits a month, while the rest of the internet succumbs to linkrot. Seems like a win-win for everyone involved.

Magnifica Humanitas 2 months ago

I just messaged a few of my friends who I know are devoutly Catholic (and also happen to work in AI): 3 out of 4 are currently reading it this morning for their Memorial Day.

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.

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 (https://idlewords.com/2023/1/why_not_mars.htm):

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.

Why are we doing human spaceflight again?

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.

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>.

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.

PICA-3, per https://caseyhandmer.wordpress.com/2025/10/31/nasas-orion-sp...

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.

I'm not sure I'm understanding this workflow. Perhaps a small tutorial / walkthrough hosted on YouTube or asciinema might help people understand.

An incoherent Rust 4 months ago

I never understood why Rust couldn't figure this shit out. Scala did.

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.

You are allowed to do this in Scala.

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.

You can easily autoderive a new typeclass instance. With Scala 3, that would be:

  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}>"
> Here we have two overlapping trait impls which specify different values for the associated type Assoc.
  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²

Scala catches this too.

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.

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: https://maxbo.me/subordinate-latin.html (and cite "the peculiar case of Japanese web design")

Facebook is cooked 5 months ago

My mother is an international flight attendant in her 60s.

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.

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.

This is an absolutely wonderful article. I helped build a system very similar to the one quoted below:

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.

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.

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 (https://www.inkandswitch.com/cambria/, cited in the article) to handle the evolution.

I've only seen one IDL try to do this properly by baking evolution semantics directly into its type model, typical (https://github.com/stepchowfun/typical) 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` (https://buf.build/docs/reference/cli/buf/breaking/), 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.)

Another one that I think makes a pretty good attempt is the config language CUE and its type system (https://cuelang.org/docs/concept/the-logic-of-cue/), 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.

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.