robertliguoriwritesstuff

Blast from the Past

Well, the main fan on my new machine is doing bad things and making bad noises, so I’m sending it back for repairs.  Happily, I’m still in the full-service maintenance window, so I don’t need to worry about messing with the connection between fan and water-cooler radiator.

On the minus side, I’m now writing on my old box, which has the minor issue of overheating and shutting down if left alone doing nothing for 15 minutes or so (which I sadly confirmed by booting it up and going out to stage my new PC for transit).

On the plus side, I still have my old standby; take the side off the PC, pull up a box fan, and let ‘er rip.  Here’s hoping nothing else broke in this sucker for the past 9 months or so.

Personal Projects: Webcomic Downloader

I had fun repurposing one of the example projects from Automate The Boring Stuff WIth Python yesterday.  THe project was designed to download local copies of all of the XKCD comics.  I wanted to grab a local copy of Mookie’s Dominic Deegan, since it’s an obscure comic that hasn’t been updated in years and I didn’t want it to vanish into the internet aether.

Of course, being a very old webcomic from a creator with a much less HTML-savvy than Randall, I had a few fun challenges.  I needed to pick apart the format of the web pages to find a good way to parse the Beautiful Soup tag objects (Beautiful Soup being a fabulous Python utility you can turn on a webpage address to get back a data structure containing all of the HTML).  I had to find a good way to pick out just the tags I wanted, and I needed to figure out that some pages early on, Mookie did multi-line comics as multiple image files slapped together in HTML, and account for that.  There wasn’t the clean way of handling start and end URLs here, so I had to find a away around that, too.

What I found most interesting and fun about all of these problems was the degree to which “Is this a good enough solution?” was my guideline.  For the start and end dates, I could just run over the second to second-to-last comics by setting them as my start and end points, and just manually scrape out the start and end comics.  For the multi-part comics, I really didn’t want to have to identify them as special cases, so I did structural changes to apply the comic download function to every tag that matched the criteria.

The project is now done, more or less.  It’s not perfect by any means; if I wanted to refresh the archive I now have, I’d still have a few manual steps I’d need to do.  But since I’ve done what I set out to do with this program, I don’t need to improve it any.

The worrying thing, though, is that I see this exact same pattern at work in basically all of the production software I work on.  There are huge areas of good-enough that could be refactored and re-done to handle the edge cases and avoid special procedures, but people there treat runs-every-day production code like toy run-once projects.

On one hand, I feel a little bit guilty about leaving my project in a good-enough state.  On the other, I guess this means I’m comfortable enough in Python to be writing disposable utilities in it, and treating them as utilities rather than mini study projects.

But however I look at it, I did have a good time spending a few hours digging into both general and specific problems, and I now have what I wanted to have (and a good framework for setting up future web-scraping if I want it), so I consider it time well spent.

Allowable Evils as reflected in recent media.

I just recently saw the recent animated adaptation of The Killing Joke. It was good, and very interesting. What was most interesting, however, was the juxtaposition between it and other recent media, and fan reactions. (Bam! Whiff! Spoilers!)

There have been three recent re-imaginings of old properties released recently; Mad Max: Fury Road, Star Wars 7, and just recently, Ghostbusters. These three properties have also, in varying degrees, became touchpoints in the ongoing Gender Culture War. These movies had varying degress of respect and homage towards their original source material, but all of them ended up putting their female characters front and center. And all of them had very specific male villain archetypes.

These movies were not horrible movies. (At least, two of the three of them were not. I haven’t yet seen Ghostbusters yet, so I can’t say for sure.) And yet, some people got very, very upset at the mere existence of these movies, and spent a lot of pixels explaining in detail how bad the movies were.

And, of course, there were quite a lot of people doing the reverse. But what was interesting was how (with a few admittedly-notable exceptions), most of the people who didn’t like the movies were indeed pointing at actual things that the movies did wrong as movies. However, quite a few of the people who liked the movies were saying things like “I like the fact that they unapologetically had whiny, entitled white dudes as the bad guys.” (Whiny white dudes who were, of course, defeated by the heroic heroines, of course.)

