# Programmer at Large: Why didn’t they see this coming?

This is the latest chapter in my web serial, Programmer at Large. The first chapter is here and you can read the whole archives here or on the Archive of Our Own mirror. This chapter is also mirrored at Archive of Our Own.

I spent another few ksecs triaging random interesting bugs. It wasn’t the best use of my time, but it was helping build up a picture of the state space around where the problem was occurring, and even if I didn’t find anything directly relevant it was still a useful clean up task.

It wasn’t very surprising what a mess this all was given how many different lineages we had systems and parts here for, and how long we’d spent shoring things up and adding fail safes for the fail safes for the fail safes rather than risking changing vital systems, but I hadn’t explored the plumbing system this broadly in a while and it was definitely disheartening.

I was staring in dismay at some visual programming language. It didn’t render at all well on a HUD, so I had had to find one of the larger pods with a wall-screen to even start to make sense of it.

I was increasingly convinced it hadn’t been worth bothering. The program was about a gigabyte in size (I thought most of that was some sort of standard library, but I wasn’t entirely certain) and literally all it did was decide whether some valves should be open or closed based on the temperature differential on either side and how that was changing over time.

So, even though I was slightly dreading it, I was very relieved when I got the notification from Kimiko that they were able to talk now if I still wanted to.

The pod I was in was easily big enough for five people, so I invited them to come join me.

They looked… off when they came in. The HUD cues said “hesitant, nervous”, which was odd. I was about to ask them what was wrong, but they preempted me.

“So is this the conversation where you tell me you don’t want to be friends with a pervert?”

I started. That was not the opening I expected.

“Uh, no? I’m not expecting it to be anyway. I just wanted to ask some questions.”

They still seemed wary.

“OK… what sort of questions?”

It took me a moment to even figure out how on the ground they’d even figured out the context for this conversation, but it eventually hit me – if I could do the social graph evolution analysis, so could they, and it would make sense to set up some alerts so it doesn’t blindside you…

“I mostly just want to know what’s going on with Brian attacking you! Why do you just let it happen? It’s obviously off charter! And what on the ground is up with this?!”

I manifested the sex graph into a shared space and flagged down the warning my HUD was giving me about tact. I knew I wasn’t being tactful, but I was frustrated and just wanted someone to tell me what was going on.

Anyway. HUD says I’ve confused rather than offended them.

“You… really don’t know what’s going on at all?”

“If I did I wouldn’t be asking! I don’t have this science-fiction ability to read minds that everybody else seems to!”

They sigh.

“I suppose this means you’ve gone and reported this?”

They wave their hand at the graph.

“No… I probably should have, but it seemed like something I shouldn’t touch without understanding, so I thought I’d ask you to explain first.”

They huffed a relieved noise.

“OK. Good. Thank you. It wouldn’t have done anything terrible, but it’s annoying for everyone involved to have to deal with.”

They paused for a couple of seconds.

“OK. So, explanations. You understand this is about sex, right?”

“Brian didn’t exactly let me miss that fact.”

“Right. And that isn’t a problem for you?”

I shrugged.

“I’m not completely OK with it, but it’s not a big deal. It’s like… you having bad taste in music or something. I don’t approve of your choices but I also mostly don’t actually care. Does that make sense?”

They barked out a laugh.

“That’s certainly one way to look at it I guess. I can work with that. So the first thing to understand here is that you’re weird.”

“Hey!”

I mean it’s true, but that was still quite harsh.

They gestured an apology.

“Sorry, what I mean is that you’re unusual in both your attitude and the fact that you don’t know about this already. I’m not sure how you missed it, frankly.”

They called up a bunch more graphs and visualisations. The short version is that most people felt much more strongly about this than I did, and while I wasn’t the last person to know about it there probably weren’t more than single digits of other people who had also missed it.

I nodded slowly. I could probably guess how I’d missed it – there was almost certainly some context or clue I missed that would have prompted someone to tell me about it before now. Also given my relative lack of socialisation it’s likely that Kimiko was the first person from the group I’d properly talked to. I checked HUD and it confirmed – I’d apparently met two of the others in passing but no more than that.

