Press "Enter" to skip to content

Posts tagged as “Blogging Every Day”

[twenty twenty-four day fifty-eight]: the seven-part story test

centaur 0

So I’ve developed a new tool for story analysis that my co-editor on The Neurodiversiverse, Liza Olmsted, called “your seven-part story test,” and it fits in one long sentence: “Who wants what, why can’t they get it, what do they do about it, how does it turn out, why does that matter to them, and what does that mean for the reader?”

This six-part test is an adaptation of Dwight Swain’s story question “Who wants what and why can’t they get it?” as well as Vorwald and Wolff’s pithier but less useful “What happens?”, called the Major Dramatic Question (MDQ) in their book “How to Tell a Story.”

Now, V&Q unpack their MDQ into the broader questions “What does my character want? What action do they take to get it? What keeps them from getting it? Who succeeds or fails?”. Like many writing coaches who have their own language for similar ideas, I think both Swain and V&W are tackling the “Major Dramatic Question”, just from different angles - but “how it turns out” is a key question not encapsulated in Swain’s version, and I think it helps us understand what is going on - or should be going on - in a story.

Ultimately, I think a story is an engaging and surprising case, in the case-based reasoning (CBR) sense. For those not familiar with CBR, it’s a reasoning technique back from the days of symbolic artificial intelligence (AI), pioneered by Janet Kolodner, the leader of the AI lab where I was trained (and my original thesis advisor). A case, in the traditional sense, is a labeled experience, which is marked by what problem is being solved, what solution was applied, how it turned out, what lesson it taught, and how we might remember it.

Well, in the age of content-addressable memories and vector databases, we worry less about labeling cases so we can remember them, as the content itself can help us find relevant cases. However, it remains important to analyze our experiences so we can better understand what happened, what we did, how it turned out, and what lessons that taught (or should have taught) us. And the last two are related, but different: what happened are the bare facts, but the same bare facts can have different meanings to different people that experience them - or to different observers, watching from the outside.

Think of a woman in an abusive marriage. What she wants is a peaceful life; why she can’t get it is a husband who’s a Navy SEAL with PTSD. Let’s say what she does about it is try to kill him, and how it turns out is that she gets away with it. But what does that matter to her, and what does that mean for us (the writer, the editor, the publisher, and the author)?

Well, that same outcome could matter in different ways. Perhaps our heroine gets to build a new happy life away from a man who abused her - or perhaps our heroine is now living a life of regret, with a child that resents her and feelings of guilt about killing a man who couldn’t cope with his wartime trauma and needed her help. Because the truth of it is, no-one should have to put up with domestic violence - but a small percentage of people who struggle with PTSD end up acting out, and need help to deal with their trauma.

There’s no right answer here - a skilled author could present a spectrum of situations in which most of us would say either “get them help” or “girl, get out”. But if the author shows our heroine murdering their husband and getting away with it, the story is implicitly endorsing murder as a solution for domestic problems. Conversely, if the author shows the heroine forgiving violence in an attempt to get the husband help, the story is implicitly endorsing women enduring domestic abuse. Not only is there no right answer here, there’s no good answer here - which might lead you as an author to question the whole setup.

That’s why it’s really important to step back and think about what you as an author are endorsing in your story - and whether you’re comfortable with that message. Despite what some writing teachers will tell you, you’re not the god of your story: you’re playing in a playground of your own making, but the materials from which that playground is fashioned - people, places, events, actions, reactions, and emotions - are all drawn from the very real world in which we live, and stories by their nature communicate messages about that real world to those who read them, even if the events in the story are purely fictional.

(This principle of authorial endorsement extends to the editor, publisher, and even the reader as well. There were many good stories submitted to The Neurodiversiverse that we chose to reject because of their implicit message - for example, we wanted our anthology to be empowering, so we didn’t select some powerful stories in which the character’s neurodiversity helped them communicate with aliens, but didn’t help the horrible situation that they were in; these stories might be a great choice for a horror anthology, however). 