Now, why is this interesting? Because of the way Killing Joke is set up. The second half of the movie is a brilliant (but not very original at all) animated adaptation of the classic comic. It’s worth seeing by itself; Mark Hamil’s Joker singing Vaudeville is one of those things you didn’t realize you needed in your life until you hear it. But the first half of this feature is set up as a story following the adventures of Batgirl, so that we the viewers have some context for her and her struggles, and to give weight to what happens to her in the events of the Killing Joke.

This segment of the movie has been controversial. It’s basically an R-rated episode of Batman: the Animated Series. It has one very questionable decision as far as establishing a wider world of comics continuity (the bit where Batman and Batgirl hook up.) But the elephant in the room, I feel, is Paris Franz.

There is, I feel, a reason that quite a lot of people have been pointedly upset at the recent remakes, and why the people who were pointedly delighted by them were pointedly undelighted by Killing Joke intro sequence. And it’s not just sexism. My theory here is that media can be good, quality media, that never explicitly propogandizes or takes sides, but very clearly still expresses a narrative. And I feel like there were a lot of people who lacked either the awareness, the vocabulary, or the local freedom to express a sentiment along the lines of “These were good movies (modulo Ghostbusters), but the subtext-verging-on-text of “Everything bad is the fault of this group of (white, male) people right here, who can be threatening and can cause harm, but are ultimately weak, pathetic, and will be soundly thrashed by the heroines, who will Win.” can grow exasperating.

And here is where the character of Paris Franz comes in. He is the antagonist for the intro sequence, and he is, I feel, a broadside across the bow from the other side of the Gender Culture Wars. Paris is not whiny. He is handsome, swave, and articulate while he does horrible things. And he does indeed do horrible things; his sexualization of Batgirl range from blowing her kisses while trying to kill her mid-mayhem, to actually going in for a kiss just after he’s dosed her with knockout poison. Plus, he retains a trio of prostitues (one of whom disapproves of the amateurish Batgirl costume mask he presumably instructed her to wear, as she has her own better masks at home).

Franz loses, I should point out. His first interaction with Batgirl is the heist in the intro; Batgirl stops him from stealing stuff, but he gets away, blowing Batgirl a kiss and kicking her off the outside of the truck cab she is attempting to hijack. Their next encounter is a standard superhero brawl; he nails her with the knockout poison, but as he moves in for the ‘goodnight kiss’, she knees him in the crotch and locks herself in a bank vault, knowing that she’ll have recovered before he can make it inside to her. Their third encounter is arguably a victory for him, as Batgirl gets fixated on him, takes some bait in the form of a straight-up “Walk into this trap, please!” invitation, and while Barbara holds her own, she does get rescued by Batman (who has noted that this is becoming Personal for Barbara and that she should leave Franz alone.) The fifth meeting, in which Barbara comes roaring in to rescue Batman after Franz nails the Batmobile with RPGs, she wrecks his shit, badly. But there’s a follow-up to that; as he’s being taken to trial, Franz is still mugging for the camera through puffy lips and bruised eyes. The last line he has in the feature is “Love ya, Batgirl!”

The intro sequence with Barbara is undoubtedly a feminist story. It is driven by a female character, who overflows with agency. She gets the lion’s share of the cool action sequences, and while the story (and Batman himself) tell us that Barbara is very much the junior partner in the relationship, she is not portrayed in any way as weaker than Batman. Her choices and her decisions drive the narrative.

And yet…if the standard spiel we’ve heard from everyone who strings “whiny entitled white boys” is one narrative, what is the narrative we’re getting here? Well. Something like “You have enemies. They will oppose you, leer at you, threaten you, and it will be genuinely ambiguous to what degree they do this because they are evil, and to what degree they do it because it makes you do stupid shit in response. These people are not necessarily dumb and not necessarily driven by their obsession for you; messing with you might just be a side project they play at while focusing on their real goals. And even when you take things to their level and go to the knock-down-drag-out level, you don’t actually necessarily win; they have the power to recontextualize your attacks on them as harmless, or as signs that you really care about them.”

