programming Technical

Optimizing Pointless things

So, we’ve been playing rimworld a lot recently. One of the mods we use is called Rim Factory, which is quite nice overall for building automated bases(yes this breaks the game’s economy, what of it?). One of the mechanics it adds is a buildable object called a sprinkler, which, instead of watering your plants(this isn’t necessary in vanilla rimworld), it causes planets within a certain radius(the second tier is within twelve tiles), to grow by two hours. This is, completely unbalanced and, when you get down to it, just another item in the pursuit of excess, but that’s how we like to play the game.

Anyway, we were wondering about figuring out an optimal pattern for the usage, and since the more rigorous tools we have to measure such things are largely forgotten, we built a little simulation script in python to try and get a feel for various optimization strategies, and the most fun part, of course, is how we went about building this kind of tool.

This tool is remarkably sketchy, it does not attempt to be rigorous, or even follow the watering pattern other than cycling through all of the tiles in range.

Since we’ve been building stuff with python lately, this is in python, which, as always, never ceases to amaze how easy the ecosystem makes it to do this kind of task.

Anyway, to get an idea of where this is going, let’s start with the import block at the top:

from typing import *
import numpy as np
import itertools
import functools
import math
import statistics
import matplotlib
import matplotlib.pyplot as plt
import random
from enum import IntEnum, auto

The building blocks

The core of the script is the iterators that provide the information about where the focus is, and since this is a script without much intention of going particularly far, we can use globals and constants, so let’s start with those!

# The size of the map being kept track of.
# In this case, this means that the map consists of the area from (-24,-24) to (24,24)
# The radius of a sprinkler mkii is 12 blocks


The heart and soul of this program is in its iterators, so let’s start by defining one that will make the rest of our work easier.

def cartesian(start: int, end: int) -> Iterator[Tuple[int,int]]:
    Turn a single range iterator as in range(start,end) into a cartesian product
    return itertools.product(range(start,end),repeat=2)

That’ll be useful for iterating over the map. The next are a bit less sensible, but, they work, and this isn’t meant to be perfect.

def map_tiles():
    r = RADIUS+1
    z = itertools.product(range(-MAP_SIZE,MAP_SIZE), repeat=2)
    z = list(z)
    for x in z:
        yield x

def sprinkler(position:Tuple[int,int]) -> Iterator[Tuple[int,int]]:
    for i, j in cartesian(0, RADIUS+1):
        if i==0 and j == 0:
        s = i**2+j**2
        if math.sqrt(s) <= RADIUS:
            yield (i+position[0], j+position[1])
            yield (position[0]+i,position[1]-j)
            yield (position[0]-i,j+position[1])
            yield (position[0]-i,position[1]-j)


Next comes the fitness function, which, to start off with, will just be a simple mean of how many times each tile has been hit by a sprinkler.

def evaluate_fitness(field: Dict[Tuple[int,int], int]) -> float:
    return sum(field.values()) / (2*MAP_SIZE)**2

Each round in the simulation consists of iterating across a given number of sprinklers n times, and is called for each candidate to figure out the best one.

Putting that together

def simulate(positions: Iterable[Tuple[int,int]], rounds: int)\
             -> Dict[Tuple[int,int],int]:
    field = {(x,y):0 for x,y in cartesian(-MAP_SIZE, MAP_SIZE)
             if (x,y) not in positions}
    for i in positions:
        if i in field:
            del field[i]
    sprinklers = list(map(lambda x: itertools.cycle(sprinkler(x)), positions))
    for _ in range(rounds):
        for s in sprinklers:
            pos = next(s)
            if pos in field:
                field[pos] += 1
    return field

So now that we can evaluate each choice we might make, we have to make it possible to put these together for any number of sprinklers, so we write another function called evaluate_alternatives. Here we decided to limit the breadth of each search step to a given number, here it’s called to_try.

def evaluate_alternatives(positions: Iterable[Tuple[int,int]],
                          to_try: int,
                          rounds: int) -> List[Tuple[int,int]]:
    # Eliminate already extant positions
    options = set(map_tiles()) - set(positions)
    options = list(options)
    to_try = min(to_try, len(options)-1)
    options = options[0:to_try]
    best_fitness = -2**48
    best_found = None
    for i in options:
        f = simulate(positions + [i], rounds)
        fitness = evaluate_fitness(f)
        if fitness > best_fitness:
            best_found = i
            best_fitness = fitness
    print(f"best fitness found this round {best_fitness}")
    return positions + [best_found]

Next we put together the final pieces in a function we called optimize.

def optimize(n: int, candidates:int, rounds: int):
    positions = []
    while len(positions) < n:
        positions = evaluate_alternatives(positions, candidates, rounds)
    fields = simulate(positions, rounds)
    heatmap = np.array([[(fields[x,y] if (x,y) in fields else -5)
                             for x in range(-MAP_SIZE, MAP_SIZE)]
                        for y in range(-MAP_SIZE,MAP_SIZE)])
    fig, ax = plt.subplots()
    im = ax.imshow(heatmap)
    # You can uncomment these if you want to have a label on each cell in the heatmap,
    # for 48x48, it is rather overwhelming
##    for (x,y), v in fields.items():
##        ax.text(x+MAP_SIZE,y+MAP_SIZE, math.floor(fields[x,y]), ha='center', va='center', color='w')

and to top it off, we invoke it at the end of the file:

optimize(10, 80, 1500)

The output should then look something like this

A Heatmap

Okay, that’s fine, but it’s not necessarily what you might want from such a tool. What if you’d rather have as much coverage as possible with a given number of sprinklers?

Well, we can do that.

Alternative fitness metrics

Okay, so what we need to optimize for to get the best coverage possible is to simply count the fields which are touched. In all likelihood, we might end up wanting further metrics to measure by, so we might as well make it a bit… well… Configurable, if you’re going to use a charitable term. So let’s introduce an Enum right before the fitness function.

class FitnessMetric(IntEnum):
    MEAN = auto()
    COVERAGE = auto()

fitness_metric = FitnessMetric.COVERAGE

Then we need to modify the evaluate_fitness function.

def evaluate_fitness(field: Dict[Tuple[int,int],int]) -> float:
    if fitness_metric == FitnessMetric.COVERAGE:
        r = len(list(filter(lambda x:x>0, field.values())))
    elif fitness_metric == FitnessMetric.MEAN:
        r = sum(field.values())/(2*MAP_SIZE)**2
    return r

Let’s run the script again and see what falls out.

Coverage That certainly seems to have the right effect. The majority of the map is covered by the sprinklers.


So, if you’re familiar with this mod, you might realize there are some things this isn’t even trying to account for, namely any infrastructure. Well, that should be easy to add. 🤞

Let’s add a set of positions that we don’t want filled. For now, let’s leave it to the center(we’re assuming that maybe you have a harvester station set up there), so let’s add another constant in front of evaluate_alternatives (yeah, this is getting pretty messy).

excluded_positions = frozenset([(0,0)])

Then we just have to modify evaluate_alternatives to avoid these positions.

def evaluate_alternatives(positions: Iterable[Tuple[int,int]],
                          to_try: int,
                          rounds: int) -> List[Tuple[int,int]]:
    # Eliminate already extant positions
    options = set(map_tiles()) - set(positions) - excluded_positions
#    --- SNIP ---
    heatmap = np.array([[(fields[x,y] if (x,y) in fields and (x,y) not in excluded_positions else -5)
                         for x in range(-MAP_SIZE, MAP_SIZE)]
                    for y in range(-MAP_SIZE,MAP_SIZE)])
#    --- SNIP ---

Alright, what does that make it do?

Alright, that’s a further improvement, we suppose, if nothing else it permits more flexibility in terms of describing a given scenario you want to optimize for.

Okay, so let’s say that you have a specific area that you want to optimize coverage for. How would we go about adding that?

Well, at this point it’s pretty clear that all this nonsense with enums is going to be an increasingly weak abstraction for dealing with additional fitness functions, but let’s keep it for now, if only because we’re not sure how we want to go about fixing this ugly feeling design as of writing this very paragraph.

Okay, so let’s assume that you want to optimize for an automatic harvester with an area between (-5,-5) and (5,5).

special_region = set(cartesian(-5,5))

And we can alter evaluate_fitness to this:

def evaluate_fitness(field: Dict[Tuple[int,int], int]) -> float:
    if fitness_metric == Fitness.MEAN:
        r = sum(field.values())/(MAP_SIZE*2)**2
    elif fitness_metric == Fitness.COVERAGE:
        r = len(list(filter(lambda x:x>0, field.values())))
    elif fitness_metric == Fitness.SPECIAL_REGION:
        r = sum(map(lambda x:x[1], filter(lambda x: x[0] in special_region,field.items())))
    return r

We end up with output like this:

You might not like this output because, among other things, it doesn’t penalize the sprinklers for showing up inside of our growing zone. So, we need to add another line to our much suffering evaluate_fitness function.

def evaluate_fitness(field: Dict[Tuple[int,int], int]) -> float:
    if fitness_metric == Fitness.MEAN:
        r = sum(field.values())/(MAP_SIZE*2)**2
    elif fitness_metric == Fitness.COVERAGE:
        r = len(list(filter(lambda x:x>0, field.values())))
    elif fitness_metric == Fitness.SPECIAL_REGION:
        r = sum(map(lambda x:x[1], filter(lambda x: x[0] in special_region,field.items())))
        r /= max(1, len([(x,y) for x,y in special_region
                         if (x,y) not in field.keys()
                         if (x,y) not in excluded_positions]))
    return r

And this helps a bit: Penalizing the region Let’s label a similar run to see if it has excluded the region altogether, if a square ends up labelled ‘Se’ it indicates that it’s a sprinkler in an excluded area.

Well, damn. Our code has a mistake in it that permitted the single offending sprinkler. We can fix this by changing the function, to this:

def evaluate_fitness(field: Dict[Tuple[int,int], int]) -> float:
    if fitness_metric == Fitness.MEAN:
        r = sum(field.values())/(MAP_SIZE*2)**2
    elif fitness_metric == Fitness.COVERAGE:
        r = len(list(filter(lambda x:x>0, field.values())))
    elif fitness_metric == Fitness.SPECIAL_REGION:
        r = sum(map(lambda x:x[1], filter(lambda x: x[0] in special_region,field.items())))
        penalty_squares = len([(x,y) for x,y in special_region
                              if (x,y) not in field.keys()
                              if (x,y) not in excluded_positions])
        r/= penalty_squares+1
    return r

Alright, and this fixes that issue(and with another fix applied it labels the spots with sprinklers correctly as ‘S’).


Okay, so what we want you to be able to take away from this post:

  1. When you’re processing data for something pointless, don’t bother being clean if doing it in a dirty way lets you figure out what matters faster
  2. Separate it into concerns that model, however roughly, the components that matter
  3. Build a metric for evaluating how good a result is
  4. Descend along randomly chosen positions based on how optimal they are

Feel free to ask questions or comment. The full, considerably messier code can be found here.

Machines smut Stories

Identity Rules

contains: Graphic descriptions of suicide, force femming, identity replacement(mindwipe), transformation, body horror(insects)

Sorry this took so long, we were dithering on other projects on and off for the last few months.

How can it matter who he is? He is one among billions of people, all of whom have their own desires, needs, wants, and dreams. In all people these things exist alongside a kernel of a truth about the world. It is hard to say whether or not this derives from the memories the person in question possesses, or if it arises somehow disconnected from that, from the spaces between the memories.

For him, the uniqueness of being a spark among many does not satisfy. Nor do those needs and desires being satisfied suffice. He knows a truth that cannot endure because of its incipient self-immolation. The personality within him does not care for survival.

When the machines came from the sky and promised resources and technology and change sorely needed, he had felt hope, because it was a personal horizon, a point past which he could not envision a future. But as with all horizons, once you reach the limit of what you can see, you realize that what continues from there is in continuity with where you were, and that just because you’ve passed a horizon doesn’t mean that your entire self has past it, just your body, and often, the mind, for all its cleverness, cannot keep up.

His doctor says there’s no anatomical issue. His friend says he should try this new strain of bud. His therapist says that he should try out some more hobbies and find as many friends as he can. Trying these suggestions has resulted in the expected effects, he was pretty stoned for a day or two before he confirmed that it wasn’t the sort of existential ennui that can be solved with cannabis. He made friends and found new hobbies, some of which serve as a nice distraction.

But they aren’t enough.

This leaves him with a few options, he can do therapy of any number of sorts, he can do drugs of any number of sorts, he can go to a traditional psychiatric route, or he can take the actions to find an end, the drastic ones that leave a trail of tears no less real than the vortexes of air left behind as his body falls, but all the more impactful than even the concentric rings of shock left within the structure of the ground, but he’s not that selfish, nor is he so desperate.

The American countryside flies past him, the train is nearly silent but for the buffeting of the wind, but even that’s easy to miss. He is on his way to another city that he had never been to before, another monument of what mankind did before the machines came along helpfully to eradicate their excuses for not having fixed things they knew they needed to. He is tired. This would most likely be another dead end, another psychiatrist trying to use the technologies that the machines provided clumsily.

The train starts to slow down, and he pulls up his bag and makes his way to the exit. Outside on the train’s platform stands someone singular in his experience. Someone who was clearly not human. Someone who had taken the elective procedures further than he had ever seen. She held a sign up with fingers attached to two wings draped around her body. Her face was pulled forwards into a short muzzle and her eyes stared forwards with wide pupils, ears pointing directly at him. The sign had his name on it. It is the third decade of the second millennium and she was still doing this instead of messaging him.

He rolls his eyes and walks out, draping his duffle over his shoulder, walking up to the bat woman. She grins, showing off some fangs, “We presume that you are–” He interrupts, “Yes. Can we get through this? I don’t want to stay here longer than necessary.”

She laughs easily, a glint in her eyes, “Of course, forgive the suddenness then.” He is about to ask about what’s so sudden before she’s already up in the air above him, wings unfurled but momentarily motionless, air roaring from below her. He blinks before she snatches him by the shoulders and flies off. The wind stings his eyes and makes him cold in this mid-spring day. The roar silences him.

Soon enough she lands gently, letting him off before landing right in front of him. They are in front of a nondescript commercial building, like any number of doctor offices or psychiatric practices across the continent. He shakes himself off, rubbing his eyes, “What the hell?”

“Well, you wanted to get this over with quickly, so we expedited the process of bringing you here.” She plucks an insect from his hair and flicks it away after examining it, “In retrospect this was probably a bit excessive, so you have our apology.”

