Appreciation post: Space Station Weird

Lately, I’ve been thinking: I find a lot of cool media online, and almost never share or promote it even though I have a platform. So let’s fix that!

Each post in this series will start with a quick summary to convince you to go look at the thing for yourself, and then I’ll dive in and overanalyze it. (Don’t worry, spoilers will be marked ahead of time.)

Space Station Weird

Space Station Weird is Luke Humphris’s big project over the past year. Set at some nebulous point in the future, it stars a “fridge dude” tasked with maintaining a seemingly-empty space station.

At the time of this writing, there are three episodes, totaling about seven minutes long. Check them out!

Space Station Weird doesn’t have intense action or laugh-out-loud punchlines. Instead, it thrives on mystery, worldbuilding, and understatement. And there’s a quiet sort of humor in the way the narrator sounds so bored as he describes such weird concepts.

I also like the fact that it’s done by one single person. It feels like something I theoretically could make, if I spent enough time practicing that art style, not to mention sound design, animating, and voice acting. The fact that it’s (almost) within the realm of my abilities makes it more impressive to me, since I can tell how it was done and how much effort that would take.

Whereas in the case of [insert big-budget movie/game], everything is polished so well that I can’t tell how they did it or how much effort it took per person, which makes it feel less impressive. Is that just me?

Analysis

Now that you’ve had a chance to see it for yourself, here are some of my ideas about the story. Light spoilers ahead, but I’ll avoid specifics.

Horror?

With only a few small tweaks, this could be a horror story. Being stranded alone in deep space is the perfect opportunity for horror. (We know this because it’s been done so many times.)

But in this case, we get this totally blasé fridge dude, who spends more time commenting on the station’s architecture than he does on genuinely worrying information. That isn’t to say he’s ignorant of danger, he’s just very calm about it. (With one exception so far.) And since the narrator is calm, the viewer gets to be calm too. Considering the title, that’s clearly intended: we aren’t watching “Space Station Existential Dread,” we aren’t watching “Space Station Eldritch Abominations from Beyond the Cosmos,” we’re just watching “Space Station Weird.”

It certainly could become a full-on horror story in the future, but I doubt it. I think it’s good at being a sci-fi slice of life, and will continue in that vein.

Speaking of which, sci-fi isn’t specifically about the future, or outer space; it’s about possibility. Sci-fi asks, what could happen if X was true? X can be “it’s the future in space with fancy gadgets,” but that isn’t necessary. And if that’s the only change, you get a relatively boring story.

On the other hand, Frankenstein is often described as a foundational work of science fiction despite being set on Earth in the modern day. It only had one major difference: scientists could (re)create life. (And promptly neglected and shunned said newly-created life.) Exploring this possibility is what makes it sci-fi, at least according to this one definition.

And I think Space Station Weird will fall under this definition too. It won’t be a story about Fridge Dude escaping alive (horror), or killing aliens in self-defense (action), but rather learning to coexist with whatever lurks here. You know, before it kills him. That’s totally different.

Luke Humphris’s prior works

Space Station Weird is still quite short, but it follows up on several concepts from Luke’s prior work, so let’s take a moment to look at that and see what we can learn. Or skip ahead to the next section, I can’t stop you.

My first exposure to Luke Humphris was while he was writing Dumb Drunk Australian, a long-form autobiographical webcomic. I stumbled upon it towards the end, but upon re-reading, it gets really dark at times. You’ve been warned.

Stories talking about my experiences with Australian drinking culture and toxic masculinity as well as feelings of not belonging.

TW: alcohol, suicide

Description from the comic’s Gumroad page

I think the comic caught my attention because I liked seeing him explain things with silly faces.
14 year old Luke's guide to getting the ladies / 1. Be super nice and treat them like a friend / "Hi Suzy, I got you some bronto-steaks" / 2. Wait / 3. Wait / 4. Don't be an asshole / 5. Wait / 6. wAiT / 7. Wait / 8. Wait / 9. Die alone and full of regrets

The things being explained weren’t always fun…

CW: alcohol

Sometimes have a beer and read at a different pub / Or drink with other people in town / Or with other people at the staff house / Or alone in my room playing the DS

I genuinely believe that if you do not learn from your mistakes, they will come back worse and worse / Not in a karma type of way, but in a logical way / [Luke holds an near-empty glass; to his left are two already-finished glasses; to his right are two still-full glasses marked "poison"] / "Why does this keep happening?" / Being ignorant to what changes you need will only make a hard life

…But Luke knows how to turn bad times into good anecdotes. Sometimes all it takes is a calm reaction to a bad situation, or a completely blank-faced reaction to a weird situation.