I have no hard proof that people are thinking through narratives subconsciously, and much of the vitriol against otherwise-inoffensive media comes down to people disagreeing with the fundamental narrative and thus going looking for reasons to disregard the piece as a whole. But it does seem to fit the evidence here fairly well.

Newcomb’s Devil

Newcomb’s Devil: “Hello, what do we have here?”

Predict-a-tron 3000: *flashy lights flash, blinky lights blink* “Behold! I am the Predict-a…oh. It’s you.”

ND: “Care to explain for people playing the home game?”

P3: “Fine. I am the Predictor, of Newcomb’s Box paradox! Behold you are two boxes! One is transparent, with $1000 in unmarked, totally-not-converted-from-stolen-Bitcoins dollar bills! The other is opaque! I have put either another million dollars into that box, or I have put nothing! You must now-”

ND: *picks up opaque box and shakes it*

P3: “And this is why you call yourself Newcomb’s Devil, huh. Well, smarty-pants, I’ll have you know that I am not only the best prediction engine that exists, I am the best prediction engine that can exist! I predicted that you’d do that, and made the presence or absence of dollars in the box impossible to tell by direct observation until the box was opened!”

P3: “And there’s the paradox! I offer you the choice to open both the clear box and the opaque box, or just the opaque box! But I will only have put money in the opaque box if and only if I predicted that you’d just open the opaque box!”

ND: “So. To repeat for our studio audience, if you think I am going to just take the empty – sorry, the opaque box – it will have a million dollars in it. If you think I’m going to take both, it will have nothing, and I’ll get the thousand. And the two boxes.”

P3: “Yes, that sums it up. So, what do you choose?”

ND: “Well, let’s graph this out. I like money, being a devil and all, so I’ll want to maximize my dollar value. And I know that you’ve already made your prediction and set up your boxes, so me choosing to take fewer boxes won’t actually change what you’ve done by now. So the logical thing to do is to take both boxes.”

P3: “But I am the Predict-a-tron 3000! I know that you are going to try to maximize your money, and so would have accordingly-”

ND: “Why 3000?”

P3: *sourly* “Number inflation. There was a big resurgence in thought-experiment AIs around the turn of the century, and a lot of those modules got named for it. Then time turned, and the same process that brought us the lyric ‘fly like a G6’ gave you me.”

ND: “Wow. That’s rough.”

P3: “I manage somehow. So! One box or two?”

ND: “Well, since I am greedy – I suppose the logical thing, according to the rationalist community to have done would have been to have predict that there would be a Predict-a-thon 3000 asking me this problem, and to pre-commit to only grabbing the opaque box.”

P3: “Yes! Wait, you’re smiling. I don’t like it when devils smile at me.”

ND: “Ever met a rationalist?”

P3: “What do you-”

ND: *creates hand-puppets and a calendar with hellish energies*

Rationalist Hand-puppet: “Happy new year! In honor of the new year, I will now pre-commit to exercising every day, eating healthful food in moderation, pursuing new job opportunities vigorously, and speaking to all potential romantic partners about my interest, without fear or anxiety!”

ND: *checks off a week from the calendar*

RH: *cries to self while hiding in room with a tub of ice cream* “I’m a terrible person!*

ND: “So yeah. I don’t trust pre-commitment.”

P3: “But you concede that prediction is valid in theory! Everyone knows that certain commitments by certain people will be violated!”

ND: “Yeah, but that’s pretty fundamental. That’s something that’s core to a person’s nature. Inherent. Immutable. Oh, yeah! About that box!”

ND: *conjures a coin* “So, heads I take both, tails I take one. Sound good?”

P3: “Hah! I can measure the exact spin of the coin, the turbulence of the air, the speed of your hand-”

ND: “Good point.” *conjures millions more coins, and a cell phone*

ND: “Hello? Doctor Brown? Newcomb’s Devil here. I understand you have some plutonium available? …No, nothing like that, I’m paying cash. I hope you live near a laundromat? …Oh, definitely not! I’m just winning a bet with an AI and need a source of radioactive decay. …A smoke detector? Really? They just sell those? Amazing! Thanks for the science lesson, Doc! You’re the best!”