But the point can get lost if you start asking a lot of unconnected questions about your story. That’s why I like the idea of the unified MDQ, and I like the expression of that in Dwight Swain’s three-part question “Who wants what, and why can’t they get it?” But that three-part version is not enough, and expanding that question into a single phrase that incorporates the important elements of action, outcome, impact and meaning turns it into my seven-part test: “Who wants what, why can’t they get it, what do they do about it, how does it turn out, why does that matter to them, and what does that mean for the reader?” 

The rewards for thinking through these questions are great. Thinking about how the story turns out matters to the protagonist creates options for tweaking the ending (or the material leading up to it) for greater resonance; and thinking about what meaning the story delivers for the reader creates opportunities to weave that message through the whole story. The seven-part story test can help us create stronger, more impactful, and more meaningful stories that make more sense and feel more satisfying.

So, to unpack the seven-part test further:

  • Who? Who is the protagonist of your story?
  • Wants what? What’s their goal, and why are they motivated to seek it?
  • Why can’t they get it? What’s the conflict in the story? Is it derived from a classical antagonist, or is the conflict based on internal or environmental factors?
  • What do they do about it? What action does the character take (or fail to take, as Hamlet fails to take action for much of his story)? Ultimately, most good stories are about what people do when facing conflict, so they should not be wholly passive - they should have some agency which affects how the story turns out.
  • How does it turn out? With the exception of vignettes that are all atmosphere, we want to know the outcome of the protagonists’ action. Did they succeed? Did they fail? Are we left with a situation that’s definitively not resolved (as in the ambiguous endings of Inception, Cast/Away, The Sopranos, or John Carpenter’s The Thing)? Any of these are acceptable endings (though a definitive lack of resolution is the hardest trick to pull off) but you as the author need to pick one.
  • Why does that matter to them? The ending of Cast/Away is a great example, in that our uncertainty about what the main character does next is actually symbolic of the main character’s situation. It matters to the main character that they are in a state of indecision, because that indecision represents what they lacked when cast away on that island: freedom of choice.
  • What does that mean for the reader? Regardless of what you choose to the previous questions, you should think through the implications of what that means for the reader, and whether that’s the image you want to present for your story. While you aren’t the god of your story, you are the playwright and stage director, and if the message of your story isn’t what you want, you can just change it. 

Overall, I’ve already got a lot of good mileage out of these questions in the new series of stories that I’m writing (which I’m variously calling “The Porsche Xenobiology Stories” or “Tales of Failaka” depending on which planet I’m writing on this week). By asking these questions, I’ve been able to reformulate my endings to focus not just on the outcomes of the character’s actions, but how it matters to them, which makes the endings more satisfying; and also to focus on what it means, which has enabled me to make the stories more cohesive, as well as inspiring ideas for new stories.

“Who wants what, why can’t they get it, what do they do about it, how does it turn out, why does it matter to them, and what does that mean for the reader?” It’s a short, seven-part story test, easily compressible into a sentence that can be used to interrogate your story, and it’s been very useful for me; I hope it is useful for you too.

-the Centaur

Pictured: Loki, and in the background, the reading "pile" for a writing book that I'm working on called "The Rules Disease." Yes, it has filled most of a bookshelf by this point - there's a lot of writing on writing.

[twenty twenty-four day fifty-seven]: how do “normal” people manage?

centaur 0

So I’m confused: I know I’m a bit weird, but I stopped to think about the supposedly "weird" way that I do things and I genuinely do not understand how “normal” people manage it.

So what you see above is my collection of genre T-shirts. I love genre T-shirts and wear them most of the year - as my shirt in the summer, and as my undershirt in the winter.

I used to think this collection was excessive; most of the other people I know don’t have near as many themed shirts, just a collection of normal clothes.

But I started pulling on that thread (ha, ha) a bit and it just didn’t make sense to me.