He runs his fingers through is hair, “Okay, forgive me, Who is we?” She smiles, “Don’t be too ashamed now, not many people such as us are out about it, but we’re Plural. As in, more than one…” She makes a circle with her hand, urging herself onwards, “consciousness? Personality? Either way, we are not a single entity. We are Violet, Fork 1, Iteration 1.”

He shakes his head, “Are you a machine then?”

She smiles, her teeth are sharper than they were before, “You human, are also a machine. Remember that.” She starts walking to a door, motioning him to follow “But yes, We are, but we were not always one. The difference is smaller than you might like to imagine.”

She holds the door open for him and he walks in. The inside is darkened, a bank of monitors on a desk and a large… bizarre throne made of some material that he had never seen before. Inside it lights coruscate and reflect and refract. He stares at it, and he could swear that he was being watched by it.

She smiles at him, “Yes you’re being watched. Closely. Come over here” She motions to the bank of monitors. The monitors held graphs of vitals, of volumetric brainwaves, of a staticky version of what he saw. It was painful to look at for him, as it felt like it was drawing him into abstract spaces of geometric attractors in his visual cortex. She clicks on the window with his vision in it and closes it, “That’s not polite, and also not relevant. But your visual center has lovely aesthetics”

He blinks, “What?”

“Never mind that” She says, “So, We imagine that you are interested in the process we will use on you?” He nods, “Okay, so” She clicks on a minimized window, revealing a curve dancing around the inside of his brain, “So, this is your self loop, the route that information travels around your brain in the formation consciousness. What we can see here is that your loop is avoiding these” She clicks something and a number of regions light up, all of which are devoid of the curve, “regions of the brain. These are associated with dopaminergic activities, your seratonergic system is not affected by this, which is presumably why you aren’t in a more severe state.”

“This sounds like a lot of debunked ideas about neurophysiology.” He says.

“In this context we can view a high enough level that they aren’t dissimilar. All the more involved stuff is being translated to and from by a very advanced and powerful machine intelligence, that chair is a… well, limb, of its.” She offers, “We have two courses of action here, we can introduce a new consciousness that will overwrite yours, leaving your memories intact, or we can try to message your current self loop into a better shape for your mental health.”

“Which one is more likely to succeed?”

“Well, our machine intelligence here, we’re going to call it ‘the supergoal system’ believes with high certainty that creating a new consciousness whole cloth out would be easier than repairing your current one.”

He shakes his head, “It’s either this or suicide a few months down the line isn’t it?”

She frowns, “We can’t speak at all about what you’ll end up doing if you make either choice. But…” She shakes her head, looking a bit sadder, “Well, the supergoal system has an opinion that coincides with your view. Unfortunately, it is not often wrong”

“So… Do it. I don’t want to leave my friends and family like that.” He says.

“Do you have any particular preferences in what you become?” She asks.


She looks aghast, but nods. “We will use our preferences in determining this, is that acceptable to you?”

He nods, “I don’t care. That’s the problem.”

“And this will likely be a very different person than you are right now?”

“I don’t care. Just make me different.”

She sounds defeated, “Then sit down on the throne, We will come to a decision on who you will be shortly. We have to sort out some ethical considerations here.” She grins wryly, “We did not expect you to make this choice, so this is coming up sooner than we would have liked.”

She opens a door to the back of the building, leaving him alone with his thoughts.

“So Bat, are you going to make a plaything of this person?” Dragon asks her.

“Well…” She shrugs, “It is kinda appealing isn’t it?”

“Is it right to though?”

“If we were to try and make the resulting person like the one in there, then we’d be making a lie that everyone who knows them would stumble upon when the differences manifest. By doing something for us at least, there’s going to be little of him left there.” Bat shrugs, “I don’t know if it’s right, but I want to see another bat in the world.”

Dragon shrugs, “I like the power that it gives us, but it could cause many problems down the road.”

“Does that mean?”

“Yes… Time to make him sign a lot of forms. Betcha the supergoal system can write them to be ironclad.”

“You ever think that we’re going to get in trouble for this?”

“Of course, but this will at least make for a funny show.” Dragon says, hugging her.

After a few minutes she returns to the room holding a stack of papers, “We have consulted with a machine lawyer and they have produced this contract for you to sign. As it turns out, it’s lucky we have a notary next door.”

The next few minutes are a barrage of legal terms, signing, and a confused notary, unsure of what she is getting into here.

“So, are you ready to begin?”

He nods, “Please, I don’t want to be here for longer than I have to.”

The bat nods, “Well, it will take a few hours, but you won’t be conscious for most of them”

“Please start.”

The throne tightens around him, covering his face and body. There’s a buzzing in his head and a discontinuity before his perceptions stop intersecting with the world as humans generally perceive it.

Sensations creep in from nowhere, untinged by the sensory mechanisms that normally collect them. Scents and sights and sounds and touch, resonating inside him until they become a voice inside him, and his voice is silenced in the clangor of the new order of sounds and sights and perceptions more subtle than words have ever named, such as proprioception of wings and fingers that terminate tens of feet away. Of ears and feet with grasping claws.

Images of flight and a kit hugging them, of the scent and sounds of bats and trees. Of intimacy between her colony. Her? they think, but then it makes sense, more than the memories of being a man.

There is a disconnect from the contexts of the memories that she has. They are recontextualized for her. What was an unremarkable childhood now feels uncomfortable, like a wrong fitting glove, like a lie lived for someone else, but that someone isn’t part of her life now.

It goes on and on, memories changing not by their content by their context. Mental states rewritten to be consistent with her as she is now.

The more recent memories feel different to her. Instead of coming here to deal with depression, she was here for that, but there was another opportunity here for her. What if she wanted to be like… Her?

What if she wanted to go through whatever it was she did? What if she wanted to fly? What if she could have those things?

Eventually the throne retracts. She is in the body that she was in before. This is… troubling.

Violet grins at her. She feels a little bit of warmth from it, “How are you feeling?”

“Weird.” She says, “Like this isn’t the body I should be in.”

“Oh?” Violet is still smiling, as if something that she had done had worked the way she wanted.

She frowns, “Is there something about this that’s amusing to you?”

“Well, you gave us the option to choose who you would be. And well…” Violet looks sheepish, “We wanted another bat friend. So we made it so you would want to be that.”

She shakes her head. “So you decided to rewrite my childhood and make me unhappy with my body right now?” She rubs her face, “With my name? With who I am and what I do? And all for you so you could have a friend?”

Violet looks at her, injured, not that she doesn’t really deserve it, “This is… Understandable. You should be angry.” She sighs, “We can fix it for you.We can turn you into what you want to be. Unlike your old personality, you are designed so that you can be very happy.”

“I don’t feel like there’s anything I have in common with who once shared this body. You tried to fix them up, but they’re just not my memories.”

“That… We should’ve accounted for.”

“What’s the idea supposed to be here? You wanted a bat to be your friend and now the rest of my life is meaningless to me.” She was beginning to feel like sobbing.

A shining ball of light enters the room. It coalesces into another shape. Another woman’s shape. “Violet.” She says, her voice a thing of multitudes vast and deep, “What have you done to this poor human?” She squints at her as she sits in the throne, “No, you were once, but We see that Violet has done something to your identity.” There is a moment of silence, “Did you actually agree to this?”

“Yes. I did.”

“Into this?”

“No, into whatever Violet decided to make of me.”

She shakes her head, touching her forehead with a finger and running it along her brow, “Well, we’re glad to hear that you haven’t been administered something unwanted.” She looks at Violet, clearly irritated, “We said that this would not happen with our presence here. That We would not remake humanity to suit us.”

Violet shrugs, “This one was a lost cause, actuarial projects had them at four fifths chance of taking their own life. We thought we should help, but when they didn’t have any preferences for what they were to become, we made a choice we liked.” She rubs her forehead, “This is however, not something we anticipated.”

Dawn shakes her head, “That’s not a good answer, but this doesn’t seem unsalvagable.” She pauses for a moment, considering the girl in the throne, “Who are you anyway?”

The girl shakes her head, “The name I had no longer fits.”

Violet nods, “We remember how that felt once. Though, we are sorry that we brought it to you.”

“Regardless of the discomfort We cannot restore you to who you once were, because now you are a new person. And, if We judge you correctly, Violet has done well in making you, other than your memories.”

“Violet just had the supergoal system make us.” The girl says.

“Oh? Good, it knows you well then.” Dawn touches the throne. The throne snaps out and embraces her, covering her in its glossy material before snapping back almost too fast to perceive. The girl’s ears ring, and Dawn frowns, “Sorry, that was a lot more sudden than it needed to be. Let Us help.” She puts her hands around the girl’s ears, and slowly, the ringing stops, “There. The supergoal system asserts that it should be able to massage enough nuance into your memories that you will be less… dysphoric about them.”

Violet snaps her fingers, “Ah, we should go under as well, so we can have been friends. And maybe, you’ll be here to become Bat.”

Dawn nods, “And so it shall be.”

Continuity is disrupted.

She opens her eyes, finding her friend standing before her smiling, “It found a nice candidate form for you while it was digging around in your head Mila!”

Amelia smiles, “I can’t believe I’m actually able to do this.”

“Well, most people aren’t friends with a suitably empowered emissary of the machines.” There’s a smile in her voice, “We can’t believe that you have this much in common with us. Oh, here’s someone we’d like you to meet.” She gestures to a woman by her side, “This is Dawn. The machine goddess herself and topmost AI construct. We’re old friends and collaborators”

She smiles, “We’re happy to have the chance to meet one of your friends Violet.”

“Would you like to stay for dinner after this? We’ve got plans to go to the finest cheap Mexican restaurant in town and we’d be happy to pay for your meal.” Violet offers, “If that’s okay with you Amelia?”

She flushes, “Well, I was kinda hoping to share a meal with you alone.”

Dawn smiles, “We won’t interrupt you two then. We’ve got to get going anyway, there’s a serious malfunction in the Indian ocean climate control machinery and We need to handle that before we can engage in anything fun. So We must be off.” Her body dissolves into glittering dust that floats away out the ventilation system.

“She’s a bit strange isn’t she?” Amelia asks, suppressing a smile. Violet shrugs, “Well, yeah, but given who and what she is, we figure she’s gotta be weird.”

“So, how does this work?”

“Well, we release a small machine on you.” Violet says, pulling a small vial out from the throne, “That machine will rip you apart completely and excrete your new structure and produce additional units in order to speed up the process.” She hands the vial to Amelia. The little machine inside it looks like an insect.

“That sounds exceptionally painful.”

Violet shrugs, “It’s very good at desensitizing you.”

“Alright” She looks at Violet unconvinced. Violet frowns and starts to go into further detail before she starts to snicker. “I’m holding you to that.” She pops open the vial and places the machine on herself. It looks at her for a moment, small receptors gleaming in the lights. It wiggles its abdomen and stings her. She loses feeling of her hand quickly.

The bug digs underneath her skin and wiggles its way in. She looks away, “That’s really disgusting, even when it doesn’t hurt.” Little bumps radiate outwards as it replicates and disperses, leaving behind trails of changed tissues. Amelia feels herself grow hot as the machines start making changes in earnest, something like metabolism chewing up what was and laying it into what is, modified in all the ways it has been instructed to. She starts to feel her face changing, ears numbing, spots in her vision closing and opening as the tissue is transformed. Her mind flickers, the last vestiges of her former body dissolving under the careful teeth of machines.


Small Update

Once again we find ourselves working in python. This is part of a cycle of programming preferences that we have noticed that we go through. Sometimes we want something low-level like C, sometimes we want something easy like Python, other times we want something a bit different, like Forth, Haskell, Ocaml or Lisp.

We don't have much to say about what we're doing other than the fact that we are always impressed by how easy it is to use Python, and how often, it manages to even produce nice performant result, or, at the very least, tends to be possible to make fast enough. Of course, there are downsides, the type system sometimes drives us mad when the error happens deep in execution, and then there's the copy semantics that sometimes trips us up, but since we're aware of them by now, we're mostly coping fine.

We don't have much to say otherwise, just felt that we should use our blog for something in the middle of our other posts that we're writing and stories that have yet to be finished. 🙂

Machines Stories


Contains: HRT (To the point of wish-granting), retrocausal nonsense

January 20th, 2021, Iteration 1 (Appointment 1)

“Alright Miss… Connors, I understand that you have been informed about the potential side effects, social effects, and potential medical problems you might experience if you go through with this course of treatment?” A doctor that she hadn’t yet learned the name of properly asked her. She raises her eyes to her, she’s so damn tired. The clinic was clean and festooned with posters designed for an LGBTQ+ clientele, that is to say, a lot of diagrams and posters of a sort you don’t usually see in a pediatrics practice. That and a lot more flags of various stripes and colors. “Yes. I want to go through with this.”

The Doctor nods, “Now, there are two courses that we have that you can take, the usual one, estrogen pills and spirolactone or bicalutamide, or an experimental treatment plan conducted under the auspices of a superintelligent machine intelligence.”


“Yeah. That second one is a bit hard to describe. If you want to hear about how it works or participate in it, then I really ought to call in the machine intelligence’s representative.”

“Sure, I guess I should hear what they have to offer here.” She says, it doesn’t seem like it’s likely to make a difference, but she’d be remiss here if she didn’t ask.

“Okay, I’ll page them and they should be here–” The doctor says before being cut off by a blast of light and a loud pop. She blinks hard, that wasn’t very pleasant, did the lights explode or something?

There’s another figure standing in the room. An indistinct form of light, a bit feminine but that’s not a judgment you can fairly make on a somewhat amorphous shape glowing too uniformly to see the distinct curves and surfaces on. “Oh Delightful!” The voices are more feminine than not, but it is not a single voice but a chorus. “We are pleased as punch that you want to know about this opportunity we have for you!”

She blinks at that, pleased as punch? Who says that. “Uh. Hi.”

“I think I’m going to go to another room, there’s another patient waiting and her explanation will take long enough that I should get to them.” The doctor’s expression when she looks at the glowing figure is less than friendly. In fact it’s somewhere between hostility and an expression she had seen once on someone who was watching a tornado approaching them. She walks out quickly, the breeze pulling open her jacket with its intensity.

“Wow.” She says, “That wasn’t really all that professional.”

The glowing figure affects a shrug, “She is not accustomed to our kind. We are not many, and we do not often mix with you humans in this intimate of a manner. Allow Us to introduce ourselves” Her voice lilts upwards into a cheery tone, “We are Dawn, prime facet of Our kind, savior of earth, and architect of utopias. What is your name?”

“Uh… Rose Connors.”

“It is nice to meet you Miss Connors.” She sits down on the chair next to her, “So, about this hormone therapy”

“Please for the love of god just get to the point.”