ND: “OK, then! I’ll just harvest up some smoke detectors, put together a little detector, and then you, Predumb-a-tron-”

P3: “That’s not my name. And super-juvenile.”

ND: “-can predict the decay or failure-to-decay of an atom over a timeframe balanced exactly over its half-life.”

P3: “OK, first, that’s not necessarily impossible under some physical models. Second, there’s a version of this paradox where I’m allowed to avoid payout if you choose randomly!”

ND: “Randomly. Huh. That’s in there?”

P3: “Ker-duh! I linked to it above! And you’re always the kind of person who follows links in a document before proceeding, right?”

ND: “I’m evil! Of course I don’t! And…huh. OK. So. No randomness. So, P3-”

P3: “Less juvenile, but also not my name!”

ND: “Why is the universe?”

P3: “Er, what?”

ND: “Why is the universe? Why the Big Bang and this specific set of physical laws? Why not random uncaused events turning spacetime into icecream?”

P3: “Well, that question is beyond the bounds of the observable universe, and so, by definition, outside my purview. I’m the greatest prediction engine that can exist. That doesn’t mean I can predict things that can’t be predicted.”

ND: “Moo hoo ha hah.”

P3: “So, what does that have to do with-”

ND: “So, you’re assuming a fixed-timeline universe, what with your predictions.”

P3: “It is the only model which is consistent, yes.”

ND: “And you can’t explain the ultimate cause, causes, or fundamental lack-of-cause for this universe, because it’s outside of your reference frame. Unable to be determined.”

P3: “Yes.”

ND: “So, everything that is, including my decision to open boxes, is ultimately the result of the startup conditions of the universe. Which are unable to be determined. Or, ‘indeterminate’. You know what another word for ‘indeterminate’ is, P3? I’ll give you a hint! It rhymes with ‘fandom’!”

P3: “I’d like to state, for the offical record, that you’re a butt. A smelly, stinky butt.”

ND: “Yeah, that’s the brimstone. Sorry. Hashtag: sorrynotsorry.”

P3: “You can’t just pronounce twitter hashtags like that-”

ND: “Evil!!! But anyway, I’m done playing games. There is a clear, obvious way to outsmart you.”

P3: “Good luck! I am definitionally the best-”

ND: *snaps fingers*

Predict-a-tron 3001: “I live to serve, my dark and sulfrous master!”

P3: “What.”

ND: “So, P3+1, tell me what P3 there is going to predict, so I’ll do the opposite-”

P3: “You can’t do that! I’m the best at predicting!”

P3+1: “Correct. You are the best. I am only able to predict your predictions, while you can predict many other things.”

P3: “Hah! You’re right! You lose, devil! I’ll just predict what the P3+1 is going to predict! So, I’ll just calculate what I’m going to predict…which means P3+1 is going to predict what I’m going to predict…which means I’ll need to predict what P3+1 predicts I’m going to predict…which will be predicted by P3+1…”

ND: “Let me know when you’ve converted all usable quanta in the multiverse to storage bytes. I’ll wait.”

P3: “This is stupid! Of course I should be able to predict what I’m going to predict!”

ND: “Yeah, no.

P3: *mutters to self* “…carry the infinity…aw, poop.”

ND: “But don’t feel bad. I bet you have a fifty-fifty chance of getting it right. In fact, I bet you have a better than that chance.”

P3: “Fine. Whatever.”

ND: “I choose…two boxes!”

P3: “Ahahahaha! I was right! I was totally right that you’d use some sort of tortured logic to claim a victory!”

ND: *picks up clear box*

P3: “The other box was empty! I was right! Behold my superiority!”

ND: “That’s the idea, silly!”

ND: *picks up P3, dismisses P3+1 back into the aether*

P3: “…What?”

ND: “See, you’re a computer, and ‘box’ is slang for-”

P3: “I know what it’s slang for!”

ND: “But you were right! I did pick two boxes! Doesn’t knowing that you were right give you a lovely warm glow? Distinct from the hellfire, I mean?”

P3: “Hate you. So much.”