“OK. So if I’d reported it, the social unity people would have just told me they knew already?”

“There are a bunch of procedures they have to go through, and they would have had to make a showing of taking the report seriously, but basically yes. Even without reports the automated systems keep flagging our group up as needing attention, but as long as we don’t cross any of the hard thresholds they’re not required to take action.”

“But… OK, they’re not required, but isn’t it still their job to do something? Why hasn’t anything been done about this? If everyone knows there’s a problem surely we have to fix it?”

They sighed.

“And what would you do to fix it?”

“Oh.”

There were a couple of natural things to do, but the most obvious and the one that would almost certainly get implemented would be to simply kick them all off the ship at the next appropriate planet.

It wouldn’t be a death sentence for them – we’d leave them with plenty of money in the local economy and set them up with a perfectly good local infrastructure. They’d have each other. They’d still be crew… but they would be grounded, probably forever. I can hardly imagine anything worse. It was why I worked so hard to fit in myself.

I swallowed.

“OK. I get why you don’t want, but what’s stopping them? It’s obvious Brian has it in for you, and I can’t imagine they’re the only one, so why are you still here?”

“Because we’re protected by the charter. The same section that guarantees anonymity of sexual acts also guarantees freedom from persecution on the basis of them.”

“It sure doesn’t look like you’re free from being persecuted…”

“And we could make that case. At which point we’re officially a minority interest group, and the people who want the charter changed have enough to make the case that our protection should be removed.”

“This seems really stupid.”

They shrugged.

“Welcome to life as an edge case.”

“No, I mean… why didn’t they see this coming? It seems… really obvious that this would happen. Why would they design the system like this?”

“Officially, politics. They had enough support to start a normatively-asexual ship when forking, but not enough support to remove the sexual protection clauses from the charter, so that’s what they went with.”

“OK. And unofficially?”

“Well… some of us think they just wanted to see what would happen.”

This entry was posted in Fiction, Programmer at Large on by .

# New Fiction

I ended up writing a new story about Vicky Frankenstein. It’s called Pillow Talk, and is almost entirely Vicky and Ada talking about their relationship.

I’m not sure I was ever expecting to write a story about lesbian romance (well, Ada is bisexual. I don’t know if that’s canonically true, but having her be a lesbian would be somewhat surprising given her historical record. Also she predates modern labels for sexuality and thus might choose to self-describe differently). I lack a number of qualifying areas of knowledge for doing it well, but it seems to have turned out OK anyway.

Vicky continues to be extremely fun to write, and I’ve already ended up starting on a third Vicky story, the topic of which is largely inspired by this tweet (the original Vicky story was partly caused by a joke tweet too. It seems to be a theme).

This may end up eating into Programmer at Large time, though nominally I’m scheduled to write another one for this week some time. I am absolutely intending to finish Programmer at Large, but I seem to have made the whole thing bleaker than I originally intended, which combines poorly with the fact that I’ve been quite busy for the last month.

This entry was posted in Fiction on by .

# Programmer at Large: Can we speed that up?

This is the latest chapter in my web serial, Programmer at Large. The first chapter is here and you can read the whole archives here or on the Archive of Our Own mirror. This chapter is also mirrored at Archive of Our Own.

Note: This is more of a chapter fragment than a full chapter. Sorry.

The report only took about a ksec to compose – it’s not like there was a great deal to say. “Look, some legacy code that we should raise the rewrite priority on” is practically routine. I had weak evidence that it was a root cause for a problem, but more importantly it had raised its head and got in the way, and for something with this many red flags on it that was a sign that we should look into replacing it. Step one of that was simulation.

I thought for a bit. Of course, there was no reason we couldn’t do step two in parallel, and it would make the eventual simulation much easier and higher impact.

“Ide, can we synthesise a replacement program?”