SO what you see there is something like 300-500 shirts in my closet. I didn’t count them all, but I estimated by counting a few piles and extrapolating by the number of piles.

But if you wear a shirt every day, this is only enough shirts for roughly a year. And I know from *ahem* considerable experience now that even rarely worn old T-shirts, which are typically made from better fabric than modern T-shirts, last at most 20-30 years.

Now, between science fiction conventions, travel, and very occasional clothes shopping, I purchase maaaaybe 10 or so T-shirts per year, which I thought was an excessive habit.

But over 20-30 years, this adds up again to 300 shirts … so by the time that I’ve worn out all the shirts in my collection, I will have purchased enough shirts to fill it up again.

Now the conundrum: most of the people I know don’t buy a lot of t-shirts, and they don’t have a huge library of clothes. So how are they not wearing through all their clothes all the time?

Now, I know my wife buys a lot of clothes (mostly at Goodwill), but she’s power tool girl, and her clothes rapidly get worn out or covered with paint and later used as rags.

But the friends that I know who DON’T seem to buy that many clothes ALSO have a similar strategy. One of them called it “the circle of shirts”: First it’s a nice T-shirt, then it’s an undershirt, then it’s a gym shirt, then it’s a yard shirt, then it’s a rag.

But if people don’t have a huge library of shirts, and they’re not buying a buttload t-shirts, why aren’t they going around in tattered rags all the time?

What do “normal” people do? Go to Target and buy white T-shirts every week, as the six pairs of shirts and undies that they have rapidly disintegrate from the rotation?

I genuinely don't get it.

-the Centaur

Pictured: my collection of T-shirts, some of which do eventually get retired from wear.

[twenty twenty-four day fifty-six]: code rots

centaur 0

Only six months have passed since I last worked on the Embodied AI Workshop website, and now the code will not compile in a horrible mess of broken dependencies. I have tried two or three ways of installing it, including in place, from scratch, and even on a Parallels instance of Ubuntu in case macos was the problem. Nothing works. As a last-gasp effort, I plan on creating an AWS instance, in case Apple Silicon itself is the problem (I suspect it is, as one of the libraries has no Apple Silicon binary packages, and the instructions to recompile from source are roughly five years out of date).

But software is a mess. Occasionally you get something that's awesome (like Python - or Rust! Installation of the Bevy game engine was smooth as a dream) but more often things explode in a mess of unresolvable dependencies, and you're stuck between Apple locking everything down, Windows becoming spyware, and Linux not running anything you want at all.

I'd weep for the future, but I'm too busy hiding from it.

-the Centaur

Pictured: My software consultant, deciding discretion is the better part of valor. Actually, up top Loki has seen the installer for the rock border in the French Quarter, and below he is hiding from him.

[twenty twenty-four day fifty-five]: like it always was that way

centaur 0

According to legend, the man who built this house died in this courtyard. Well, technically, he's the man who oversaw its most recent renovation; the core of the house is almost 75 years old, and on plans for the renovations we found in an old drawer, the courtyard appears to have been a swimming pool. Regardless, when he passed, this big, rambling old house soon became too large for his widow, who moved out, leaving it empty for quite a while, enabling us to get it for a steal during the pandemic.

While we wouldn't have turned down a swimming pool - we were actually more concerned with getting away from the drought and the fires and the burning than we were about where we were moving to, other than "big enough for an art studio and a library" - we much prefer the courtyard, which we've started calling "The French Quarter." But the excellent design of this house - architecturally, most of the windows have an excellent view, and the landscaping slopes away from the house almost everywhere to keep it dry - has a few minor warts on it, including the courtyard: under the overhangs, nothing will live.

The feature that keeps the water away from the house - the landscaping and the big sofits - makes it hard for anything smaller than a bush to live. When we moved in, and put in that little sitting area using paving stones and chairs from my late mother's old garden, I dug up the monkey grass where I put in the paving stones, and used it to fill in the areas you now see filled with rocks. That grass lasted about a season, and by the next year, you couldn't even tell anything had been planted there. It was just dust and weeds, and even the weeds frankly weren't doing too well themselves and could have used a watering.