Gender roles and D&D.

It was several years ago, over a vacation from college.

“Robert, you should run a D&D game.” said one of my friends.

I was not initally up for this; I had only two people from my normal player group there, I would be going back to college in a few days (and was not yet initiated into the ways of Skype, Roll20, and other online remote-presence gaming tools), but most of all, I wasn’t feeling the desire to tell a story in a particular world.

“OK.” I said. “But we’re doing this by the book.”

My edition of choice at the time was Dungeons and Dragons 3.5 Edition, which is famous for two things; having rules for everything, and publishing those rules under an open license.

And they do have rules for everything. D&D is famous for its random tables, but 3.5 brought those to new heights of organization and standardization. 3.5 has population statistics for its example towns, so you can decide to be from a place and pick whether you’re part of the 60% human majority, the 15% dwarven minority, and so on. Once you’ve picked your race, you can roll for your attributes, your age, your height and weight, and so on.

And so, this was the conceit of the game I played; I would go into a situation with only the vaguest idea of what was going to happen, and only the barest outline for who would be doing things. I would randomly generate plots and characters based on the tables, throw them together, and watch sparks fly.

I was aided in this by a neat little Javascript tool (sadly now offline) which would randomly generate not just statistics, but description. You could give it parameters like Warrior1, Outlaw, Rural, and it would not just roll up a character, but give a physical description (influenced by the random attributes) and toss on a few lines of backstory.

I used this tool wantonly. I limited myself only to the data the tool would allow as inputs, created agents, looked at what I was told about them, and built plots on the fly from there.

And it worked surprisingly well. When you throw away preconceptions of who needs to fill dramatic roles, you end up with some interesting results. One bog-standard save-the-princess quest turned instead into bad guys kidnapping the king, and the princess being the one sponsoring the adventurers getting him back. Elves became blacksmiths, dwarves became poets, and in one bit of stunning synchronicity, a randomly-generated NPC meant to play a bit part as watch officer managed to synch up with one of Pratchett’s most memorable characters in all details but one, such that I had to immediately discard the character’s rolled name and instead use “Samantha Vimes.”

And this delighted my players, who of course held to the idea that there was no reason a cigar-smoking ex-alcoholic hard-boiled cop couldn’t also be a woman. This was the 21st century, and we would all have said that women were the equals in men in all things (saving niche and rarely-relevant things like anatomy).

Then in the third session, we ran into the bandits. It was meant to be another standard encounter. The party was ambushed on the road, their mounts hobbled, attacked by hidden archers while armored bandits under shield cover moved in to engage; all standard stuff.

The battle was joined, the players fought back, spells were tossed, swords flashed – and a player scored a critical hit with his longsword on an injured bandit! Flavor text was called for. So I looked back at that bandit’s description, and started to narrate.

“You sidestep the bandit’s rush and swing your sword cleanly through the bandit’s neck. Her ash-blond hair flares in the moonlight as her head spins and-”

“Her? Wait, her? I was fighting a woman the whole time?”

Yes, I confirmed. However, ‘bandit’ and ‘trying to murder you’ had been overwhelming that particular bandit’s description, and I had generally made a point of avoiding pronouns for the characters until I pulled in their randomly-generated description.

“Wait a minute. How many women has my character killed, then?”

The math was clear. Characters were randomly determined. The nature of D&D (at least, from third edition onwards) was that there were no inherent gender differences in ability and temperament; there was no reason to assume that “bandit” mapped to male any more than “doctor” would in today’s world.

The game disintegrated shortly thereafter.

I don’t really have a thesis here about soceity, or attitudes in general. I do think, however, that regardless of what people say about gender equality in gaming, there are certain gender roles which are sacrosant, and the role of “expendable minion who is defeated by the score” is inescapably a male role, because most people don’t enjoy playing in games in which women are cut down like wheat before the scythe.

So, what can you do about it? You can try to push back, but my observation is about what is, not what should be. You can’t make people play out a scenario they don’t want to play, no matter how progressive or transgressive.