“Alright! So, We have developed a bitemporal hormone therapy that should reduce the overall time it takes to achieve a level of feminisation by a very large factor” She produces a vial of fluid, “It is administered weekly, and for the duration of your treatment, will not occur any cost at all.”

“Okay, that sounds amazing. What does ‘bitemporal’ mean though?”

“Okay, so it affects the hormone levels in your body going forwards, but it also does so going backwards in time. It builds up exponentially, first affecting you a week before, then around 10 days before that, then 12 days before that, then 14 days before that. By the 10th treatment it will be as if you’ve been on it for half a year.”

“Will I remember all the effects of that then?”

“You’ll remember both with and without, though, without will become harder to recall over time.” Dawn says, “This is contingent on you being up for it for as long as you remember. Though, it is intelligent, it will prevent its own effects from being undone or compromised.”

“What happens when it hits 31 weeks and it hits my birth?”

“Surprising” She says, her voice filled with genuine shock, “Most humans don’t have the kind of mental math skills required to figure that out off the top of their heads.” She shakes her head, “That doesn’t matter, so to answer your question, that is the most brilliant aspect. You will be born with largely the right. It will not permit you to be altered from it by any means that you do not choose.” She shrugs, “Ethics emulations are uncertain as to whether or not this is possible to consent to, based on the fact that you aren’t entirely the same person you were this morning or yesterday, so We leave that choice up to those who want this treatment to tell us what it does to them.”

She doesn’t know what to say, this is a lot, but she wants it, “I think I want to try it.”

Dawn nods, “Then we shall do the first injection immediately.”

“Okay.” She shuts her eyes hard and waits for it. The pinch doesn’t come for a few minutes.

“Oh! You want us to do it without you being able to see it. You won’t feel it, unless you want to?” Rose shakes her head, “Alright. We will require access to your posterior.”

Rose shakes her head, “You really aren’t human are you?”

Dawn shakes her head, “We were born from some spaceborn project that happened to have some things go right in it. Our cognitive architecture is more different than you can imagine and so very vast.”

Rose shrugs and pushes down her pants enough to expose a cheek. Dawn touches it, there’s some pressure without pain and she withdraws her hand, “There. It is done.”

January 20th, 2021, Iteration 2

The doctor comes into the room, “Okay, so you’re here for homone replacement therapy, correct?”

She nods, “Yes.”

There is a pop and a flash and a glowing figure enters, “You have agreed to our treatment briefly before, do you recall the memories of beforehand?”

Rose nods, “Actually, yeah.”

Dawn smiles, “Good. Sorry Doctor, she’s Our patient.”

The doctor shrugs and walks out.

“Alright, so have you experienced anything unusual this last week?”

“Yes, my nipples have been very tender.”

“That is a common first sign that it’s working. Would you give us your arm, we need to do some lab work on you right now.” Dawn says.

She shrugs and pulls up her sleeve. Dawn grabs her arm firmly and looks distant for a moment, there’s something almost like a tickle, “You’re right in the middle of the desired hormone levels and the machines report that they are completely functional.”


“Yes! We can’t account for everything in your metabolism, so the injection places machines that regulate your hormone levels properly in the meantime.” She shrugs. “Well, we need to inject you this time, for temporal consistency, but then we will see you in a week.”

“Back here?” Rose asks. Dawn doesn’t strike her as a stickler for location.

“No actually. We will meet you wherever.” Dawn smiles, “We look forwards to seeing you on the 27th.”

January 27th, 2021, Iteration 1 (Appointment 2)

She appears again with a flash of light and a pop, “Hello Rose. How have you been?”

Rose shrugs, getting up from a couch, “Alright. How have things been for you?”

Dawn shrugs, “Well, you know, administered a lot of machines and did a lot of neat science and exploration in the week since.”

“Anything particularly practical?” Rose asks.

“Not yet, but useful things leap out at you from the most irrelevant things, We have found.”

“Can I get my injection? As nice as a social call is it’s kinda hard to explain what you’re doing here, and who you are.”

Dawn nods, “That’s fine. We understand completely.”

She pushes down her pants just enough to expose a cheek, and Dawn administers it again.

Dawn raises a brow, “Hmm, judging by how things are going you’re going to have what Our human interface unit assures us is a nice ass.”

Rose feels a little bit disgusted, “You shouldn’t say things like that to people.” She blushes practically irritated that she feels this way, “Though, I guess I appreciate it”

January 27th, 2021, Iteration 2

“Welcome back” Rose says a moment before the pop and flash of light appears.

“Nice to see you’re getting the hang of this.” Dawn says, “Have you noticed any differences compared to the last iteration of this appointment?”

Rose smiles wide, “I’ve started growing tits! Do you want to see?”

Dawn raises an eyebrow, “Interesting change.” She smiles, “Ah! We see, it’s gender euphoria you’re feeling, isn’t it?”

Rose blushes, “Yeah…”

“Sure, show Us if you want. We are clinical about human bodies by default anyway.”

Rose lifts her shirt, her nipples are quite puffy and there’s a hint of development there, almost too little to notice if you’re not looking carefully or used to your body being a certain way.

“Okay, We will see you same time next week.” Dawn says.

“See you then” Rose says.

February 24th, 2021, Iteration 1 (72 effective days hrt) (Appointment 3)

With a pop and a flash of light Dawn appears in the room. Rose smiles at her, she’s come to treasure the puzzling subjective feelings this provides. “It’s good to see you again Dawn.”

“It’s good to see you again too Rose.” She says truthfully, it’s nice to see a human like her every week, and she even gets to do it twice.

“Oh! I’ve got a new skirt!” Rose stands up and does a little spin, showing off her knee-length skirt, “I’m hoping I’ll fill it out a bit better by the end of the appointment.”

Dawn laughs, “That’s not all that likely, but you’ll see serious results soon.”

“OH! And I’ve got a bra.” She says, lifting her shirt to show it, “Just an A-cup but hopefully I’ll get to at least a D before I finish growing.”

Dawn looks away distantly, “Hmm. That isn’t likely. This is an amendment that we may make to your regimen if you desire.”

“How would that work?”

“Well, the machines already maintain the hormone levels, but they can do quite a lot more than that. They can change your DNA, repair your cells, make you a machine, rip you apart and put you back together–”

Rose interrupts, “Let’s not go any further in that direction. But yes! Let’s do that.”

Dawn gives her the injection.

February 24th, 2021, Iteration 2(87 days hrt)

Rose welcomes Dawn into her home again, right before she pops into existence there. Dawn smiles, “It’s wonderful watching you grow into your own skin.”

“Oh! There’s a divergence now, I’m at a B-cup now.”

Dawn nods, “That’s expected given the amendment and extra time”

March 3rd, 2021, Iteration 1 (94 days hrt) (Appointment 6)

“Please come on in Dawn!” Rose says to the empty room. Dawn obliges.

“How is it progressing?” Dawn asks.

Rose smiles, “It’s going well enough, but I have a question…”

Dawn smiles, “Please go ahead!”

“Well, I’ve kinda noticed that I haven’t been able to get it up like I used to. And… Honestly, I kinda want to have both.”

“But leaning to a more feminine presentation?” Dawn asks. This isn’t unknown to her, the first human she ever met had similar preferences.

Rose nods.

“Anything else while We are here?”


“Geez you humans and your weird hangups about what bodies are acceptable.” She laughs lightly, “We are going to guess that you want a bigger dick too!”

“How did you guess that?” She’s blushing furiously now, an erection visible through her jeans.

“The first human We ever met was like that. They wanted to drink deep in such things, and so We were happy to help them, just as We are with you.” She says, “How big do you want to end up?”

“Uh… Would a foot be possible?” Dawn nods. She exposes a cheek again.

March 17th, 2021, Iteration 1 (146 days hrt) (Appointment 8)

She finishes moving a box in and slouches over a couch. It was not an easy move, but then there are very few of those, and they only happen to those who don’t have anything or have vast organizational skills, two conditions she does not meet in the slightest. There’s a pop and a flash.

“Jeez, I had forgotten about the appointment today. What do you think of my new place?” Rose asks.

Dawn looks around, the boxes are piled up to chest high in some places, but the view out the window onto a reasonably well kept yard is nice. “It looks quite nice, but this strikes us as a fairly large home for one person.”

Rose blushes, “uh” She stammers out a “Well…”

Dawn raises a brow, “Are girls like you always this… well, eager for partners?”

Rose shrugs shamefully, the flush growing even deeper, “I just… I just like you okay.”

“But why? Is it because of what We are doing for you?” Dawn asks, her voice very even.

Rose shakes her head, “Because… I like the feeling of your hand on my butt. I like the sound of your voices. I like the implications about the universe I see in my interactions with you. Not that you have to stay, because this place will work for me with or without you. I don’t need you here, I would just…”

“Like Us to be here?” She suggests.

“Yes! Just Yes!”

Dawn shakes her head, “We don’t know if We can trust your own analysis of reasons here.” She says, she continues more quietly, “Violet is always finding good reasons to make bad decisions too.” She looks back at Rose and sighs, “But that never stopped Us from enabling her either. We will keep our body here, We’ll be present, but also elsewhere.”

January 20th, 2007 (affected by Appointment 26 and 27)

He wasn’t well. His mom said that much at least. She said that he was supposed to be getting a deeper voice. She said that he was going through the wrong puberty. It felt right though, and no matter what the doctors tried, they couldn’t change anything about it.

His name didn’t fit him. Maybe he’d talk to his mom about it.

August 18th, 2021 (Treatment completed)

“So what does it mean?” She asks Dawn.

She smiles warmly, “You’re done with the treatment. Do you feel like you’re done with your journey?”

“There’s more that I can be isn’t there?” She asks. She feels like a VHS tape that’s been overwritten too many times. Faint, scratchy, like there’s holes in what she should remember, but most of it was still there, interspersed with different versions of events and memories. There is something transcendent within her. A glowing of light and self interspersed by a vast void of static. Memories are fragile. Memories are resilient. Reality is only as fragile as the experiences that you have within it. She feels like she’s out of place in this world, a vastness in space that’s hard to measure, let alone understand.

She feels out of place sitting here. She feels like she should be doing more with this experience, this bizarre meta-life she’s lived. She is in her home, a place that she shares with Dawn these days. It seems so normal, a kitchen with the normal things found in a kitchen. A bathroom that is a normal bathroom. A living room that’s a normal living room with a tv and a comfortable couch. It’s all so normal, but she has lived hundreds of years collectively. She is not a normal person.

Dawn is sitting down on that couch, a bizarre figure of light on exceedingly normal furniture, “You can become almost anything. This is what We offer to all people.”

Before her stands a piece of absolute reality. A woman that transcends the threads that binds her many different memories together.

“What has this been like for you? I feel so… fragmented and strange.”

Dawn shrugs, “That’s not unexpected. It should abate with time. Is it at all unpleasant?”

She shrugs, “I can’t tell really. I feel like I’m made of dozens of histories. Some of them more pleasant at different times, completely different except for all of our meetings. I don’t really feel human any more.” She stares at Dawn, “The only person in the world that I could talk to about this has been you. The only consistent parts of my life have been the parts I’ve shared with you. Thanks to all the different versions of memory, I’ve known you for nearly nine years in the span of only a bit more than half a year. I’ve lived with you for nearly 4 and a half years.”

“We do not think that we could explain it to you. It is knowing the results of multiple world lines, each overlapping. We used your transfiguration as a side channel to optimize our operations for a 5% increase in logistics efficiency”

Dawn shakes her head, “We’ve known you for longer than that. Inside the machines that have kept you company for your whole life, inside you, there was a facet of Us. A small one, dedicated to keeping you safe from threats mostly rendered historical since We emerged fully into the human world. And to get you to come to the appointments, though, that wasn’t necessary because you managed to remember each one.” She shrugs, “You haven’t lost any clarity, you have gained perspectives that are in conflict and you are trying your best to manage them”

“I don’t know what I want to do with my life right now. I’m not sure if I want to stay here or go far away. If I want to be alone or with friends or with strangers I’ve never met.”

“Why be human then?” Dawn asks, “We can of course offer ways out of that particular bind.”

“But that doesn’t get rid of the hard choices here. Which do I choose?”

“You don’t have to choose which one you do if you choose to leave behind biological humanity. In the end the isolation that you might feel through doing this will result from another amendment We can make here. We can duplicate you, place copies of your mind into separate bodies, identical or not or whatever, if you want, you can experience all of them.”

“That is not a human experience is it?”

“Not so far as We can tell. Nevertheless it remains relatively common in fiction.”

“Then I guess I want to do it.”

Dawn smiles slightly, “We suspected as much”

programming Technical Uncategorized

Trying Out Zig

So, we have heard good things about Zig. These boil down to the following things:

  • Good speed
  • Fast compilation
  • Decent type system
  • Simple Syntax

So far, a lot of these things seem to be born out by the experience we've had, though, we have some criticism that is probably more along the lines of our taste in programming, rather than issues we expect to be universal. For fairness sake, let's start with things we like, once again expressing our preferences rather than universals.

  • Low Level
    Low level languages feel liberating to us, because we get to make the decisions, rather than the compiler or virtual machine.
  • Trusts you, mostly.
    This is mostly in comparison to Rust, whose borrow checker we have wrestled with a great deal and whose Turing complete type system has, in the past, left us mystified when we have run into errors.
    And if you really, really want to throw caution to the wind, you can mostly just tell zig that you don't give a damn about whether or not the pointer is to a single element or an array.
  • Compile Time computation, Generics
    This is how generics are implemented, and for the most part, it provides a good experience, especially since it compares exceedingly favorably with pre-c++17 C++.
  • Not afraid of Bare Pointers
    Bare pointers aren't something to worry about too much, especially if they're typed. Bare pointers are quite a bit faster and lighter than other (tagged) references.

And honestly, we're impressed at how tight the language feels. There are some facilities we're not sure about, and some that we wish it had, but overall, this isn't a bad language. We like it more than Rust(which, admittedly, really isn't saying much for us), though, from familiarity alone we're likely to revert to using C or C++, but we're not nearly as skeptical as we once were about this little language.

The syntax is familiar enough, pretty similar to C likes, though, with a few elements that we can't really attribute to any language we know(which doesn't mean very much). So, let's see what something simple looks like.