“We lack a sufficient formal model of Go# to do so formally, but the program interface is sufficiently constrained and the typical program lifetime is short enough that it is likely that an empirical sampling method would suffice to guarantee a replacement within no more than five megaseconds.”

“Hmm. Can we speed that up?”

“Given sufficient simulation resources a trial candidate for phased roll-out could be synthesized in approximately 500 kiloseconds.”

Ugh, right. Simulation time which we didn’t have.

“OK. Start synthesizing a replacement in real time then.”

“Scheduling now.”

That was probably about as much as I could do with this particular program in isolation for now.

“Is there anything downstream of this?”

“Program influence terminates in physical control of plumbing temperature regulation with no additional software control.”

So, effectively, everything was downstream of this. The problem with working on plumbing is that the main communication channel was the physical environment. It makes for some… interesting interactions.

I checked for Kimiko’s availability and got that they were still busy. A quick check of my social modelling software confirmed a hunch: Around 60% chance they were stalling me.

Oh well. That was their prerogative, and I could certainly understand wanting to put off a difficult conversation.

I wasn’t exactly sure how they would know that this was going to be a difficult conversation, but other people were weirdly good at spotting that kind of thing.

I decided to to continue working to distract myself.

“Ide, give me another interesting issue in the area.”

Next chapter when it happens. Nominally in two weeks time, but the schedule has become very erratic. Hopefully the next one will be longer.

Like this? Why not support me on Patreon! It’s good for the soul, and will result in you seeing chapters as they’re written (which is currently not very much earlier than they’re published, but hopefully I’ll get back on track soon).

This entry was posted in Fiction, Programmer at Large on by .

# Programmer at Large: Does that work?

This is the latest chapter in my web serial, Programmer at Large. The first chapter is here and you can read the whole archives here or on the Archive of Our Own mirror. This chapter is also mirrored at Archive of Our Own.

Sam and I worked in companionable silence for about five kiloseconds, but eventually they had to go lead a Krav Maga session, so we kissed each other goodbye. Kimiko was still flagged as busy, so I took the opportunity to retreat to a pod to do some real work.

Uh, not that social network analysis isn’t real work you understand, it’s just not exactly in my remit. It’s a useful skill to keep your hand in on, but I try to avoid the trap of becoming a generalist.

I reviewed where I was on my current task: I still didn’t know much about what was going wrong, but had a hint that it was something to do with temperature events.

At this point I could do an exhaustive analysis and try to binary search out the exact problem. It would take ages and require a lot of detail work, but it would almost certainly work in narrowing down at least one real problem.

But I wasn’t really in the right frame of mind for detail work, so I decided to gamble instead.

“Ide, show me something interesting to do with the current task.”

“I have a temperature control program marked as critical that exhibits anomalous command output prior to the event and currently has a failing build. Is that suitable?”

“Perfect.”

Almost too perfect in fact. I wondered why that hadn’t that flagged up before.

“How many other equally interesting things could you have shown me?”

“113”

RIght.

“OK, call up the specs for this program.”

Subject: Stochastic Temperature Control Feedback Regulation Unit 3
Origin: New Earth 2
Language: Go#
Importance: Critical
Reliability: High
Obsolescence: High
Fragility: High
Notes: It might be best to leave now, you probably shouldn't touch this.

That wasn’t encouraging.  Also, I wasn’t thrilled by the idea of learning about another weird Grounder programming language.

I sighed. Still, I wasn’t just going to stop without looking into it a bit.

“Wiki, show me the specs for Go#”

Subject: Go#
Category: Programming language, text based.
Lineage: Pre-diaspora, began as a dialect of Go in 2021.
Common Tags: Archaic, Esoteric, Moderate Complexity, Evolutionary Dead End, Poorly Thought Out.
Normalised Rating: Please tell me you're not still using this.

Definitely less than encouraging.

“OK, show me the failing build step.”

Ide displayed a bunch of code for me. I can’t say I understood any of it, but one thing stood out.