CW: alcohol

One night I began to stagger home in the early hours of the morning / I had a new bank account, so I kept the PIN written on a small piece of paper in my wallet / Which was stupid / I was too drunk to read the small print / So naturally I asked for help from the person behind me / The were even nice enough to drive me home / I am lucky nothing bad happened

The place I lived in was near Windsor Castle / When I came home one night there were 2 guards drinking in the kitchen with some housemates / It was a fairly loud house / [Luke, appearing half asleep, stares blankly at the guards] / [Luke continues blankly staring as he begins to walk away] / [Luke continues blankly staring as he walks out of sight]

So yeah, his writing style and sense of humor were there all along.

Dumb Drunk Australian ends rather suddenly. Maybe some pages got lost, but it was going to have to end at some point. The comic was supposed to be about looking back with the benefit of hindsight, not chronicling his life in real time.

Instead, he made a new comic to chronicle his life in real time. My Body is a Bad Robot tells us about his daily life as he struggles to quit drinking. It’s… more positive on average than DDA, but still has some very dark moments.

On the other hand, it includes this extremely normal picture of him questioning his sexuality.

I don't have to classify anything / I'm just very confused / Dropping expectations / Feeling like myself / Looking internally / [Luke is lying down with his mouth wide open; his eyes bulge out of his head and bend 180° down to look inside]

I said earlier I don’t think Space Station Weird is going to turn into straight-up horror. A big part of that is because Luke spent so much time developing his offbeat, understated brand of humor, and I’m hoping he keeps playing to this strength.

Space and time

In Bad Robot, Luke occasionally mentions that he’s spent a lot of time thinking about space.
I have thought about why I want to go to space / I think I want to be on the outside not involved in the world's problems / But that is just me running away again / "Later idiots"

It’s rude to try to psychoanalyze an author you’ve never met, but what if they psychoanalyze themself and you quote them? Is it ok then? (I sure hope so!)

Running from problems is a recurring theme in Luke’s comics. In DDA, Luke literally runs away from a faceless character labeled “problems.” More than once. And in one of the two (I forget which), he briefly fantasizes about going into a coma until everything is better.

Is this what Space Station Weird is about? Is Fridge Dude running from problems, spending all his time asleep so he can skip ahead to some future utopia? Is he traveling to space just to be away from the world?

I don’t think so. It isn’t foreshadowed, nor does he mention it. Fridge Dude isn’t running from anything, he’s just already disconnected from reality. The world isn’t progressing towards utopia as far as he can tell (though he mentions that other fridge dudes think so). He didn’t even choose to go to space; a powerful corporation assigned him there.

If Luke’s writing process is anything like mine, I’d guess that these are all recycled ideas. For instance, after spending some time thinking about the coma concept, you might realize the problems with it. Whether or not the world got better, you’d be too alienated to tell. Not something worth putting yourself through, but potentially something worth putting a fictional character through.

Exploring the possibility further, you might start to flesh out the character’s personality: aloof, skilled but maybe not up-to-date, with hobbies that allow for long breaks. If you’re simultaneously developing an interest in space, it wouldn’t take long to realize ways that it complements the character: physical distance as a metaphor for emotional distance, plenty of machinery that needs to be repaired by someone who knows how old tech works.

A lot can go wrong on a space station (don’t tap the glass!), and you might write those down to use as plot points. Then perhaps you spend a day sketching fun zero-G room designs, and in the process you happen to think of a reason a space station might have been built with all these different styles. Suddenly you have a backstory for the station! By following ideas and seeing what their consequences might be, you can turn vague daydreams into a detailed setting and plot outline. (Now just add small details to finish up.)

I don’t know if this is really how it went down, but it could have been. At the very least, think of these last four paragraphs as a glimpse into my own writing process.

The weird messages

Unmarked spoiler warning from here on out. This is your last chance to watch the videos for yourself.

Episode 0 is mainly scene setting, which might be why it’s number 0. Episode 1 is the first time we get a good look at the station and start getting hints about the plot.

– The station is built in a ton of mismatched styles. At least one of these areas still uses an ancient Windows computer.
– Fridge Dude was woken up to work on life support systems, systems that wouldn’t be needed if he wasn’t awake.
– There’s no timeline for when he gets to go home.
– Fridge Dude’s bunk has a frankly ridiculous number of scary messages scrawled above it, plus a bloody handprint and what might be a claw mark. Or as Fridge Dude describes them, “a few weird messages.”

What do these clues point towards? Is it all one big mystery or multiple smaller ones?