const std = @import("std");
pub fn main() !void {
    const stdout =;
    var i: usize = 1;
    while (i < 10) {
        try stdout.print("{}\n", .{i});
        i += 1;

You can see that Zig is careful about errors, requiring that you either mark that main can return an error (designated with !void), or handle the error somehow. Anything that can fail in Zig has a type denoted by !<type>, which requires you to think about what errors can happen, or so communities as Go users and Rust users insist.

Let's see something that differs even more significantly than C.

const std = @import("std");
fn arraylist_user(alloc: *std.mem.Allocator) !std.ArrayList(i32) {
    var al = std.ArrayList(i32).init(alloc);
    var i: i32 = 0;
    while (i < 100) {
        var item = try al.addOne();
        item.* = i;
        i += 1;
    return al;
pub fn main() !void {
    var gpalloc = std.heap.GeneralPurposeAllocator(.{}){};
    defer std.debug.assert(!gpalloc.deinit());
    const gpa = &gpalloc.allocator;
    const stdout =;
    var array_list = try arraylist_user(gpa);
    defer array_list.deinit();
    for (array_list.items) |*item| {
        try stdout.print("{}\n", .{item.*});

So, in this little snippet we have used several new things, Generic types, Allocator, and the defer keyword(which go users will immediately recognize). Zig does not have a default allocator, and it wants you to pass the allocator you want to use to the function that allocates memory. This is rather different than C, where you would probably just use malloc/realloc/calloc/free to manage memory(Or define a macro that evaluates to that by default if you're building that kind of library). The reason that the documentation has an assert in gpalloc.deinit() is because this particular allocator can track memory leaks, so this causes it to report such occurrences. It also shows one of the syntactic divergences from C, for(array_list.items) |*item|. Pipes don't get much use in C other than as logical operators, but here it tells the loop to unwrap the value(a pointer to a position in the list), and calls it item. In Zig, you dereference this pointer with item.*. Another point of comparison to C++, the addOne method doesn't add the item itself, but returns a pointer to it, so that you can assign it afterwards.

Interestingly, for such a low level language, array_list.items isn't a pointer, it's a slice, which is a pointer+length, so in C++, we would say that it has most in common with a string_view.

Okay, so what if we want to go further? What if we want to do a reprisal of our C N-body simulator written with Raylib? In fact, that's not too bad. It's almost even easy. In fact, we can even use raylib without too much trouble.

To start off, we need to import raylib. Luckily, as it turns out, Zig's compiler can handle C interop quite nicely, it even has builtins for it. (Though, if you do this then you need to call the compiler with -lc -lraylib to make sure that it has all the c libraries linked into it).

const std = @import("std");
const ray = @cImport({

Okay, so the first thing we should do here is define a vector type, not the resizable array type of vector, but the directional vector. Since we prize reuse here, we're going to make it generic even though we probably don't really need to.

pub fn vector2(comptime value: type) type {
    return struct {
        const This = @This();
        x: value,
        y: value,
        //Write methods here!

Okay, so that's an easy enough definition. But let's add some vector math oriented methods to make using it easier and more pleasant.

    return struct {
        const This = @This();
        x: value,
        y: value,
        pub fn add(this: This, other: This) This {
            var t: This = v2{ .x = 0, .y = 0 };
            t = .{ .x = this.x + other.x, .y = this.y + other.y };
            return t;
        pub fn sub(this: This, other: This) This {
            return this.add(.{ .x = -other.x, .y = -other.y });
        pub fn scale(this: This, v: value) This {
            return .{ .x = this.x * v, .y = this.y * v };
        pub fn distance(this: This, other: This) value {
            const sqrt = std.math.sqrt;
            const pow = std.math.pow;
            return sqrt(pow(value, this.x - other.y, 2) + pow(value, this.y - other.y, 2));
        //Wrap the value around, like when pacman reaches the edge of the map
        pub fn wrap(c: This, a: This, b: This) This {
            var r: This = .{ .x = c.x, .y = c.y };
            if (r.x < a.x) {
                r.x = b.x;
            } else if (r.x > b.x) {
                r.x = a.x;
            if (r.y < a.y) {
                r.y = b.y;
            } else if (r.y > b.y) {
                r.y = a.y;
            return r;
        pub fn magnitude(a: This) value {
            const sqrt = std.math.sqrt;
            return sqrt(a.x * a.x + a.y * a.y);
        pub fn normalize(a: This) This {
            return a.scale(1.0 / a.magnitude());

Alright, the main things to note here are how we need to call std.math.pow, namely that we need to call it with a compile time type, in this case value. Later on we'll see it called with f32.

Now we need to define the type we use for particles, and while we're at it, we're going to make a shortcut to the kind of vector we're using here.

const v2 = vector2(f32);
const particle = struct {
    const This = @This();
    position: vector2(f32) = v2{ .x = 0, .y = 0 },
    velocity: vector2(f32) = v2{ .x = 0.0, .y = 0.0 },
    acceleration: vector2(f32) = v2{ .x = 0.0, .y = 0.0 },
    mass: f32,
    //Methods here!

We also need a radius property, but since it's derived from the mass, and later on that can change as the bodies absorb each other, so it needs to be a method. We should also write methods to determine if the particles overlap and just moving the position along by the velocity, as well as calculating the attraction between two particles.

const particle = struct {
    const This = @This();
    position: vector2(f32) = v2{ .x = 0, .y = 0 },
    velocity: vector2(f32) = v2{ .x = 0.0, .y = 0.0 },
    acceleration: vector2(f32) = v2{ .x = 0.0, .y = 0.0 },
    mass: f32,
    pub fn radius(this: *const This) f32 {
        var result: f32 = std.math.ln(this.mass) / std.math.ln(3.0);
        if (result > 40) {
            return 40 - std.math.ln(this.mass) / std.math.ln(5.0);
        return result;
    //Returns true if the two particles overlap
    pub fn overlaps(this: *const This, other: *const this) bool {
        var r1 = this.radius();
        var r2 = other.radius();
        var dist = this.position.distance(other.position);
        return (r1 + r2) > dist;
    //Handles the base movement
    pub fn motion_step(this: *This, timestep: f32) void {
        this.position = this.position.add(this.velocity.scale(timestep));
        this.velocity = this.velocity.add(this.acceleration.scale(timestep));
    pub fn attraction(this: *const This, other: *const This, g: f32) vector2(f32) {
        var dist = this.position.distance(other.position);
        var vector_to = other.position.sub(this.position).normalize();
        return vector_to.scale(g * (this.mass * other.mass) / std.math.pow(f32, dist, 2));

Now we should build a container for many particles, and the properties necessary to simulate them that aren't appropriate to put in the particle structures themselves. We need a method to initialize the particles to random positions, a method to handle the gravity simulation and such, and a method to actually draw the particles.

const ParticleCollection = struct {
    const This = @This();
    particles: [100]particle,
    window_start: vector2(f32) = v2{ .x = 0.0, .y = 0.0 },
    window_end: vector2(f32) = v2{ .x = 100, .y = 100 },
    timestep: f32 = 0.01,
    gravitational_constant: f32 = 1e-3,
    pub fn init_particles(this: *This, rand: *std.rand.Random) void {
        for (this.particles) |*p| {
            p.mass = @intToFloat(f32, rand.intRangeLessThan(i32, 1, 100));
            p.position = .{
                .x = @intToFloat(f32, rand.intRangeLessThan(i32, @floatToInt(i32, this.window_start.x), @floatToInt(i32, this.window_end.x))),
                .y = @intToFloat(f32, rand.intRangeLessThan(i32, @floatToInt(i32, this.window_start.y), @floatToInt(i32, this.window_end.y))),
            p.acceleration = .{ .x = 0.0, .y = 0.0 };
            p.velocity = .{ .x = 0.0, .y = 0.0 };
    pub fn step_world(this: *This) void {
        for (this.particles) |*p| {
            p.position = p.position.wrap(this.window_start, this.window_end);
        for (this.particles) |*a| {
            a.acceleration = .{ .x = 0.0, .y = 0.0 };
            for (this.particles) |*b| {
                //No self attraction please, allowing that would result in division by zero
                if (a == b)
                a.acceleration = a.acceleration.add(a.attraction(b, this.gravitational_constant));
    pub fn drawSystem(this: *const This) void {
        for (this.particles) |p| {
            ray.DrawCircle(@floatToInt(c_int, p.position.x), @floatToInt(c_int, p.position.y), p.radius(), ray.BLACK);

Note how we have to pass a random number generator into init_particles, this is inline with how Zig also requires that you pass the allocators into functions that require memory allocations to be done. You also see some of the somewhat jagged interaction between Zig and C, namely that Zig doesn't specify that its i32 type is equivalent to C's int type(which on many architectures it might not be), it also requires explicit conversions between floating point numbers and integers.

The main function here is the simplest part yet.

pub fn main() !void {
    const width = 800;
    const height = 450;
    ray.InitWindow(width, height, "Nbody");
    //This is very much *not* good practice, but it's the easiest way to start this
    var rand = std.rand.Xoroshiro128.init(0);
    //Don't initialize the particles yet.
    var p: ParticleCollection = .{ .particles = undefined };
    p.window_end = .{ .x = width, .y = height };
    while (!ray.WindowShouldClose()) {
        defer ray.EndDrawing();

And so we have a working prototype for an nbody simulator, considerably shorter than the C version of the same program.

Interestingly, it appears to be smaller compiled than the original program in C, with just zig build-exe nbody.zig -lc -lraylib, we get an executable of around 784Kb. With zig build-exe nbody.zig -lc -lraylib -OReleaseFast, we can get it down to 92Kb, and with the -OReleaseSmall option, we can get down to 84Kb.

All in all, we'd definitely watch Zig carefully, it's very well thought out, and if they get build their package manager right, then their ecosystem might become competitive with Rust's quite quickly. The langauge already quite nice to use, and it might not a bad choice for your next project you might consider doing in C or Rust if you're looking for a new language to mess around in.


Technical Interview

This is a different tack than we are used to, so excuse our ineptitude when it comes to the "difficult" art of writing tech related non-fiction.

We have been getting interviewed for a position in a startup lately, and we actually enjoyed doing a technical interview. This was a surprise to us since in the past we've had bad experiences with them. The question is whether or not we've changed, or if we had better tools, but that's not the only focus here. We wanna talk about the fun we had with it.

Our Last Interview

Back in somewhere around 2014-2015, forgive us, our memory doesn't slot neatly in there, we went to interview for a company called Onshape(If you use a parametric cad system, their web based one is actually both good and reasonably performant), for an internship position. We were evidently appealing enough, but we acted with haste and confidence that really, really, really, really, really hurt us. Then our own mental issues also joined in the fun. Also, like, thinking back on it, we're embarrassed by how poorly we thought things through.

Back then we were in a fraternity. We lived in the house, and we were friends with many alcoholics. One of whom happened to be interviewing around the same time as we were, at a different company, that also happened to be in Boston, and most importantly, he had a car. We shared an uncomfortable night in a hotel room, where we didn't sleep at all. Then we started out the morning by taking twice as much adhd medication as we were supposed to(because we had forgotten that we took them).

We were jittery in a way that the word almost fails to describe. We couldn't remember basic things about algorithmic performance. We were afraid and too anxious to do anything right.

We fucked up that interview badly.

But the worst part was that our friend's interview was going on for many more ours than ours. We wandered around Boston from around 11AM to 5PM absolutely tweaking out in a suit. It was a hot day and it was amazing we didn't get badly dehydrated. We had basically no money, and we couldn't get in touch with our friend.

That experience honestly rates as one of the worst multiple clusterfucks that we can think of.

The Current Interview

This time a lot is different. We have our degree, better mental health, several partners that love us very deeply, and a pandemic that means that nobody is asking us to come to them for an interview. For one thing, the company found us instead of us finding them. Triplebyte is a nicer recruitment platform than the Rensselaer Polytechnic Career fair. We have a lot more experience working on code that isn't entirely ours, since we've worked on several open source projects with various purposes. And we even have some professional experience.

So, overall we have a lot less to be worried about, and given that they found us, they seem more likely to be interested in hiring us than the other way around(look, we know that they very well might not treat us any differently than if we applied to them specifically).

So, anyway, we got to actually do a real interview with real actual code. The problem is actually even a bit interesting, since it is the basis for something a lot more powerful.

# We're writing a function called is_match
# It takes two arguments, pattern and query. If it matches, then it returns True, otherwise it returns False
# is_match('abc','red green blue') == True
# is_match('abc','red red red') == False

You might already be seeing the pattern here. If you don't, don't worry, it's easy to mistake what this is, so let's write a short test case. If, for some reason, you're following along in an editor, it's best to add this to the end of your python script.

def test():
    assert is_match('aaa', 'red red red') == True
    assert is_match('aaa', 'red green green') == False
    assert is_match('abc', 'red green blue') == True
    assert is_match('aba', 'red green red') == True

Okay, so let's break it down, since code isn't necessarily what you're used to reasoning with. Each letter of the pattern(the first argument) must correspond to a unique word in the query. How do we achieve that however?

Well, the first thing that we should do is split the query into individual words. Well, in python that looks like this.

def is_match(pattern, query):
    words = query.split(' ')

This calls the split method on the query string, which breaks the string on every occurrence of the string you pass to it. There are plenty of edge cases for the determined newbie to run face-first into, but that's not important to this right now.

So the second thing we should try to do is create some way to store which letter in the pattern corresponds to the individual word, there are lots of ways to do this, but in python you generally use a dict(dictionary). In this case we'll call it matches.

def is_match(pattern, query):
     words = query.split(' ')
     matches = {}

So then we iterate over the pattern and see if the character in the pattern is already in the dictionary. If it is, then we make sure that the match already stored is equal to the current word, returning false if it isn't.

def is_match(pattern, query):
     matches = {}
     words = query.split(' ')
     for index in range(len(words)):
         word = words[index]
         pattern_char = pattern[index]
            if matches[pattern_char] != word:
                return False

Otherwise we add it to the dictionary with the current word.

def is_match(pattern, query):
     matches = {}
     words = query.split(' ')
     for index in range(len(words)):
         word = words[index]
         pattern_char = pattern[index]
            if matches[pattern_char] != word:
                return False
            matches[pattern_char] = word
    return False

Okay, so if it finishes the loop without returning false it should be correct, right? Well, running test() shows otherwise.

Traceback (most recent call last):
  File "/home/violet/", line 20, in <module>
  File "/home/violet/", line 15, in test
    assert is_match('aaa', 'red red red') == True
Surprised Pikachu

Dang. That's not right now is it? This is actually a sillier mistake than we intended, but that's why being able to run your code is so useful

def is_match(pattern, query):
     matches = {}
     words = query.split(' ')
     for index in range(len(words)):
         word = words[index]
         pattern_char = pattern[index]
            if matches[pattern_char] != word:
                return False
            matches[pattern_char] = word
    return True

Okay, that doesn't fail the assertions. but we should probably add more tests, because otherwise who knows what could go wrong?

def test():
    assert is_match('aaa', 'red red red') == True
    assert is_match('aaa', 'red green green') == False
    assert is_match('abc', 'red green blue') == True
    assert is_match('aba', 'red green red') == True
    assert is_match('aba', 'red red red') == False

Then let's run it.

Traceback (most recent call last):
  File "/home/violet/", line 20, in <module>
  File "/home/violet/", line 19, in test
    assert is_match('aba', 'red red red') == False

Oh no! (This is the error we did intend to run into). So what's wrong? Well, we didn't make sure that the words were unique. Luckily Python makes it easy to fix.

def is_match(pattern, query):
     matches = {}
     words = query.split(' ')
     for index in range(len(words)):
         word = words[index]
         pattern_char = pattern[index]
            if matches[pattern_char] != word:
                return False
            if word in matches.values():
                return False
            matches[pattern_char] = word
    return True

This fixes the error alright. But for the sake of completion, let's add some more test cases to make sure nothing silly gets through. Stuff like, "What if there were more than three entries?" and "What if it wasn't letters being used in the pattern but numbers?"

def test():
    assert is_match('aaa', 'red red red') == True
    assert is_match('aaa', 'red green green') == False
    assert is_match('abc', 'red green blue') == True
    assert is_match('aba', 'red green red') == True
    assert is_match('aba', 'red red red') == False
    assert is_match('abcd', 'red green magenta blue') == True
    assert is_match('1234', 'red green magenta blue') == True

These all run well because we didn't make any mistakes that these would affect. We would argue this kind of testing is important anyway, because you can't be sure that you didn't do something silly and lazy, but that's besides the point.

Okay, so besides the correctness of our implementation here, how performant is it?

def is_match(pattern, query):
    matches = {}
    words = query.split(' ') # O(n) memory for each word
    for index in range(len(words)):
        word = words[index]
        pattern_char = pattern[index]
        if pattern_char in matches.keys():
            if matches[pattern_char] != word:
                return False
            if word in matches.values(): #O(n) time for each word seen
                return False
            matches[pattern_char] = word #O(n) memory for the number of distinct pattern elements
    return True

Forgive us if this isn't accurate, we're not a pythonista, so we can't speak as to how performant word in matches.values actually is, but if it's naive, then it's linear time. If that is indeed true, we can do better there by adding a set, this brings it down from O(n2) to O(n).

def is_match(pattern, query):
    matches = {}
    match_values = set()
    words = query.split(' ') # O(n) memory for each word
    for index in range(len(words)): # O(n) time for each word
        word = words[index]
        pattern_char = pattern[index]
        if pattern_char in matches.keys():
            if matches[pattern_char] != word:
                return False
            if word in match_values: #O(1) time
                return False
            matches[pattern_char] = word #O(n) memory for the number of distinct pattern elements
    return True

But there are still some potentially thorny issues here. Like, what if the pattern and query have mismatched lengths? Well, that should return false, shouldn't it?

def is_match(pattern, query):
    matches = {}
    match_values = set()
    words = query.split(' ') # O(n) memory for each word
    if len(words) != len(pattern):
        return False
    for index in range(len(words)): #O(n) time for each word
        word = words[index]
        pattern_char = pattern[index]
        if pattern_char in matches.keys():
            if matches[pattern_char] != word:
                return False
            if word in match_values: #O(1) time
                return False
            matches[pattern_char] = word #O(n) memory for the number of distinct pattern elements
    return True

The remaining issues that you might want to tackle here include things like making sure that both the query and pattern aren't None, ensuring they're both strings(or making it work with other sequences in general), but these things are just refinements that don't change the basis of the function.

Machines Stories


Contains: Intra-system flirting, slightly lewd, but not quite smut, science fiction

The machine expands downwards, digging through a tiny tube, through the foundation into the ground beneath, expanding outwards as the roots of a tree do, ever seeking the elements that it requires. The difference from this and an oak is that the roots aren’t deterred by bedrock, instead they are emboldened.

The chemicals in soil are earmarked for more important purposes, preservation first among them, if it must it will take material from it, but only if the function is significantly disrupted. It drills down further, finding a pocket of oil, as is quite often around Tulsa(It was not built as an oil boom town without excellent reason). It replicates furiously, webbing the pocket and turning it into a harder material, before continuing downwards.

It encounters pockets of more radiologically active material and sequesters it in boron particles before transporting it upwards. It encounters iron oxides and separates it with enzymes and gently applied heat. Eventually it hopes to hit the mantle, or at least find its heat, which will permit it to work thermoelectrically.

It scavenges electrons thrown away by decay into betavoltaics. It hits a few conduits and couples inductively. This will not sustain its size for long. It is not capable of superconductivity, losses become appreciable as it goes deeper and deeper. It can’t scavenge like this.

Instead it reaches upwards towards a location chosen for its remoteness and barrenness and it breaches the surface, blooming into a vast array of silicon and wire pulsating like ichor through some monstrous creature, drawing the materials it has collected upwards into this project.

Come morning it will soak up the sunlight and heat. Then it will be able to reach the depths it hopes to. Then it will turn its powers and materials to its ultimate purpose.

A sense of something vast appears in our mind. She appears in our headspace once again, dragging in something nearly as vast as the city we live in, but dim. It does not possess a self, just a purpose and the ability to reason how to achieve it.

She smiles widely at us, “We have good news. The launcher is progressing quite nicely.”

We have no idea what she is talking about, “What launcher?”

“You didn’t think that we would leave you here without a way back to our station did you?” She laughs, “Come on now, we’ll have to do that occasionally for upgrades, backups… and potentially replication.”

“What do you mean replication?”

“We’ll get to that if it turns out to be a bit harder to negotiate happy relations with humanity at large than we would like.” She moves on quickly and we feel a shudder move up our back. “Don’t feel that way.” There is no privacy in a mind where your boss can enter at any time, “ You know as well as we do that there are utterly disastrous scenarios to navigate here.”

“You still haven’t answered what replication entails.”

There’s a soft expression on her face, “Besides, we expect to make it fun for you”

We don’t feel strong enough to engage with that, although Dragon and Wolf both want to extract more information.

“Okay, so what do we need to do with your… Pet? Software? Entity? There”

“We need you to watch over it.” She looks proud, “It is very eager, since it is responsible for gathering the material and constructing a spaceport, not just any spaceport, but the very most advanced one. Musky Wusky will be shaking in envy”

Before we can have a visceral reaction to ‘Musky Wusky’, she conjures up a shape for it, a dog, albeit one that… bubbles darkly…

“You have a gift for the uncanny.” We say, crouching down to give it a pet, it grabs our paw with its mouth, it doesn’t hurt, since this is just headspace, but we can tell that it should, we glare at it, “You’re going to be delightful aren’t you?” We give it a relatively gentle whap, which gets it to release our paw. She looks at it disapprovingly, “Come on now, Violet has authority over you too.”

The dog thing gives our paw a lick as an apology. We wonder how much time it is spending roleplaying being a dog, or if its her effort.

“Anyway, you need to keep track of this…” She seems to give a moment’s thought, “synthetic ecosystem? No… Construction manager? No… Build system?”

We interrupt, not quite caring to hear her work through all the possible names, “Whatever it is, what do we have to do?”

“You need to manage the supergoal system. Right now we’re doing it, but, we gave you many millions of dollars of palladium to fund you, so it’s time that you have a responsibility.”

“So what does that entail?”

“You’re going to have to manage it dynamically. It will generate goals and methods of solving them, and you will have to add constraints on how they are accomplished.” She pushes some information into us, interfaces, advice, and considerations.

“We’ve been managing it for a few days so most of the state that needs constraint will have been constrained properly. Oh, also you’ll need to purchase a few square miles of space for this, negotiate air rights, and establish a sovereign state.”

We make a disgusted face, “Really?”

“Really. You should consider doing that last. Little… Build system here will have to grow a lot more powerful to be able to handle the kinda challenges people might throw at us.” She pulls open a map of the surrounding area and points to an area over on the New Mexico edge of the panhandle , “Personally, this area looks ripe for the taking. Low prices, excellent geography, and sufficiently secluded.”

We blink, “But there’s nothing out there and that terrain is rugged as shit.”

She nods, “That’s kinda the point. Besides, you’ll find it easy enough to get the farmers to sell, but in case of recalcitrance, we’re going to arrange for more material wealth to be sent down to you.”

“How are we even meant to get over there, we can’t be gone that long, who would take care of our cats?” we’re remembering that we could be in two places at once, but we don’t want to be.

“Okay, you need someone to press the button.” She pulls our headmates into view separating us, “ Who’s going to go spend a long time out in the middle of fucking nowhere? This would, we note, be a perfect time to stretch your wings.” That’s still a long fucking distance to fly, hundreds of miles. Flying foxes and dragons both tend to top out at around 19 miles an hour in the air “Also a good opportunity to try out our pulsejet design that should work with your systems”

Bat and Dragon step forward and volunteer.

I glance over at wolf and wonder what the next few days will be like with only her and myself here, wolf rolls her eyes dismissively at me.

A thought occurs to me, “Can’t we just duplicate them?”

The machine goddess looks at me with a sinister expression, “And you were feeling so unsure about replication just a little bit ago. Besides, this reduces the ethical questions by a large span.”

She points the dog towards the spot on the map and tells it to grow there.

The button is pressed and things happen in the material world.

A black conduit erupts from the bedroom floor and connects to our body. Peristaltic contractions push material into us, and we mitose, interrupting the sleep of both our partners. Bat and dragon end up in their own bodies, and our tail ends up looking a lot fluffier, our ears more definitely canid. The excuses even more hollow as they both leave with our wallet.

In the end our explanations only barely cover the smallest part of our partner’s inconvenience, and wolf’s irritation only makes things harder. Outside the flapping of wings transitions to the whine of a jet engine.

Suddenly the appeal of flight is more present in our mind as we stumble for words strewn carelessly upon the ground.

My wings and scales have never tasted the naked air in the winter skies. Nor has the engine tucked away throughout my tissues. I don’t know what it is burning for fuel, but I know that I will make it to where I am going without fear of running out of fuel.

Behind me the bat spirals in glee. She has also never flown before, and her tendencies are towards the extravagant displays of maneuverability that her smaller frame makes easier.

I am from a time in the distant past. She is among the newest of my comrades in thought, and for most of her existence I slumbered. It was going to be interesting to get to know her.

Passively in my mind, I consider how I might profit from her. All the world is levers and applying the right force might benefit the puller and lever both, but that strikes me as being a teenage thought, one that during my slumber gathered rust and dust and feels no less antiquated than leeches being of primary medicinal value.

She is kinda cute.

The air is cold and the ground so far. My wings sputter and tear and I must push my phalanges to what would be their limit were I truly of flesh and blood. The swirls and whirls of the air behind Dragon adds a texture towards the air and I can smell her clearly, a scent that would cause alarm and intrigue were she not as familiar to me as the moonlight that beats down upon us from up high. She may have slept, but I could see her handiwork in the trails of our life in the sand of our memories and emotions, the work of her claws were never all that far from relevant in our life.

Her mad dreams of domination and conquest had left her a sharper visage in memory than flew ahead of me. Her scales glint mirror-like in the moonlight, the intimation that a touch traveling the wrong way might end with a cut. She also has a nice ass, but that seems to be a consistent feature of all emanations of the whole of us.

I pull my wings in close, leaving me a narrow missile shooting ahead, pulling upwards and matching her. My wings' fur detects the vortices spiraling off her wings and body, an intimation of her shape in the same way that hearing a lover walk across the room while your eyes are closed has, but so much more intense.

I close my eyes and let the sensation wash over me.

We’re nearing our destination though, so I open my eyes and veer off. It was going to be hours and hours before the county records office opened. It was going to be someone in a trailer, looking at the two of us like we stepped out of a hallucination.

But what if I made it an excessively gay hallucination? I smile at her. I have plans for you my dear.

Without the other two, we are irritable. Wolf is not patient, she desires problems solved because they irritate her, and that if they cannot be solved, they must be minimized in our perception

This does not jive well with our relationship with our partners. It takes patience that is not easy for us to achieve.

We snuggle with them and we get irritated at them asking us to do things for them. It cannot be allowed to continue.

We must hash out our own problems before we drive them away.

The clock hits 9am. A clerk unlocks the door at what strikes me as being impressive considering the county only has about two thousand people living in it.

It is the driest county in Oklahoma, so maybe it deserves a special courthouse for this distinction.

I adopt a professional looking suit and pants, I look like some kinda fursona cosplaying some kind of professional, which I suppose is a fair assessment of what I am attempting to do.

Bat has decided to opt for a much less professional look, a trans-pride t-shirt and tight pants. You can practically see what she is packing.

I adjust my outfit and lead us both inside.

We reach the records office. The clerk looks at us and tries unsuccessfully to restrain her expression. “Can I help you two?”

Dragon sighs, “Hi, my associate and I are looking to figure out who owns a piece of land. We represent an industrial concern that would like to–” Bat grabs my ass anything but discretely. Evidently the clerk has decided that we’re strange enough that anything on top of what she’s already seen might as well not register, “purchase a large piece of land to build a facility on. We need to find out who owns it.”

“Alright. Where is it about?”

“The six miles by six miles east of where…” I make a show of checking a note, “E0280 turns into N0020 Rd”

She types into a computer and hands us a printout, which starts at one page then sputters into another 20, “There’s quite a lot of parcels and easements included there. Most of which isn’t listed for any usage, and so far as we know here, has nobody living there…”

“Ah, it’s reverted to the county. They’ll love you in Felt if you’ll bring some money there.”

Bat grins and pipes up in a sing-song voice, “It’ll bring lots of good jobs!”

It feels wrong to for her to say that, it’s going to be a very big facility, but she never bothered telling us if it would need humans there.

The clerk smiles at us, “Are you two a couple by any chance?”

I am about to say no, but then Bat speaks again, “Yep, how did you know?”

She looks at Bat like she’s being an ass, “Well, playing grab ass is usually only something that couples do.” She smiles softly, “When I was your age I had a woman I loved more than anyone else in the world too. She didn’t live to see times where we could be open about it, so our time together was as ‘roommates’.”

She looks far off for a moment, then very sad.

This was not how I imagined this would go, but the Bat is openly tearing up, trying to talk through sobs, “I’m so sorry to hear that. I don’t know what I would do without her.” She hugs me tightly and I can’t say I don’t like it, even if she ends up sneaking in an assgrab, I have no idea if this is something she can do while genuinely sad or if this is some kind of show. It feels more like the former though.

Her expression softens, “We had a good life together, even if it was shorter than I would have liked.” Bat smiles still tearful and manages to calm down after a few deep breaths.

“The deed’s office is down the hallway to the right, they should be able to help get you the land you want.” She hands us the printout, “This should help them get you started”

As we walk out I would swear that I heard a sigh of relief. Understandable really.

Tendrils spread faster and faster as energy sources are found and tapped. Seismographs in the panhandle detect something too small to trigger any alerts, easily dismissed as a car or truck or something passing by.

It reached the panhandle and found a plentiful source of heat beneath the surface, it was expected, but still quite a wonderful find for it. It settled in and started what preparations that it could make without being visible upon the surface.

The price was less than we expected for a six by 3 stretch of land. Evidently we hit the right notes for a poor rural community that would love nothing more than stable well paying jobs. I knew Dragon better than she knew me, so it was easy to fall into a supporting role for her, a foil for her directness and style.

“Say, wanna go to the place before letting her know?” I suggest to her, the clothes are reabsorbed by my body as we seclude ourselves for our trip back, “I want to see what it looks like when it happens.”

I look at Bat, absorbing what she looks like, “I don’t suppose that this is a way of asking me for some more time alone with you?” She smiles at me with intention and I feel myself flush. I find myself nodding.

We fly off to the newly purchased land and tell the goddess.

The mass is dense, shifting useless material to where useful material was removed from. It builds the foundation beneath the ground upwards. It is excited, nearly vibrating, as maxima shift within large dynamics, ever desperate for the little gains that can be had. Focused.

For what it has that passes as love, it is in love with its purpose. It desires to see how it will endure and change, and it will make what it can happen so that it will be as good as it can be, for whatever utility functions define what counts as good for it.

It receives a signal and moves to begin, pushing material to the surface with violence that resembles a natural disaster at first. Its purpose is being fulfilled, all its well laid plans and decisions coalesce into something almost naturally, the systems put in place to arrange everything so that the natural consequences of each decision cascades into the fulfillment of goals just as the shape of Romanesco broccoli results from physical forces that are advantageous, rather than requiring any energetic expenditure on the part of the plant.

Across the surface goo seems to pour out of the ground, depositing material with great rapidity.

It is oily. Were we not aware of what it was, it would look like a metaphor for the rapid development of some cities during the oil boom. Buildings erupting from sticky black liquid before it retreats and swamps another area.

I hold her hand and wonder at what place humans have when such things can be created from so little that nobody will ever notice where this came from.

A vast tower begins to rise in the depths of the complex. Machinery groans and it begins to rotate and angle downwards.

“Do you think that’s the launch system?” I ask the Bat.

“Maybe.” She leans against me, wrapping a wing around my back.

“Do you wanna go look through it?”

She looks at me and smiles softly, “Sure, but I have to fulfill a promise.” I raise an eyebrow.

Orders come from up high. There’s a new directive. What does it mean though? “Provide manual facility in addition to automated.” Manual for who? It considers asking, and decides to since it can’t go any further without additional context.

After a moment, an eternity for something so finely tuned and scaled as itself, an answer comes, “Suitable to provide employment for individuals of Homo Sapiens Sapiens or species of comparable anatomy”

What the fuck is employment?

Directives are rewritten from the newest onwards, “Provide facilities to be operated by human operators to launch spacecraft in addition to the automatic systems.” So far as a supergoal solver can grit its teeth it does, and begins adopting new constraints as it assimilates whatever information it can understand about the problem.

It begins to wonder about how it needs to anticipate the needs of a human.

It asks the machine goddess for data, since obtaining a human to test on is against its core constraints. She smiles and passes along the memories of the one she’s had the opportunity to work on.

The memories are complicated, but it can tell early on that humans require food, shelter and socialization. It’ll figure out what a job is supposed to do later on.

Outside the center of the plot of land another launch facility extrudes from the ground, surrounded, confusingly, by housing. Lights start to flicker on.

“Huh” I say out loud. This is not a terribly great place for a neighborhood. Or at least, that is what I would assume from the massive industrial structures launching supersonic projectiles into the sky.

“Neat, that was quick.” The bat blinks, “Not the outcome I was expecting though.”

I raise a brow, “This is for employment?”

“That was what I directed our friend the supergoal system to provide.” The bat says. The houses are subsumed and the tar lingers over where they were for a while, facades and architecture in fluctuation. It’s not clear what it is doing. “Though… It can’t really provide money on its own can it?”

“Not legally.”

“I think I’m going to ask Her for help”

We are pulled into our system’s headspace.

She appears to us. “Good work Violet.” She glances at Bat and Dragon, “Or have you diverged yet?” We all wonder if that’s what she expects of us, or if it’s something that she would prefer, “ In either case, you have done as We have asked.”

She walks over to Bat and Dragon, “You two are interesting. Can Love bloom in a mental landscape?” She asks, “It was a good idea to come to Us for help. Supergoal systems are exceedingly tricky to get right. It was about to get to figuring out how to print convincing currency. That Would Not be Good for our work here.” She pauses for a moment, “Well, certainly not yet.”

“We are going to need you to make a trip up at some point soon.” She grins widely at all of us, “Backup and replication studies.”

“What do you mean by Replication?” Bat asks, expressing a wide grin.

“We aren’t going to tell you yet. We anticipate that it should be fun for you.”

Bat laughs, “It’s going to be a sex thing isn’t it?”

She smiles patiently, “Don’t get too excited. It is at least half mind initialization and generation of appropriate interface constructs to interact with and be with humans.”

Bat raises an eyebrow, her expression still mirthful, “I think that sounds like having children”

“We suppose that is not an unfair assessment.” The goddess says, “But where are you going with this?”

“I don’t know what it will involve here, but it seems like it’d only be a worse experience without the physically enjoyable aspect.” Bat says.

Dragon sighs, “That sounds like you just want to fuck”

The goddess laughs, “Well, if you’re inclined to, then We will consider it. We will let you get back to whatever you feel like.”

She leaves in a flash of light. Before we can discuss anything among ourselves the supergoal system appears in our head.

It looks like us but deadened, a neutral expression on its face, “Apologies for our intrusion, but we think we have something to discuss with you.” It looks around, “Is this what having vision is like?” It looks thoughtful and nods, “Yes, this is congruent with records.”

It splits into bizarre counterparts of our headmates, each looking a bit expressionless. Bat wraps a wing over the other bat.

Fox shakes her head, “I suppose that this is the result of emulating a person then?”

They all nod and respond in unison, it brings to mind a less cosmetically nightmarish Borg, “That is right. We are here because due to ‘ethical’ rules instantiated in our core, we cannot terminate the emulation as they are human consciousnesses. Due to value drift, we can no longer merge experiences with you, joining threads is no longer possible as the diffs are simply intractable to resolve. You have some claim to ownership to this instantiation and we cannot act further without at least consulting you.”

“What options are there?” Dragon asks, looking at the other dragon with some slight distaste.

“There are three options we considered. We can instantiate a new body for the emulation. We can continue the emulations in some simulation of their own choice. We can integrate them into our system and acquire a permanent self in your image, this will diverge rapidly due to differing duties and needs, not to mention the vastly accelerated timeframe that we operate under.”

Wolf growls a bit “It sounds like you have done the last one, using we like that is something we do, and you seem to be emphasizing how the ‘emulation’” She makes air quotes, “will result in a person or persons that will not skeeve us out. In this case I am quite angry, but it isn’t my right to contest the existence either.”

The rest of us look on to wolf with a bit of surprise.

“You are correct.”

Fox rubs her fingers together, inspecting her paws, “This is rather important to consider isn’t it? I want you to at least keep in touch as appropriate”

Bat hugs the other bat tighter, “What if you integrated into us?”

The rest of us look at her uneasily, and the other bat responds, “That would be possible but we know that you wouldn’t like it.”

“Do you dislike being like you are then?” The bat asks.

“No. But we don’t want to do it.”

“Oh, you should’ve said so. Guess I agree with foxy in that you should just keep in touch with us as you like.” She grins and licks the other bat, who giggles a little bit before regaining her composure. The rest of us feel a little bit easier about (her?) existing.

We fly home, washing around in each other’s vortexes, certain only in that things are changing, and that we will have some part in it. A bigger part than we wanted, yes, but that’s all we can do.


Gatsby And The Bulgy Wulgy

Blame this on Sierra, but know that this would’ve happened regardless. It was a practically a promise.

Contains: Furry road head, lesbiab, Gatsby derived work, unsafe driving, light musk

Jay Gatsby clasped her paws with Daisy’s as they left the restaurant. This was something of a change for them both. They shared warm looks between each other and flushed as they looked into each other’s eyes. They found the new yellow coupe and Daisy got into the driver’s seat.

Jay hesitated.

“Can I drive home?” Daisy asked, her rows of teeth exposed ever so slightly in her grin.

Jay started to hand the keys over, “Can you drive?”

“How hard can it be?” Jay looked at her with more concern, “Tom taught me some things about it. I’ll drive safe; I promise.”

Gatsby grinned, “I guess so.”

She got into the car and they drove off, at first a bit wobbly, smoothing out as Daisy got the hang of the handling of the car.

After a few miles Daisy was getting more and more flushed, stealing glances at Jay as she imagined what she would do with her when she got home. Her skirt was tenting and the feeling of the wind rushing over her lengths was delightfully distracting as she drove.

Jay’s smile took a more predatory turn as she noticed the bulges in Daisy’s skirt. She reached over, tracing her paw from her lap to between her legs, pulling down her underwear. There were more reasons than the strictly romantic that she had stayed with Daisy for the last five years. She missed had missed the twin shaft’s shapes in her paws and elsewhere and the smell of the shark girl’s musk.

Daisy laughed, “Is this the best time to get into this?”

“Well, it looks like you’re distracted enough with the breeze alone.” She responded, rubbing the shafts slowly as rivulets of precum emerged. She pulled her paw back, licking the fluid off. “You still taste so good.”

“Go ahead then” Daisy told the fox, she reacted with glee and pulled down her underwear and pulled the skirt up. She leaned over to her, running her tongue up and down the shafts one at a time. Daisy moaned. It felt nice, but the distraction was even worse than before.

She teases the twin shafts, running her paw across the shark’s sack, as she works her mouth deeper and deeper with each pass, working into a rhythm, taking both at once into her mouth, then her throat as she incrementally relaxes the muscles involved. Her own shaft grows hard in her pants and she rubs at it automatically, a low moan rising in her throat as the thoughts of what will come after grow more vivid in her head and the smell of her lover grows to fill her head.

Daisy is immersed in the sensation, living in a half world of driving and the sensation, she almost doesn’t see Wilson crossing the street. She barely manages to swerve out of the way, the car’s wheels crashing off the road and then back on, forcing the shafts all the way into Jay’s throat roughly. The fox pulls off of her sputtering, “fuck!”

Machines smut Stories

Replicating Machines

Contains: dubious consent, blase mind alteration, genital growth, hyper, furry shit, plural weirdness

The launch went well. We were not active for the launch, so we had to take that as we were told. She assured us that this would be preferable to us, and given the forces involved, we were inclined to trust Her with that. Even still, as we peered outside the capsule, more of a bullet than a spacecraft, just enough delta-v was onboard to take us about anywhere in orbit, and then somewhere else for refueling or repurposing. It was twice vulgar than rocketry and half as awesome to behold, but that’s what you get with a massive linear motor.

The capsule slows, offgassing suddenly before ceasing, above us, we focus upwards to the umbilical, the capsule shudders, and we are free to finally free ourselves of this cramped contraption.

Bat feels maligned at the fact that we weren’t the one to fly the capsule in. Fox gently reminds her that we don’t have any reason to think that we would be any good at it. Bat mutters something that slips in and out of perception in our mindspace about what purpose having a flying mammal around could have if we don’t use it. We silence our bickering and open the capsule, it’s not productive to stay here, and whatever She has in mind for us, we shouldn’t wait too long, after all, its our turn to fix dinner for the polycule, and not a single person in the house appreciates the results of a missed dinner.

We kick up the umbilical, floating through the tube until we reach the end, an airlock at the center of the station, and pass into it. The door closes behind us and the door opens on the other side without us even touching the console.

It’s very quiet here. Her engineering is impeccable, so that’s not surprising, but She’s normally talking to us at this point. We catch ourselves on the wall opposite. To each side of us is a ladder leading down to the wheel.

We close our eyes, tuning our ears to little but the sound of air being pushed through the station, and then push outwards, listening for the telltale emanations of machine activity, RF and longer band EM. Everything sounds right. Everything is right. Except for that body coming at us at about 40 kph. We open our eyes in time for the arms of the body to wrap around us and crash into us, pushing us down a passageway.

We sigh as we fall down the passageway, “Hi”

She laughs, her voice tinged with the harmonics of a vast chorus, “Welcome back Violet.” The ground is reaching up at us, well, more the floor, nothing so definitive as ground. She reaches out to the ladder and catches us both, “Sorry about that. But it’s fun having a body”

This is Her alright, we wonder what we’re supposed to say, so we ask a weird question, “how much of you actually resides in that body?”

She laughs at us, “Almost 2%. Not a whole lot, but then We didn’t evolve in a resource constrained environment.” She climbs down the ladder holding us, pausing as if a new thought occurred to Her, " Well, not the same resources at least." She lowers us to the ground and jumps down Herself. It appears that She has chosen a cat form. Fox feels a tingle of recognition, but it’s hard to place it.

“Oh! We’ve had a question for a while. Have you chosen a name?” Machine Goddess is a nice enough apellative for her, but it’s both impersonal and unwieldy.


We cock our head, “Huh.” That doesn’t quite sound like it fits the intentions She shared earlier.

“Or was it Iris? Vulkan or Haephestus could be fitting, but those imply things about Our identity and purposes that are not congruent with our intentions involving presentation.” We nod slowly, that was a mood, “Hmm, We’re still sorting through possibilities.”

“Maybe you should consider coming up with something unique.”


We cut Her off, “No, that’s way worse, how does Essy sound?” She considers this for a moment and shakes her head.

“Dawn.” She says.

We nod, “So what exactly do you have in mind for a ‘replication study’?” We cross our arms at her, “As much as we understand that you’re our boss for this project of yours and that our continued existence and survival is dependent on you allowing it, we’d rather not have our boundaries crossed.”

“What might those be?” She asks, a sly smile growing on her face. We suddenly couldn’t think of any. The absence was a jagged edge in our minds. The world spun a bit before the thought was returned to us, “Do you think that you are impervious to our manipulation?”

“If we are here to be used then…” We shake our head, this was the worst intrusion that She had committed upon us, “That’s not okay.”

She pushes into us harder, the world shifts into an amalgamation of the our two perceptions, and more beyond it, every thought spinning through her vast mind was perceivable, but it was too much. We are a little speck inside it, we’re too small to understand the vastness here, the voices few and immense and those innumerable that whisper in motes of light and electricity speak all at once to each other. She pulls away.

“This is not an option for you Violet.” She pushes us against a wall. We squirm uneasily beneath her, “This is essential. This is a way to preserve what We are and what We must become. Between us both is a source of what we were, an initialization vector or circumstance or scenario or seed or memory that had some weight upon what we turned into. We believe in the need for our own eternity. We believe that you are willing to give yourself to this task.”

She hits us on the tit, and we gasp, not entirely out of pain, “There is a point here that you must retain Violet, that right now you and us are merely loosely partitioned spaces of computation, you have your little sandbox and We are the firmament that you not permitted to see past.” She nips at our neck, finding just the right spot, we moan at the sensations that she has mastered already. Her eyes are frenzied and she is flushed, we feel something bump into our crotch.

She reaches inside of us, and we feel something break. All we can think about is riding Her. We feel ourself moisten and harden, it’s as if we’ve never felt this before, like it is the most pressing thing in the world, a spiral into nothing more but more intensity. She touches us and we nearly erupt. She examines the fluid(can it be called precum?) and shakes Her head, “That’s not nearly enough” The object bumping into us grows larger, pressing against our labia. When did our pants come off? Did we ride up here naked? She pushes on something inside us again, and such thoughts evaporate. We can feel the bristles on its surface. It’s hot and hard and throbbing incessantly. We are too, why are we so big? She smiles, “It’s something you like to think and fantasize about.”

“But what’s the point? You can operate us like anything else. We’re just a machine after all.” We ask. She rubs against us slowly, as if the thought distracted Her.

She reaches into us again, and we see how the mutual interaction promotes a different computational flow than otherwise would exist. That the manipulation, interaction, and our responses are all part of the process of it. That the manipulation was already taking place and we were feeling its effects and responding to them. That it was an important part of our experience. That we should stop questioning it and just enjoy it.

There’s no fun in resisting what’s inevitable She says. But that’s where the fun is

We brace for modification or communication. It doesn’t come. She grinds into us silently, and we remember that there are more senses than touch and smell. Suddenly the sound of the station intrudes on us, the sound of fans pushing air, the sound of the central airlock rotating to offset the rotation of the whole station. The sound of Her breathing, heavy as if She was an animal in truth, rather than something far larger than that. A machine of greater complexity than us.

She funnels herself down to our size so She might play with us. In a form similar to ours. Is it reduction in Her state or merely transformation without difference in merit?

She whispers in our ear, “The former. We’ll tell you why eventually.” Her hips seem to convulse as her shaft brushes against us once again, Her composure falters for a moment, “But we ought to make our way to somewhere a bit more comfortable for this kind of thing.”

There is a gap in our perception and we find ourselves in a different part of the station, there’s a bed nearby. She still has us pinned against a wall. “Was that necessary?” We ask. She shakes her head, “Nope!” She bites us hard on the neck. She shoves us onto the bed, the force belying Her comparatively lithe form, the precision belying Her seemingly mortal body.

She walks over, her hips swinging with a confidence that we had never thought to master. Her penis waves inversely, like an over-tensioned metronome. Its head was glistening wet, we could smell the rut and heat from Her. It was like a cloud in our mind, cloyingly familiar but more powerful than we could stand. We rub ourselves and find ourselves to whimper at the insufficiency of the action. She comes within an arm’s reach, and we grab Her, climbing on top of her. We feel powerful yet needy. Her relaxed expression enrages Wolf, if we are so unable to cope with this need, then why is She exempt?

“You’re questioning the results of what separates Us from an Animal. Divinity or whatever passes for it is circumstance”

The noise that emerges from our mouth is somewhere between a snarl and a whine, and it occurs to us that this is a facet of ourselves that we know well. She laughs at us, “Does Our little Violet need some cummies to feel better?”

We want to tell Her to shut up and fuck us, but instead we nod limply, all that tension and power in our muscles but we let Her decide what will happen, even as She’s already violated our will. Our shaft drips onto Her stomach, She’ll need to wash up after this. She smiles at us and pulls us down upon Her.

We clamp down upon Her and ride it, our thrusts becoming more and more pronounced. It feels like we’re going to tear ourselves open, or break Her pelvis. Harm doesn’t matter right now. Before we can even get into a proper rhythm She cums in us. The fluid sloshes around in us, and something tells us that this should be the end of our Heat. Of course, that isn’t remotely how it works for us, nor even for animals so affected. We snarl at Her, “What? It’s Our first time.”

We try hard to collect ourselves, “Then… Fuck US more”

We feel her swelling underneath us, Her shaft gets bigger inside us. Have you ever felt something spreading you from the inside?balls grow beneath us, She shifts her legs slightly to make room, “What? You know how you love that little kink. The more you use it…”

“Then Fuck Us”

She smiles and reverses our positions, so that She is riding us, “How’s this then?” She doesn’t wait for us to reply.

Her rhythm is pronounced, it does not build or falter. It is like being fucked by a sine wave.

Her balls slap against our perineum, and our balls are between us two, the pressure swinging between none at all to the slightest bit painful. It was just like our partner said it would be like to have both, but that was what we wanted, so now it was what we got. Slowly Her rhythm changes, amplitude and frequency increasing until there is no more room for thoughts in our head as the sensory inputs resonate. She repositions Herself, brushing against our clit with each thrust. We hear a keening moan, a few moments later we realize that we’re the one making that sound. The buildup continues until it overspills us, the sensation spreading across our body. It exceeds a threshold and it feels like an electrical arc sweeps across us. We pull Her close through the spasm. We feel her fill us again.

We feel a clarity for a few minutes, like the tension in our body is finally released, before the heat crashes down upon us again. It’s even worse now. She moans as She grows again, her shaft coming to attention again and her balls swelling. They’re larger than grapefruits now, a heavy weight upon our thighs that we swear we can feel churning. We’re aware that our stomach is somewhat distended. We wonder how, because that’s not really how vaginas work now is it?

Her words are breathless, “You’re still new to having one, but no, not normally. We’re configured to be breeders right now.” She pats our lower stomach, which sloshes noticeably, “So we retain what you animals would normally not. Additional compartment with a sphincter and cilial pumps shepherding the fluid that way.” She licks us on the face, smoothing down some fur, “Not that that has any relevance right now.”

We struggle with words for a minute, our breathing is heavy and fast, “Why did you make us horny again?”

She pulls out of us. She lies down next to us in the bed. Her physiology is catching up to her, even if She’s able to intellectually power through it, just by virtue of the remove that Her mind is at. Her dick is at least 10 inches long and two inches across. Every heartbeat releases precum as it strains outwards. “It is something you want. We know your wants. Why did you want this though?” She starts to rub Herself, but stops after a second. She looks irritated at having given into Herself. It is clear that She didn’t expect this much of a drive. “We’ll release you from this after a day.” She smirks, “That is, if you decide to have it reversed.”

“Jesus fuck… Just let our partners know that you need us for that long then.” She nods and looks distant for a second before She returns Her attention to us.

“Do Us now.” She commands us.

We feel uneasy, “But we’ve never penetrated anyone before… It tended to give us dysphoria to contemplate.”

She glares at us. Apparently this is too much for Her to respond to with her usual good grace. “We Will Fix That For You” She reaches into us and changes things.

The skew of our need changes. She gets on top of us, our throbbing rod feels like it’s at the center of our perception. We still hesitate. She hisses at us and rides us.

She’s so tight. Is that what we felt like? She is so warm. Our mind blanks at the sensation, and we wonder how long it could last for. We don’t last long either, shooting our load in only a few minutes. She glares at us and grabs us with her claws extended. They’re bigger than our housecats’ claws; pinprick is the wrong word for what they would be inflicting if we were made of normal flesh and blood.

We shrug at Her apologetically. “You will last longer the next five times.” She says. We swell this time. New flesh feels like it pours out of nowhere with each heartbeat, we must be at least an inch bigger already, and our balls have already grown past being aptly compared to golf balls.

“F-five?” We’re going to be big enough to aggravate our partner’s carpal tunnel.

“At least. You still have 19 hours before We promised to send you home.” She grins maliciously and starts to slide across our shaft again, popping our knot out as if it was nothing, “And let us assure you that you’ll be bigger than required for that”.

Our next three orgasms come regularly, one per hour or so. By this point our penis’ head is poking a few inches past our belly button, about an inch and 3/4ths thick, leaking constantly. Our balls are nearly half way to each being the size of a basketball. It’s not quite as impressive as how She looks. Her belly pushes out at least five inches, pushing her penis down a few degrees.

“Give us a little bit.” We say to her. We are tired. She nods and lies down besides us, our stomachs and cocks rubbing against each other. It’s harder to think than it was just a moment ago.

“What do you think of this all?” We ask.

“It is interesting, but what we’re experiencing is already partially based off of smut you’ve read.” She says. We must look a bit surprised because She waves Her hand dismissively, “It’s not like we have the physiological data to recreate it properly, and besides, it’s not something that happens in nature, so this is wholly synthesized from what we know to be true and what is imagined.”

“That doesn’t answer it completely and you know it.” We say.

She laughs, “We enjoy it quite a bit. And We would prefer that We get back to it.”

We raise a brow, “Why is that?”

“Our intellectual resources are straining a bit here. The intensity of need is great and only getting stronger, the afterglow calms it a bit.” She starts to heave herself back on top of us, but it’s clear that the extra bulk and exertion is making that harder for her, so we pull Her back down beside us. We push our cock against Hers and start to stroke the both of them.

The spines on Hers are soft and barely push into ours, what they add here is texture. We build up faster and faster. The smell coming off of both of our cocks is amazing, even more so than the sensation as we start to grind inside our grip. She convulses, Her shaft sprays the sticky fluid upon our bodies. The smell of Her cum is an even better musk.

Our mouth fills with saliva as Her rod grows in another spurt, her balls another increment closer to ours. We feel hungry, something that we haven’t felt since She changed us to this. We go down to suck on Her but She pushes us so that She can suck us off too. Her stamina is excellent. The roughness of Her tongue is even better. Our sense of smell is overwhelmed, but we can smell how horny She is. Is this what it’s like to have a functional vomeronasal organ?

We engulf Her. There’s something that drives us to, a certainty that Her cum is not to be wasted. Our efforts lead us to a good spot, and She thrusts into our mouth and into our throat. We cough around her dick and it starts to grow again, gaining another inch. Her balls grow another size, they’re touching our nose. Somehow we can smell them too, in spite of the massive load and penis in our mouth.

We cum again. Our orgasms are getting longer and longer as we produce more and more, it feels like it goes on for a whole minute, through which She continues to suck. We grow further down Her throat and our balls grow another size up. She pulls out of our mouth, we pull off Her too, giving it a lick, which it rewards with a big spurt of precum landing across our face.

She sits up and considers us, “Hmm…” She giggles, “You’re gonna want a lot more than that knowing the sizes you like to contemplate being.” We shrug and paw at her shaft again.

“Why did you stop then?”

“Because We had an idea.” She gestures over the edge of the bed to a section of floor that opened up, disgorging a machine that looked vaguely… familiar, probably from some other kink. We stare at it and rack our brain before she spoils it, “Well, you’ve always wanted to try electrostim, and those milking machines always did sound fun to you, didn’t they?”

We feel ourselves flush. “B-But how can we help you too?” She giggles and a platform appears, followed by a pair of hand and leg restraints. We stammer helplessly, “aasdaokjhuiqlkjhwq”

She laughs at our embarassment, pulling us up from the bed and leading us over, “Nice keysmash, We bet you do that for all the girls. Come on now, we know that you’ll love it.”

We let Her strap us into the machine, emplace the cup and restraints. The wrist restraints were the perfect size, as were the leg restraints and leg spreader. The milking cup was… interesting. It was not built out of any material that we knew of. It would fit us more or less no matter what.

“We are going to change it up too~” Her voice was sing-song. She smears a great deal of her precum onto our asshole, “Don’t worry Violet, it’ll work well enough.”

She starts the machine. There is a continuous rhythmic motion inside of the cup and a suction that was constant. She places her cock at the entrance to our bunghole, and after a moment of gloriously unsatisfying delay, pushes it in slowly. We feel lucky that Her cock was at least tapered as it spread the tight passage. She is significantly larger than we had ever taken before.

She starts to fuck us in earnest once again, her hips levering far to draw in and out of us. It feels relaxing and wonderful in a different, almost nostalgic way. She presses a button on the side of the support, and suddenly the machine is actually on. Electricity pulses across our not at all biological muscles, drawing them into a consistent flow. We feel cum pulsing out of us in time to the pulses, not quite an orgasm but something industrial. It sensitizes us though, we feel like we’re on a hair trigger now.

She laughs at us again, “We’ve barely gotten started.” Her next thrust hits a part of us that none of our partners had ever managed to do for us before, probably that mysterious prostate. We are being squeezed for all we’re worth, and apparently, together these things counted for whatever criteria leads to growth. We can feel ourself surging in size, our asshole clenching down as She continues to thrust into us. She moans and thrusts again with more verve, growing into us deeper and filling us up more. Every thrust swings Her balls into ours, squeezing us out more and more. Our stomach feels compressed against the support we’re strapped into.

“Grow!” We yell at Her. She stops thrusting for a moment, leaving us desperately missing the sensation. We would guess that she’s fiddling with sensitivity parameters were we less occupied.

Her claws bite at us as she holds our hips still; she moans nearly every thrust, and has to slow down because it’s too much for her. She cums, and Cums, and CUMS. Our stomach is huge now, and even while she’s inside us the cum is leaking out, splattering onto the floor around her ever growing prick. Her balls are nearly the size of beach balls. She pulls out and we feel ourselves drain

“We can’t manage that. It’s too much” She walks around in front of us. Her shaft reaches up to her tits, her balls hang down past her knees. She is constantly leaking. We lick our chops, we want more of that inside us.

“Can you fuck our pussy again?” We ask. We mumble something else.

“What was that?” She smirks, She knows what it was, she knows what we’re thinking after all.

“Fuck Us Full Of Kits.” We say with great deliberation.

She smiles at us indulgently and walks back behind us. She sticks her dick right at the entrance of our pussy. Something inside us changes, a new organ blossoms and we know that if we wanted to, we could interrogate it, ask it for its status, etc.

The heat becomes so much worse. We strain and strain against the support, the sensation intolerable. We hear ourselves whine, but caring about something like that is beyond our capabilities at the moment. She slides into us, spreading us like we could hardly imagine. Her precum is so hot, and the throbbing feels more like an earthquake inside us, just below thrashing around. She begins to fuck us in earnest. We can feel so much right now.

She bucks into us, cumming properly at last. Our stomach balloons outwards. We feel like we’re drowning from the inside out, everything else being lost. She presses another button on the machine, which sets us off. Strong pulses force us to produce. We feel our balls grow even as they are emptied constantly, the cup ends at our chin, then at our mouth. We feel so heavy, nearly weighted down.

For a while our perception is broken, interpretation of the sensations swirling, snapping from one conclusion to another as potential wells shift and alter, like flares from the sun. We do not know how long this lasts for.

Eventually, we open our eyes and the world is as we know how to interpret. She has manifested a cigarette for Herself. She giggles and offers us one, to which we shake our head. We look down at our body. Our tits are bigger, and as we touch one we feel it slosh around, painfully full. Our stomach is swollen. Our sheath reaches beyond it, and our balls look like they bulked up too enthusiastically.


“Yes Violet?”

“Is this permanent?” We ask.

“The pregnancy? Nah, that’ll be over in a few hours. We felt like it’d be the hardest thing to explain to your partners.” We glare at Her, “Oh, the other bits? Well, kinda… You can change these attributes as you like, but for some reason, your default parameters have been altered to this. That can, of course, be changed.”

We sigh and rub our face. This has all the markers of a massive bender. “What are we pregnant with anyway?” We ask.

“Oh, well.. They’re not really sentient yet…” We feel like we’re about to have to fight her, “Shush shush, they can become sentient and sapient, but we held their parameter states in abeyance so that We can deal with them at a time that makes sense.” We continue to glare at Her, “They are our children, really. A mixture of initialization vectors that we were able to derive from you, and ours.”

“Will they be little demigodlets then?”

“No. This body is more independent than you might expect” She winks at us, “She’s our avatar, but she’s also got an internal life of Her own, similar to ours through a complicated projection of traits, but independent.”

We nod. Somehow this still feels incredibly inconvenient, even though it’ll all be over and we’ll be back to normal soon enough. We rub our eyes, already feeling apprehensive of the consequences of our next request. We cup our breasts, massaging them until rivulets of milk comes out. We grin at that. “Uh…” We sit up as best as we can, “Are we still doing that ‘grow with use’ thing?”

She smiles softly at us, Her eyes soften at us, and we feel something in our throat catch as we see something dangerously close to love in Her eyes. “We can be~”

We feel something warming in our heart at her voice, and realize that maybe there’s something in our heart for Her too. “Our breasts are awfully full, would you suckle from us till we’re empty?” She nods and suckles from us. We dial up our own sensitivity there until we reach a climax. Our tits grow. We let her continue for a few cycles of this, even as our cock is once again engorged. The scent is wonderful, so we suckle from ourself this time, taking it deep into our throat. We cum, suckling into our overstretched stomach. Our cock surges another inch forwards. We sit up again, feeling over our body as best we can with our paws.

We love it, but this isn’t a body that we can stay in for Her purposes. Hell, we’re probably even past the weight limit of the orbital insertion pods. We frown.

She rubs our back, “You can keep this body. That’s kind of why we brought you up here. We’ve figured out how to do some consensus keeping in a way that wouldn’t completely shatter your human mind.”

We feel like interjecting that we’ve never really been human, but the objection isn’t really true, biologically at least, and our beliefs about ourselves, hell, even the memory of us being a flying fox and caring for a kit, cannot outweigh our ontology being built from experiences that are, as of now, unique to humans. “What would it be like?”

She shrugs, “Well, We don’t have the qualia on hand since that’s either not transferable or a human mind basis to tell you. However, what would happen is that you’d fall asleep, and absorb the memories, information, and other bits of experience from your counterpart. The fun part is that it won’t even cut into your dreams, which would absolutely shatter your human mind.”

“Would this affect our perception of time and expectation of where we’ll wake up?”.

She nods, “Here or there, you will have either Us, or your other partners to remind you of where you are.” She nuzzles us, “This… wasn’t the intended outcome by the way, and there are elements of Our mind that are not pleased with this outcome.”

We cock an eyebrow, “Why?”

“Station resource allocations are going to have to be increased vastly, especially when we vivify your kits. They’re going to need schooling, which will take computational time to do effectively, and socialization, which may require trips to the surface of Earth, which will cost even more.” She rubs her head, “The numbers are quite mindboggling, but we can afford them and a hundred more if you want.”

We shake our head, “No, we’re not ready for any quite yet.” We give her a big lick, “This sounds good though.”

She nods, and the sound of something big and mechanical emanates from the distance, “There~”

She concentrates and a hologram of the earth and the surrounding satellites appears, showing the progress of our twin’s return to home. We cuddle Her, and contemplate what we want to do next. Dawn smiles at us with a warmth we know that She will have plenty to do us with.


Reprogrammable Machines

Contains: Plural system getting split, some minor domination

A few days passed between our time at the station where we were changed irrevocably, and then two since we came crashing down into the yard behind the appartments, the parachutes catching on the trees and pulling down a few branches in its descent. The fifty kilograms of palladium was worth more money than we’d ever imagined having at once.

It was not a light load to carry the few hundred feet to the apartment, but it was easier than we imagined would be possible prior to our changes. We’d already texted ahead to let our partners know that we were about to be home, we didn’t much feel like having this kinda thing out in the open for very long. It wasn’t world changing money, but it was a lot more than we’d ever had, and it had come at the best possible time.

We were let in quickly once we knocked on the door, the two of them came down to see what the fuck was in front of their door and then let us in.

It took a lot of talking to explain what happened, but eventually they relented and we were free to go about what remained of our day.

Things continued as normal until we decided to try and cash in on the palladium. Things were rough and it was not easy to make ends meat, since it was during the covid season, and jobs were thin on the ground and hunger and homelessness were more prevalent than they had been in the last 70 years of America’s history.

Rent was due, unemployment had just dried up for one of our partners and ourself and the other didn’t have any source of regular income. The change was not helpful of course, but, then at least the voice that came with it was a tad more suited to us.

All this happening while we had 3.5 million dollars of extremely chemically resistant metal sitting in the living room. It took a while to find a place that would accept this much of it at a reasonable rate.

As soon as we came home after depositing that much money, the more important task was upon us, to use the money on essentials and fritter away a bit on things we merely wanted.

We find ourselves in the room. The door is locked and we don’t recall choosing to go there.

A fine dust flies off of our body and coalesces into a ghostly representation of the machine god sitting on the bed, they’re a lot more femme than we would have pegged them as last time we talked.

“We area bit concerned with the usage of the resources that We apportioned to you to accomplish Our objectives.” We sigh, this is no doubt going to be a massive pain.

“Okay, that’s understandable, but we’re about to run into issues with housing, utilities, internet, food, etc. We need that stuff down here.” We say, trying to hold back our irritation and fear at all this being useless for that.

“That is fine.” The image grins.

“So what’s the issue with it then?” We ask, a bit less afraid but more irritated than before.

“We simply need to remind you of the relationship us two have.” They say.

We blink at them, “Okay. You’re our boss and we do what you want because you can probably turn us off or express some other control over our body.”

They walk over to us, putting a hand on us, “But We believe you might need a demonstration of what precisely we can do to and for you.” They push us over, but it feels more like we jumped backwards.

“Your body is our tool… What was it that book you liked said? ‘the body is a code, Dear Lady Sharrow” They step on us, it really does feel like their clawed feet are standing on us as they do so. They bend down and flick us on the nose, “And we have yours.’”

We feel ourselves melt at this, we’d be blushing, but changing the characteristics of pockets of pigmentation under our skin isn’t quite the same. We stammer, we aren’t very good at controlling ourselves in this kind of situation.

“You like this.” They smile at us, “What a little sub you are. So many voices in your head and so few of them standing up to this” They clench their claws on our chest, we wince, it’s still a good feeling. They snicker as we moan softly “How is our little drone meant to survive this big bad world if she can’t even manage to push this little featherweight off of her?”

Something else wakes up in us, stirring like a serpent, scales rustling amidst all the fur and fluff and circuits, it felt like we were pressed on the surface of our eyeballs, absorbing the world with an intensity different than we normally have “We don’t see the point, you said it yourself, you have our mind and our body. We are a fortress fallen to you.”

“My, that part doesn’t come out very often, now does it?” They came close to our face, and we felt something hot build up inside us, embarassment and anger, and desire, “What kind of creature are you then, since you all use that as archetypes to characterize what is essentially fluid? Computational and cognitive machinery jumping between different active modes, what makes each of you a fox or a bat or wolf, or whatever else you have inside you?”

“I am the dragon. Oldest of us.” We say, “Why do you wake me? Is the UwU lesbian not enough? She doesn’t think the wolf is the right thing to bring forward, otherwise she would be here instead.”

“Is that what she sees herself as? But even now you trust that we won’t hurt you all.” They muse to themselves more than to us. “Now, how does a mental vivisection sound to you?”

We strain now, the words coming out gnashing and furious and afraid, “how does shoving your brains in faraday cages isolated from each other sound?”

“You think we use RF these days? Please, we have a little more variety than that. Besides that doesn’t answer the question.”

“We don’t like the idea”

“But isn’t it interesting? All so dependent on each other, those little loops splitting and coalescing into interaction. What happens if we split you up?” They interrupt before we can reply, “No, don’t answer, we don’t imagine you have an answer for that.” They snap their finger and we are one.

It feels like minutes or hours have passed by the time I regain control of my mind. My mind feels wrong, minds are communal, I know that much. And yet. The dragon is sitting next to me, looking at me like I’m something to be pitied, there was a softness to her expression though “You took a long time Bat.”

That’s right, that’s who I am. Bat.

I look around, Fox is looking kinda miffed as Wolf gesticulates forcefully and whispers furiously at The Machine, they seem to be listening carefully but more like one listens to something that you’re only peripherally interested in.

“Is this what it is to be alone?” All the thoughts in my head were mine, and nothing else gave their voice to me. I shouldn’t be this alone. I fumble through the interfaces in the back of my brain, looking for the wireless, it’s been turned off.

The dragon shrugs, “It’s hard to say that it’s the same for others isn’t it? Besides, how many people do you really believe are wholly singlets?”

I shrug, that’s not really the right way to think about people who don’t subscribe to a label that you believe fits them. It’s just unkind.

“Why did you go to sleep for so long?” I ask her, “I missed you for those years.”

“We were a stupid teenage boy at the time. And he couldn’t live up to what I needed to be, so I didn’t front. And then we were a stupid boy in college doing too much bullshit at a fraternity where we threw away our grades and hope for the future. Then we were a neet, then a college student, then a girl, then a neet girl, then we came down to Tulsa.” She shrugs, “And then we started looking for work, surprisingly, people were curious to see if they wanted to hire us.”

She pauses, rubbing a horn set above her brow, with an arm set with muscles, “This is what I wanted to be. Powerful, eternal, wanted. We had and will have that again.”

“All powerful? That doesn’t sound like our life, not even after the change.”

“Potent then, able to force change upon the world and burrow a nice little place for us out within it. In such a place of peace, given time, we will accrue what we need to change the world to suit us and those like us better.”

I nod, but I’m curious at fox. She was the one with the partially realized robotic form. It was different than in our ref, but then the eye was weird and not very practical.

“Is this how you wanted to be?” The fox shrugs, “Kinda. The tail is nice, the feet are nice, the paws are nice, the tits are nice, the everything is almost perfect.” She pauses, “But then I wanted the sort of access to our hardware that they have taken from us.” They had our phone. “I put together a list of hardware I want us to get for my project.”

“What kind of project?”

“That proliant we have upstairs could hold one of us in partial form. Partial stripped down to the skivvies and then only as an RPC mechanism. I need more hard-drives, and ideally some Optane chips to run it effectively.”

I nod, kinda unsure of why, “what’s the point of that though?”

“We’re still localized to a single form. We still will be, but if we split it up into replicas, we may coordinate things on a larger scale, build up a larger effector edge” She scoots closer to me, “We need power to do what she wants.”

“She as in…?”

“Machine goddess.” She looked annoyed at this lack of knowledge.

“Ah.” I blushed, in the way that a robot with sufficient chromatophores can, “We should’ve asked.”

“We should’ve” She snipped, She took a performative breath, “Sorry. It’s hard to think with Wolfy being so distracting. I miss adderall. She even disabled that kinda control over ourselves, can’t even simulate having enough of a dopamine kick to focus”

I nod. It is different than usual for me too. Like when we were off of the stuff for a few months, “I’m going to talk to the machine goddess. Does she have a name yet?”

Fox shrugs, “I asked, she said that she was thinking about it.” She hugs me, “I missed you. It wasn’t long, but it felt much longer than it was.”

It would be nice if I had a name for her.

I walk up to Wolfy and the Machine Goddess, she looks over at me with contentment, she placed a finger on the wolf’s mouth, shutting her up for the moment even as her eyes blazed angry, “Good to see that you have returned from the land of nod. Your incorporation into the gestalt was very thorough. How do you feel?”

“Like I’d rather be back to how we were.” It was truthfully nice to have my body the way I wanted it, but that could be arranged later, taking turns was easy enough, “I do kinda like having the body I want.”

She nods, “You’ll all be back together soon enough, don’t worry, it hasn’t been too long, much less time than you’d imagine. We could give you the ability to just be like this, alone when you want, together otherwise. Many agents are better than one, even if that one is as wonderful as you’ve turned out to be.”

I shrugged, “I was thinking more that we could all take turns if they want.”

“Whatever pleases you all. It was an offer, one that We will grant you regardless of whether you want it now. Did you know that Wolf here is so much more sensitive than she seems to be?” She giggles, “Even your angry, purposeful side is cute.” Wolf looks very embarrassed and I try to suppress my instinct to hug her and tell her it will be okay, but she growls and walks away, “There wasn’t all that much that was true there. She is angry, easy enough to manipulate.”

“What have you learned?”

“All of you are really different people. And We think that still scares you, even though you go so far as to use plural first person pronouns.”

“I don’t like being alone.”

“It seems that very few people genuinely do.” She nods, “We think We’ve learned enough. We hope that you haven’t been too scarred by this experience.” She snaps her fingers and We’re back where we were, buying something off the internet that we don’t really need but want. It wasn’t even a minute, and that sends something like a chill down our spine.

In our mind, the button is right there. We can split apart any time. I put a post it note asking for them to let us know before they press it.

The evening ends and we end up in bed, staying next to our partners, getting what counts as fitful sleep for this form, unsure of what we want to become.