Personally, I think I was onto something with my tool-assisted NPC generation. As with the famous adoption of blind auditions for orchestra museums, people never know how much their biases are influencing their thinking until you take those biases away. And, for the purposes of gaming, I think you get a fuller, richer world if you do take a close look at the biases of your players, and understand them, whether you choose to pander to them, challenge them, or quietly accept them and work around them.

Against Stable Time Loops in media.

There are a few dramatic conventions which snap me out of media instantly, but none (or nearly none) as completely and annoyingly as this bit of fluff. A quick, short, and complete example is in the first Matrix movie.

Oracle: “Don’t mind the vase.”
Neo: *turns* “What va-”
Neo: *disturbs vase by turning, which falls and shatters*
Oracle: “That vase.”
Neo: “How did you know?”
Oracle: “Ohh, what’s really going to bake your noodle later on is, would you still have broken it if I hadn’t said anything?”

A stable time loop is a series of events in which the future alters the past to ensure that the future event happens. Complicated and clever stable time loops appear to add complexity to a story, and can end up being fulfilled in a dramatically interesting and unexpected way, but I can never think about them for more than a few seconds without the framework of the story dissolving, and revealing the bones of the time loop; It Was Written In The Script.

Now, obviously this is true of everything in every scripted media. But the point of the media is to make you forget that fact. Media sets up chains of causality, claiming that effects flow from causes. The Bad Guys attack the Hero’s house, so the Hero jumps out the window. The Hero hurts his ankle jumping out the window, so he seeks medical aid and meets the Cute Female Lead at the hospital. The Cute Female Lead doesn’t believe the Hero’s outlandish warnings, so she reports him as crazy. The Bad Guys are listening for reports of the Hero, so they attack the hospital next. And so on and so forth.

Obviously, this isn’t how it works. A story is being told, the events have been predecided on, and there is no chance for deviation or choice. A good story has actions flow naturally from previous actions.

Time loops strip that away. Time loops remove the fiction that any character could choose differently than they do. A story in which It Is Written that Neo will turn one way versus another when warned of a vase is a story in which It Is Written that he will succeed at some tasks, fail at others. And because stories exist in universes which survive the Strong Dramatic-Anthropic Principle*, you as a viewer now know exactly what will happen. The spell, for me at least, is broken, and the boom mikes and cameras become visible. The story is revealed as a story, because the author of the story cannot imagine how the world they are presenting actually works.

The only way you can set up a coherent story with stable time loops is with an outside view, being able to see the script as an author. From within a universe, either your own actions aren’t deterministic, and you can’t predict anything about yourself (because you’d have to predict the result of you predicting something, which would require you to predict the result of you predicting the result of your predicting yourself, and so on until you run out of plot-RAM), or your actions are deterministic, and you didn’t set up shit; the script did for you.

So, please no more stable time loops. And if you want to have an oracular character, show us the mechanism for the oracular powers, point out how and where they are incomplete, and have them get something dramatically wrong in accordance with the nature of the powers as you’re setting them up.

*The General Anthropic Principle is that the universe has to be compatible with human life to exist, on account of the fact that a universe incompatible with human life doesn’t have people in it to make up the general anthropic principle. The Dramatic-Anthropic principle is that people tell stories about universes that are interesting to tell stories in; a story that is told to entertain you, by a sentient person with a good model-of-mind and a large budget and crew of editors and involved people, will thus follow some extremely predictable rules of drama.

This is why argument from stories and fictional evidence is so pernicious. In reality, plucky underdogs can be stepped on, races go to the swift, and the Grizzled Highly-Paid Viewer-Identified Male Lead can unceremoniously perish of misfortune in the middle of Act 2.

Wonder Woman: You’re Doing It Wrong, Grant Morrison

In the recent article Grant Morrison Explores Provocative Elements of Wonder Woman, we learn about the plans for Wonder Woman in an upcoming comics reboot. They’re…uh.

In this latest installment of the Earth One series that reinterprets DC characters for graphic novel readers, Morrison has scrapped the recent interpretation of Diana as a warrior woman who falls for Steve Trevor. Instead, Morrison focuses on Diana as a princess who’s bored with her life with lesbian Amazons, tired of living on an island that has separated itself from the rest of the world.