I think the most straightforward explanation would be the horror one. There’s a monster on board, one that requires oxygen and occasionally eats people. Each previous group built a different section of the station in a different style, then scratched a message or two into the bunk before the monster killed them, leaving them unable to update their computer software. Fridge Dude is merely the latest sacrifice, and isn’t meant to make it home. Why? Who knows.

Possibly the weirdest explanation I can think of is that all the machines gained sentience somehow. Phil asked Fridge Dude to repair the oxygen machine for the oxygen machine’s benefit, not Fridge Dude’s. That could also explain what Phil means by “family” and “we love each other.” And why a spacesuit is walking around on its own. This doesn’t explain the weird messages, or why Fridge Dude was penalized for losing the suit, but perhaps there are multiple separate mysteries afoot.

Speaking of which, I suspect the weird messages might not be literal. As Monty Python points out, if someone was dying they wouldn’t bother to carve “aaarrgghh,” they’d just say it. Would a dozen different murder-victims-to-be all take the time to carve their last words into the same spot? Seems unlikely if you think about it. I’ve thought of one reasonable alternative so far: maybe someone carved the messages there as a trick. For whatever reason they wanted to make Fridge Dude think people died, and went overboard with the number of messages.

Conclusion and episode 3

A lot of mysteries remain in the weird world of Space Station Weird. Which is good, because IMO that’s one of its biggest appeals. That and the humor.

Exciting news: as of March 31, episode 3 has arrived on Patreon! Consider supporting Luke to see it now, though I’m sure it’ll come out on YouTube soon enough.

Episode 3 is what prompted me to finish writing this post, which I made sure to do before watching it, so I wouldn’t spoil anything that isn’t already public. But I can at least make predictions! If trends continue, this episode will contain one new non-human character, a small number of answers, a large number of questions, and at least one moment where Fridge Dude has a calm reaction to something ridiculous and/or terrifying. Oh, and Luke mentioned that he pushed his limits on some scenes, so expect cool visuals too.

When it comes out, I’ll try to resist the urge to come back here and delete/replace all my wrong guesses. But no promises!

On starting over

(Don’t panic, I’m not personally starting over.)

How many of you have heard of the band Wintergatan?

Martin Molin, the face of Wintergatan, is a musician/engineer who rose to Internet fame after building the “Marble Machine” you see above. I assume you can tell why – that thing is really cool.

Sadly, from an engineering standpoint, the machine was a nightmare. Only capable of playing songs very similar to the one it was built for, and held together with elbow grease and wishful thinking. Marbles could collide if it tried to play adjacent notes, it was hard to time the notes properly, and the marbles kept clogging up or spilling out.

So he started over.

Marble Machine X

On January 1 2017, Martin announced the Marble Machine X, an entirely new device that would fix all the flaws in the original. Over the next four and a half years, he posted regular development updates. Even if – like me – you only watched some of the videos, you’d still learn a lot about both the MMX and mechanical engineering.

Martin went all out this time around, using CAD and CNC to build parts with millimeter precision, prototyping five different versions of a single piece so he could test them side-by-side, taking hours of video footage and building enormous spreadsheets with the data, measuring exactly how many milliseconds early or late the notes were, and taking design suggestions from a worldwide community of engineers. Most of all, he was unafraid to remove parts that he’d spent weeks or months on, if they weren’t quite working right.

It’s not really awesome to spend one and a half weeks building something that you have to redo, but I’m really used to that, and I’m actually good at starting over… I’m not so interested in this machine if it doesn’t play good music.

-Part of Martin’s heartfelt speech. (Make sure to watch the video for the rest.)

He sure did start over. Often enough that his angle grinder and “pain is temporary” catchphrase became a community meme, and then ended up on merchandise.

Was it worth it? Oh yeah. Looking at his last edited video before he switched to raw streams, the MMX ended up as an engineering marvel. Not only does it look great, it can drop thousands of marbles without error. When there is an error (5:26), he can instantly diagnose the problem and swap out the parts needed to fix it, no angle grinder necessary. Immediately after fixing it, he tried again and dropped thirty thousand in a row with zero errors. Four years well spent, I’d say!

So, just this January, it occurred to me that I hadn’t heard from Martin since that last video. The one posted all the way back in June. I didn’t mean to forget about him. In fact, I’m subscribed. Sure I skipped all the streams, but why did he stop posting edited videos?

A Lesson in Dumb Design

Wintergatan’s latest video, posted last September, has the answers. It’s titled “Marble Machine X – A Lesson in Dumb Design,” and in it, Martin discusses “dumb requirements” in the MMX.