So, kind of in desperation, we hit on the idea of putting in more stream stone as a kind of a border, which the former owners had put around the fountain. This is something our termite folks have actually been asking us to do around the whole house to create a barrier, but we decided to get started here.

And I guess the surprise is that this stopgap effort looks really good. We sort of expected that it would have looked better than scraggly weeds and dead dirt, but, actually, it looks REALLY good, as if it was always supposed to have had a stone border around the outside.

I guess my point, if I did have one, is that sometimes you do things that you have to in order to patch a problem, but if you pick the right patch, sometimes it seems like it was on purpose.

-the Centaur

Pictured: um, well, I think I said it.

[twenty twenty-four day fifty-four]: totes cheatin it, yo

centaur 0

I now FREELY admit that what I'm doing with the blog is posting, as much as possible, easy posts so I can get ahead on my buffer. Legendary cartoonist Bill Holbrook started the longest running daily webcomic, Kevin and Kell, after he'd built up a multi-week buffer, a process he's still continuing today.

SO! I find it better if I bunch up posts so that I am working on the same thing for a while - this is not just better for mental focus, but also for dealing with problems with your computing infrastructure (it is REALLY frustrating to try to do a quick post when the internet decides to gum the fuck up).

And therefore, I'm doing short, brief posts on the blog, while I build up a library of longer posts, hoping that at some point I'll get a rhythm where I'm always 2-3 days ahead, and can thus put the effort into new posts that is harder to come by when it is 145am and you need to both blog, draw, shower, and let the cat in.

-the Centaur

Pictured: the late night ritual: eat some pound cake, drink some soy milk, read a difficult book. Currently, I'm working through Pattern Recognition and Machine Learning, a book which is available online, and has been almost as useful to me as Probability Theory: The Logic of Science, also online.

UPDATE: This was actually day 54. So I was ahead of where I thought I was.

[twenty twenty-four day fifty-three]: you can’t predict edits

centaur 0

So I'm done with the bulk of my first-round edits for The Neurodiversiverse, and I can report that you can't predict how long an edit letter is going to take. The easy ones end up with a hundred line edits, and the hard ones go smooth as glass.

-the Centaur

[twenty twenty-four day fifty-two]: master of all he surveys

centaur 0

When we finally get superintelligence, I want it to explain to me what cats are thinking. Loki clearly wants something, but it isn't clear what it is. He wants your attention, he wants to go outside, he wants to go somewhere not too far from the house, but he doesn't seem satisfied with you just standing there, nor with you bending down to scratch him, nor with you going anywhere else.

What do you want, for me to just stand here, so you feel safe rolling in the dirt?

There's no pleasing some people.

-the Centaur

Pictured: Loki, in the external cat condo which we got as part of our successful "cat sitting solution".

[twenty twenty-four post fifty-one]: worse than useless

centaur 0

So I recently came across a tutorial for game development that seemed pretty interesting, so I decided to give it a try. The tutorial was in Rust, a new language that I’d been hearing about, and so I thought it would be a good idea to learn that too.

I even found an online playground,, which lets you try out the language in the browser, much like the Go playground: I quickly started trying out some simple functions that I use a lot in a variety of languages …

… and got stuck right away on Rust’s lack of function parameters.

There’s a whole blogpost on why this antifeature is actually, in the minds of “Rustians,” is a good thing, but even that admits that the alternatives that the language provides “might seem worse than useless.” 

I’m sorry, I’ve gone through this kind of Stockholm Syndrome thinking before, where users held hostage to the good features of a language start coming up with excuses for its warts. For example, take the Go programming language. Programming Go felt like a breath of fresh air, but it was literally worse than useless for my use case - I had to write the software I wanted in C and then call it from Go. And the language itself had terrible warts from the terrible choices made by the core Go team - at the time I used it, no support for generics, endless proliferating error checks, and worst of all, an overly verbose unit test style which threw out everything we’d learned from Java and Python about how to write tests using semantically meaningful methods like assertIsNotNone or assertIsEmpty.