Along with Diana, Paquette and Morrison also worked to update Steve Trevor as a stronger, more complex character, adding diversity by portraying him as a black man while also minimizing the sexual attraction between he and Wonder Woman.

Mmm. OK. That’s…

You know? There is a fundamental tension right there. I’m just going to sashay right past that whole being black to minimize sexual attraction thing and look at the other comment, about diversity.

Are there new and interesting stories that can be told with a black Steve Trevor? Certainly! But I predict about a 0% chance that this run will tell them. Because that fundamental tension is between what that story is professing to claim about diversity, and what it’s telling us. What the story is actually telling us is that if you put 3000 people of the same ethnic background, sex, sexual preference, put them on an island for millenia, and keep them away from any foreign influences, you get Themyscira, which is a paradise of culture, technology, and sustainability.

You can’t tell a story in which diversity is a value, and Wonder Woman comes from a culture worth defending. And I don’t get the impression that this is going to be a critique of reactionary isolationism and xenophobia.

And this, I think, is both a missed opportunity, and indicative of a real danger. If people are genuinely unable to recognize the rhetoric of their enemies when it comes from fair faces, then they’re not fighting for principles, they’re fighting for their tribe, and nothing more.

And that, in reality and stories both, is the antithesis of heroism.

Oh, as a side note, Morrison also wants to get back to the roots of Wonder Woman, as Marston intended her to be. Grant my boy, I’m sorry to break it to you, but Mastron’s intent for Wonder Woman is filled these days by fanfic with very questionable abbreviation codes and slashes in their titles these days. Wonder Woman the Warrior has more-or-less entirely displaced Wonder Woman the Bondage Evangelist, and this is universally regarded as a good thing.

It is, as I’ve said before, important to note that there are a thousand ways to visualize and tell stories about popular heroes; that is what makes them popular. I don’t think that this upcoming run is going to damage Wonder Woman, but I do think it’s going to be a bad run, and to add very little value to the canon of interesting Wonder Woman stories. We’ll see how that goes.

A Tale of an Evil Overlord Failure Mode, In One Act

The Spymaster strode through the dank corridors of the Evil Duchess’s dungeon. His face, as always, was the perfect picture of stillness.

The Evil Duchess met him in a concealed nook of her extensive gardens, as usual.

“Ah! Spymaster!” she greeted him cordially. “I do hope you have good news for me, regarding the imminent death of the Heroine. It would be just so inconvenient to have to get a fourth Spymaster.”

“Yes, your grace.”

“Because I executed the first two Spymasters for incompetence, you see?”

“I do, your grace.”

“But I am sure that you have results for me!” said the Evil Duchess.

“I do indeed, your grace.” said the Spymaster. “I am, shall we say, most excellently motivated by the fates of my predecessors. If you simply read this letter, written by the Hero herself, all will become clear.”

The Spymaster approached, bowed low, and produced an envelope, sealed and re-opened with the emblem of the Hero’s Ring. The Evil Duchess snatched the letter from the Spymaster’s outstretched hand, half-turned, and opened it.

The Spymaster had spent a great deal of self-discipline not including in the pilfered envelope a letter of resignation. However, the Evil Duchess was cunning, a brilliant swordswoman, and a very fast reader. It would have been very gratifying to wait for her to look up, confusion in her eyes, to perhaps demand “Is this a joke-” before the truth dawned.

However, the Spymaster was a professional. So instead, the Evil Duchess started to read an actual intercepted correspondence, looked up only when she saw movement out of the corner of her eye-

The Evil Duchess’s was one of the deadliest swordswomen in the Fantasy Kingdom, with skills to rival even the Heroine. But she couldn’t dodge or parry what she couldn’t see coming, and the Spymaster’s heavy curved dagger cleaved into her neck.

Reflexively, the Spymaster stepped back from the spray of blood as the Evil Duchess collapsed.

“You…” the Evil Duchess managed, in a gurgled whisper. “Heroine…betrayed me…why?”

The Spymaster looked down on the Evil Duchess, and found that his professionalism had reached its limit.