First, make your requirements less dumb. Your requirements are definitely dumb. It does not matter who gave them to you; it’s particularly dangerous if a smart person gave you the requirements, because you might not question them enough. […] It’s very common; possibly the most common error of a smart engineer is to optimize the thing that should not exist.

-Elon Musk

Leaving aside Elon Musk himself, this seems like good advice. Martin gives an example of how it applies to the MMX at 5:49: he’s built the machine based off the fundamental assumption that marbles should always follow constrained single-file pathways. All the situations he’s encountered over the years where marbles would clog up, or apply pressure to a piece of tubing and burst out, or clog up, or jump over dividers, or clog up – all of these situations resulted from trying to constrain the marbles more than necessary.

Most were fixable, of course. He’s got well over a hundred videos’ worth of solved problems. But as he graduated from testing a few marbles per second to playing entire songs, he discovered more and more things wrong. Eventually, he concluded that the MMX, despite all the work put into it, wasn’t fixable. Now, he’s planning to produce one complete song with it, and then – once again – start over.

Judging by the YouTube comments, the community did not take this news well.

Drummers lose drum sticks. Violinists break bows. Guitarists lose picks. The marble machine can drop a marble.

-Thomas R

The MMX is literally almost complete and could be complete if only you allowed for a margin of error and stopped reading into all these awful awful self-help books.

-rydude998

“Make requirements less dumb” is a fantastic approach, but please don’t forget that “looks cool” is not a dumb requirement for your project.

-David H (referring to when Martin talked about form vs. function)

The perfect marble machine isn’t going to happen unless you seriously water down the beautiful artistic aspects that made the MMX so special to begin with. If that’s what it takes, then what’s the point? You’ll have a soulless husk of what was previously a wonderful and inspiring piece of art.

-BobFoley1337

This is the story of an artist who became an engineer to build his art and in so doing forgot the meaning of art.

-Nick Uhland

Note: If I quoted you and you’d rather I didn’t, let me know and I’ll take it down.

All good points. I’m not necessarily on board with the tone some of them took, but can you blame them? The project seemed so close, and so many people were excited to see the culmination of all this work, and then Martin pulls the rug out from under everyone.

But before we judge, let’s hear Martin’s side of the story:

I got many ideas for how to design a simpler, functional Machine, and I can’t stop thinking about it. I have heard that when you build your third house, you get it right. I think the same goes for Marble Machines.

[…]

I do know the generous response and objections that most crowdfunders have when I describe the Marble Machine X as a failure, and you are all correct. Its not a complete failure. What I have learned in the MMX process is the necessary foundation for the success of MMX-T.

[…]

If it’s hard to understand this decision let me provide some context: The MMX looks like it is almost working, but it isn’t. The over-complex flawed design makes the whole machine practically unusable. I now have the choice between keeping patching up flaws, or turn a page and design a machine which can be 10X improved in every aspect.

This may not be surprising coming from the guy who built four entire game engines between the three Run games, but I’m sympathetic to Martin. I know all too well that a thing that looks almost perfect from an outsider’s perspective can be a mess inside.

The Codeless Code: Case 105: Navigation

The Codeless Code is a collection of vaguely-Zen-like stories/lessons about programming. The premise is odd at first, but just go with it.

A young nun approached master Banzen and said:

“When first presented with requirements I created a rough design document, as is our way.

“When the rough design was approved I began a detailed design document, as is our way. In so doing I realized that my rough design was ill-considered, and thus I discarded it.

“When the detailed design was approved I began coding, as is our way. In so doing I realized that my detailed design was ill-considered, and thus I discarded it.

“My question is this:

“Since we must refactor according to need, and since all needs are known only when implementation is underway, can we not simply write code and nothing else? Why must we waste time creating design documents?”

Banzen considered this. Finally he nodded, saying:

“There is no more virtue in the documents than in a handful of leaves: you may safely forgo producing either one. Before master Mugen crossed the Uncompiled Wasteland he made eight fine maps of the route he planned to take. Yet when he arrived at the temple gates he burned them on the spot.”

The nun took her leave in high spirits, but as she reached the threshold Banzen barked: “Nun!”

When the nun turned around, Banzen said:

“Mugen was only able to burn the maps because he had arrived.”

I hope the analogy here is clear. When Martin built the original Marble Machine, he produced a single song and retired it. He then built the Marble Machine X, and plans to produce a single song before retiring it too. Now he’s working on the Marble Machine X-T, and he’s hoping that “when you build your third house, you get it right” applies here too.

He could never have made it this far if not for the first two machines. If he hadn’t built the original, he wouldn’t have known where to start on the second. If not for spending years on the MMX fixing all kinds of issues and making it (seemingly) almost work, he wouldn’t know where to start designing the third. Years of building the machine gave him a clearer picture than any amount of planning, and that picture is the only reason he can perform the “first” step of making his requirements less dumb.