“Wiki, what’s Hypothesis?”

“Hypothesis is a generic term for a family of testing tools that were popular for a period of approximately five gigaseconds before and around the diaspora. They work by generating random data to run a conventional unit test against.”

“Wow, really? Does that work?”

“Significantly better than the methods that predate it. Unassisted humans tend to to be very bad at writing correct software, which results in many shallow bugs that simple random testing can uncover. However, it has largely been supplanted by modern symbolic execution and formal methods, as the number of bugs it finds grows logarithmically.”

“Ide, how long did it take to find this particular bug?”

“Approximately nine gigaseconds of compute time.”

Wow. This code had run for most of a crew lifespan before eventually finding a bug. That was rather adorable. I vaguely saluted whatever grounder was responsible for this thing, and reflected on how grateful I was to not be them and to have access to modern tooling.

“How long would it have taken given appropriate formal methods?”

“Difficult to estimate due to low availability of formal models for this language. However, based on the execution trace this is a known bug in OpenSSH, where the bug was found within the first four seconds of active testing of it under a more modern test suite written as a student exercise in a class on software archaeology on the Star Struck three gigaseconds ago coordinated time.

That was about what I expected.

“Wiki, what’s OpenSSH?”

“It is a secure network communication protocol, originally designed to provide remote access to a system via a local PTY.”

“What’s a PTY?”

“Warning: This information has been tagged as a memetic hazard, subcategory can of worms. Do you wish to proceed?”

I blinked. That was unexpected. I was almost curious enough to proceed anyway, but these warnings were usually worth taking seriously and they didn’t normally get attached to interesting awful information. Besides, this really wasn’t that relevant.

“No, that’s fine.”

I thought for a bit. I was pretty sure why this known bug was still present, but decided to check anyway.

“Ide, why has this bug not been fixed despite being known?”

“Due to the rating of this process as high in all of criticality, stability and fragility, it was flagged as an ultra-low priority fix.”

That’s what I thought. It works, but trying to fix it is probably more likely to break it, and then the plumbing backs up. Not unlike the problem I’d run into with the ramscoop, but the difference was that one this one was in my remit.

“Is this bug being triggered in the wild?”

“Unknown as to whether the particular sequence of events Hypothesis has found are present in the wild, but logs indicate that the underlying OpenSSH bug is triggered.”

“Is it being triggered in the vicinity of the anomalous event?”

“Yes”.

OK. So this was definitely a plausible culprit.

“Can we run a simulation of what would happen if this bug was fixed?”

“Warning: At current resource availability, such a simulation would take 0.8 gigaseconds to complete.”

“Ugh. Show me the cost curve.”

I looked at the cost curve. Right. All those game theory simulations the programmers at arms were running were taking up most of our spare capacity, and I didn’t have budget to outbid them on anything except the very tiny subset of capacity I had priority on.

Which wasn’t wholly unfair. But I now had evidence that a critical system was misbehaving and might be triggering an anomalous plumbing event, which was serious. Granted it was less important than the fate of humanity, but it might be higher priority. Time to try and free up some budget for simulation.

I sighed, and started putting together a report.

Next chapter: Can we speed that up?

Like this? Why not support me on Patreon! It’s good for the soul, and will result in you seeing chapters as they’re written (which is currently not very much earlier than they’re published, but hopefully I’ll get back on track soon).

This entry was posted in Fiction, Programmer at Large on by .

# Startup Life

Regular readers of this blog who quite sensibly don’t use Twitter (or do use Twitter and don’t follow me there) have probably not noticed that I have a new short story out: Startup Life.

As with most of my fiction, this one is about exploring important philosophical and political questions.

Specifically it’s about exploring the important political and philosophical question: What would happen if Dr Vicky Frankenstein joined Vampire Ada Lovelace’s cybernetics startup?

Um. OK. Maybe it’s not that important or philosophical. But I’m really pleased with how it turned out and if you like my fiction at all I recommend reading it.

This entry was posted in Fiction on by .