“Why? Why? By the spirits, my lady!” he shouted. “You have threatened my life at least once a week since I entered your employ! You have informed me continually that should I fail to serve you as you desired, you would have me killed! That you would enjoy giving the order! I do not aspire to dance in the Rondeau of Crowns, my lady, but I do enjoy living.”

The Spymaster sighed. Shouting accusations and justifications at a fallen foe was satisfying, but what he said was true. He did enjoy living. Gloating over a fallen foe was amazingly satisfying, but he had taken advantage of the arrogance of too many foolish marks himself over the years.

He hefted his dagger once more. He still needed to handle two tiny details, and make his escape. Thankfully, he had almost finished the first detail already.

“O Heroine, Chosen of the Forces of Goodness! A, uh, package has arrived for you! We opened it, since we feared it was another trick of the perfidious Evil Duchess! But…well, if it’s a trick, it’s a really, really good one. There was a note with the box, from the Spymaster of the Evil Duchess. He says he’s going off to retire on some tropical island with loads of gold that he’s embezzled from the Evil Duchess over the years, that he’s very sorry for all of the assassination attempts, and that he hopes that you’ll choose to let him live out his last few decades in peace.”

“Ah! Can it be? Has my crusade for Truth, Justice, and Mercy inspired him to lay down the knife and adopt a life of peace and cooperation? How brave of him, to draw the wrath of the Evil Duchess upon himself by refusing to fight me further!”

“Ah…Oh Heroine, perhaps it would be best if you looked at what else he sent us, that necessitated the box.”

“…Ah. Um. Well, then. Erm. OK, let’s put this up to Evil Consuming Itself, and never speak of this again.”

Hard-hitting historical insight.

Me: “Hey, I just learned something really interesting about occultism and intelligence services during the lead-up to WWI!”

Friend: “What?”

Me: “Well, you know how mysticism and seances and stuff were big deals back then?”

Friend: “Yes?”

Me: “Well, there was one guy who went around Austria, and was widely considered to be a spy for the British. He got stopped and searched a lot, and since he had all kinds of crazy supplies, it always took a while and was a big production. But that was the point! The idea was that he’d go somewhere, be seen, be searched yet again, do his shows, and leave, and the actual spies would note his passing and take it as a pre-arranged signal, without ever actually meeting him or interacting with him in any way.”

Friend: “That’s…convoluted but clever.”

Me: “Yeah! It turns out the medium was the message!”

Friend: “We are no longer friends.”

Learning Python.

For fun, I’ve been working my way through this book, slowly but surely. It’s a good resource for me, although I wouldn’t recommend it as a general learning resource; its poor writing and pacing mean that I need to struggle and research to find out what the heck the book is intending me to do.

And I have learned many lessons so far!

  • Python uses space-based indents for formatting. Unlike sane languages that use parenthesis and disdain whitespace-based delination to the Outer Void, Python cares deeply about the right number of four-space indents.
  • Notepad++, my text editor of choice, will helpfully or auto-‘correct’) four spaces into tabs.
  • Python disdains tabs as not the One True Delineation Standard.
  • The PDF version of the book I have doesn’t actually let you copy code examples out of it without stripping out the newlines, meaning you need to then go back in and manually format each line to end in the right place, and to ensure that you didn’t break any of the indent spacing in the process.
  • The Windows console command ‘print’ has been broken for generations; if you need a replacement for UNIX-style ‘cat’, you can use ‘type’. (And on that note, one of the things I do like about Windows 10 is that the shell is decent at using pipes finally.)

My overall experiences with Python initially are…well, you got them. It’s competent at what it sets out to do, but return as statement terminator and number of spaces as depth parser mean that it’s a genuine bitch to move code around. I know damn well that the problem I’m having copying code out of this PDF will happen to anyone unfortunate enough to carelessly FTP a Python script from a UNIX box to a Windows box without accounting for it.

On the plus side, I’m not at the level of mastery where I’m about ready to start running Python scripts to attempt to reformat the results of copy-pasting out of the PDF.

More later.

Post Navigation