I’m not saying I’m not going to not learn Rust, nor that I’d never use Go again. Hey, one day I may be a convert! But, based on what I know now, I would never recommend these languages to anyone. My recommendations for programming languages remain the same "Big Three, Plus One": 

  • For most tasks, use Python. 
  • If you need speed, use C++.
  • If you work with a very large enterprise, consider Java.
  • If you’re working with a system that uses a specific language, use that language: C in the Linux kernel, Javascript on the web, Swift in iOS, Java in Android, PHP in WordPress, C# for Unity, and so on.

Many of the alternative languages that you can use - Go, Rust, Scala, Clojure, even my beloved Mathematica, Common Lisp, or J - are actually worse than useless for most tasks, for two reasons. 

  • First, most of them are less baked than the Big Three, and are less ready for developing real applications; they’re not chosen for their fitness to purpose, but instead chosen by zealots who are trying to make a point. Don’t be a zealot trying to make a point.
  • Second, working on these other languages actually detracts from making the Big Three better. The C++ of today is almost unrecognizably usable compared to when I first started using it, and Python and Java are rapidly adding new usability features as well.

That doesn’t mean we don’t try new things. C++ has mostly replaced C, and TypeScript is edging out JavaScript; who knows, perhaps, one day some variant of Go or Rust or Swift will become the dominant paradigm. (But, honestly, I hope not).

Nevertheless, I remember talking to a programmer friend about a refactoring I wanted to accomplish, and he angrily sketched out a better build system which could have solved the problem using a Turing-complete constraint language to figure out the dependencies.

I just remembered the famous quote from the creator of ANTLR - “Why program by hand in 5 days what you can spend 25 years of your life automating?” - and handwrote a script to solve the problem in an hour, and got on with my life.

-the Centaur

Pictured: Some of the older programming language books that I have in my stacks, most of which are now worse than useless for getting things done nowadays - though if you really love programming languages and learning how things work, they're more than priceless, now and forever.

[twenty twenty-four day fifty]: almost halfway there

centaur 0

So this is the second 2010 Toyota Prius we've owned that reached 100,000 miles. The one we still have on the Left Coast is closing in on a quarter million miles, if it isn't already there - far enough to reach the moon, if one could drive it (and even if you could, it would take half a year, and +5000 gallons of gas.

We got this car when we moved from the Left Coast after all the drought and the fires and the burning, but needed to leave the old Prius out there as I was still working for the Google remotely, visiting several times per year to perform on-robot experiments and sync with the team.

Now that's up in the air. 200,000+ miles, maybe closing in on 250K - even though we had to rebuild the whole engine at around the 100,000 mark. That gave us the confidence to purchase this used Prius at the 80,000 mile mark - we knew what this type of vehicle is capable of.

This is a completely different strategy than my father used. He used to buy a new car every two to three years, like clockwork, to try to preserve as much trade-in value as possible - and to ensure that the car was reliable. Perhaps this made sense back in the day, when cars didn't last as long, but I'm not sure.

I think it was just a strategy. He enjoyed having new cars, and could afford it. I enjoy having new cars, and maybe we could afford it, but I enjoy being environmental more, and getting a very efficient hybrid car and running it into the ground to recoup the energy that went into its manufacture feels like the way to go.

Now, I told myself that I'd consider trading in the California Prius when we'd driven it to the moon - but my experience is that cars eventually do give up the ghost, either from sheer mechanical weardown (my old Isuzu Rodeo) or from collisions (my first car, the Mustang, and my last SUV, the Pathfinder).

So I'm in no rush, here or in California.

So, congratulations to your first 100K, East Coast Prius. Here's hoping you make it 100K more.

-the Centaur