I don’t think Martin could have gotten the requirements right on his first or second try, but it’s good that he tried. That was the other point of the “Navigation” parable. Mugen was only able to burn the maps because he had arrived. If Martin hadn’t started by making a solid plan, the MMX could not have been as good as it ended up being. If the MMX hadn’t reached the point of “almost working,” its greatest flaws wouldn’t have been exposed.

The Codeless Code: Case 91: The Soul of Wit

And now we arrive at how this relates to my own work. As I said at the beginning, I’m not starting anything over. However, I recently realized I needed to pivot a little.

I had built my code one feature at a time. Like Martin testing 30,000 marbles, I tested simple cases, over and over, and they worked. Then, like Martin livestreaming actual music, I devised a real-world example. It was basic, but it was something someone might actually want to do.

And that led to a cascade of problems. Things I hadn’t thought of while planning but which were obvious in retrospect. Problems with easy solutions. Problems with hard solutions. All kinds of stuff.

I was capable of fixing these problems. In fact, I had a couple different avenues to explore; at least one would certainly have worked. How could I be so certain I was on the wrong track?

Wangohan […] emailed his predicament to the telecommuting nun.

“I know nothing of this framework,” the nun wrote back. “Yet send me your code anyway.”

Wangohan did as he was asked. In less than a minute his phone rang.

“Your framework is not right,” said Zjing. “Or else, your code is not right.”

This embarrassed and angered the monk. “How can you be so certain?” he demanded.

“I will tell you,” said the nun.

Zjing began the story of how she had been born in a distant province, the second youngest of six dutiful daughters. Her father, she said, was a lowly abacus-maker, poor but shrewd and calculating; her mother had a stall in the marketplace where she sold random numbers. In vivid detail Zjing described her earliest days in school, right down to the smooth texture of the well worn teak floors and the acrid yet not unpleasant scent of the stray black dog that followed her home in the rain one day.

“Enough!” shouted the exasperated Wangohan when a full hour had passed, for the nun’s narrative showed no sign of drawing to a close. “That is no way to answer a simple question!”

“How can you be so certain?” asked Zjing.

I was writing a tutorial as I went, and that’s what tipped me off.

Each time I came up with a workaround, I had to imagine explaining it in the tutorial: “If you’re using web workers and passing a class instance from your main class to your web worker, you’ll need to add that class to the worker’s header, and then call restoreInstanceMethods() after the worker receives it. This is enough if that’s the only class you’re using but fails if you’re using subclasses that override any of the instance methods, so in that case you also need to these five other steps…”

Which is a terrible tutorial! Way too complicated. My framework was not right, or else, my code was not right. It was time to step back and rethink my requirements.

A mistaken assumption

When this all began, I had one goal: fulfill Lime issue #1081: Add asynchronous worker support for the HTML5 target. This core goal led to all my other requirements:

  1. Use web workers.
  2. Maintain backwards compatibility.
  3. Match Lime’s coding style.
  4. Write easy-to-use code.

Clearly, I was already violating requirement #4. And a couple weeks ago, I’d also realized that #1 and #2 were incompatible. Web workers were always going to break existing code, which is why I’d made them opt-in. You can’t use them by accident; you have to turn them on by hand. I was arguably also violating #3: web-worker-specific code was now taking up the majority of two files that weren’t supposed to be web-worker-specific. (Which could be ok in another context, but it’s not how Lime likes to handle these situations.)

No other feature in Lime requires reading so much documentation just to get started. Nothing else in Lime has this many platform-specific “gotchas.” Very few other things in Lime require opting in the way this does. This new code…

This new code never belonged in Lime.

That was my faulty assumption. I’d assumed that because the feature was on Lime’s wishlist, it belonged in Lime. But Lime is about making code work the same on all platforms, and web workers are just too different, no matter how much I try to cover them up with syntax sugar. In reality, the feature doesn’t belong in Lime or on Lime’s wishlist, a fact that became clear only after months of work.

Once again, I’m not starting over here. For a time, I thought I had to, but in fact my code is pretty much fine. My mistake was trying to put that code where it didn’t belong. The correct place would be a standalone library, which is the new plan. (As for Lime issue #1081, I’ve come up with a promising single-threaded option. Not quite the same, but still good.)

I’m confident I’m making the right decision here. The pieces finally fit together and the finish line is in sight.

Hopefully, Martin is making the right decision too. His finish line is farther off, but he’s made a good map to guide him there. Whether he burns that map upon arrival remains to be seen.