diff --git a/_posts/media/2008-12-23-self-indulgent-musings-on-total.html b/_posts/media/2008-12-23-self-indulgent-musings-on-total.html
new file mode 100644
index 0000000..b838007
--- /dev/null
+++ b/_posts/media/2008-12-23-self-indulgent-musings-on-total.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: Self-indulgent musings on total knowledge strategy games
+date: '2008-12-23T11:44:00.000-05:00'
+author: Anna Wiggins
+tags:
+- go
+- chess
+- hnefatafl
+- Gaming
+modified_time: '2013-10-22T11:19:50.595-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5897165812515549966
+blogger_orig_url: http://www.stringofbits.net/2008/12/self-indulgent-musings-on-total.html
+---
+
+Total knowledge games are games in which all players involved have equal knowledge of the current state of the game, and the only factor that influences the game's future state is the actions of the players. Chess, Go, and tafl are three such games that I play periodically.
Recently, I pondered a fairly simple question: which of these games is the most complex? All of them are complex enough that new players have room to become stronger over time. Skill in these games has been traditionally praised as a virtue by each game's culture of origin. So, which game provides the greatest depth as a topic of study?
Before I consider the differences in the level of complexity of these games, let's look at how a few basic elements of the games compare. This will give us a fuller understanding of the factors that contribute to the games' complexity.
Symmetry
Chess and Go have in common that they are symmetric games - both players have the same resources at their disposal, and seek the same goal. In chess, the pieces for each player are arranged similarly at the start of the board, and each player tries to capture the other player's king. In Go, the board begins empty of pieces, and capturing territory is the goal for both players. In both of these games, neither player has a handicap evenly matched opponents will have an equal chance of winning.
Tafl, on the other hand, is asymmetric. One player, the defender, controls a king and his bodyguards, and tries to flee to one of the corners of the board. His pieces begin the game arranged in the board's center. The attacker, on the other hand, has his pieces along the four sides of the board. He also outnumbers the defender 2-1. Tafl also favors the defender; if two equally skilled players play each other, the defender is nearly guaranteed victory.
Board Size
Tafl and chess are played on fairly small boards - 8x8 for chess, and anywhere from 7x7 to 13x13 for tafl. The most common tafl board sizes appear to be 9x9 (Tablut) and 11x11 (Hnefatafl). I will be contemplating a hnefatafl board here, because that is the size on which I most commonly play.
Go, on the other hand, is played on a 19x19 board. This means that, in general, far more moves are possible at any given time in Go.
Spaces vs Intersections
While we're talking about boards, I will pause briefly to discuss spaces and intersections. In Go, your pieces are played on the intersections of the lines. In tafl and chess, your pieces reside in the spaces, or squares, between the lines. This fundamentally makes no difference at all. You could make a grid of 8x8 intersections instead of 8x8 spaces, and play chess on it. It would feel unnatural, perhaps, but only because you would be accustomed to the other convention. Likewise, you could play Go on a board of 19x19 spaces. In fact, some variants of tafl were played on a grid of intersections, such as Alea Evangelii, a tafl game played on a 19x19 board (you could, in other words, use a modern Go board to play Alea Evangelii).
Capturing
Go requires a player to surround an opponent's stones and 'cut him off' from all open spaces. Capturing, however, is not the point of the game, only a strategic element. This is also fundamentally true of tafl and chess; the ultimate goal is to surround the king; the capturing move is not strictly necessary. Tafl's capture rules are less straightforward than chess; you must 'flank' an opponent's piece (place your pieces on opposite, orthogonal sides of the opposing piece) to capture it. The king must be surrounded on all four sides (in most variants).
Construction vs Destruction
In chess and tafl, players begin the game with all of their pieces in place; pieces can be captured, but new pieces will never be added to the board. In a sense, they are destructive games; the forms which are in play at the beginning can change and be eliminated, but nothing new ever appears in play.
By contrast, Go is a constructive game. The board begins completely barren; players add pieces until the board is full of pieces surrounding empty territories. Pieces can be captured, but the overall trend during play is toward a fuller board.
Complexity
So, how do these games compare to each other in terms of strategic complexity? Go has a lot going for it in terms of complexity. First, it is played on a large board, meaning there will always be more moves to consider. In addition, the constructive nature of the game means it is legal to play in nearly any open space at any time. This means that the number of possible moves in Go will always be much greater than the other two games.
Additionally, the strategic elements within Go are extremely intricate. Opening moves can impact the later game dramatically, and individual 'battles' (sequences of moves on a small section of the board) have countless patterns and scenarios that players must be comfortable with. Capturing an opponent's stones isn't always a good idea; often, nothing prevents your opponent from immediately capturing even more of your stones (and thus gaining territory) in return.
By stark contrast, chess and tafl have a fairly small number of legal moves. For example, in chess, there are only 20 possible moves on the first play. The average number of possible moves for a given chess game is something in the range of 32. Tafl provides more possibilities than chess, even with fewer pieces; since all tafl pieces can move any number of spaces orthogonally, the attacker (who plays first) has 116 possible opening moves. The defender's first move has 120 possibilities. Go, by comparison, has 361 possible opening moves.
In terms of capture rules, it is not clear to me whether tafl's capture mechanics, which are more involved than those of chess, make the game simpler or more complex than chess' straightforward captures. In chess, the capture rules require you to keep track of more information, since each piece has a more complex influence on holding territory. Go, however, is the clear winner here as well, as capturing can be extremely intricate - often when trying to capture a group, you may limit your own liberties and end up being captured yourself. A significant portion of the game's strategy involves creating arrangements of stones that cannot be captured.
Ultimately, my observations and subjective experience suggest that Go is the most complex of these games. It has an amazing number of possible permutations, and a very simple ruleset that nevertheless lends itself to an immense number of factors that must be considered.
Between chess and tafl, the numbers seem to favor tafl. The asymmetry, larger board, and larger number of possible moves seem to make it more sophisticated. However, as long as the game is skewed in favor of the defender, the complexity may mean very little in the end. Mostly from subjective experience, I would estimate that tafl is the more numerically complex game, but this experience may be skewed by the fact that so many of the possible moves in chess have been so well mapped. The complexity of tafl also depends heavily on the specific tafl game and board size. Even subjectively, I can't come to any real conclusion here.
\ No newline at end of file
diff --git a/_posts/media/2009-10-15-vendetta-online.html b/_posts/media/2009-10-15-vendetta-online.html
new file mode 100644
index 0000000..3d0bb7f
--- /dev/null
+++ b/_posts/media/2009-10-15-vendetta-online.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: Vendetta Online
+date: '2009-10-15T10:13:00.000-04:00'
+author: Anna Wiggins
+tags:
+- in space
+- vendetta online
+- mmorpg
+- video games
+- Gaming
+modified_time: '2013-10-22T11:19:50.847-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-4675100499175766511
+blogger_orig_url: http://www.stringofbits.net/2009/10/vendetta-online.html
+---
+
+I've recently discovered a game called Vendetta Online. This may be the MMORPG I have been waiting for: real-time skill-based combat, space flight, trading and mining, space flight, an interesting back story, space flight, and extensive moddability through custom skins, binds, and plugins. Oh, and it's a space flight game.
I love space shooters. Put me in a cockpit and give me 3 dimensions of unfettered movement, and I may as well be in Valhalla. Combat is secondary; fighting in space is fun, but just the feeling of (pretending to) pilot through the stars, skirting around asteroids, and maneuvering into docking bays is intoxicating to me. The chance to do so with other people in a persistent world is something I can't pass up.
The space flight in VO is a very solid balance of realism vs playability. Contrast Vega Strike, which focuses on realism to a fault. In Vega Strike, it often takes upwards of 15 seconds to maneuver your craft into position for each attack run on an enemy. Also, to disengage your engines you have to throttle all the way down, and to turn without having your engines engaged you have to press a special key.
Vendetta Online, on the other hand, operates in a more enjoyable way; you only apply thrust for as long as you keep pressing one of your thrusters. When you stop thrusting, you maintain your current velocity until you thrust again. This lets you reorient your ship without changing your vector, which is very useful for targeting objects, getting a visual on enemy craft, etc. It also feels very intuitive and realistic (whether it really is realistic or not is irrelevant, see below). Moreover, you can apply thrust in 6 directions; forward or backward along the 3 primary axes (relative to your ship's current orientation). The game controls refer to left (+y), right (-y), up (+z), and down (-z) as strafing, while forward (+x) is accelerate and backward (-x) is decelerate.
Having the ability to thrust in any direction is useful and fun, but it isn't very realistic (well, not with the ships looking the way they do; a ship that could do that would need thrusters all over the place). This is where the fun > realism design mentality comes into play, and frankly it makes for a very fun game. Another unrealistic design decision is the existence of a maximum velocity. Sure, you could make some sci-fi sounding arguments for it, but honestly it's a balancing mechanic, plain and simple. And in my opinion, there's nothing wrong with that.
The game world is vast; 30 systems with 64 sectors in each system (a system is a 16x16 grid of sectors). Each sector is "theoretically infinite" in size, although all of the interesting stuff is centered about the sector's origin; after a few kilometers you find a whole lot of nothing that goes on forever. To get between sectors you can set a destination and 'jump' there. Likewise, to get between systems you go to special sectors that have wormhole areas, and you 'jump' while in one of these.
The game's main RPG element (and I mean RPG-esque mechanics, not actual roleplaying) comes in the form of licenses. These are like a combination of level and skills in most MMOs. There are 5 licenses: combat, light & heavy weapons, trading, and mining. As you perform the eponymous activities, the skills increase. When they level up, you gain access to new ships, weapons, and missions. But the game remains primarily skill-based; in the hands of an incompetent pilot, the better ships aren't that much better. I am afraid that I'm a testament to this fact.
The game isn't perfect, though, and as long as I'm writing something like a review I'll have to point out a few flaws. I hate to have to do this to you, Vendetta, but it's for your own good. This will hurt me more than it hurts you.
The game world is big, like I said before. However, the player base is small. VO runs entirely in one instance, and you could easily fly across the galaxy and not meet another player. There are, on average, only 30 - 40 players online. This is alleviated a little by the fact that there is a cohesive world-wide chat, so communicating with the other players is easy.
I don't know if there are more people on at other times of the day (I tend to play any time between 22:00 and 06:00 UTC) or if this is a low point for the year (more players during the summer?). Maybe the game is just old, and has lost most of its player base to attrition. At any rate, it feels like a ghost galaxy sometimes. I want to populate this world, to convince everyone I know to play and invade the VO universe en masse.
The other flaws in the game are fairly minor. You can only take one mission at a time, and many missions are automatically aborted (and thus failed) if you log out mid-mission. A network hiccup can destroy an hour of work (or more for mission trees that require you to start all the way over if you fail any mission in them).
In-system jumps and wormholes look the same. A more spectacular graphic for wormholes would be really cool, but on the other hand, the in-universe explanation for wormholes makes the modest special effects make enough sense.
There is also a stat called "grid" that weapons have but don't explain. It refers to the total amount of power connected devices on your ship can use (i.e. the "power grid"). It's kind of like a maximum voltage, and you can only use 20 grid per ship, although this is not explained anywhere. It's not important until you get access to some pretty hefty ships, but it would be good to know about it, at least.
Other than these and similar minor nitpicks, the game is tons of fun and I foresee myself playing it for a long time. There is a free 8-hours-of-play-time trial available. My character's name is Gjalfr. See you there.
\ No newline at end of file
diff --git a/_posts/media/2009-11-03-vendetta-redux-eve-online-and-mmo-bug.html b/_posts/media/2009-11-03-vendetta-redux-eve-online-and-mmo-bug.html
new file mode 100644
index 0000000..c3b6ed6
--- /dev/null
+++ b/_posts/media/2009-11-03-vendetta-redux-eve-online-and-mmo-bug.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: Vendetta redux, Eve Online, and the MMO bug
+date: '2009-11-03T06:58:00.000-05:00'
+author: Anna Wiggins
+tags:
+- eve online
+- vendetta online
+- Gaming
+- mmo
+modified_time: '2013-10-22T11:19:50.855-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5151152868225534636
+blogger_orig_url: http://www.stringofbits.net/2009/11/vendetta-redux-eve-online-and-mmo-bug.html
+---
+
+So, I've been playing Vendetta Online for a while now, and the shiny factor is starting to fade. My neophilia guarantees that I will like any sufficiently shiny thing for at least a couple weeks. However, the game underneath the shiny is lacking, and it may be lacking in too many ways for me to justify playing it.
The biggest problem, by a long shot, is the player base. 60 players seems to be the absolute upper bound at any given time, at least while I've been playing. This is abysmal for an MMOG; there are FPS games that support larger numbers of players at a time. I might even be happy with this player base, if they did anything other than hang out in Sedina B8 PvPing. It doesn't really feel like an MMO at this point, it has the feeling of a social dogfighting game.
A lot of noobs seem to appear, play for a few weeks, and vanish. I can see why. The player base seems a little cliquish, though not overly much. But you get the feeling that Veterans will always be Veterans, reminiscing about the glory days, and noobs will always be noobs, struggling to make a few credits in the face of vastly more experienced and skilled pirates. Of course, that's when you find pirates at all. I've flown across have the game's universe trading and never been pirated. Like I said in my previous post, it's a ghost galaxy.
The numerous buggy things and realism-breakers are a turn-off, too. Capships in convoys don't carry any cargo, so they're worthless to both escorts (who get a "share of the profits" for their pay) and pirates. The cargo is simply an unlimited stream of widgets moving back and forth across the universe, with no great purpose in life. The convoy missions don't always work, either; I've had several simply fail to end, giving me nothing and forcing me to abort the mission.
There is not a lot of variety in missions. After playing through the few available mission trees, the missions are all one of a few boilerplate missions. Fly out, kill some stuff, you're done. Take this here, bring that back. Mine for lots of foo, get paid. Nothing more elaborate than that, which is disappointing.
I'm not cancelling my subscription yet. I'm giving the game a little more time to impress me. But at the same time, I'm going to try out Eve Online. You see, the MMO bug has hit me, and now I want a large, persistent universe full of people that I can fight with, trade with, and just generally game alongside. The space theme is more appealing to me than fantasy MMOs have ever been (fantasy has been done to death, is what it comes down to).
As far as roleplaying backstory goes, the science in Eve is surprisingly non-squishy, with a lot of modern scifi concepts making an appearance: quantum entaglement-based FTL communication, consciousness hot-backups, etc. Sure, the spectre of "jumpgates" (replace with "wormholes" at leisure) makes an appearance, but I can accept some foils for the sake of the story.
While I love twitch-based gameplay, I am a lot better at tactical/strategic combat. I think on my feet pretty well, but my reflexes suck pretty hard. I would probably find the combat in Eve more enjoyable, as a result.
If you ignore the combat layer, Eve has a lot of awesome features that would make VO great: player-owned systems, player-run economics (the materials you trade actually seem to come from a player at some point), and player-designed ships. All of these could have an analogue in VO, and if features like these were present, I would probably enjoy VO a lot more.
Of course, there's also Jumpgate: Evolution. It'll be interesting to check that out when it launches. We'll see.
\ No newline at end of file
diff --git a/_posts/media/2010-01-08-scratching-itch.html b/_posts/media/2010-01-08-scratching-itch.html
new file mode 100644
index 0000000..c4a3d76
--- /dev/null
+++ b/_posts/media/2010-01-08-scratching-itch.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: Scratching the itch
+date: '2010-01-08T07:06:00.000-05:00'
+author: Anna Wiggins
+tags:
+- eve online
+- vendetta online
+- thunderdome
+- Gaming
+modified_time: '2013-10-22T11:19:50.863-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-7191442157918171530
+blogger_orig_url: http://www.stringofbits.net/2010/01/scratching-itch.html
+---
+
+I thought about titling this post "Eve and Vendetta in the THUNDERDOME", but sanity prevailed. You win this round, sanity.
I played through the trial run of Eve Online. It worked without much complaint in wine. Let's look at the things I think are cool about Eve Online, and the problems and realizations that came from the trial.
Okay, the star map. I could spend hours just playing with the gorram star map. Coloring systems by various data, playing with routes... the star map makes me feel like I'm in an Asimov novel. This hits my geek spot so very very hard.
The scale of the game is immense. 4500 star systems. Something to do in every one of them. It's mind-boggling, and it's easy to feel lost in the vast cloud of stars. Which is a good thing, for me.
The setting is really cool. The whole concept of capsuleers - transhumanist sociopaths, small gods reigning death on lesser humans - is really cool. The fact that you play as one is the surprising part. And NPCs even make reference to the fact that your 'kind' have a reputation for callousness. Very well executed.
In theory, I love the PvP/corporation/territorial battle aspects of Eve. Player-run corporations can control star systems. That's amazing. In fact, it is the single coolest thing the game has to offer. If VO could find a way to implement sector/system sovereignty, it would be a better game (I believe this is being worked on).
Eve has a HUGE player base. There are human players in pretty much every system I pass through. However, while the player base is huge, I find myself rarely interacting with them. Which is fine, in that it is realistic enough; I have no real reason to talk to these pilots at this time. But it makes me realize that VO's absence of a huge player base isn't as much of a deal breaker as I thought.
I like that Eve's economy is thoroughly player-driven. Vendetta feels contrived; sure, prices fluctuate as you move commodities from one port to another, but a station isn't relying on players for a shipment of actual, usable goods, like weapons and ships. The economy in Eve is easily the most amazing thing I've ever seen in a video game. The fact that it works is almost unbelievable.
Eve has some graphical and performance issues, and it isn't really any prettier than Vendetta Online on my hardware. This is annoying, because Eve looks and runs better in Windows. That's a HUGE point in Vendetta's favor; Linux compatibility is very important to me.
Combat in Eve can be boring at times. Theoretically it's a more tactical approach, but PvE comes down to:
- Click enemy.
- Click "Lock"
- Press F1
- Wait until enemy is dead
You might need to toggle some shield hardeners or armor repair modules, or run away to repair/reload. But that's about it for the entry-level PvE. Now, granted, PvP is another deal altogether, and I'm sure the combat in PvE gets more nuanced. The presence of tons of options (weapons, shields, add-ons, upgrades, 'rigs') is really cool, too, if a bit overwhelming.
In contrast, VO's combat is immediate, twitch-based, and immensely rewarding. It is also a lot harder for me, but I relish the challenge. In my two-week trial of Eve, I didn't lose a single ship. In Vendetta, blowing up happens every day. Of course, it isn't as big a deal either.
Vendetta's limited options with weapons and ships makes it easy to build a balanced, meaningful loadout. It also has a really good variety of different ship types (light/medium/heavy fighter, transport, bomber) without having an overwhelming number of options.
I think that, in the end, VO is more my style. It is better suited to casual play. It has a more open attitude (native Linux client, client plugins are encouraged, very open source-style release model). The public chat channel makes the game's community very accessible; you can ask questions or just chat, and it makes the whole experience feel like hanging out on IRC (but with more explosions).
Eve Online has a lot of things that I want in a game, but it's not quite casual-friendly enough for me. If Vendetta takes some cues from Eve in terms of the broader features, it will turn into a damned fine game. As it is, it's enough fun to justify paying for it.
\ No newline at end of file
diff --git a/_posts/media/2010-02-24-heavy-rain.html b/_posts/media/2010-02-24-heavy-rain.html
new file mode 100644
index 0000000..bdb3835
--- /dev/null
+++ b/_posts/media/2010-02-24-heavy-rain.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: Heavy Rain
+date: '2010-02-24T10:51:00.000-05:00'
+author: Anna Wiggins
+tags:
+- art
+- PS3
+- Heavy Rain
+- philosophy
+- Sony
+- Gaming
+modified_time: '2013-10-22T11:19:50.870-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-2433324692047175848
+blogger_orig_url: http://www.stringofbits.net/2010/02/heavy-rain.html
+---
+
+So, Sony released a little game for the PS3 yesterday called Heavy Rain. Having already played the demo, I ran out and nabbed a copy. I got home, popped it in. I thought I would play for a little while, just to see the intro, you know?
A very short while later, I heard this: "Hey, you know it's almost 1 in the morning, right?"
It seemed strange that a character in the game sounded so much like my wife. Also, my character had just looked at her watch, and it was way after 1. And there wasn't anyone else in the room.
"Did you hear me?"
The surround sound on this game is great, too. It sounds like that voice is coming from right behind me. I turn my character around, but don't see anything. Kinda creepy.
Then it dawns on me, and I press Start, and turn around.
This is the effect Heavy Rain has on me. The story in this game is that gripping, compelling. It propels you forward naturally, the pacing keeping you engaged without overwhelming. This game has the highest production quality of any game I can recall playing. I've seen the phrase interactive movie thrown around here and there over the years, but Heavy Rain turns that on its head; it is not a movie; it is doing things with storytelling that a movie can't do, for a number of reasons. It's not a visual novel either, because it is far more than a series of cinematic sequences with decision points. Rather, we have something entirely new here, and it is an ambitious and compelling idea.
I have been known to opine that a great piece of art is one that plays to the strengths of its medium. A great novel uses the written word to convey something that can only be conveyed with writing. Certain combinations of words have great effect on the reader, in a way that the same scene in a movie might miss entirely. Literature has the advantage of narration; a voice that can drive the story in ways that are unique to the form, and great stories capitalize on this.
A great movie, on the other hand, uses the fact that it is a visual medium to convey powerful emotional content that would feel flat in writing. Lighting, facial expression, and tone of voice can be evocative in a movie like they never could in writing. Plays have their own framework, and they are at their best when they exploit this fact. Ditto music, painting, and other artistic forms.
Heavy Rain is the first game that I have encountered that takes this approach with a video game. It is treating the game as a work of art, and not simply an entertaining way to kill time. Sure, other games have stories and beautifully rendered scenery. They have characters that portray emotion, sometimes. But Heavy Rain uses the canvas of video games to tell a story in a unique way; you couldn't copy this story to movie or novel form without losing, or at least changing, something important.
Traditional games, even ones with great stories, are hampered by a number of problems. One is the tendency for this pattern to emerge:
1. Plot (cutscene, dialogue tree, etc)
2. Gameplay (random battles, shooting bad guys)
3. Goto 1.
In Heavy Rain, the plot and gameplay are intertwined inextricably, and the gameplay doesn't devolve into the usual video game tropes of, well, killing Bad Guys. It's more nuanced than that, and you observe a story unfolding in which your actions have real consequences, both minor and major, and in both the short and long term.
It's been obvious to me for a long time that video games could potentially be art, evoke a broad range of real human emotion in the player, and deal with deep themes without resorting to ham-fisted tropes or dulling the emotional experience with tons of unrelated gameplay between evocative scenes. Heavy Rain is the first time I've seen this potential realized.
\ No newline at end of file
diff --git a/_posts/media/2011-05-29-doctor-who-rebel-flesh-almost-people.html b/_posts/media/2011-05-29-doctor-who-rebel-flesh-almost-people.html
new file mode 100644
index 0000000..d53d7a5
--- /dev/null
+++ b/_posts/media/2011-05-29-doctor-who-rebel-flesh-almost-people.html
@@ -0,0 +1,14 @@
+---
+layout: post
+title: 'Doctor Who: The Rebel Flesh / The Almost People'
+date: '2011-05-29T20:11:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Media
+- Doctor Who
+modified_time: '2013-10-22T11:19:50.959-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-4899912926075775844
+blogger_orig_url: http://www.stringofbits.net/2011/05/doctor-who-rebel-flesh-almost-people.html
+---
+
+Spoiler Warning: If you haven't seen these episodes yet, River Song would disapprove of your reading any further. I'm pretty much going to spoil every spoilable part of the story.
I haven't seen a lot of classic Who. I've seen a reasonable amount, though, and I have read the excellent discussions of the Troughton era so far over at The TARDIS Eruditorum. And so, when I watched The Rebel Flesh, it was pretty clearly not just a base under siege story, but an homage to Troughton. And it does the base under siege in new Who style fantastically. And the thing that new Who does well consistently is to take a very personal, human story and make it feel epic. Or, occasionally, to take a very epic story and make it feel personal and human. Here what we have is mostly the former.
The story manages to make us empathize alternately with the humans, who are callous in their treatment of the gangers, and the gangers, who want to kill their human counterparts and replace them. Playing a character and an almost-but-not-quite-identical version of that character is an impressive feat, and all of the actors in this story are up to the task.
Rory continues to grow on me, as he has been steadily since he came back to life as a Roman. Arthur Darvill's performance here is superb; he's grown as an actor noticeably throughout his stay on the show. More impressive, though, is Matt Smith's performance. I've said before that he is a great Doctor, but simply not as good an actor as Tennant. While I stand by that generally, in this episode he delivers an amazing performance. In particular, the scene where he speaks on behalf of the flesh, getting angry at Amy and begging not to be asked to die again was chilling. It recalled Eccleston's screaming at the Dalek in Dalek, and was wonderfully delivered.
There were only a few weak points in the story. Foremost was the absolutely atrocious child actor brought in near the end of The Almost People. It was actively hard to suspend my disbelief and accept that this kid was Jimmy's son, and it was the one moment that really pulled me out of the narrative. The other weakness the story had was a general sprawling feeling in its pacing; it felt a bit less focused than the rest of this season has. But this wasn't a serious issue by any means. The emotional content of the episode carried it through the rough patches.
But now, let's talk about what everyone wants to talk about - the reveals.The first reveal - that the Doctors had switched places, and thus Amy had told the Doctor of his impending death, was fantastic, even if it was a bit predictable. More importantly, it didn't seem to surprise him - either he was too committed to pretending to be a ganger to let his surprise show, or he already knew about his death on the beach. Either way, that suggests that the Doctor knows more than he has let on. And, as I'll explore below, he definitely seems to have a plan.
So, the second reveal was totally unexpected. I absolutely didn't see it coming, at least, and anyone who says they did is probably lying, or has stolen Moffat's production notes. To recap: the Amy travelling with the Doctor and Rory has been a Flesh copy since (presumably) her capture in the orphanage in Day of the Moon. What's more, the Doctor already knows, and has probably known for a while. Throughout the episode he tells Amy things that suggest this: to ignore Eye Patch Lady, to 'breathe', and 'to push, but only when she tells you'. What's more, the reason he came to the monastery in the first place was to learn enough about the Flesh to sever its connection to Amy as humanely as possible.
This suggests he has known that Amy wasn't human since he first scanned her and learned about her pregnancy in Day of the Moon. He also seems to know more about her present situation than he has any right to. The question that remains is why he chose this moment to make this move. The only reason I see that he would have waited before making this move is that he didn't want to tip the Silence off that he had seen through their ruse. So why tip them off now? I suppose it is possible that he has not had time; if this season has occurred with no significant gaps, this is the first story since Amy was replaced in which the TARDIS has landed intentionally; in both episodes between Day of the Moon and this story, the TARDIS was trapped in some way.
The other possibility is that he knows something has changed; perhaps the fact that Amy's pregnancy is nearly over is relevant. Or perhaps the Doctor possesses (or has inferred) some knowledge that the viewers lack. In general, we have seen a lot of scenarios from Moffat's Doctor that are reminiscent of the seventh Doctor stories where the Doctor shows up at a location with a plan fully hatched, or even already underway. I suspect we will see more of this trend with the series 6 arc itself.
Edit: Phil had some corrections to mention about my chronology:
The switch has to be before the orphanage. She sees eyepatch lady before being captured in the orphanage. Since the implication is that eyepatch lady has been looking in at Amy's actual body and Amy's mind just conflated the image into one, the switch must happen in the three month gap between Impossible Astronaut and Day of the Moon, or in the gap between A Christmas Carol and The Impossible Astronaut.
Rewatching Impossible Astronaut, I am of the view that it happens between seasons. I think the Doctor knows when she steps into the TARDIS. Look both at the look he gives after her as she goes under the floor of the TARDIS and at how he approaches her getting him to trust her - asking if someone is making her say that, and demanding she swear "on something that matters" to get her to show that she's really Amelia, not just some Amy impersonator.
Good points! I totally mixed the whole sequence of events in Day of the Moon up in my head. So, how long has Amy been FleshAmy? We could suppose that she's definitely been Flesh for the entirety of Series 6.
This, of course, leads me to ask: assuming the Silence is behind Amy's kidnapping, why also steal FleshAmy? If the Silence knew Amy was flesh, why would they go to so much trouble to kidnap her, and scare her, and, well, all the rest of the things she went through in the series opener?
One possibility is that Eye Patch Lady isn't working with the Silence, and the Silence didn't know Amy was really FleshAmy. They may have wanted Amy for reasons related to her pregnancy, and then been confused when they found she wasn't pregnant. In other words, the Doctor and the Silence may have a common enemy here. Is this a strong possibility? Not really. but it's interesting.
That paragraph actually led me to theorize that we know roughly when the swap happened - FleshAmy must have been created before Amy became pregnant, and the swap happened shortly after Amy realized she was pregnant. Otherwise, FleshAmy would have been pregnant as well. Unless the Silence kidnapped FleshAmy to extract, deliver, or kill the FleshTimeHead.
\ No newline at end of file
diff --git a/_posts/media/2011-05-31-rambling-review-portal-2.html b/_posts/media/2011-05-31-rambling-review-portal-2.html
new file mode 100644
index 0000000..a5a108a
--- /dev/null
+++ b/_posts/media/2011-05-31-rambling-review-portal-2.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: 'Rambling Review: Portal 2'
+date: '2011-05-31T10:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- sexism
+- video games
+- Portal 2
+- Gaming
+- rambling game review
+modified_time: '2013-10-22T11:19:50.936-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-7856932703356013777
+blogger_orig_url: http://www.stringofbits.net/2011/05/rambling-review-portal-2.html
+---
+
+The Rambling Review is a new series where I review games, books, movies, and TV series, both new and old, in a rambling, disorganized style. It will contain scores, but they are absolutely and utterly meaningless. It is nominally inspired by Phil Sandifer's Nintendo Project, but it is orders of magnitude less ambitious by design.
This post contains spoilers for Portal and Portal 2. Please do not read if you have not played these games and intend to.
Several years ago, a game called Portal came bundled with Valve's Orange Box. It was, along with Team Fortress 2, bundled with Half Life 2: Episode 2 as a sort of apology for how long Episode 2 took to release (which makes you wonder exactly what is going to come bundled with Episode 3, a title that is quickly gaining Duke Nukem Forever-like mythic status as a delayed release).
At the time, Portal seemed to be all anyone could talk about, to the point that it eclipsed the main title of the Orange Box (HL2: Episode 2). And everyone told me that I just had to play it. "It's a puzzle game, and it's hilarious!" Eventually I scraped together enough money to spend $50 for a 6-hour game (to this day, I haven't actually played Half Life 2... maybe some day. I did, at least, get some enjoyment out of TF2 after I'd had the Orange Box for over a year). I did not regret a single penny of that purchase. Portal remains, to this day, one of the absolute best games I have ever played. The pacing, the atmosphere (provided almost entirely by the sense of isolation and the slow realization that GLaDOS isn't just a quirky and humorous gimmick there for comic relief, but rather actually wants to kill you), the gameplay itself - Portal gets every single thing it does right. And it was practically a throwaway game - a little side project of Valve's that clearly wasn't given anything like the funding that went into, say, the Half Life 2 series.
Of course, praising Portal is a lot like saying "hey, Democracy is pretty good!" in the US1. It would take some effort to find someone who disagrees with me on the point. So let's move on to something a bit more controversial (at least among the people I know who have played both Portal and Portal 2):
Portal 2 is not as good as Portal.
Let's start with the characters. The voice acting in Portal 2 is superb. You couldn't ask for better. However, the inclusion of more characters lessens the psychological impact of the game. In this game we have the addition of the Emergency Testing AI, Wheatley, Cave Johnson, Caroline, several new turrent personalities. All of this makes this game feel positively vibrant with personalities; I rarely felt the sense of loneliness and isolation that crept in during the original game. The original Portal only had 5 characters, and 3 of them were silent (with one of them being entirely absent): GLaDOS, Chell, the turrets, the Companion Cube, and Rattman. Portal 2 more than doubles the number of characters. Sure, some of them are present only in pre-recorded messages (Emergency Testing AI, Cave, and Caroline), but they still feel more present than Rattman ever did, and they decrease the game's sense of isolation where he increases it.
Now, there's nothing wrong with this inherently. Not every game is or should be about creating a sense of isolation, and if they had tried to just do more of the same, the result would probably have been far worse. However, atmosphere in general is important for any game, and the emotional context and atmosphere created in the original Portal is powerful, and it drives the game forward. Portal 2, by contrast, relies on the progression of the narrative to drive the game forward.
This is the point where anyone who knows me just did a double-take. Did I just criticize a game for being driven by its story? It's true, I love a good story, and I've been vocal in my opinion that games need good stories to thrive. My criticism comes from a couple directions. One of them is has already been well-covered by Shamus Young the tendency for games to get bogged down in a gameplay-cutscene-gameplay-cutscene cycle. Portal allowed you to move at your own pace, and the narrative was woven into and around the game as you progressed. Portal 2 still retains some of this (more than many games, certainly), but has significantly long sequences in which, while you still retain nominal freedom to move about, there is no gameplay accessible to you until you sit through some amount of dialogue or cutscene (the opening of the game is a good example, as is Wheatley's "about to jump off the management rail" monologue). In the original Portal, the only 'cutscene' I can recall - that is, a moment where your ability to progress the game is interrupted - is the opening, where you wait to get out of the initial chamber. And that can be forgiven somewhat, as it serves as a chance to get used to the controls more than anything else.
Another reason I criticize Portal 2's approach is that I've come to realize that obvious and overt narratives - that is, traditional narratives - are difficult to do well in video games. Games that focus on such narratives are usually not playing to the strengths of the medium. Video games thrive in immersion, in creating a sense of atmosphere. The more focus a game puts on that aspect, the more compelling I tend to find it. Video Games can be a fantastic mode of storytelling, and they can be really fun to play, but a compelling atmosphere gives both of these things a critical boost that makes video games capable of standing out from both traditional stories and traditional games. The best two games of the last decade - Portal and Braid - were light on actual story, leaving you to fill in gaps and speculate much of the time. The subsequent atmosphere that develops, and is sustained through several hours of gameplay, leads your mind into creating a memorable, branching, and somewhat fuzzily defined narrative experience. This forces the player to engage with the game in a way that books and films really can't.
Of course, games can have both atmosphere and a more direct narrative - both of my examples above have a progressing narrative, and Braid even gives you medium-sized chunks of text that you must stop and read. The problem is that, without the first, the second will fall flat - you just end up with a story you could have told more effectively in a different medium. Video Games give us a unique opportunity to create a specific sort of immersion in our storytelling that other mediums are incapable of, and it is a shame to squander it. It doesn't matter what the atmosphere that the game immerses you in is like, as long as it dips you into it as deeply as it can and keeps you there. That is what makes a gripping gaming experience, to my mind.
(As an aside, a game can even create a compelling atmosphere without telling a story. Games with very little story can use art direction, such as visual cues and music, to make the games much more immersive. Katamari Damashii is a good example - there's no story worth mentioning, but the game's consistently quirky and unique art and music make it a compelling experience.)
Portal 2 has moments that are still quite brilliant, though. The Different Turret is a particularly impressive bit of atmosphere-building, and there are a number of scenes, especially in Chapter 6, where the scale and the haunted feeling of the environment bring back that sense of bleak isolation from Portal. But it doesn't deliver atmosphere as consistently, and that is the key thing that makes it less successful as a game.
Another thing I have to criticize about Portal 2 is the addition of bigotry to the humour. After playing Portal 2, I played back through Portal for comparison; there is no overtly bigoted dialogue in the game, or even any subtle bigotry as far as I could see. In fact, the game consists of two strong female characters in conflict, with nary a man in site. It blows the Bechdel Test out of the water.
On the other hand, Portal 2 resorts to ableism, sizeism, and sexism (by way of appearance/body shaming) for some of its humour. What's more, there are subtly sexist assumptions underlying the jokes; GLaDOS plays the part of the stereotypical "woman betrayed by another woman", and is thus written as needing to attack Chell in a way that will make her feel insecure about herself. And, obviously, the best way to make a woman feel insecure is to attack her appearance. "You're fat, and your clothes look bad." Because clearly (goes the sexist thought pattern), all women care about is their appearance, and thus such a jab would make any woman feel insecure.
Portal 2 is the multi-million dollar blockbuster sequel to a compelling, cerebral, and very weird independent film, and it shows. The thing is, it is still an absolutely fantastic game, with beautiful and well-designed visuals, great writing and acting (the line 'Caroline Deleted' was a pitch-perfect delivery, in particular), fun gameplay all around, and some pretty decent puzzles to solve. And it is the only sequel Portal could have had - it was this or nothing. Because you can't do a compellingly weird independent sequel; it would diminish the original by attempting to imitate it.
Final Score: Potato
1Note that I am not actually claiming, here, that Democracy is good. It was just an example2
2Note that I am not actually claiming, here, that Democracy is bad. It was just a clarification.
\ No newline at end of file
diff --git a/_posts/media/2011-06-03-obligatory-river-song-speculation-thread.html b/_posts/media/2011-06-03-obligatory-river-song-speculation-thread.html
new file mode 100644
index 0000000..bbf5274
--- /dev/null
+++ b/_posts/media/2011-06-03-obligatory-river-song-speculation-thread.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: Obligatory River Song speculation thread
+date: '2011-06-03T11:36:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Media
+- fanwank
+- Timehead
+- Doctor Who
+- River Song
+modified_time: '2013-10-22T11:19:50.974-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5044762929828242117
+blogger_orig_url: http://www.stringofbits.net/2011/06/obligatory-river-song-speculation-thread.html
+---
+
+Since the previews for A Good Man Goes to War have promised that the Doctor will learn "who River Song really is", this may be my last chance to go on the record with some wild speculation about what the reveal will be.
Spoilers!
Let's start with the most popular fan theory: River Song is the Timehead. Certainly, this theory fits the available evidence well enough, and nothing directly contradicts it. It would add a selfish element to River's admonition to Amy that killing the Timehead would create a paradox.
There are only two problems with the theory. The first is that one of the pieces of evidence for the theory indirectly contradicts it. When the Doctor says that he suspects the Timehead "will find them", he is looking at River. Proponents of the theory say this is a pointed, knowing look. The problem is, if he already knows River is the Timehead, then "the day the Doctor finds out who she is" has already come. Granted, this is a somewhat weak complaint. River may not know that he knows, after all.
The other problem with this theory, in the words of Phil from the TARDIS Eruditorum, is that Steven Moffat is cleverer than that. It is a somewhat obvious resolution from a man whose resolutions tend to be more surprising than that. So, at any rate, it would be somewhat disappointing if that were the extent of the reveal.
Phil's favored theory (and the only other theory that feels plausible to me) is that River Song is simply River Song, a particularly amazing woman the Doctor falls in love with. This would make the preview a clever bit of misdirection and hype-building, and while it would probably disappoint many fans, I think it would be a satisfying solution. And this leads me to what is, to me, a more interesting question than who River Song is: what is the context of her statement?
Is River going to directly tell the Doctor who she is, or are we dealing with a scene she has foreknowledge of? "This is the day..." scans (in the context of Doctor Who) like something a character might say if they had travelled back in time and were observing their own past. Showing such an encounter to, say, Amy and Rory would be a nice way to tell us more of River's story without waiting years for the Doctor to get there on his own.
Of course, this leads to another question: why go out of the way (both diegetically and from an audience perspective) to show us such a scene if there isn't something radically important about River's identity? This takes us back to the River-as-Timehead theory, which seems to have a whole lot of circumstantial evidence supporting it.
I'm not going to say that I actually buy in to the theory, but it is a somewhat interesting one. At any rate, it is a short wait; we'll find out tomorrow whether either of these theories are correct, or whether Moffat has yet another truly surprising reveal in store for us.
Edit: After I wrote this, I noticed Steven Moffat said the following on twitter:
yes, you will find out who River is tomorrow. Thing is though - was that what you were REALLY asking?
And, well, no, it isn't what we were asking. What we have really been asking is who did River kill, and why? So, River being the Timehead isn't a terribly interesting answer to any of that, and the only reason anyone started framing the question as "Who is River Song?" was that the trailer for Series 6 included Alex Kingston delivering the line "This is the day he finds out who I am". So, the real question is "will we find out who River killed?" Of course, the 'he' could feasibly not even be the Doctor. Intentionally misleading us is, after all, Moffat's modus operandi.
\ No newline at end of file
diff --git a/_posts/media/2011-06-04-doctor-who-good-man-goes-to-war.html b/_posts/media/2011-06-04-doctor-who-good-man-goes-to-war.html
new file mode 100644
index 0000000..72e4730
--- /dev/null
+++ b/_posts/media/2011-06-04-doctor-who-good-man-goes-to-war.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: 'Doctor Who: A Good Man Goes to War'
+date: '2011-06-04T23:11:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Media
+- Timehead
+- Doctor Who
+- The Oncoming Storm
+- River Song
+modified_time: '2013-10-22T11:19:51.041-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-1750958804968412487
+blogger_orig_url: http://www.stringofbits.net/2011/06/doctor-who-good-man-goes-to-war.html
+---
+
+Well. That was certainly an intense hour of television.
Absurdly Huge Spoilers Ahead!
Let me jump right to the end, and then backtrack. River Song is the Timehead, who, it turns out, was originally named Melody Pond. As I mentioned on Friday, this is mildly disappointing because it was the most obvious solution given the current evidence. But while the reveal was a bit predictable, it was delivered well. Melody's name is dropped into the story in the first few seconds of the episode, but her identity as River is not confirmed until the very end, which creates a lovely tension in which the viewer spends the entire episode actively engaging with the story, trying to work out whether River and Melody are the same person, or whether this is a misdirection. As an example of that engagement, when River said her name was written on the cradle, I was, for one brief moment, convinced that River was Susan (the Doctor's Granddaughter, see An Unearthly Child). This came from speculating about who the cradle was originally made for, of course.
And that brings me to one of the unanswered questions this episode left us with - where DID that cradle come from? If it has Melody Pond written on it in Gallifreyan, and simultaneously is very old, where did it come from? My assumption is that it really is the Doctor's (or Susan's? or one of Susan's parent's?) cradle, with Melody's name written on it recently (as in, immediately prior to that scene) by the Doctor, eager to play godfather. That seems like the most likely explanation, although it isn't explicitly spelled out in the narrative.
Of course, the Melody/River reveal is only a small part of the story; the Battle of Demon's Run comprises the majority of the episode. And it was epically delivered. By that I mean that this story makes a conscious effort to be epic. Look at the scenes of the Doctor building an army; he is clearly preparing for something big, and the various reactions to his call to arms make it obvious that something big is about to happen. This is the Doctor in his Oncoming Storm aspect, terrible and mighty and unstoppable. And the 11th Doctor doesn't even consciously realize that he is doing this; all he knows is that he is angry, and is doing what he must to save someone he loves.
Another way the episode builds an epic feeling is by focusing on monologues; every recurring character gets at least one powerful dramatic monologue. The Doctor always gets to monologue, of course, but here, Rory, River, and Amy all get chances to shine. Amy's monologue in the pre-credit sequence is especially interesting, because it employs the same fake-out we saw in Day of the Moon. And the subsequent scene with Rory and the Cybermen is one of the most impressive moments Arthur Darvill has had so far. These monologues give the impression that the characters are talking directly to the viewer rather than to any character in particular; this lends an epic, larger-than-life feeling to the narrative.
And at the center of it, the story being told is still an intensely personal story. Rory and the Doctor are turning the universe upside down, and storming this fortress with all of their allies, to save one girl and her child. To save the people they love. This is Doctor Who doing what it does best - making the personal epic.
There are some less epic personal moments as well - in the characters of Fat One, Thin One, and Lorna. Unfortunately, these are overshadowed by the epic sweep of the story, and they come across as weak points in an otherwise fantastic story. The characters simply don't get enough screen time to make us care about them deeply.
Something this episode highlights - and I hinted at it before - is a major difference between the 10th and 11th Doctors. Ten knew he was a dangerous, potentially frightening force. The fact that death follows him was something Ten was keenly aware of. Eleven seems genuinely surprised that people would be afraid of him, and what he stands for. When he learns that people are waging a war against him, he is devastated. The Pandorica was different - even when he thought all of his enemies were arrayed against him, that made sense - these were all people whom he had given a chance, and then destroyed when he felt he had no further choice. But here, he is confronted with people who simply fear him, and have organized to destroy him. It takes him a few minutes to process this information, but after he does, he seems to be his old self again. He seems to have resolved his inner turmoil about being so hated by people for reasons unknown to him.
And most importantly, he has a plan.
Edit (2012.07.25): I recently rewatched this episode, and the scene with the cradle that confused so many of us is actually pretty clear on a second watch. The Doctor looks down at the inside of the cradle, and River's line about the writing on the cradle being in Gallifreyan pretty clearly implies "that's not the writing what I'm talking about". But it confused enough people that something about that delivery must be off, although I can't spot the something anymore.
\ No newline at end of file
diff --git a/_posts/media/2011-06-12-d-post-mortem-i-wanna-cast-missile.html b/_posts/media/2011-06-12-d-post-mortem-i-wanna-cast-missile.html
new file mode 100644
index 0000000..1dd3337
--- /dev/null
+++ b/_posts/media/2011-06-12-d-post-mortem-i-wanna-cast-missile.html
@@ -0,0 +1,19 @@
+---
+layout: post
+title: 'D&D Post-mortem: I wanna cast ''magic missile''!'
+date: '2011-06-12T10:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- combat roles
+- dungeons amp; dragons
+- game balance
+- power types
+- Yord
+- Gaming
+- skill challenges
+modified_time: '2013-10-22T11:19:51.092-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-1229543583152662803
+blogger_orig_url: http://www.stringofbits.net/2011/06/d-post-mortem-i-wanna-cast-missile.html
+---
+
+In D&D Post-mortem, I talk about my experiences running D&D 4e games, about 4e as a whole, and about collaborative storytelling in general.
When D&D 4e was launched, I was highly skeptical. I joined the vocal legion of gamers who saw it as a move towards MMO-like game mechanics and immersion-breaking shallow gameplay, and as little more than a money grab by Wizards of the Coast. However, after reading several posts by Alexandra Erin on the subject, I decided to give it a try. Her insight into the game's design decisions convinced me that there might be something worth trying.
As I began playing around with the rules, creating sample PCs, NPCs, encounters and sketching the rough framework for several stories, I began to see that 4e had a lot of promise. I spent a good deal of money buying source books, and started looking to get a game together. I finally got a game going, albeit with a very small number of players (only two of them!). I set this game, as I do all of my D&D games (dating back to 2nd edition), in my homebrew setting of Yord.
So, we finally got together and played what I am going to affectionately refer to as our first two gaming sessions. In practice, this was actually four shorter sessions, but I digress. Here are some impressions of 4e, and things that I learned from these first sessions.
I don't really know how to structure skill challenges. My character-driven approach to running games means that building skill challenges in advance is difficult, at least early on before the story has begun to take shape. Building them on the fly is difficult, too, and they tend to end up feeling contrived and kludgy, not to mention a bit of a slog to get through. Hopefully designing these well will become easier as I gain experience with the system.
Combat encounters, by contrast, are a joy to design and to run. It is easy to scale back encounters to account for fewer PCs, and encounter design in general is faster and less haphazard than in previous editions. It gives me more time to focus on making interesting tactical scenarios, place difficult terrain and other interesting aspects of the encounter.
I also love the game's focus on making traps and hazards into part of an encounter. Lone traps always seemed tedious more often than they are interesting, and this makes it easy to put in the requisite traps to make a dungeon feel like a dungeon without leading to the depressing "disarm the next pit" slog. Interesting traps that deserve time to allow the PCs to pore over and tinker with them can still be encounters of their own, but most traps can now be seamlessly incorporated into combat, where they actually make things more interesting.
Another thing I love about 4e, and this is something that D&D has needed for a long time, is the concept of Power Types and Combat Roles. The roles neatly encapsulate what the 'core four' classes have always done - fighters look big and dangerous so that the fight will concentrate on them, rogues slip in to deal tons of damage to single targets, clerics provide buffs and healing, keeping the party alive and together, and wizards mop up the smaller targets so that everyone else can focus on the bigger threats. Someone at Wizards finally realized that these four roles, while important and useful, were somewhat arbitrarily tied to their class concepts. In 4e, the 'Power Type' has been divorced from the Role, so that there are classes that encapsulate the cleric's healing and buffing abilities, but are rooted in martial or arcane themes.
This makes it a lot easier to create a character concept first, and then implement it according to the game mechanics. The general effect is that 4e makes it very easy to provide your own flavor without affecting the game balance - in general, the de facto rule is that 'anything that doesn't affect the game mechanics is fair game, unless your DM disapproves'. This encourages much more creativity and narrative flair than previous editions.
And yet, for all of the flexibility and useful decoupling of combat roles vs class theme, the system excels at ensuring that a given character is basically functional, and has a cohesive set of powers. This is something I noticed while running battles; they did a pretty good job of making sure everyone can be useful in combat. No more 'I was a wizard but now I am tired' effects, to steal a quote. This is an advantage over more piecemeal systems like GURPS, Savage Worlds, or D&D 3e - it's pretty hard to build a useless character.
So, those are my general impressions of 4e after a couple sessions of play. Now let's look at some anecdotes from my session.
During character creation, both of my players settled on Arcane classes - a Wizard and a Warlock. I rounded out the party with a DM-controlled companion character; a gnomish Arcane Leader. He is basically a Bard, but I chose his powers to play to the Gnome Illusionist trope. This party seems to work pretty well; I used a kobold raid on the town to test-drive the combat system, and things went well. I then used the companion character to drive a simple story - he offered looting rights in exchange for helping him recover a statue from some nearby goblins.
An aside on my DMing style here: I play a heavily character-driven style. Where some DMs would railroad the party for the sake of the story, I will sacrifice the story for the sake of the party's actions. If they had chosen to turn Mim down, he would have gone his way while they continued on theirs. This DMing style has its disadvantages (notably, it requires a lot of improvising!), but it has some strong advantages as well. It creates the feeling from the outset that the characters' actions actually have an impact on the story. I build the story around those actions, largely in terms of causal consequences. I do begin to practice a subtle railroading as the story develops - it often becomes easy and logical to put the story in front of the characters, and then simply observe how they deal with it. At any rate, most people seem to like this style of game, based on the feedback I've gotten in the past.
So, our next combat encounter occurred at the entrance to the goblins' den. A few goblins were guarding the entrance; the party fought them off, but at least one escaped into the complex. Reasoning there was probably at least one other entrance, and that the bulk of the goblins would be through the main entrance, the party Wizard decided to blast the cave ceiling with magic missiles until it collapsed. This was my first serious blunder as a DM in 4e, I think - I said no to this idea. In retrospect, it was narratively interesting, tactically interesting, and there wasn't a terribly good reason to say no. Given the imminence of goblin reinforcements, it was actually a great time for a skill challenge - Arcana and Dungeoneering checks to bring the cave down. After realizing this, I (much later) retconned the encounter and allowed that the cave had been partially collapsed.
These first couple of sessions were promising, and 4e looks like a system that is well-designed. It leaves a lot of room for creativity without being so free-form as to lose its sense of cohesion.
If you want to learn more about my homebrew setting of Yord, or follow the antics of the PCs, check out my campaign at Epic Words.
\ No newline at end of file
diff --git a/_posts/media/2011-06-15-duke-nukem-forever-should-not-exist.html b/_posts/media/2011-06-15-duke-nukem-forever-should-not-exist.html
new file mode 100644
index 0000000..4560904
--- /dev/null
+++ b/_posts/media/2011-06-15-duke-nukem-forever-should-not-exist.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: Duke Nukem Forever should not exist
+date: '2011-06-15T13:30:00.000-04:00'
+author: Anna Wiggins
+tags:
+- freedom
+- sexism
+- Duke Nukem Forever
+- angry rant
+- Gaming
+- rape culture
+modified_time: '2013-10-22T11:19:51.108-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-3358991633996211957
+blogger_orig_url: http://www.stringofbits.net/2011/06/duke-nukem-forever-should-not-exist.html
+---
+
+Today's post was going to be a review of Braid. But Duke Nukem Forever was released yesterday, and, well... I have comments. So, next week: Braid. Now: Angry Feminist Rant.
Trigger Warning: descriptions of rape and violence ahead. Please do not read if these things may be harmful to you.
First, the backstory - Duke Nukem Forever was released after a decade of anticipation and shifting release dates, with the game being dropped and picked up by development houses and publishers along the way. And now that it is out? Almost every review of Duke Nukem Forever has been negative. It has an abysmal metacritic score (although higher than it deserves, it seems to me). Many of the reviews have pointed out, in addition to poor graphics and boring gameplay, the blatant misogyny that fills the game in place of interesting content. Even Destructoid, which doesn't have the best track record when it comes to sexism, lambasted the game for its immaturity and offensiveness.
The game doesn't just support rape culture incidentally by propagating misogynistic tropes, though; it absolutely revels in it. According to the Destructoid review:
...at times, the game's attempts to be funny come off as downright horrific. One level in particular takes place in an alien nest where Earth's women are being inseminated by giant penises. The women writhe and moan in a fairly humiliating fashion, and they regularly sob with no small amount of implied misery. In essence, the women look like they're getting raped. In fact, they are. That's the big joke of the level. The aliens are raping the women to create babies... By the time Duke Nukem finally makes a "You're fucked," joke, which he makes in front of two girls who are about to die in the process of getting sexually assaulted, Duke does not come across as cool, witty or likable in the least. He comes across as a vile, callous, thoroughly detestable psychopath.
I was speechless after reading this. This is simply heinous. It completely falls flat as humor. Even for people who are regularly amused by harmful, offensive humor, I suspect this just isn't funny. It's sad and disgusting that the writers of this game felt the need to use violent sexual assault as a setup for an excruciatingly bad joke.
In light of the bad reviews, The Redner Group, the PR agency responsible for sending out review copies got angry and lashed out on twitter, saying:
too many went too far with their reviews... we are reviewing who gets games next time and who doesn't based on today's venom
So, if someone writes a massively harmful misogynist game that includes the premise 'rape is funny', and you have the audacity to point that out, you deserve to be punished by losing access to review any game from that publisher. I mean... look. While Feminists often talk about the silencing tactics that people use to keep rape culture intact, we don't usually get such a blatant example. You're blatantly saying "if you speak out about this, we will blacklist you". It is a direct threat to damage the career of anyone who calls you out for your misogyny. If nothing else, Redner Group, thanks for such an illustrative example.
The Redner Group isn't the only group that has issues with the negative reviews. We have some fine apologetics going on over here on Kotaku. One user in particular, with the outstanding handle of 0LunarEclipse0, had this to say:
Just because you can't handle shock humor does not make it not funny. Everything can be funny. I've laughed at some of the most racist and disgusting jokes. Maybe that makes me a horrible person... Just because something pushes you to far doesn't mean it pushes everyone to far... Nothing should ever be off limits. If we sacrifice freedom we sacrafice [sic] life.
The very fact that this offends you is more truth that it should be defended. Because you want it silenced. Censored. Well freedom means free. Regardless of how much something offends you, we can say and do what we want. Because your feelings don't matter.
I don't support rape and this joke goes a little to far even for me. But I beleive [sic] in freedom. So nothing ever should be off limits.
Okay, 0 (can I call you 0?). There's a lot wrong with this - it's basically a giant mess of privilege denial - so let's take it a piece at a time. Frankly, I don't care whether you're offended. Offense is not the point. When I say that Duke Nukem Forever should not exist, I don't say that because I think it is offensive. I say it because it will cause material harm. It reinforces - undeniably and strongly - the cultural narrative that rape is acceptable. Because when something is made into a joke, it is normalized. It is established as a set part of our culture. This will inevitably make it seem more reasonable, or justifiable, because it is normal. That is what rape culture does - it makes rape seem normal, inevitable, and by extension, acceptable.
So let's lay out what we're really talking about here. Duke Nukem Forever normalizes rape. It contributes to and propagates rape culture. To defend this game is to defend the act of rape. So no, I don't care who is offended by Duke Nukem Forever. I care about who it is going to hurt.
On to the next premise: "freedom means free". First, I don't know what Randian faux-Utopia you live in, but in the reality I'm accustomed to, society puts certain limits on freedom. For instance, you are not free to kill another person. But i digress - let's talk about what's really on your mind. You've erected a strawman argument here that suggests the game's detractors are trying to say the game should be pulled from the shelves, or banned, or something similar. I don't know if reviews have been suggesting that - I can't find any that have. I, at least, am not going to suggest that.
Certainly, the case could be made that this game should not be allowed to see release. My discussion of its harmful nature above edges in that direction. But I would rather err on the side of letting something harmful be created than that of censoring something worthwhile. So, I'm going to say this: Certainly, 2K games is free to develop and publish a game with this content. But I stand by my assertion in this post's title, as well: the game should not exist. The world is not made a better place, in any way, by its existence. In fact, as I have suggested above, I hold that the world has been actively made a worse place by this game existing. It should not exist in the sense that decent human beings should know better than to create something this full of hate. But none of that is to suggest that the game shouldn't be allowed to be released, or should be banned or censored, which is what the strawman argument says (although I would suggest that, if we're going to have a rating system at all, the ESRB's rating of M is dismissive of the seriousness of rape; this game should absolutely be AO). Rather, I'm suggesting that it is a negative mark for our entire society that we produce people capable of producing this game.
Moreover, you are applying your freedom conspicuously in only one direction. If the developers should have the freedom to make this game, why shouldn't reviewers have the freedom to express their opinions about the game? It seems more a little hypocritical to complain about people exercising the freedom you're so insistent on. So which is it? Do we 'believe in freedom', or not? Or does that freedom only apply when it lets you laugh at women being raped to death, and not when people suggest that maybe that's a little bit fucked up?
One last thing I'd like to talk about is this claim:
I don't support rape
By defending this game under the guise of 'humor', you do support rape. You may claim to have taken some abstract stand against rape, but you are contradicting that claim with your words. The same goes for anyone who would argue that this game has any redeeming value. The game contains content that is tantamount to hate speech against women. You are free to purchase and play Duke Nukem Forever - as you say, freedom is an important thing! However, if you do choose to support this game, you are supporting rape culture. So just, you know, keep that in mind.
\ No newline at end of file
diff --git a/_posts/media/2011-06-22-rambling-review-braid.html b/_posts/media/2011-06-22-rambling-review-braid.html
new file mode 100644
index 0000000..d89362b
--- /dev/null
+++ b/_posts/media/2011-06-22-rambling-review-braid.html
@@ -0,0 +1,19 @@
+---
+layout: post
+title: 'Rambling Review: Braid'
+date: '2011-06-22T08:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- art
+- video games as art
+- narrative
+- braid
+- poetry
+- video games
+- Gaming
+modified_time: '2013-10-22T11:19:51.084-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-7546916325849262362
+blogger_orig_url: http://www.stringofbits.net/2011/06/rambling-review-braid.html
+---
+
+The Rambling Review is a series where I review games, books, movies, and TV series, both new and old, in a rambling, disorganized style.
"Can video games be art?" is one of those questions that has been discussed to death. Of course, the problem domain of defining art is a notoriously snare-laden landscape. But by almost any definition, it is clear from nearly the beginning of the game Braid that it is a conscious attempt to argue the case that video games can be art. At the very least, it is aesthetically compelling, with strongly cohesive sprites, backgrounds, music, and animations. But I would argue that it is more than just aesthetically interesting, and that it passes muster as a piece of art by almost any definition.
But more than that, the art direction reflects the themes and mood of the story, to say nothing of the symbolism encoded in the art. And the story emerges from and is intertwined with the gameplay. As Phil of The Nintendo Project recently observed:
[In Braid,] the story extends from the gameplay. It's a story about the passage of time, memory, and regret, but all of the aspects of the story are simply thematic meditations on things about the gameplay. When the game introduces time-locked objects, the story introduces the idea of mistakes that cannot be undone. When it introduces the ability to have a shadow Tim carry out one set of actions while Tim carries out another, it introduces the idea of regret for lives unlived.
This is something that no other game in my memory has ever done. Coupling the gameplay not just to the content of the story (such as it is), but with the emotional and psychological themes of the game. Now, every game, however devoid of life, contains emotional and psychological themes. Everything we interact with does, because our minds are founded, by definition, in psychology. We approach the world by interpreting it, even if we do it on an unconscious level. Even pong can be discussed in terms of boundaries, liminal spaces, conflict, and the repetition of actions for an arbitrary and meaningless rewards.
However, games like Braid are different. They are written purposefully to draw out certain themes. They are intended to have emotive content rather than simply being circumscribed by our emotional reactions to them. Another insight of Phil's, and the topic I really want to talk about with Braid, is this:
The thing about Braid that I think a lot of people miss, despite it probably being the most important thing about the game, is that it is one of an increasing number of games to operate in a lyrical mode as opposed to an epic mode. Implicit in this, of course, is the idea that the nearest textual medium to video games is poetry. And so Braid, instead of telling a narrative story about rescuing a princess, instead offers an extended poem in which video game mechanics, growing up, the apocalypse, and love are all intertwined into a... well... braid.
So, let's start with something pretty basic. Phil is discussing here a dichotomy between poetry and narrative. Now, obviously he doesn't mean poetry as an art form generally - after all, narrative poems certainly exist. Rather, what we're talking about is a difference between two modes of writing - that is, two different things you can do with the written word. You can tell a straightforward story in which the narrative flows directly - in this mode, regardless of whether your story is allegorical or contains deeper meanings and metaphors, there is a surface level of actions that are related in some basic order. This mode, which I will call the 'narrative mode' for simplicity, is how most stories are told.
Another mode, though, and one that is associated in many people's minds with poetry in general, is what Phil calls a 'lyrical mode'. Narrative story is thrown out in favor of suggestive imagery and implicit connections. It is harder to tell a story in this mode, because we think of stories as following a single cause-and-effect sequence that we call its narrative. However, stories can be told like this, and Braid does so.
The result is a story that, while clearly a story, doesn't have a single narrative in it. There are certainly many interpretations of Braid, but the only one I've seen that does them justice is the one quoted above. The story is not 'a metaphor for the development of the nuclear bomb', as one interpreter suggests. The development of the nuclear bomb is certainly a clear theme, but it is not the one correct interpretation of the story. Rather, there are many interpretations of the story that are all true, simultaneously. And the writer probably didn't intend for all of them to be there - the interesting thing about writing in the lyrical mode is that you can make connections, while writing, that you weren't consciously aware of, and that others can make connections from the symbols you use that you didn't intend. It is a way of using language (and art, and music) that would seem messy to anyone who insists that a sentence only have one correct meaning, but the result is a beautiful and moving piece of art about regret, love, and the inevitability of loss.
Final Score: Yes
\ No newline at end of file
diff --git a/_posts/media/2011-06-29-i-know-what-going-to-happen-in-doctor.html b/_posts/media/2011-06-29-i-know-what-going-to-happen-in-doctor.html
new file mode 100644
index 0000000..3625aca
--- /dev/null
+++ b/_posts/media/2011-06-29-i-know-what-going-to-happen-in-doctor.html
@@ -0,0 +1,20 @@
+---
+layout: post
+title: I know what's going to happen in Doctor Who series 6
+date: '2011-06-29T08:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Media
+- Timehead
+- Doctor Who
+- Madame Kovarian
+- Rory Williams
+- Melody Pond
+- River Song
+- spoilers
+modified_time: '2013-10-22T11:19:51.372-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-7490212715758497722
+blogger_orig_url: http://www.stringofbits.net/2011/06/i-know-what-going-to-happen-in-doctor.html
+---
+
+Doctor Who is off the air until September, and a number of questions remain unanswered. But just because we don't get any new Who for three months doesn't mean we have to stop talking about it! So here is my chance to answer all of your burning questions. Because I know everything that's going to happen in the second half of series 6. All the reveals.
Spoiler Warning for everything, up to and including A Good Man Goes to War, and for the rest of the series too, if I'm right!
Okay, so I don't really know all the reveals. I don't have access to the scripts, and I certainly don't have a retro-futuristic thought recorder pointed at Steven Moffat's head (not that you can prove, anyway). But I do have a pretty good idea where the story is going, and I think I've got at least one reveal pegged.
To start, let's review the two biggest questions that the show left unanswered after A Good Man Goes to War:
- Who kills the Doctor (i.e., Who is in the Astronaut suit on the lake in 2011)?
- How does the doctor survive being killed? Because, let's face it, he does.
- Who did River Song kill?
I think I know the answer to the last one. Here's your big spoiler: River Song kills her father, Rory Williams.
How do I know this? Moffat has left us a lot of evidence hinting in this direction. The evidence comes down to a theme in Moffat's work: misdirection, specifically repeated misdirection.
Let's start with the misdirection. By misdirection, I mean that there is a tendency in Moffat's writing to tell us something in such a way that we assume something else. The easiest example to spot is in Amy's monologues about Rory in series 6. The first one is in Day of the Moon, when she is captured by the Silence, and is talking to herself (but directing the words to Rory). She says:
I love you. I know you think it's him. I know you think it ought to be him. But it's not. It's you. And when I see you again I'm gonna tell you properly. Just to see your stupid face. My life was so boring before you just dropped out of the sky. Just get your stupid face where I could see it, okay?
So, this is designed to make you assume she's confessing her love for the Doctor - especially the phrase 'just dropped out of the sky'. This is even lampshaded later, when she tells Rory it was just a figure of speech. That lampshade is, of course, Moffat gently mocking the audience for falling for his misdirection. He likes mocking us for falling for it, too: he does the same thing with FleshAmy and FleshMelody. Kovarian tells the Doctor, "Oh, Doctor, fooling you once was a joy. But fooling you twice, the same way, it's a privilege." These are both moments where the fourth wall is broken while still maintaining diegetic cohesion (Russel T Davies did the same thing with the 10th Doctor's last line, "I don't want to go", which is clearly meant to be spoken by Davies, Tennant, and the Doctor simultaneously).
There is a second example of the Doctor-Rory misdirection; at the beginning of A Good Man Goes to War:
I wish I could tell you that you'll be loved. That you'll be safe and cared for and protected. But this isn't the time for lies. What you are going to be, Melody, is very, very brave. But not as brave as they'll have to be. Because there's someone coming. I don't know where he is, or what he's doing. Trust me, he's on his way. There's the man who's never going to let us down. And not even an army can get in the way. He's the last of his kind. He looks young, but he's lived for hundreds and hundreds of years. And wherever they take you, Melody, however scared you are, I promise you, you will never be alone.
Now, this one drops a really big hint, because both the phrases 'there's someone coming' and 'you will never be alone' parallels what Rory said in Day of the Moon: "She can always hear me, Doctor. Always. Wherever she is and she always knows that I am coming for her, do you understand me? Always." And, of course, we get the reveal immediately:
Because this man is your father. He has a name, but the people of our world know him better as the Last Centurion.
So, where does this tie in with River's story? In Flesh and Stone; when the Doctor asks River about the man she killed, she says he was "A very good man. The best man I've ever known." It's easy to assume this refers to the Doctor, but we've seen evidence that River has no illusions about the Doctor being a good man, particularly the line "This is cold. Even by your standards, this is cold" from The Impossible Astronaut, and her rant that begins "This was exactly you. All this. All of it. You make them so afraid" in A Good Man Goes to War. No, River wouldn't call the Doctor the best man she's ever known; she knows him too well. But she might say that about her father, who shows, time and again, limitless dedication to his wife.
There's more evidence, too. In Flesh and Stone, Father Octavian says that "She killed a man. A good man. A hero to many." Again, this could refer to the Doctor, and that's the obvious choice. But it could also refer to Rory, in light of Amy's line that "the people of our world know him better as the Last Centurion." (which is interesting, because as far as we know Rory is not widely known as a hero on Earth. We appear to be missing a little bit of story there)
Ultimately, the reason I think this is more than just a lot of circumstantial evidence and idle speculation is that Moffat has already done the Doctor-Rory misdirection twice, and has blatantly lampshaded how much he likes fooling us with misdirection. A third misdirection is, at this point, a logical way to finish the series.
There is at least one problem with my theory, though I think it fits in with the same misdirection again. The episode title of A Good Man Goes to War has every indication of being about the Doctor. River's poem certainly seems to talk about him:
Demons run when a good man goes to war
Night will fall and drown the sun
When a good man goes to war
Friendship dies and true love lies
Night will fall and the dark will rise
When a good man goes to war
Demons run, but count the cost
The battle's won, but the child is lost
On the other hand, nothing in the poem (or the episode) explicitly says that the Doctor is the good man in question. In fact, River's "This was exactly you..." monologue happens at the end of this episode, which leads me to believe the misdirection is complete - every reference to 'a good man' has been a reference to Rory, without exception.
So, how and why does River kill Rory? A friend of mine suggested that Madame Kovarian is River Song. This is plausible - River was raised as a weapon against the Doctor. There are certain physical similarities (Alex Kingston and Frances Barber have similar facial structures and hair, at least), although those aren't even necessary given that River can regenerate. The River we know has always seemed more than a little haunted by her past, and raising an army against the Doctor, killing Rory, and being generally heartless and cruel might certainly explain those demons.
So, this is what I think we'll see in the remainder of series 6: River is not rescued (or if she is, it is not for long). She grows up to be Kovarian, her mind being twisted by the Silence to hate the Doctor. Subsequently, she kills Rory (while trying to kill the Doctor). Somehow, she has a change of heart eventually, and becomes the River we are familiar with.
The biggest mystery left, for me, is why Kovarian and the Silence seem to be at odds with one another. The Silence went out of their way to kidnap Amy (did they know she was Flesh at the time?), and to try to make Amy tell the Doctor she is pregnant. These things don't make a lot of sense if Kovarian and the Silence are allies, but we know River was raised, at least for some of her life, in the Silence-infested Graystark Hall Orphanage. So, either the theory about Kovarian being River is wrong, or Kovarian and the Silence have a falling out, and/or she manages to keep secrets from them.
\ No newline at end of file
diff --git a/_posts/media/2011-07-02-d-post-mortem-getting-creative-with.html b/_posts/media/2011-07-02-d-post-mortem-getting-creative-with.html
new file mode 100644
index 0000000..b4a0156
--- /dev/null
+++ b/_posts/media/2011-07-02-d-post-mortem-getting-creative-with.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: 'D&D Post-mortem: Getting creative with your mage hands'
+date: '2011-07-02T08:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- dungeons amp; dragons
+- game balance
+- Yord
+- Gaming
+- narrative approaches
+modified_time: '2013-10-22T11:19:51.100-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-2010059013721016642
+blogger_orig_url: http://www.stringofbits.net/2011/07/d-post-mortem-getting-creative-with.html
+---
+
+In D&D Post-mortem, I talk about my experiences running D&D 4e games, about 4e as a whole, and about collaborative storytelling in general.
Our most recent D&D session was pretty short - a small amount of cave exploration, and a single encounter. During that encounter, however, a few things happened that highlighted two fundamentally different approaches to roleplaying games. The scenario in question was this: the party's Wizard wanted to use Mage Hand to disarm an enemy spellcaster. I had several objections to this idea:
- The enemy spellcaster isn't likely to give his wand up without a fight. Assuming, for the sake of argument, that we want to make rules for this attempt, it seems reasonable to me that a Mage Hand would have a Str 2, and would have to make an opposed grab roll, with at least a -5 penalty for the act of snatching an object out of the opponent's grasp.
- It sets a nasty precedent. If we allow such a simple and repeatable disarm, the game ceases to be challenging. Following this to its logical conclusion, well - the characters' actions don't happen in a vacuum. Word of this tactic would get around (indeed, if such a tactic worked, it would likely already be in widespread use). People would start creating defenses against it - locking gloves, magical barriers, whatever. It would necessitate an arms race between the setting and the character that would potentially alter the landscape of my setting in a way that's not very appealing to me. I'm all for player characters leaving their mark on the world, but I don't much care for this reactive manner. This would also make enemies with natural weapons fundamentally more useful, which would reduce the amount of variety in encounters. Which, I suspect, isn't something anyone wants.
- There simply are no printed rules for disarming an opponent. More importantly, I believe this was an intentional design decision on the part of Wizards of the Coast. A disarmed opponent is effectively defeated; so disarming an opponent is something that you should only be capable of doing when an enemy is reduced to 0 hit points (as anything that is tantamount to defeat should only be possible when the enemy is actually beaten, i.e. deprived of hit points).
Now, I brought up the first objection during play, and the player countered with 'well, the enemy spellcaster would be surprised by the Mage Hand suddenly appearing'. By that logic, it seemed to me that arrows from a concealed target should always hit their targets, and enemies should likewise be able to surprise and completely defeat the PCs with a good stealth check. That doesn't sound like a good logic to use when running a combat to me. In a combat situation, everyone involved is, to borrow a quote from Alexandra Erin, "exceptional combatants trying very hard not to get killed". I didn't raise the second objection directly, nor did I think of the third until I'd had some time to think about it.
And it's the third point that I really want to focus on, because it highlights, as I said above, a fundamental divide in how one approaches gaming. On the one hand, you have an approach that focuses on simulating a realistic world (albeit with high fantasy-style magic and other trappings of the genre) in as much detail as possible. This is called (or, at least, I am calling it) simulationist roleplaying.
Simulationist gaming systems tend to be heavy on rules. A game with rules that govern everything a player can possibly do is accurately described as simulationist. This is the style of gaming that leads to damage location, rules to determine exactly where missed arrows end up (and whether they break), and a very precise set of rules governing how magic works in the setting (and categorizing it, explaining how different types of magic do or don't work together, etc). Simulationist games give you rules for how good your character is at any skill common to the game world, from fighting to cooking, or, gods help us, crafting. If you haven't spotted it yet, I'm culling all of my examples from D&D 3e, because it is a heavily simulationist game. Earlier versions of D&D were also heavily simulationist.
Simulationist games tend to encourage attempts to find creative loopholes. Because there is a rule for nearly everything, and everything is spelled out in as much detail as possible, it naturally supports the sort of thinking that leads to "well, the spell doesn't say it can't do this...". This, to me, is one of the biggest downsides of simulationist gaming, because it turns the game into a meta-game. Instead of playing a Wizard wandering through the world, destroying your enemies and impressing your friends with your magic, you're playing a game where you carefully read the spell description to see if you can twist the words to use the spell in a new, advantageous way.
The other style of roleplaying, which I will refer to as narrative roleplaying, involves a greater focus on the narrative of the game, and on the broad themes of the world, without getting bogged down in detailed rules that ensure the game is carefully confined by a rule. In a narrative game, there is not likely to be a table to roll on to determine the quality of the bread baked by a local baker. Narrative-focused game systems tend to be as rules-light as possible, defining the areas that require arbitration (such as combat) and getting out of the way otherwise. Narrative systems also have a tendency to encourage reinterpreting the rules in ways that don't effect their mechanical structure. D&D 4e and the entire White Wolf canon are good examples of games with a narrative focus.
The interesting thing about games with a narrative focus, or at least D&D in particular, is that there is a disconnect between the rules and the diegetic game world that doesn't make sense from a simulationist perspective. For example, look at Second Wind. Second Wind operates diegetically on the principle that you take a moment to center yourself, to quickly bandage a wound, or to just take a 'breather', and thereby gain the stamina to keep fighting. Notice first that any of those things could apply narratively - you might do one or all of them, or something else that is analogous, as the situation warrants. But more importantly, you can only do this once per battle. Why? What makes bandaging a wound the first time extend your ability to keep fighting, but bandaging a wound again ineffective? It's the same action; shouldn't it have the same consequences?
The reason is that the rules account for things outside your character's control. A battle is chaotic, and you don't get many opportunities to step back and take stock of the situation and get your feet back under you. Such a chance comes rarely - let's say only once in a brief struggle of 10 rounds or so. Using Second Wind doesn't simply represent an action that your character takes - it also represents your character taking advantage of things that are beyond her control, such as an ebb in the rhythm of the fight, to take a quick break and recover some stamina. As the player, the rules are giving you a limited ability to control things that are beyond your character's control, for the sake of the narrative.
Encounter and daily powers work the same way. The ranger power Split the Tree is a daily power. The simulationist model would suggest that this doesn't make sense unless the ranger has some sort of mystical ability that they can only tap into once per day that gives them the power to fire two arrows at once. The narrative approach gives us a way out, though: the ranger could fire two arrows any time she likes, but she doesn't get an opening, or time to line up the shot, every round. That sort of opportunity only comes once in a while - hence, a daily power. The player gets the ability to decide when that opening and free time show up, but it can only happen a maximum of once per day. This is completely an arbitrary restriction imposed by the rules; for the sake of game balance, you can only do these things a limited number of times within the framework of the narrative. It is a concession to drama over realism.
This is especially noticeable in the rules on magic item daily powers. No matter how many magic items you're carrying around, you can only use 1 magic item daily power per day (at the heroic tier). This isn't because the magic items share a pool of magic; rather, it is because the narrative and the game balance demand that these things be used sparingly. A warrior who relies on his magic items and shows no sign of actual combat prowess is, well... Tony Stark. And Tony Stark is a tool.
Here's another way to explain the fundamental difference between the two approaches: in a Simulationist game, the rules encapsulate the character. In a Narrative game, the rules encapsulate the narrative. And having said all of that, I'm still not certain I've made my point, which is that I prefer games like D&D 4e precisely because they encourage dramatic narrative thinking instead of simulationist thinking. The narrative approach gives you two important freedoms. First, you can make a balanced game without having to jump through contortionist hoops to explain why wizards and rogues have roughly the same level of power. Second, and more interestingly, they give the players a lot more room for creative expression - you can slap any narrative description or explanation on top of an existing rule, and as long as it doesn't change the mechanics, you have nothing to worry about.
If you want to learn more about my homebrew setting of Yord, or follow the antics of the PCs, check out my campaign at Epic Words.
\ No newline at end of file
diff --git a/_posts/media/2011-07-22-puzzle-log-dante-shepherd-twitter-puzzle.html b/_posts/media/2011-07-22-puzzle-log-dante-shepherd-twitter-puzzle.html
new file mode 100644
index 0000000..4b553c0
--- /dev/null
+++ b/_posts/media/2011-07-22-puzzle-log-dante-shepherd-twitter-puzzle.html
@@ -0,0 +1,13 @@
+---
+layout: post
+title: 'Puzzle Log: Dante Shepherd''s twitter puzzle'
+date: '2011-07-22T12:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Puzzles
+modified_time: '2013-10-22T11:19:51.467-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-2959339115742070120
+blogger_orig_url: http://www.stringofbits.net/2011/07/puzzle-log-dante-shepherd-twitter-puzzle.html
+---
+
+Puzzling - that is, solving puzzles recreationally - is a hobby of mine. I enjoy it immensely, although I enjoy some puzzles much more than others. I enjoy the sorts of puzzles that involve both intuitive leaps and a combination of generalized and specialized knowledge. The sorts of puzzles that happen at the MIT Mystery Hunt are probably the best examples of puzzles I really enjoy (and, indeed, I had a lot of fun at my first Puzzle Hunt this year).
So, in the tradition of Solving Really Hard Puzzles, I've decided to post logs of some of my puzzling efforts here. These may only be of interest to a very few people; feel free to ignore them if this is not up your alley.
Today's puzzle is one that Dante Shepherd posted on twitter in this tweet. Puzzles that are simply an encoded string of characters always intrigue me, so I dived right in. It took me about half an hour to solve, and it was a lot of fun. I created a log of the process by simply periodically noting the time and writing down my thoughts, especially when I got somewhere new, such as the aha moment at 15:00. In the future, I may look for (or create) some software that will make logging a bit easier.
Also, here is the original puzzle, for the link-averse:
L 45, R 270 L 225, R 270 L 225, R 180, L 90, R 270 L 225, R 270 L 90, R 225 L 90, R 270 L 225, R 225 L 135.
Spoiler Warning: if you want to solve this puzzle yourself, don't read my log. It contains spoilers for the intuitive leaps as well as the solution.
14:45
Okay, puzzle is gridded. What do we have here? These are obviously rotations; L and R for 'left' and 'right', and the numbers are all < 360.
14:50
Oh, they're all multiples of 45 degrees. So, they're all nice, even angles, and they are paired off.
15:00
Aha! It's Semaphore. For the two that are missing part of the pair, I'm assuming the angle is 0. Let me just look up a semaphore chart...
15:01
Oh crap. Is 0 at the top or bottom? Is L the sender's left or the receiver's left? Now I have to work out the coordinate system Dante used. At least we know that the low numbers map to the L side, and the high numbers map to the R side.
15:10
Tried 3 coordinate systems - 0 at top with L == left arm, 0 at top with L == viewer's left, and 0 == right, coordinates going counter-clockwise (trig coordinates). All that's left for reasonable systems is 0 on the bottom.
15:13
And solved. The solution is GOODFORYOU. It was the last coordinate system I tried, of course - moved 0 to the bottom, but got L and R backwards the first try.
\ No newline at end of file
diff --git a/_posts/media/2011-08-28-doctor-who-let-kill-hitler.html b/_posts/media/2011-08-28-doctor-who-let-kill-hitler.html
new file mode 100644
index 0000000..ddabb4f
--- /dev/null
+++ b/_posts/media/2011-08-28-doctor-who-let-kill-hitler.html
@@ -0,0 +1,19 @@
+---
+layout: post
+title: 'Doctor Who: Let''s Kill Hitler'
+date: '2011-08-28T11:50:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Hitler
+- Media
+- The Silence
+- Timehead
+- Doctor Who
+- River Song
+- spoilers
+modified_time: '2013-10-22T11:19:51.518-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-4101822349241269820
+blogger_orig_url: http://www.stringofbits.net/2011/08/doctor-who-let-kill-hitler.html
+---
+
+We interrupt our month-long, unannounced, unplanned hiatus to bring you: another post on Doctor Who. That's right! Because Doctor Who can motivate me to write when nothing else can. So, here we go!
Oh, and Spoiler Warning!. I'll be discussing the details of Let's Kill Hitler in this post, as well as speculating on the next plot reveals / bits of continuity that have only been hinted at / etc. So, if you haven't seen Let's Kill Hitler and you hate spoilers, or if you prefer to speculate without letting other people's ideas influence you, then don't read this post. Otherwise, read on! It's sure to be fun...
Review
I'll lead with the most obvious point: this episode was good. Really good. But that's just what I've come to expect from Moffat, so let's talk about what makes this episode really shine: Moffat repeatedly uses juxtaposition and playing with the audience's expectations in order to heighten the emotional impact of the story.
There is some really impressive cinematography here. My favourite is that the recap is actively used to set the tone. We start the episode with a pretty intense recap, and then drop into the first shot: a dramatic, colourful, and completely still row of wheat. It flips from reminding you how exciting the show can be to giving you an image that, while visually striking, is also very sedate. It's effective - it gives the viewer an adrenaline rush, then asks them to reconcile that with wheat. It makes the wheat somehow exciting, all on its own. It takes the image from striking and cranks it up to breathtaking. But we can't get away from that for long, so we switch to high-speed crop circle off-roading, so the excitement stays in place.
Another trick Moffat uses is turning the episode into a completely different story halfway through. They build this framework: a fun-loving early River incarnation wants to take the TARDIS on a past-wrecking joy ride. Even if you spot that Mels is River, it looks like the rest of the episode is going to involve the Doctor dealing with Mels, and the robot filled with tiny people, and trying not to change the past too much. Instead, the show turns into River Song (the one we know and love) actively trying to kill the Doctor. And succeeding. What starts out feeling like a fun-filled romp of an episode becomes very heavy, and dramatic, and suspenseful. It's brilliant, and the emotions are, again, heightened by using the audience's expectations against them.
One more interesting technique: Mels' introduction. Here we have a new character that Amy and Rory have known all their lives, tossed into the story mid-stream. This is a very interesting sudden interjection, and it feels jarring. As a bit of backstory, it is perfectly reasonable; after all, there are plenty of good friends in my past that don't really come up in conversation, and I imagine this would be more true if my conversations tended to revolve around temporal paradoxes and saving the world from Daleks. But still, from the viewer's perspective this seems to come out of nowhere, and I suspect that's intentional; it has the effect of unbalancing the viewer, giving you a vague sense that something is just slightly out of place, which pays off when Mels is revealed to be Melody.
Reveals / Plot Analysis
So, let's talk about the reveals, and what they could mean in terms of the ongoing story. First, the Timehead (i.e., the little girl in the spacesuit) is River Song. That's pretty clearly established at this point: Mels stated that her previous regeneration had been in an alleyway in New York, and had involved becoming a toddler. This lets us establish a loose chronology of events for the life of River Song, which I'll elaborate on in a bit.
Another thing is the sudden introduction of Mels - as I mentioned above, this seems to be a narrative technique to off-balance us as viewers. However, it could also (simultaneously) be a hint that someone is Meddling with Time*.
On the subject of The Eventual Untimely Death of Rory Williams, this episode gives us another misdirection, "I'm looking for a good man". I still think that Rory is doomed, however, and my newest bit of evidence is from outside the show itself: the title of the series finale has been announced, and it is "The Wedding of River Song". Recall that in Flesh and Stone, River said that she killed "A good man, the best man I've ever known". If Rory ends up being best man at River's wedding (after all, Rory isn't just her father, he's also a dear friend she's known for years. They grew up together!), well, wouldn't that be interesting?**
Also, we have some very interesting unanswered questions at this point, both new and old. A few that occur to me, and some possible thoughts on them:
- The most obvious one: What is the question (that will cause silence to fall)? The first thing that popped into my head here was The Question, i.e. "Will you Marry Me?" (or, alternately, "Do you take this man..."). Just like the above theory, it's a little far-fetched, perhaps. But it would fit interestingly with the wedding theme we've had throughout Moffat's run. I mean, he used "Something old, Something new" as a crucial plot element, so I think it's a fair possibility here.
- What is the relationship between the Silence (that is, the creepy faceless aliens) and Kovarian's alliance? They seem to be working toward the same goal, and it's easy to assume the Silence (the organization as opposed to the species, unless they are more tightly coupled than we know, a la the Headless Monks) are manipulating Kovarian, but does she know that? Is she working with them intentionally?
- Why did the Silence kidnap FleshAmy in Day of the Moon? I would have plenty of good theories if it had been the real Amy, but they presumably knew that the Amy they kidnapped was flesh, so why do it? What did they stand to gain from that?
- Who was in the spacesuit on the beach? It seems less and less sensible that it should be River. Everyone believes the Doctor dies on that beach. It's even a fixed point in time according to the tiny men inside the time-travelling robot. However, Mels clearly thinks she still needs to kill the Doctor - surely she would remember doing it on the beach, and assume his death was inevitable, right? So why does she try to kill him in Let's Kill Hitler? Is that an adult River, her kill-the-Doctor programming becoming impossible to resist? Or is it someone else entirely?
- How long does it take Alex Kingston to get her hair looking that fantastic? I'm cursed with the unmanageable nightmare that is curly hair, and I really wish I could make it look half that good.
Timeline of a Timehead
There's decent evidence that River only regenerates twice, i.e. has three incarnations. The evidence is as follows: We can surmise that the little girl in the spacesuit is Melody (the first body of River Song), because, well, she seems really childish. She is clearly very scared and confused; she doesn't seem to be any older than she actually appears here. I'm taking this as evidence that this is her first incarnation. We know that incarnation turns into Mels, because of the line "last time I did this, I ended up a toddler in the middle of New York". And, well, in Let's Kill Hitler she regenerates into the River we know and love, and we know that is her last incarnation, because we've seen her die.
So, with that evidence in hand, here's an outline of the Timehead's life in chronological order. There may easily be gaps where all sorts of interesting and story-relevant things happen in between many of these points, and some of the ordering and events are admittedly speculative:
- Melody Pond is born on Demon's Run.
- Madame Kovarian secrets Melody away to an unknown location.
- Melody comes to live in Graystark Hall Orphanage, which is infested with Silence.
- Melody is put into a spacesuit in which she may or may not kill the Doctor. She definitely has the encounter in the warehouse though.
- Melody sneaks away from the orphanage, going to New York (somehow) at this point.
- Melody regenerates into Mels, possibly as the result of a bullet wound inflicted by Amy.
- Mels comes to live near Amy and Rory, grows up with them, gets into lots trouble, and is obsessed with the Doctor.
- Mels meets the Doctor, and the events of Let's Kill Hitler occur. She regenerates into River, and gives the Doctor the rest of her life essence.
- River becomes a doctor of archaeology.
- River and the Doctor get married.
- River Song kills her father, Rory Williams.
- River is imprisoned at the Stormcage Containment Facility.
- At the end of the battle of Demon's Run, River shows up and reveals her identity to the Doctor, Rory, and Amy.
- The Impossible Astronaut / Day of the Moon.
- The Pandorica Opens / The Big Bang.
- The Time of Angels / Flesh and Stone.
- The Doctor takes River to the Singing Towers of of Darillium, gives her the sonic screwdriver.
- River Song dies on the library planet.
If anyone sees any obvious, provable errors, please let me know, and I'll edit the post!
* note that I am not claiming The Monk is involved in this story arc. It simply amused me to link to that story when using that phrase.
** This theory is somewhat tongue-in-cheek; as evidence goes, I realize it's pretty weak. But that quote came back to me when I read the title of the final episode, and I couldn't help but speculate.
\ No newline at end of file
diff --git a/_posts/media/2011-09-06-doctor-who-night-terrors.html b/_posts/media/2011-09-06-doctor-who-night-terrors.html
new file mode 100644
index 0000000..5402ae3
--- /dev/null
+++ b/_posts/media/2011-09-06-doctor-who-night-terrors.html
@@ -0,0 +1,14 @@
+---
+layout: post
+title: 'Doctor Who: Night Terrors'
+date: '2011-09-06T12:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Media
+- Doctor Who
+modified_time: '2013-10-22T11:19:51.542-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-534640537291397085
+blogger_orig_url: http://www.stringofbits.net/2011/09/doctor-who-night-terrors.html
+---
+
+As usual with these posts, Spoiler Warning.
Oh, Mark Gatiss, you've done it again. You got my hopes up, and then dashed them against the rocky shore of poor plotting.
Let's start with a recap of Gatiss' contributions to (televised) Doctor Who: The Unquiet Dead, The Idiot's Lantern, Victory of the Daleks, and now Night Terrors. So, out of his previous contributions we have one very, very good (and fairly creepy) episode, one that is, for my money, an absolute dud, and one that is a fairly clever idea with a weak execution. Although, to be fair, a Dalek asking "WOULD YOU CARE FOR SOME TEA?" might be one of the greatest single moments in Doctor Who history, and if Victory of the Daleks was conceived around that image, then I forgive it for everything else.
Looking at his track record, I get the impression that Gatiss is at his best when he tries to write creepy stories. The problem is that, with Night Terrors, he is trying to write a creepy story. But try as it might, this story absolutely fails to be creepy. The wooden dolls just aren't compellingly scary, and the dollhouse doesn't have the atmosphere of 'creepy haunted house' that it needs to make them so. The only time the dolls are ever creepy is the first time we see one - that is, when it is inanimate and standing alone in a closet. The monster is less scary when we can look it in the face, and the longer we hear creepy noises and get suggestions of scary things, the more suspense and tension is built. Here, though, Gatiss fails to build suspense for the monster, so its reveal feels about as frightening as the Slitheen in Aliens of London. Even the build-up to the Silurian reveal in The Hungry Earth was creepier than this episode.
With scary out the window, let's look at the rest of the episode. This is the first episode since The Doctor's Wife that isn't heavily invested in the story arc (even if we didn't know how tied to the story The Rebel Flesh / The Almost People was, in retrospect we have to count them as fundamentally 'part of the ongoing arc' episodes), so I had high hopes for a nice, self-contained, Doctor-to-the-rescue story.
And the opening let me keep hoping. Gatiss writes the Doctor brilliantly. The sequence in which the Doctor and company wander about the tenement has some fantastic dialogue. And every scene with the Doctor interacting with George and Alex is brilliant as well.
But these scenes are interspersed with the dollhouse. And the way the dollhouse is used destroys the pacing and tension of the episode. At the end of the episode, it felt like not very much had happened, and what had happened was inconsequential. The big runaround gets resolved, essentially, by actors coming on stage at the last minute. It's trying to be a clever twist, but it ends up being an anticlimax.
And the story arc tie-in at the end felt a bit weak, too. I mean, we get some creepy child-like singing that is, presumably, supposed to evoke the monsters that were just defeated. But even if we set aside the fact that they are, y'know, defeated, they have absolutely no apparent reason to know or care about the Doctor's death. They're figments of an alien child's imagination. It felt like that was added just for the sake of having some reminder of the overall story arc. Whether that was added by Moffat or Gatiss, it is a weak bit of storytelling.
One thing it does do is tell us that the storyline surrounding the Doctor's death will probably be dealt with in series 6, and not carried over to series 7. At least, assuming Moffat is following the contemporary format of series-spanning story arcs; dropping repeated hints about the same plot element almost always means that element will be dealt with in the series finale. Unless, of course, the series finale ends on a cliffhanger. But Doctor Who is uniquely ill-suited to the Dallas-style inter-series cliffhanger, because the Christmas Specials interrupt the dramatic tension period.
There is one other thing I do want to praise about the episode, though: George has a dollhouse, and no one thinks this is odd, or makes disparaging remarks about it. That struck me as a nice nod to gender-neutral parenting.
Next week, we have The Girl Who Waited, which I will admit now I'm not looking forward to, given that the plot appears to be 'Amy is captured and'. After A Good Man Goes To War, I had really hoped we would be able to stop putting the girl in the fridge quite so often. But it looks like the writers still can't seem to work that out of their system, so here we go again...
\ No newline at end of file
diff --git a/_posts/media/2011-09-13-doctor-who-girl-who-waited.html b/_posts/media/2011-09-13-doctor-who-girl-who-waited.html
new file mode 100644
index 0000000..3f6a4a7
--- /dev/null
+++ b/_posts/media/2011-09-13-doctor-who-girl-who-waited.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Doctor Who: The Girl Who Waited'
+date: '2011-09-13T13:45:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Amy Pond
+- Media
+- Doctor Who
+- Feminism
+modified_time: '2013-10-22T11:19:51.556-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-765676462574201174
+blogger_orig_url: http://www.stringofbits.net/2011/09/doctor-who-girl-who-waited.html
+---
+
+As always, Spoiler Warning.
I didn't have high hopes for this episode. From the previews, I got the impression that the story was going to go something like this: Amy gets trapped in an accelerated time stream. The Boys™ repeatedly try (and fail) to save her, while she repeatedly grows older, until finally they use techno-magic to undo the ageing and fly off into the Time Vortex toward their next adventure. In the middle, we would get some action sequences and some Rory-and-Amy-love-each-other-so-much-and-isn't-that-just-so-fucking-sweet sequences.
And I felt justified in this impression. After all, Tom MacRae's previous effort for Doctor Who was The Rise of the Age of Steel Cybermen, a disappointing romp to a parallel universe that re-introduced the Cybermen to New Who. This didn't bode well for a story in which the central premise appeared to be 'Amy needs to be rescued'.
But, look... Mr. MacRae, I'm sorry I doubted you. I'm sorry I judged you on Rise of the Cybermen. Because you most certainly can write a good episode of Doctor Who.
This episode is good. On a lot of levels. The dialogue is unrelentingly dark, tense, urgent; the only comedy we get is in the first act. After that it is a downright brutal story. Because MacRae took a story that looked like (and could have been) "Amy needs to be rescued" and he turned it into "Amy doesn't get rescued". The result is what feels, to me, like an attempt at a Feminist critique of the Damsel in Distress story. And it does a pretty good job.
So, Amy doesn't get rescued. Instead, she spends 36 years stuck in a Tower, not being rescued. And this Tower has an endless supply of faceless robots that want to kill her. So she does the only thing that anyone who could survive for 36 years alone in a Tower of Death could do: she gets tough. She may still be trapped, but she saves herself.
And the Amy we get to see here gives us a lot to admire. She can fight, she can hack (I'm using that term very charitably here. After all, computers are bound to be a bit wibbly-wobbly in Doctor Who), build a sonic probe, and she seems to be a genuinely strong female character. The fact that she is filled with bitterness and hatred towards Rory and the Doctor comes across as a realistic consequence of spending three decades in isolation. The venom with which Karen Gillan utters the phrase 'Raggedy Man' really sells Amy's hatred of the doctor, and her later conversation with him really illustrates her character:
And there he is, the voice of God. Survive, 'cause no one's gonna come for you. You taught me that... Don't you lecture me, Blue Box man flying through time and space on a whimsy. All I've got, all I've had for thirty-six years, is cold, hard reality.
Then we have Rory's reactions. The narrative makes it clear that he is torn between the young and old Amys. The line "Leave her and take you?" is voiced with outright contempt, but shortly after that, he appears more sympathetic, and by the end of the episode is heartbroken at the prospect of leaving her behind.
But, crucially, he does leave her behind. And this brings us to the Feminist overtones that this episode takes on. A core message that you can extrapolate from this story is this: If you trust men, they will lie to you and betray you. Especially if there's a younger, prettier option nearby. They may feel bad about doing it, they may have so many justifications they've sold themselves, but in the end, they betray you. The men here don't just fail to save Amy, they actively refuse. And why? Why does Rory choose young Amy? Because an Amy with decades of resentment and anger is less compatible with him. Because it isn't his Amy. The implication is clear: a woman's personhood is worth less than a woman's utility to her man.
Another thing to consider is why it is Rory's choice in the first place. The Doctor emphasizes that Rory has the choice. He could choose his young, perky, conventionally pretty wife, or his old, disillusioned, angry, bitter wife. And the Amys have no agency in the decision. This is Rory's choice, because it's Rory's wife we're talking about. Despite all the talk of Amy Pond as a fierce, independent, and wilful character, here she is conveniently scripted out so that the men in her life can decide which version of her gets to be saved.
The thing is, the story manages to pull all of this off. Yes, this has strongly sexist underpinnings in a way that makes all the other Feminist complaints about Moffat's Who seem to pale in comparison. But MacRae doesn't shy away from them. Rory knows he's being a selfish ass. Darvill delivers a superb performance here, and Amy's final line in the episode (and the way we cut away from it abruptly) underlines it. We are not supposed to feel like Rory and the Doctor are the good guys here. This is a bold statement, and it is complex and morally ambiguous storytelling in a way we haven't really seen in Doctor Who since Sylvester McCoy.
And speaking of Sylvester McCoy, well. This whole episode has a very strong Seventh Doctor underpinning, the same way The Rebel Flesh / The Almost People was a modern Second Doctor story. Matt Smith is playing a much darker, harder Doctor here. I was reminded of this line in the New Adventures novel Conundrum:
"But that's the whole point, though, isn't it?" said Ace. "To the Doctor, it did mean nothing. Just another of his games, another upset in the universe to be dealt with and then chucked."
That quote summarizes the Seventh Doctor better than any description I could possibly muster. Notably, that isn't the totality of the Doctor, but it is an accurate description of his practical relation to, and effect on, other people.
And here, Eleven acts in much the same way. Rory's accusatory "You're turning me into you" validates this reading; in the same novel, Ace explains that the reason she stays with the Doctor is that she's gotten a taste for the same manipulative games the Doctor plays.
In this story, there is notably an entire scene that happens off-screen: when old Amy has the glasses, she has a conversation with the Doctor (in which she cries) that we are not privy to. I suspect this is the tie-in to the ongoing story arc for this episode: the Doctor tells old Amy something, and I suspect it is about the events prior to the tuxedo scene in Let's Kill Hitler. Whatever it is, it makes her cry, and I have a suspicion that it is the thing that convinces her to accept death at the end of the episode.
Because that's the one strange beat to this episode; old Amy eventually accepting her betrayal seems outright unlikely to me. So either that's a weak character beat, or she has learned something about young Amy's (potential) future that makes her change her mind. I'm hoping for the latter, because it will make this story feel that much stronger once the ongoing arc plays out. And there are no other ongoing arc references in this story, which was good after the heavy-handed, tacked-on reference at the end of the previous episode.
So, in the final analysis, I think this story is good on every level. The things I haven't talked about - pacing, dialogue, camerawork - have only been omitted because they all functioned well for the story. There's nothing there to criticize. There's actually quite a bit to praise, especially regarding the cinematography and visual aesthetics in this episode, but this review is already feeling a bit hefty, so I'll leave off here. See you next week!
\ No newline at end of file
diff --git a/_posts/media/2011-09-19-doctor-who-god-complex.html b/_posts/media/2011-09-19-doctor-who-god-complex.html
new file mode 100644
index 0000000..725968b
--- /dev/null
+++ b/_posts/media/2011-09-19-doctor-who-god-complex.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: 'Doctor Who: The God Complex'
+date: '2011-09-19T13:15:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Media
+- The Curse of Fenric
+- Seventh Doctor
+- sexism
+- Doctor Who
+- Second Doctor
+modified_time: '2013-10-22T11:19:51.597-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-7103610123123124783
+blogger_orig_url: http://www.stringofbits.net/2011/09/doctor-who-god-complex.html
+---
+
+Spoiler Warning. You know the drill.
Jekyll is a very dark series. It possesses Moffat's characteristic witty one-liners, and his characteristic brilliant building of dramatic tension. It even has a few moments that directly parallel some of the storytelling techniques Moffat has used in Doctor Who - in particular, the scene where Jekyll and Hyde talk to each other via video camera has echoes of the Doctor's conversation with Sally Sparrow in Blink.
But it's also very clearly not his best work - there are moments where the pacing lags significantly, and the story feels disjointed at times, especially in the early episodes. The latter portions of the series have their own problems, with enormous plot holes opening up beneath the narrative in a way that really gives it problems. For instance, Mrs. Utterson's motivations are never really clear, especially in light of Jackman's mother's assertion that 'Hyde is love'. And Tom's children being able to 'swap' is never really explored in a meaningful way; I'm not normally an advocate for Chekhovian minimalism, but that just feels sloppy. However, by that point the pacing has picked up enough to gloss over a lot of the plot holes, and with characteristic Moffat lines ('Trust me, I'm a psychopath' was especially brilliant) to distract us, the story manages to just barely hold itself together.
The ending, though, and by that I mean the final frame before the show cuts to black, was utterly terrifying. It was a clever subversion of what we expect in narrative; after we thought we were safe in the denouement, we're given a sudden jolt of adrenaline right as we cut to black. It takes away the feeling of satisfaction and leaves the audience with a slightly disappointed feeling. And it seems to do this very intentionally; I'm reminded of the similar subversive techniques I talked about in The Girl Who Waited. In fact,
Oh dear, I've reviewed the wrong series again, haven't I? Terribly sorry about that.
The God Complex has a very interesting relationship with fear.
I didn't expect Jekyll to be scary. So I urged my wife to watch it with me. And when it turned scary, I had to apologize to her, because she really dislikes scary television, and will be jumpy (and nightmare-prone) for days after a scary scene. It's why she doesn't watch Doctor Who. And she asked me why anyone would want to watch things that are meant to scare them.
And the answer to that question parallels some of the elements in this story. Basically: we watch scary things because it lets us master them. Television and film let us take our fears, reduce them to two dimensions - to a medium where we know they cannot touch us - and then face them. So what we're left with (those of us who like scary stories, anyway) is the adrenaline rush without the real terror, and a sense of elation and power. We can practice being brave without any real danger. And when we're done, we can leave the scary stuff behind, safe in the Land of Fiction. And we can laugh at it, and joke about it, and reduce it thereby. (Of course, it's never really gone. The Dark is always scary, and always real, and stories are just a lie we tell ourselves to feel better)
In The God Complex, we have a creature that takes the thing we're most afraid of, and confronts us with it. But unlike most stories that start out with that premise, this creature doesn't feed on our fear, it feeds on our faith, on the things we fall back on to make ourselves feel brave. It takes the very reason we watch scary stories and perverts it, and devours us. This is what makes the jagged transitions between the linear narrative and scenes of the victims laughing and screaming so effective.
This link to television is echoed in the repeated use of black-and-white camera feeds throughout the story. This feels very much like the Second Doctor, with his penchant for staring out of cameras and right at the viewer. The feeling is especially strong in the scene where the Doctor is talking to Rita.
On the subject of past Doctors, this is very much another Seventh Doctor story. And it's easy to see it coming, but it's still played very well. Specifically, the climax of this story bears an uncanny, unmissable resemblance to the climax of The Curse of Fenric. Except, as a friend pointed out to me, it is crucial to note that in Fenric, the Doctor didn't believe the things he said to Ace. But he very clearly does believe every word he tells Amy. It is one of the most emotionally powerful scenes in Moffat's Doctor Who to date. (Well, obviously "I stole your childhood and now I've led you by the hand to your death" isn't true in the present tense (since his goal was to destroy Amy's faith in him), but it does reflect the fear that leads him to stop travelling with Amy and Rory.)
So, it is a shame that it is marred by an obvious flaw. And that flaw is the phrase "Amy Williams". I have no idea how that line of dialogue got out of the gate. I mean, it is clear what Whithouse is trying to say here: that it is time, basically, for Amy to grow up and stop having adventures with the Madman in a Box. It is meant to contrast with Amelia Pond, the little girl who wasted her childhood waiting for the Doctor.
But that's not how it comes across, for a couple of reasons. First, the changing of surnames for women is culturally loaded. What we get instead is a paternal figure performing the ancient ritual of 'giving away' his daughter. It reeks of a transfer of possession, and objectifies Amy in a very direct way.
On a more significant, personal level, it is a reversal of an established story device that seems to have been unceremoniously dropped at some point in series 6. Amy's role as a fairly dominant force in her relationship with Rory (in a way that very nearly has D/s overtones) is well established in series 5, and there are even references to Rory taking Amy's name (so, Rory Pond, not Amy Williams). It is, in fact, the Doctor who establishes Rory as Rory Pond in the first place:
The Doctor: Amelia, from now on, I shall be leaving the... kissing duties to the brand new... Mr. Pond!
Rory: No! I'm not Mr. Pond. That's not how it works.
The Doctor: Yeah it is.
Rory: ... Yeah, it is.
This is further referenced in the Christmas Special, with the Doctor's missive 'Come Along Ponds'. But, at some point, Rory started being Rory Williams again. I suspect this might be related to Amy becoming pregnant/captured/a mother, in which case it is doubly troubling, because it echoes a cultural narrative that tells us that motherhood is the defining line where women have to 'grow up and settle down', which is equated in this narrative to 'stop being assertive'.
So, here the Doctor seems to invert an observation he himself made about Amy. I think the intent may have been to demonstrate that he is trying to undo (some of) the changes he made in her life, but it comes across as a statement that she should be less assertive. And why not? That's what we expect of women who have grown up, after all.
In short, they really missed the mark they were trying to hit with that line, and subverted an established aspect of Amy's role as a strong female character.
And while we're talking about criticisms, at first I felt that the character development from The Girl Who Waited was completely dropped. It felt like everything from that episode was suddenly water under the bridge for the three companions. There are a couple of points where this is not true: certainly the Doctor's anguish about not wanting to kill his companions was influenced by the death of old Amy. And, and a friend pointed out to me, Rory's use of the past tense when talking about travelling with the Doctor makes it clear that he is done with the Doctor and is just waiting for Amy to agree. But Amy, whose 'Where is she?' was the last thing we heard in the previous episode, seems to be relatively unaffected by those events. It's an unfortunate tonal mismatch with the previous episode, given how well this episode works otherwise.
And the episode really does work. The visual storytelling here is fantastic, playing with techniques that aren't seen much (if at all) in Doctor Who. We have the psychological scenes that break from the narrative to cut-up clips of text and disjointed images of the victims. There's the use of cameras and camera feeds to structure the narrative and emphasize the nature of the danger. Throughout the episode we get a distinct downplaying of the monsters in the rooms and even the Minotaur; instead, the fear is purely psychological, with the lingering shots focusing on the victims as they are driven mad. Whithouse really knows how to write a Doctor Who script, and Moffat's production team is doing unparalleled work here.
Praise Them.
\ No newline at end of file
diff --git a/_posts/media/2011-09-22-puzzle-log-mgwcc-172-vision-thing.html b/_posts/media/2011-09-22-puzzle-log-mgwcc-172-vision-thing.html
new file mode 100644
index 0000000..9aabdca
--- /dev/null
+++ b/_posts/media/2011-09-22-puzzle-log-mgwcc-172-vision-thing.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: 'Puzzle Log: MGWCC #172 - The Vision Thing'
+date: '2011-09-22T10:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- crossword
+- Matt Gaffney
+- Puzzles
+- meta puzzles
+- mgwcc
+modified_time: '2013-10-22T11:19:51.664-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-7817297676551842768
+blogger_orig_url: http://www.stringofbits.net/2011/09/puzzle-log-mgwcc-172-vision-thing.html
+---
+
+I have a strange relationship with crossword puzzles. I like the idea of them, but I'm often rubbish at them. However, after solving a very fun, simple(ish) crossword in 7 minutes the other day, my desire to solve them was rekindled. So I decided to tackle Matt Gaffney's latest Weekly Crossword Contest.
The MGWCC is a weekly crossword, fairly difficult as non-cryptics go, that always has a meta-puzzle at the end. He publishes them on Friday and accepts answers to the meta (via email) until Tuesday. They are often very difficult, but I managed to get this one in about an hour and a half (45 minutes for the crossword, 45 minutes for the meta).
A couple of notes on how I handle crosswords:
I use xword, and I use its timer feature, which pauses (and hides the puzzle) when you go to another window. As a result, I know how long I spend actively working on the puzzle, even if I'm multitasking while I'm working on it. For instance, I did this puzzle in 2 sessions over 2 days, and the total time I was nominally working on the crossword was an hour and a half. But only about half that time was spent actually working on the puzzle.
You could argue that my mind is still pretty engaged with the puzzle during the multitasking, though. So, if you prefer, I spent 1.5 hours in wall time on the puzzle, and 45 minutes of game clock time.
I also use Google, but only as a last resort; I prefer to use the other clues available to fill in unknowns. But when all else fails, I will google a clue that satisfies both of these conditions:
- I know I will never guess the answer on my own.
- The entry is in a position that will help me continue to solve without further googling.
I do occasionally refer to googling answers as 'cheating'; I'm not denigrating anyone who solves their crosswords that way, it just feels to me like I'm cheating myself a little bit.
And on that note, this week's MGWCC was brutal. I had to cheat 5 times, which is unusually high for this size puzzle (15x15). There was very little short fill, and lots of obscures references. The NE and SW corners were really hard to break into, and that's where most of my cheats came from. At least there was almost nothing sports-related (I'm rubbish at those), though. And the clue "Palindromic play" with the answer RUR made me squee a little.
Other fun answers were OJIBWA, ANTARES, and SECRETES. SWE took me far longer than it should have, given that I know how crosswords and abbreviations work. I'm definitely out of practice. Also frustrating were the three entries all clued 'Dot follower', all 3-letter entries. Clearly DNS TLDs, but which ones? When I saw those length 3 entries, I was hopeful for some fill to help ground the rest of the puzzle, but those were literally impossible to solve without getting crossings on them first.
But other than that, this was a pretty straightforward 45-minute puzzle for me. Fun to solve, but on the difficult side of things. The meta, on the other hand, was a blast.
The meta clue (given in each week's write up) is "a European capital I've never laid eyes on". The puzzle title and the long entry BLINDCROSSING clued that this had to do with blindness. BRAILLE suggested trying to read the spaces as braille, but I couldn't make that work (and I tried a lot of different rotations, encodings, and far-fetched interpretations of braille).
So, then I thought that the clue ISEEA could be involved. I found all the clues with the letters S, E, and E, and removed those letters (taking away the 'SEE'ing). Those clues were:
ISEEA
SECRETES
DESSERT
which gave me:
IACRTESDERT
Which is an anagram for CREATES DIRT. But that is not a European city, as far as I know.
Then I spotted 'HOMER' as one of the answers. Homer (the Greek poet, who incidentally isn't the person referenced by the clue) was supposedly blind. And Ray CHARLES and Stevie WONDER are in here too! Let's find all the blind people:
John MILTON, Art TATUM, Louis BRAILLE (duh!), and SAMSON.
None of the clues reference the blind individual who shares the name; that would have made the meta too obvious. But the meaning of BLINDCROSSING is pretty obvious now, because of these 7 names, we have 3 pairs that cross. I think someone is missing. CHARLES doesn't have a cross.
NEDLER and CHE cross CHARLES. NEDLER was a bit of a guess, so I go back and google this one (technically a 6th cheat, but I don't usually count corrections during the meta. Metas are a different class of puzzle and googling doesn't feel like cheating on them to me). Turns out the name should have been KELLER.
Taking just the 4 letters where these names cross, we have: MERO, or as it is more commonly known, ROME.
Well, that was a lot of fun! I may have to start doing one of these every week.
\ No newline at end of file
diff --git a/_posts/media/2011-09-28-doctor-who-closing-time.html b/_posts/media/2011-09-28-doctor-who-closing-time.html
new file mode 100644
index 0000000..c2e091b
--- /dev/null
+++ b/_posts/media/2011-09-28-doctor-who-closing-time.html
@@ -0,0 +1,19 @@
+---
+layout: post
+title: 'Doctor Who: Closing Time'
+date: '2011-09-28T19:20:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Craig
+- Media
+- The Silence
+- Cybermen
+- Doctor Who
+- Madame Kovarian
+- River Song
+modified_time: '2013-10-22T11:19:51.673-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-375218274321415709
+blogger_orig_url: http://www.stringofbits.net/2011/09/doctor-who-closing-time.html
+---
+
+The Lodger was brilliant, easily Gareth Roberts' best contribution to the series up to that point and one of my favorite episodes. So, when I heard about a "sequel" story involving Craig and written by Roberts, I was excited. When I learned it had Cybermen in it, well... Cybermen don't have the best track record, but I trusted Roberts to deliver a pretty good Cybermen story.
And he did. In fact, 'pretty good' is a very appropriate adjectival phrase for the episode. It wasn't brilliant. It doesn't risk dislodging The Lodger as Roberts' best episode. But it was a fun, light-hearted romp involving Cybermen with some very interesting moments. I was particularly amused by the Doctor's conversations with Stormageddon, and the return of the Cybermat.
But there's not a whole lot more to say about the episode itself. Well, maybe a few things. What made The Lodger work so well was the way it thrust the Doctor into an ordinary life and watched his reaction to it; we see the Doctor trying to be (and thoroughly enjoying the idea of being) a regular bloke. He plays football, he has his own room in a flat, he interjects himself into the drama of Craig and Sophie. At times it feels like the Doctor has been dropped into the wrong show, and at other times it feels like he has fallen out of the Mediasphere altogether and landed in a day in someone's life. And the Doctor in these situations creates a wonderful, postmodern story about a mythic figure interacting with the ordinary world, and which highlights the advantages and wonder that can be found in mundane life.
And Closing Time tries to replicate that feeling, with the Doctor emphasizing that he's just there for a visit, and later with his getting a job at a department store. But it doesn't pan out; I'm not certain if it is because his motives are too clearly otherwise, or simply because the tone of the story isn't quite right, but the Doctor doesn't feel convincingly a part of everyday life this time.
Aside from that, the pacing in this episode is interesting. At first it felt like the pacing was off - like the story was progressing too slowly. But by the end of the episode, I realized that the slow pacing was, if not intentional, then well-chosen; along with more classic-feeling Cybermen (see the Cybermat) we get a classic series sense of pacing condensed into 45 minutes. The result is quite enjoyable, and a nice bit of a breather after the intense episodes we've had so far since the series picked back up. It feels like the calm before the storm.
Speaking of the storm... it's time for
The Wedding of River Song Speculation
I have to apologize to Night Terrors. I didn't realize the creepy rhyme the dolls sing was actually tied into the overall arc, rather than shoehorned in as a last-minute arc connection. I definitely have to give the episode a bit more credit in retrospect for weaving that bit in.
So, let's have a look at that rhyme. Kovarian has given us the end of the first stanza, so the dolls' version goes something like this:
Tick tock goes the clock
And what now shall we play?
Tick tock goes the clock
Now summer's gone away
Tick tock goes the clock
And what then shall we see?
Tick tock until the day
That thou shalt marry me
Tick tock goes the clock
And all the years they fly
Tick tock and all too soon
You and I must die
Tick tock goes the clock
We laughed at fate and mourned her
Tick tock goes the clock
Even for the Doctor
Tick tock goes the clock
He cradled her and he rocked her
Tick tock goes the clock
Even for the Doctor
The first stanza is a little vague, although it's easy enough to see a metaphor between summer and youth - neither the Doctor nor River are particularly young any more. After that, though, the parallels to the Doctor and River are pretty straightforward. I wouldn't normally do this line by line, but I'm in the mood to be thorough. So...
'Thou shalt marry me' is an obvious reference to the finale, given its title.
'You and I must die' - well, we know that River dies in the library, while the Doctor (presumably) dies at Lake Silencio in, well, the series opener and probably again in the finale.
'We laughed at fate and mourned her' again calls to mind Silence in the Library, where the Doctor laughs at fate by saving River's life (sort of) while still mourning her. Although, it could be a foreshadowing instead (see my budding theory/observation further down)
'He cradled and he rocked her'... well, we know about the cradle. And while I may have an especially dirty mind, I think that 'he rocked her' might be exactly what it (euphemistically) sounds like.
Now, Madame Kovarian's version (plus the sing-song stanza added at the very end of Closing Time) gives us a bit more:
Tick tock goes the clock
And what then shall we play?
Tick tock goes the clock
Now summer's gone away
Tick tock goes the clock
And all the years they fly
Tick tock and all too soon
Your love will surely die
Tick tock goes the clock
He cradled her and he rocked her
Tick tock goes the clock
'Till River kills the Doctor
Which gives us the new lines 'Your love will surely die' and 'till River kills the Doctor'. Now, one thing that I find interesting about these rhymes is that none of them preclude the possibility of 'the Doctor' being River Song. In fact, at the end of Closing Time Madame Kovarian even makes a big deal of pointing out that 'they made [River] a doctor today'. Now, practically speaking we know River doesn't die in the next episode (because she dies in the Library), but it's a fun theory because it very nearly fits the poem. And River could very well die and be revived, much like the Doctor seems to have done in Let's Kill Hitler.
I don't in any way expect this theory to pan out. Also, I appear to have been wrong about River killing Rory, which is a shame, because I liked the misdirection that would have been at play if it were true. Oh well.
Oh, and finally, the prequel for the Wedding of River Song gives us:
Doctor, brave and good
He turned away from violence
When he understood
the fooling of the Silence
This rhyme is interesting. The combination of the Doctor 'turning away from violence' and the Silence being fooled implies that the Silence are pawns in someone else's game (Madame Kovarian is certainly a good contender). So, we'll see where that leads; I really like the idea of the Doctor working *with* the Silence; that image is striking and appropriately mythic, somehow.
Oh, and one more note: even Kovarian's recited legend can be made to fit my River-kills-herself theory:
By Silencio Lake, on the plain of size
An impossible astronaut will rise from the deep
And strike the Time Lord dead
Since River is somewhat analogous to a 'Time Lord', as per both the Doctor's comments and our observations of River.
Still, this is all admittedly and intentionally far-fetched, and I don't care to do a lot of actual prediction for The Wedding of River Song. I want this one to just surprise me, and to sit back and enjoy the ride. And from the trailer, it looks like it will be a fairly light-hearted action-filled ride instead of a dark, scary, tense story like the opener was.
\ No newline at end of file
diff --git a/_posts/media/2011-10-05-doctor-who-wedding-of-river-song.html b/_posts/media/2011-10-05-doctor-who-wedding-of-river-song.html
new file mode 100644
index 0000000..e6baa5a
--- /dev/null
+++ b/_posts/media/2011-10-05-doctor-who-wedding-of-river-song.html
@@ -0,0 +1,22 @@
+---
+layout: post
+title: 'Doctor Who: The Wedding of River Song'
+date: '2011-10-05T12:08:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Loki
+- Amy Pond
+- Media
+- The Silence
+- Oðinn
+- he pulled bones from the desert sands
+- Doctor Who
+- Rory Williams
+- Winston Churchill's Personal Mammoth
+- River Song
+modified_time: '2013-10-22T11:19:51.713-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-185350424961410728
+blogger_orig_url: http://www.stringofbits.net/2011/10/doctor-who-wedding-of-river-song.html
+---
+
+Spoiler Warning, Speculation Warning, Postmodernism Warning
Tick tock goes the clock
He gave all he could give her
Tick tock goes the clock
Now prison waits for River
As far as series finales go, this one was thoroughly satisfying. And I have a lot to say about it, which is good, because this is probably going to be my last Doctor Who entry until late December.
Let's start with the name: at least one person commented to me that 'wedding' can have many meanings, and such word play is right up Moffat's alley. Well, they were right, and we managed to get both a metaphorical wedding (of all points in time) and a literal wedding (what we can presume is a Gallifreyan wedding ritual). So, that was a nice bit of wordplay.
But on to the episode. We get some wonderfully fun spectacle scenes in this episode, especially in the opening act, with some wonderfully whimsical quotes, my personal favorites being "Holy Roman Emperor Winston Churchill returned to the Buckingham Senate on his personal Mammoth" and "Pterodactyls are pests. Please do not feed".
And that sets the stage for a quick drop into the plot: time is frozen on April 22nd, 2011, at 5:02 in the afternoon. Which is, obviously, the day the Doctor dies. So it's apparent from very early on (basically the moment the camera shows Churchill's clock) that River Song broke time. Which, frankly, seems like exactly the sort of thing she would do.
There were a lot of stand-out moments in this episode, so I'll just summarize what I thought of it all at once: the pacing was brilliant, the dialogue and acting was all exactly where it needed to be, the visuals were stunning, vibrant, varied, and very interesting throughout. From a production standpoint, I can't complain about a single moment of this episode.
We also have more overtones of the Second and Seventh Doctors in the portrayal of Eleven. First, the Live Chess game, aside from being a clever pun, brings to mind the Doctor in The Curse of Fenric. Fenric says of the Doctor:
He pulled bones from the desert sands and carved them into chess pieces. He challenged me to solve his puzzle, I failed.
The image of the Doctor playing chess (which is also an apt metaphor for the manipulation the Seventh Doctor was famous for) is something that is not only reminiscent of the Seventh Doctor because of Fenric, but more broadly because it is very easy to imagine the Seventh Doctor 'pulling bones from the desert sands and carving them into chess pieces'. Because the Seventh Doctor is an Odinic figure. He is not afraid to use his allies without explaining their purpose in his plans (and this frequently leads him to be quite cruel to his companions), and he never does anything without purpose. Paul Cornell made the Odin connection even more explicit in Timewyrm: Revelation, with what amounts to a spiritual journey culminating in the image of the Doctor hanging from Yggdrasil.
And in a very similar way, the Second Doctor bears more than a passing resemblance to Loki, with his fickle smiles and air of mischievousness. He is the playful, whimsical side of the Eleventh Doctor, the impulsive one who isn't afraid of getting into trouble without a plan already prepared.
Of course, others have discussed the Doctor as a magical figure before, and the show has even commented on it directly ("I hate stories about good wizards. They always turn out to be him."). But the Second and Seventh Doctors are easily the "most" magical Doctors, with very overt occult references attributed to them in various media. And the Eleventh Doctor's character is clearly inspired heavily by both of these previous incarnations. He's even inherited the Second Doctor's propensity for staring out of cameras and video screens.
Which, of course, brings us to the real topic of this week's post. The revelation that not only makes the end of The Wedding of River Song make sense, but will change the way you look at Doctor Who and become the predominant theme of at least the next series of Doctor Who (at least, I hope it will). What is this massive reveal? It is this: The Doctor is fictional.
No, I'm serious. That's a huge revelation. The Doctor, and the entire universe(s) in which he has adventures. All of his companions, and enemies, and acquaintances, are fictional.
What? You already knew that? Well, of course you did. The better question is: did the Doctor?
Trust me, I'm going somewhere with this. And I think the evidence is overwhelming. First: the Doctor is fictional. Diegetically, I mean. The evidence is pretty straightforward: the "oldest question in the universe, the question that has been hiding in plain sight", is "Doctor who?". The only way this makes sense is if, basically, the universe was created in 1963 by Sidney Newman. If the universe was crafted and fleshed out by Terrance Dicks and David Whitaker and Douglas Adams and Steven Moffat. If the universe follows the laws of narrative instead of the laws of physics. If the Sonic Screwdriver really is just an overly literal Plot Device. If the Doctor is literally the most important person in the universe.
There have been other clues as well. The biggest clue that this was becoming a plot element was in Closing Time, when the Doctor is talking about coincidence: "it's what the universe does for fun". As he says this, a coincidence that seems to be a bit much even for him is unfolding right in front of him. Swap 'universe' for 'writers' and you have a meta-narrative here.
And then there are the Silence. This episode made it clear that the Silence are aware of the narrative. At the very least, their leaders (the memory-proof Silence) are. They know they are fictional. The biggest indication of this is when they encounter Rory: they call him "Rory Williams, the man who dies and dies again". By and large, Rory's deaths have occurred in dreams, or in pocket universes, or in other places that the Silence shouldn't be able to know anything about. The only way they could possibly know that Rory has 'died' repeatedly is if they are aware of the narrative - if they can watch the show.
And with that revelation, The Impossible Astronaut and Day of the Moon can be viewed in a new light. I remarked at the time on the amazing narrative techniques that Moffat was employing, by showing us the Silence sometimes and omitting their presence other times. Knowing that the Silence are aware of the story, it becomes obvious that they have control over the narrative itself when they are present.
Of course, their control isn't complete. In particular, the Doctor also seems to exert some control over the narrative: we can think of the show hiding the fact that the Doctor is in the Tesselector until the end of the episode as the Doctor actually trying to hide that fact from the Silence. So, the story then becomes one of the Doctor and the Silence playing an elaborate chess game using the narrative itself as the board. The Seventh Doctor would be jealous. Although actually, there's precedent here - in one of the New Adventures novels, Conundrum, the Doctor is trapped in the Land of Fiction. The novel is framed so that the story is written by the Master of the Land of Fiction, and the Doctor actively wrests control of the narration away from him. So, this idea has been flirted with before.
Now, the Eleventh Doctor doesn't seem entirely aware, or at least not entirely sure, that he is inside a Narrative universe instead of a Physical one. If anything, he suspects it is true - the Troughton-esque look into the camera in the last shot of this episode shows that he is aware of this on some level. Now, certainly there have been nods to the fourth wall before - again, in Conundrum, there's a quip about the extradiegetic world - but it's never been played as anything other than a cute throwaway. It has never, if I may use that forbidden word, felt canon before.
So, then, how does the Doctor control the narrative if he's not aware of it? Well, that's simple. He's the protagonist. Obviously, the narrative has to bend around his will and his actions. He doesn't need to be aware of that fact to take advantage of it. This explains why the 'fixed point in time' at Lake Silencio could be fooled by using a robotic copy of the Doctor - we're not dealing with the laws of Physics, but the laws of Narrative. Appearance is everything.
A better question is this: are the Silence going to be fooled by the Doctor's trick? If they are capable of viewing the narrative extradiegetically, then that means they know they have been tricked. They saw the same things we saw. It's possible, though, that they stopped paying attention to the narrative once they thought the Doctor to be dead. Of course, that gives us a new question:
Why do the Silence want the Doctor dead?
If the Silence are meta-aware, and they know the question and its implications, why do they want to prevent the Doctor from asking it? One possibility is that they fear presenting the Doctor with proof of his diegetic nature will destroy the narrative, bring an end to Doctor Who, and thus an end to their existence. I'm certainly not the first person to mention the idea of narrative collapse in Doctor Who before. But wouldn't killing the Doctor also result in the collapse of the narrative?
Not necessarily. It would provide an end to the narrative, but that does the opposite of collapse it - it solidifies it. Hamlet is not a story of narrative collapse, even though the protagonist dies at the end. No, the death of the protagonist solidifies the narrative. And even with a dead protagonist, we can continue to tell stories. Rosencrantz and Guildenstern are Dead demonstrates this well for the Hamlet example. The protagonist realizing his diegetic nature, on the other hand, poses a different problem. In the Doctor's case, it could lead him to attempt to escape the diegesis and enter the extradiegetic (read: our) world. Certainly this is what happened in The Mind Robber - the Doctor escaped from the Land of Fiction, and in the process he destroyed it. And the result of this is that even if we try to create new stories, they risk feeling contrived - the suspension of disbelief has been shattered.
The Silence's story, then, is The Mind Robber taken to a higher level of the narrative. Or, if you prefer, it is the same story told without the conceit of a metaphor: instead of the Land of Fiction to represent the Doctor's fictional nature, this story uses the Doctor's actual fictional nature itself.
To the fans, then, the Silence are arguably the heroes of the story - they want to preserve the universe in which they exist, and thus the universe from which we get Doctor Who stories. If the Silence fail, the narrative structure of Doctor Who, the ability to tell new Doctor Who stories, is threatened.
Silence must fall.
\ No newline at end of file
diff --git a/_posts/media/2011-12-05-why-i-excited-about-legend-of-korra.html b/_posts/media/2011-12-05-why-i-excited-about-legend-of-korra.html
new file mode 100644
index 0000000..46dca39
--- /dev/null
+++ b/_posts/media/2011-12-05-why-i-excited-about-legend-of-korra.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: Why I'm excited about The Legend of Korra
+date: '2011-12-05T10:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- Media
+- Buffy the Vampire Slayer
+- Feminism
+- 'Avatar: The Last Airbender'
+- The Alien Trilogy
+- 'The Last Airbender: The Legend of Korra'
+modified_time: '2013-10-22T11:19:51.753-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-6563044141342977597
+blogger_orig_url: http://www.stringofbits.net/2011/12/why-i-excited-about-legend-of-korra.html
+---
+
+Being a geek and a girl is tough. As geeks, we have to put up with the things every geek is familiar with: the bullying and derision from people who think we're weird. As girls, we have to put up with the sexism that is so deeply entrenched in our culture that many petiole can't even see it when you point right at it and say "Here it is. This. Look at it."
Geek guys perpetuate this sexism, too. Every time we see "tits or gtfo" in a forum our multiplayer game, every rape threat we get in our xbox live inboxes (trigger warning), and every "are you looking for something for your boyfriend" from a comic book store employee sends a message: geek boys don't want us in their clubhouse.
And the creators of (for lack of a better term) geek-targeted content perpetuate the problem. Every time a game assumes a masculine gender onto an unseen protagonist, that pushes women a little farther away. Sure, we can roll our eyes and move on, but it all contributes to a culture that delivers a resounding message of "we don't want you here." Really, it's been one long chain of Marios rescuing Peaches for decades. And notably, when Peach finally got her own game, it had to fall back on the tired trope of women being overly emotional.
Even Braid, which is a fantastic game and worthy of heaps of praise, is fundamentally about a man and his obsession with a princess, albeit a metaphorical one. And Portal, a game with literally no male characters (the companion cube seemed to have a distinctly feminine presentation to me, gods rest her soul), managed to bring fat shaming into its sequel.
And yes, there are exceptions. We have Buffy, and Samus, and Ellen fucking Ripley. And of these examples that sprang to my mind, 2 of the 4 have scenes that seriously compromise the strength of the character in ways that are flatly uncharacteristic: Samus in the entirety of "Other M" and Buffy in the pointlessly rapey scene in The Pack in which she is suddenly incapable of fighting back the moment the situation becomes slightly sexualized (by contrast, the much later scene in Seeing Red handles sexual assault and its aftermath much more impressively, with the actual ramifications of the scene explored in detail. But that gets into the oddly difficult to navigate world of Buffy's feminist politics, which is too large in scope to deal with here).
And even more often, we just get male characters, with the female characters in minor or supporting roles. The argument goes like this: men are the target audience, so protagonists have to be male or the audience won't identify with them. This argument, of course, is broken on at least two levels: male geeks loved the Alien trilogy, and a very large portion of geeks are, in fact, women.
Which brings me to Avatar: The Last Airbender, a children's television show that underestimated its target audience by about a decade. It was a great show, with humor that worked well for both children and adults, serious themes that were not sugar-coated, beautiful artwork and a well-researched, interesting and unique setting. If we are very lucky, Avatar will do for western animation what Birth (by Ōshima Yumiko) did for shoujo manga - present it as a serious storytelling medium that deserves recognition alongside other visual arts.
And one of the core characters was a strong female character, portrayed with depth and nuance. Several minor female characters were likewise independently motivated, steering women. Of course, the protagonist was still a boy. Because this is a show with martial arts and fireballs and armies, so it's obviously for boys, right? There's no way a girl would be interested in an epic struggle against impossible odds, right? The best we can hope for is to inject a little feminist thought as a side issue.
Except now, we have a sequel series: The Legend of Korra. A story by the same team, with a female protagonist. Here's a trailer. There are several promising things about the trailer: the music, artistic direction, action sequences and the little hints we get about the story and setting are right in line with what we expect from the team that brought us The Last Airbender - this is going to be quality. But the thing that really strikes me is how practical her outfits are: they actually look like clothes someone might fight in. And, despite Korra being visibly several years older than the main characters of The Last Airbender (she looks closer in age to Zuko), the artists have resisted the urge to (consciously or otherwise) sexualize her appearance. Visually speaking, she is clearly a girl, but being a girl is clearly not her sole defining attribute. She is also strong and athletic, and dresses practically. From the (admittedly a bit emo-looking) scenes of her sitting alone, she is also torn or driven by something. And apparently she's not averse to knocking someone through a shop window. All in all, she looks pretty bad-ass. A Strong Female Character in the Ellen Ripley tradition.
This is something we need more of: female role models in geek media. It lets young, potential geek girls know that it is okay to enjoy this stuff; that it is for them, too. And it gives those of us who have struggled to carve a place for ourselves a sense that we're finally being heard.
And if anyone reading this doubts that sexism in the geek community is a real problem (that is, if you still can't see it), let me share with you this youtube comment from the above trailer:
chicks with muscles are just creepyyy. i take it that you're a girl, and if you like "women muscle" then get some muscle for yourself and see how many guys like it. i mean for me i like when a girls body is nice and soft, not hard and strong. don't you understand that that's a turnoff for most guys?
See, what fanime1 has done here is to assume that the central purpose of women is to be 'nice and soft', to be appealing to men. A vast majority of our media supports this idea - most women in media, geek media included, fall into a pretty narrow band of 'conventionally attractive' body types, because they are written (and cast) primarily for men (more specifically, for the Male Gaze). And girls absorb this idea: that women have to be attractive to have worth.
This is what I mean when I say we need more things like The Legend of Korra. Korra is a rarity: a character for us.
\ No newline at end of file
diff --git a/_posts/media/2011-12-12-wandering-son-reflections-episode-1-no.html b/_posts/media/2011-12-12-wandering-son-reflections-episode-1-no.html
new file mode 100644
index 0000000..717495c
--- /dev/null
+++ b/_posts/media/2011-12-12-wandering-son-reflections-episode-1-no.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Wandering Son Reflections: Episode 1 - "Onna no Kotte, Nande Dekiteru?"'
+date: '2011-12-12T09:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- Wandering Son
+- Media
+- Hōrō Musuko
+- transgender
+modified_time: '2013-10-22T11:19:51.812-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-9072831119461404027
+blogger_orig_url: http://www.stringofbits.net/2011/12/wandering-son-reflections-episode-1-no.html
+---
+
+This was originally posted in February of 2011 here. It has been updated substantially here.
Spoiler Warning, and possible Trigger Warning for description of internalized transphobia
After watching the first two episodes of Hōrō Musuko (放浪息子, “Wandering Son”), I have decided to start a running review/commentary of the series here. This post will review the first episode. You can watch the episode online at crunchryroll, and I highly recommend watching the episodes before reading the review, because otherwise you're likely to be a bit lost. They're about 22 minutes each.
First, personal background - I’ve long been a fan of anime. However, my understanding of the nuances of Japanese culture is somewhat lacking. I am white. I am native to the US. So, while I will try to avoid ethnocentric creep, there may be some in these reviews. If anyone sees problematic spots and wants to point them out to me, I will be most appreciative.
I am also a trans woman, currently in the midst of transition (edit: I completed transitioning socially in April 2011). So, this story is very relevant to my interests, and I am particularly interested in the way that gender variance is presented.
A note on pronouns: I am defaulting to masculine pronouns for Shūichi and feminine pronouns for Yoshino. The characters themselves, as they are still struggling with their identities, probably still associate with these pronouns (it has not come up so far). At any rate, the characters in the show consistently give them these pronouns, so it is also a concession for ease of mapping the review to the story.
The title of the episode, "Onna no Kotte, Nande Dekiteru?", translates to "What are little girls made of?" So, right from the beginning, we're not pulling any punches. The title echoes the struggle with identity in the face of gender essentialist preconceptions that I (and, I am certain, many other trans people) have to deal with both internally and from others. What is gender? What does it mean to be a boy or a girl? The series jumps straight into these questions with very little build-up.
The episode opens with a voiceover from a character we will shortly know as Nitori Shūichi*, who delivers the title line. This line will be repeated several times throughout the episode at introspective moments. We then move on to a scene with a still camera pointed at Shūichi, while he shifts uncomfortably in his seat and describes the discomfort he feels in his new school uniform. He is clearly trying to look happy, even though he is out of sorts. This is all delivered over a haunting, melancholy piano piece.
At the beginning of the episode, we have powerful, evocative storytelling. Visually, this is very compelling, and the narration is characterization at its best; I am already getting a strong sense of who this person is, and I am starting to empathize deeply with him. The music is stirring, and precisely on-point for the emotions the show is trying to evoke. It underscores the fact that this character (and, subsequently, all of these characters) are less happy than they are trying to seem.
The next sequence felt a bit jumbled to me the first time I watched it. We are introduced to most of the characters as they head to their first day of school (6th grade for most of the characters). Even before we have enough exposure with the characters to identify them readily, we establish that most of these characters already have relationships with each other. The show gives us the feeling that we’ve been dropped right into the middle of their lives with no exposition. Which, of course, is exactly what has happened, both diegetically and in a production sense (more on that in a moment). Several past events are alluded to, including a close friendship between Shūichi, Takatsuki Yoshino, and Chiba Saori (Saorin), that ended abruptly after some sort of unspecified romantic drama occurred.
This sequence also alludes to the fact that Yoshino is also transgender. She is clearly uncomfortable when someone says she looks cute in her uniform, and envious of the fact that Chii (who we will come back to in a minute) is wearing a boy’s uniform. Now, these factors could easily be observational bias on my part, but the show validates my theories: as the episode progresses, a friend buys Yoshino a boy’s uniform, which makes her ecstatically happy.
So, the show begins with interpersonal tensions already in place, but it leaves it up to the viewer to infer more information about those tensions. This is unsurprising, since the manga actually begins with the characters in 5th grade; the anime has chosen to start later, but include all of the omitted story as part of its background (as far as I can tell - actually, after reading the manga I think it may just include some of the broad strokes, and rework some of that material into its own plot). This is an interesting choice from a storytelling standpoint, and has the opportunity to fail miserably. I certainly felt a bit lost during the first half of the episode or so. But this seems to be intentional; as a dramatic piece with a fairly serious tone, this sudden burst of information makes us feel like we are intruding on someone’s life, and left to pick up the context ourselves. By the end of the episode, it is clear who all of the characters are, and most of their relationships are established. As a slice of life piece, it works very well; we really get the impression that we’ve just come in at an arbitrary point in the characters’ lives.
As the episode progresses, we meet Sarashina Chizuru (Chii), an extroverted and impulsive girl who wears a boy’s uniform to school just 'because she feels like it'. In a story about gender identity, it is interesting to see that we also have a character clearly treating gender as presentation. Unlike Shūichi, Chii has the privilege to do this without the nervousness, shame, guilt, and embarrassment that often accompanies actually struggling with a transgender identity. Whether and how the series will treat with this privilege disparity remains to be seen.
The episode had a few stand-out moments for me. The first came during a scene where Shūichi dresses in a girl’s uniform after school, and spends some time wandering around town on his own. Narration by Shūichi establishes that he has never done this before, and usually only dresses up at home. During this outing, a girl in a shop suggests Shūichi buy a hairpin because, she says, “You’re cute, and this will flatter you”. This scene depicts such a small thing - having someone treat you as the gender that feels right to you. This is something that cisgender people experience every time they interact with someone - it is so commonplace that it goes completely unnoticed. But if you’re trans, this is often something you have gone large portions of your life without ever experiencing.
I clearly remember the first time that I was treated like a woman by a stranger, completely and without hesitation. It was a wonderful moment for me, validating and uplifting. I may have been projecting, but it seemed to me that Shūichi’s reaction was similar. It is important to note here that the writer of the original manga, Shimura Takako, is a cisgender woman (to the best of my knowledge). But (and this is assuming the anime follows the manga fairly closely) she has written an amazingly accurate and empathetic portrayal of what it feels like to live as a trans girl. She gets the little details right, and the animators and voice actors deliver here too - Shūichi’s character is imminently believable to me.
The other stand-out moment in this episode is at the end. Shūichi wakes up from sleep with a shock, to discover he has had a wet dream. He delivers in voiceover - "What are little boys made of? Snakes and snails...", a bitter refrain of the episode’s title. The story is set as the characters enter puberty, and this is a visceral example of how puberty, for many trans people, is a time when our bodies turn against us. I know that puberty, for me, felt like my very physiology was denying a truth that I already felt ashamed of. I was constantly disgusted by my body, and it was the only time in my life I thought seriously about suicide. I didn’t really understand all of that at the time; that is, I didn't connect the feelings that I should be a girl with the disgust I felt about my body. Mostly, I think, because I had buried the former as deeply as I could, and thought about it as little as possible.
This conflict of gender identity with puberty is a thematic trend I expect will be fundamental to the show as it progresses. I remain hopeful about this show - it is a narrative with a lot of potential to help cisgender people understand the perspective of trans people a little better.
* a hopefully correct extended footnote on Japanese names: Japanese names are written (and spoken) surname first, given name second. It is common for someone to be referred to by their surname by everyone except their closest friends and family. For the purpose of clarity here, especially since the show has multiple members of the Nitori family represented, I will introduce characters with their full name, and then only use their given name unless the show gives them a clearly more recognizable nickname. Confusingly, this conflicts with how the names are presented in the show. Anime subtitles are inconsistent from one show to the next about how they choose to translate names. Some shows get subtitled with the given name always used, others with the surname always used, and that's not even getting in to honorifics. I believe Wandering Son has been providing the name as spoken (sans honorific) instead of converting consistently to the given name. Also, the subtitling is inverting full names when they are spoken, so if someone says "Nitori Shŭichi-san", it gets subtitled as "Shūichi Nitori". Which is fair enough, but it forces me to make a decision about how to transliterate here. So, there it is.
\ No newline at end of file
diff --git a/_posts/media/2011-12-15-wandering-son-reflections-episode-2.html b/_posts/media/2011-12-15-wandering-son-reflections-episode-2.html
new file mode 100644
index 0000000..18a2a0d
--- /dev/null
+++ b/_posts/media/2011-12-15-wandering-son-reflections-episode-2.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Wandering Son Reflections: Episode 2 - "Kirai, Kirai, Daikirai"'
+date: '2011-12-15T09:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- Wandering Son
+- Media
+- Hōrō Musuko
+- transgender
+modified_time: '2013-10-22T11:19:51.822-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-829390063405845877
+blogger_orig_url: http://www.stringofbits.net/2011/12/wandering-son-reflections-episode-2.html
+---
+
+This was originally posted in February of 2011 here. It has been updated substantially here.
You can watch the episode here.
Spoiler Warning
This episode switches gears and focuses mostly on Saorin. It also gives us a much-needed flashback that provides the backstory on the relationship between Shūichi, Yoshino, and Saorin.
Near the end of the previous episode, Shūichi runs out of his house, distressed, after an encounter with his sister. I didn't get around to talking about that scene in that entry, so let's touch on it here. When I was still struggling to understand my gender identity, I mis-identified the desire to be a girl with the concept of cross-dressing (as did a number of other trans people that I know). So, for years, I cross-dressed when no one was around (the fact that this is an amusing phrase in light of my current understanding of my gender identity does not escape me - I eventually realized that 'cross-dressing' was what I was doing when everyone was looking at me). And like Shū, fear of discovery was a huge thing. I waited, always, until I was home alone, or the rest of my family was asleep. I always feared a sudden knock on my door. I think Shūichi's flight is best viewed in that context, in the mixture of shame and fear that is hard to escape when you feel like you are doing something deviant, something that your loved ones would disapprove of.
In his haste to escape his sister, Shūichi leaves half-dressed in only an undershirt and a skirt, and runs into Yoshino on a bridge. Yoshino offers her hoodie, commenting that Shūichi looks like a girl with a hoodie and a skirt on. This marks a reparation of their friendship. Which leads us to Saorin.
Saorin, up to this point, has only been seen briefly, and was then depicted as mostly quiet but emotionally unstable and prone to violent outbursts. In the first episode, she assaulted a classmate who insinuated that Shūichi and Yoshino had a relationship at one point. In this episode, we learn that she harbors a lot of resentment toward Shuuichi and Yoshino because of a love triangle that imploded at some point before the narrative picks up. Some time ago, Saorin expressed interest in Shūichi, only to find that Shūichi had already expressed interest in Yoshino. Saorin confronted Yoshino about it, and they both ended by expressing hatred for each other. Your basic love triangle story. I'd suggest maybe this is poly-fixable, but I'm pretty sure Saorin is way too unstable for that. More implicitly (and more importantly for our purposes), Saorin also seems to feel that she had already been left out because Shūichi and Yoshino had their trans experiences in common, and had bonded over them until Saorin felt like a third wheel.
Saorin comes across, in this episode, as fundamentally unsympathetic to the viewer. At the beginning of the episode she calls Shūichi and Yoshino ‘filth’ as she passes them in the hall. She also nearly assaults Chii’s friend Shirai Momoko (Momo), and when Yoshino expresses that they should perhaps set their differences aside, Saorin refuses.
Despite this, the episode ends with Saorin tentatively making peace with the rest of the group, after Sasa Kanako (Sasa), who has been trying to remain friends with both Saorin and the others, gets angry at their bickering and refuses to speak to them. So, it requires the coercion of her only remaining friend for her to stop being an asshole to the rest of her former friends. Like I said: unsympathetic.
The premise of the episode, though, seems to be that we should sympathize with Saorin. Ariga Makoto (Ariga) sums it up thus: “She’s got a rough life”. However, when juxtaposed to the issues the other characters are facing, Saorin (as portrayed so far, at least) comes across as whiny and privileged by comparison.
So, enough about Saorin, then. We don’t have time for whiny privileged girls who hold grudges. Let’s talk about Ariga, whom we just mentioned for the first time. He plays a slightly more prominent role in this episode, and seems to be Shūichi’s only (or at least closest) male friend. We also get a suggestion that he is also gender variant; Shūichi gives him a clover hairpin to match the one he bought in the first episode. In the same scene, they spend time chatting about private matters - notably, about the fact that Ariga feels he may be attracted to boys. This is the first explicit mention of sexual orientation on the show. Leaving aside gender variance (since all of the gender variant characters are still discovering their identities in this regard), Ariga thinks he might be gay. The line is a throwaway - we don’t dwell on it at all, but rather move on. Presumably, we will return to this later in the series.
On the subject of Shūichi and gender, the first relevant moment in this episode comes when Shūichi is called ‘a little girl’ as an insult by one of his male classmates; his response (unnoticed by everyone except Ariga) is to blush and then smile broadly. A similar scene happens when he takes his lunch to his older sister; one of her classmates says “he looks like a girl”, leading Shūichi to repeat the phrase, “I look like a girl”, with a happy look on his face.
These scenes, more than anything we’ve seen before, really work to differentiate Shūichi as being solidly transgender (as opposed to, say, a cross-dresser in the common understanding of the term). His response to being called a girl is joy, and I suspect it is stemming from a sense that it is the correct thing for him to be called.
On the whole, this episode is much more solidly put together than the first one - it has more cohesion between scenes, and the pacing is better. However, emotionally, it comes across as weaker. The first episode used a effective narrative repetition, with the 'What are little girls/boys made of' motif repeated through the episode, and the scene early on where Shūichi and Yoshino each narrate the phrase 'I/we have a secret'.* The music and the dialogue are still top notch, but the overall narrative feel of this episode did not have as powerful an impact on me.
* The subtitles translate the phrase 'We have a secret', but since pronouns don’t indicate number in Japanese, it could potentially be translated 'I have a secret' as well. Or 'I/we have secrets', for that matter. I certainly think the translators chose well here, though.
\ No newline at end of file
diff --git a/_posts/media/2011-12-19-wandering-son-reflections-episode-3-to.html b/_posts/media/2011-12-19-wandering-son-reflections-episode-3-to.html
new file mode 100644
index 0000000..658f8ba
--- /dev/null
+++ b/_posts/media/2011-12-19-wandering-son-reflections-episode-3-to.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Wandering Son Reflections: Episode 3 - "Romio to Jurietto"'
+date: '2011-12-19T10:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- Wandering Son
+- Media
+- Hōrō Musuko
+- transgender
+modified_time: '2013-10-22T11:19:51.832-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5457563739919113829
+blogger_orig_url: http://www.stringofbits.net/2011/12/wandering-son-reflections-episode-3-to.html
+---
+
+This post was originally posted in February of 2011 here. It has been updated substantially.
You can watch the episode here.
Spoiler Warning
In this episode, it feels like the show is finally reaching its stride. It combines the strengths of the previous episodes; the pacing is as good as the second episode, and the overall emotional impact and thematic cohesion is on the same level as the first episode.
So, like the episode, let's start by talking about bras. For a young and not-so-budding trans girl, bras occupied an odd position in my mental landscape. I was consciously envious of the cis girls around me that were developing breasts. At the same time, though, I had already developed a knee-jerk defense mechanism against anything with a feminine connotations (at least in public). We'll come back to this in a bit.
In the episode, though, the character contemplating supportive undergarments is Yoshino, who expresses terror at the thought of having to wear one, and asks Shūichi if he has ever wanted to wear one. This leads to both of them admitting envy of each other’s bodies. This is a touching scene, and seems to me to be deeply insightful about a very particular part of trans experience. Here the characters deal with it awkwardly, but that makes sense - the characters are still very unsure of themselves and still discovering their identities.
Near the end of the episode is another scene where Yoshino tries on the bra she bought. It ends with her throwing it off in disgust, and hugging her boy’s uniform to her chest, sobbing. This is an utterly heartbreaking moment, and it is so well portrayed that I felt slightly embarrassed, as if I had accidentally walked in on someone at a private moment. It is also a very powerful scene, and it nearly made me cry. As a trans woman (as opposed to a trans man), I can’t pretend to understand exactly what that moment is like, but the show succeeds in evoking empathy, which is quickly becoming its basic mode of operation.
Continuing on the theme of approaching puberty, Mako (Ariga Makoto) points out to Shūichi that their voices are going to change soon, which is upsetting to both of them. He further suggests that they record their voices “before it is too late.” This is also used as a pretext for them to dress up as girls together. This solidifies the subtle hints in the last episode that Mako is also gender variant. He seems much more excited to dress up, and seems to view it as a social activity, a way to bond with Shuuichi over a shared experience.
Anyway, I am describing this scene because it gives me a chance to talk about Japanese language and gender. When Shūichi begins recording his voice, he begins “Boku no namae o...” (My name is...). Mako stops him, saying “be more feminine.” He starts over, this time saying “Watashi no namae o...” (My name is...). The difference here is in the first person pronoun used, and it is something English doesn't have an equivalent construct for. ‘Boku’ is an example of a masculine word - not masculine in the sense that words in some languages have gender (the Romance languages being readily available examples), but in the sense that it is a word typically only used by men. ‘Watashi’ is considered gender-neutral, but my suspicion is that, since ‘boku’ is used so predominantly amongst boys, ‘watashi’ is probably viewed as feminine by comparison. Unfortunately, this distinction is not caught in the subtitling.
Everything I’ve discussed so far are the sub-plots of the episode, and the episode's core is worth remarking on as well, which centers around a play that the characters' class is planning for the school’s cultural festival. Saorin suggests that the class do a 'genderbender play'*, or a play in which the boys play the girls' roles, and vice versa. This idea is enthusiastically accepted by the rest of the class.
Saorin submits a script idea that is a modern adaptation of Romeo and Juliet, while Shūichi comes up with the idea of writing about boys who want to be girls, and girls who want to be boys. This seems to be a huge leap forward in Shūichi’s thought process - he is, in a way, openly admitting that he wants to be a girl, not just dress like one. Whether or not he will eventually consider the distinction between wanting to be a girl and the idea that he might already be a girl remains to be seen; so far, the show has kept to the potentially gender essentialist language of “a boy who wants to be a girl”**. Shūichi's words here mirrors my feelings and understanding of myself at his age, actually; having never really encountered the idea of gender variance, that was the way I framed the thought, when I wasn’t running away from it at full speed.
After the play is announced, there is a scene where the girls from the class are talking excitedly about the idea. They see it as a simple way to break social rules, and talk animatedly about it. The three trans characters, however, are all visibly uncomfortable. Here we have yet another interesting insight into trans experience. When I was a teenager, whenever someone mentioned cross-dressing, or any kind of gender variance, I felt a mixture of embarrassment and shame. This even extended to topics that were stereotypically feminine but without the gender variance context - any conversation that mentioned makeup, nail polish, or women’s shoes was likely to make me blush. As a result, I spent a long time actively avoiding anything feminine, even to the point of harboring a deep aversion to the color pink.
At the time, I didn’t even know why I felt embarrassed. I recognize now that it was the same thing I see in the characters in this scene - they are afraid that if they show too much enthusiasm, someone will know. That they will see into your soul and find the truth you’ve tried to hide from both them and yourself.
Shūichi and Saorin’s teacher suggests they combine their scripts, and at Shūichi’s suggestion, the play becomes a version of Romeo and Juliet with the lead characters both being trans. What is more interesting, though, is Saorin’s behavior while they work on the script together. She invites Shūichi to come work on it at her house, and he agrees after she promises "not to do anything weird this time." However, she immediately breaks her promise, and gets very excited about the idea of Shūichi wearing one of her dresses.
Saorin’s behavior here feels very creepy, and it certainly borders on chaser behavior. What’s more, it is clear that she has done this before. Shūichi is obviously uncomfortable with her taking such an enthusiastic interest in his gender identity, and yet she persists. Whether this behavior is an attempt to create a bond similar to the one Shūichi has with Yoshino, or whether the behavior drove Shūichi away from Saorin (and towards Yoshino) in the first place is uncertain.
Saorin also notes the parallel between their play’s Romeo and Juliet, and Shūichi and Yoshino. She suggests casting Shūichi as Juliet, and Yoshino as Romeo. Her suggestion is tinged with bitterness, but she seems to have a moment of genuinely wishing for Shūichi’s happiness. Interestingly, this casting upholds the original point of the play (which was to reverse the gender roles of the actors relative to their characters) in a surprising way: it casts Shūichi as a trans man, and Yoshino as a trans woman, so that they are still playing, functionally, the opposite gender.
* The translation 'genderbender play' didn’t really sit well with me, so I did some checking. Luckily, Shūichi writes down the phrase during the episode, so I was able to find the kanji: 倒錯劇 (tousaku geki). The dictionary meaning of this phrase would be 'inversion play' or 'perversion play', which don’t really convey the subtitled meaning at all. My assumption was that this is a particular phenomenon in Japan, but the only results I can make any sense of on a google search for the phrase are related to Wandering Son. If anyone with more knowledge of Japanese culture can confirm whether this is a cultural thing I am missing, I would be grateful.
** I am aware that some trans people see themselves as having been their birth-assigned gender before transitioning, and this complicates the language I use when I talk about this element of the show's dialogue choices. My personal experience is that I was always a girl. Society’s gender essentialist memes convinced me otherwise for a very long time, and this leaves me with an unfortunate reflex reaction that tries to categorize phrases such as 'I am a boy who wants to be a girl' as cissexist. However, giving in to this reflex would be erasing of trans people whose experiences do not match my own, so I am trying my best here to use language that doesn’t do that.
\ No newline at end of file
diff --git a/_posts/media/2011-12-22-wandering-son-reflections-episode-4-no.html b/_posts/media/2011-12-22-wandering-son-reflections-episode-4-no.html
new file mode 100644
index 0000000..6fcebfe
--- /dev/null
+++ b/_posts/media/2011-12-22-wandering-son-reflections-episode-4-no.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Wandering Son Reflections: Episode 4 - "Watashi no Namae o Ageru"'
+date: '2011-12-22T09:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- Wandering Son
+- Media
+- Hōrō Musuko
+- transgender
+modified_time: '2013-10-22T11:19:51.841-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-415864552159374599
+blogger_orig_url: http://www.stringofbits.net/2011/12/wandering-son-reflections-episode-4-no.html
+---
+
+This post was originally posted in February of 2011 here. It has been updated substantially.
You can watch the episode here.
Spoiler Warning
This is the first episode that made me cry.
Sure, each of the other episodes made me get teary-eyed at least once, but this one actually gave me a need-a-tissue, tears-streaming-down-my-cheeks crying fit. It did this by being painfully sweet. But we’ll get to the scene that made me cry a bit later. First, I want to talk about swimming.
I fondly remember the days when throwing on a bathing suit and going swimming was straightforward, or even possible. As my gender dysphoria increased, and I started shaving the hair from areas that gave me the greatest bodily dissonance, swimming slowly became more and more awkward, until it was basically impossible for me to comfortably go swimming in public. Now that I have transitioned, swimming is still awkward. It is difficult for me to find a bathing suit that doesn't make me feel exposed, and even then my body's shape makes me feel very uncomfortable when it is that obvious. So when this episode opened with the cast swimming at school, I winced inwardly.
The scene is used to show more of Shūichi and Yoshino’s dysphoria. Shūichi is visibly envious of Yoshino's figure, and Yohsino is distinctly self-conscious when she is complimented as looking ‘womanly’. And this leads us to another aspect of trans experience that this show portrays very correctly - the unknowingly harmful comment.
Speaking for myself, as always, I know that as I began transitioning, offhand comments directed at me while I was dressed as a boy could often hurt, even when there is no ill intent (or special knowledge) on the part of the speaker. A good example occurred when I was at the bank. The teller attempted to compliment me by saying "Your hair is so cute! Girls must be jealous of it." While it is good to know my hair is cute, the way the comment put me solidly on the 'boy' side of the line stung. (Edit: Luckily, this is no longer a problem for me. It remains, however, an experience common to many trans people.)
The episode gives us another example of this, too. When Shūichi gets out of the bath, his sister comments "A boy shouldn’t take such long baths." In this case, though, it is possible the comment may be more intentional. Even given only the evidence seen so far in the series, Maho would have to be pretty oblivious not to suspect that her brother is gender variant at this point. However, the show hasn't really given us any indication that she is aware of Shūichi's struggles, and actually implies an active lack of empathy towards him. When Maho's friend Anna* makes Shūichi cry, Maho's response is "It's fine, he does that all the time." This is both callous and suggests that Shūichi is suffering from depression, likely caused by dysphoria.
We also see a little more of the show's fourth trans character, Yuki, in this episode. Yuki is a grown trans woman who has befriended Yoshino. She has a boyfriend (Shi), whom she has known since childhood, and he was "the only one who never bullied [her]." Yuki comes across as a very warm and genuine person, as well as being pragmatic. She also represents a trans success story - she is a successful, confident, attractive woman who survived being teased and bullied. She's a representation of the It Gets Better narrative, which has been criticized (rightly) for being naive. But where the It Gets Better campaign feels like it is encouraging a complacent 'just wait, and everything will be alright' attitude, Yuki's character doesn't bear that connotation (she doesn't strongly oppose it, either - we simply don't know enough details about her story for that to be any part of the narrative here).
The touching scene in this episode (the one that made me cry) comes when Yoshino and Shūichi are alone and talking to each other. Yoshino offers Shūichi her name, in exchange for his. The impact of this hinges on another thing that is fairly unique to the trans experience. Names are important things for a lot of trans people. We cast off our birth-assigned names when we cast off our birth-assigned genders. This is a deliberate act, and choosing a new name also has to be a deliberate act. Here, Yoshino is offering Shūichi a name. I have been in something similar to Shūichi's place, here; my name was given to me by someone I hold dear (although it was not offered as an exchange). Even so, Yoshino's actions here made me realize just how precious that gift really is. I felt like I had taken it for granted, when I should be treasuring it.
So, that scene made me cry, for deeply personal reasons. And now that I was good and tearful, though, the next part of the scene just fed the cry fest. So, moving on...
Shūichi tells Yoshino that he wants her to be Romeo in the play, and for him to be Juliet. He says "I want you to see me as a girl... because I see you as a boy." This seems to be both his way of giving Yoshino a gift in exchange, as well as an attempt to tell her how he feels. "I see you as a boy." I remember the first time someone said to me, "You are a girl." The words came at exactly the time I needed them. Simple words; to cisgender women, it is a statement so obvious as to be not even worth saying or hearing. But every time I feel bad, every time I feel too much dysphoria and I'm trying not to hate myself, I remember those words. "I am a girl" is easy, for me. But knowing that someone else sees me the way I see myself... that helped immeasurably. That simple second person pronoun makes all the difference.
When Shūichi returns home, he repeats to himself “Boku no namae wa Yoshino.” He is still using the masculine pronoun ‘boku’, despite the fact that he is clearly starting to come to terms with his identity as a girl. This makes sense, though - it takes time to clear all of culture's gender essentialism out of your brain. I still misgendered myself, in my own thoughts, for quite a while when I began to transition.
The other scene worth commenting on from this episode is a meeting between Saorin and Shūichi. Saorin asks him to come over, ostensibly to talk about the play. That is where it starts; Shūichi added to the play the idea that Romeo and Juliet could give each other their names, and Saorin offers Shūichi her own name. On learning the origin of the scene in the play, Saorin feels slighted, but Shūichi explains to her that he doesn’t want to become a girl for Yoshino's sake, but for his own. Saorin responds with a selfish tirade that includes a lot of gender essentialism. She equates GRS with gender, saying "[without an operation], becoming a girl is impossible... It’s all just an act." She also says that she doesn't want Shuuichi to become a girl, because she is in love with him (presumably as a boy).
At this point, Saorin has very little to redeem her character. She contradicts herself a lot (and this seems intentional, as she seems very confused about her own feelings). She is consistently portrayed as selfish. She seems to fetishize Shūichi's gender variance on the one hand, and be terrified of it on the other. She seems, in short, to be deeply cissexist, but her feelings for Shūichi make her willing to encourage his dressing as a girl. When the idea of it being more than that, however - when the idea of Shūichi actually being a girl comes up - she reacts with defensive hostility.
* So, as a character shares my own name in the show, I feel obliged to comment on that. I really want Anna to be a good character! She seems to have the potential to be; at least, she felt remorse after making Shūichi cry.
\ No newline at end of file
diff --git a/_posts/media/2011-12-29-doctor-who-doctor-widow-and-wardrobe.html b/_posts/media/2011-12-29-doctor-who-doctor-widow-and-wardrobe.html
new file mode 100644
index 0000000..2b91006
--- /dev/null
+++ b/_posts/media/2011-12-29-doctor-who-doctor-widow-and-wardrobe.html
@@ -0,0 +1,21 @@
+---
+layout: post
+title: 'Doctor Who: The Doctor, The Widow, and the Wardrobe'
+date: '2011-12-29T12:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- William Hartnell
+- Media
+- things that make me cry
+- C.S. Lewis
+- Christmas
+- Narnia
+- Sylvester McCoy
+- Doctor Who
+- Patrick Troughton
+modified_time: '2013-10-22T11:19:51.889-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-6414928198334333201
+blogger_orig_url: http://www.stringofbits.net/2011/12/doctor-who-doctor-widow-and-wardrobe.html
+---
+
+As ever, Spoilers.
There are only two episodes of Doctor Who that have ever made me cry. The first one was Forest of the Dead - River's death scene was amazing, Alex Kingston sold the idea of a woman who had loved the Doctor so well that I couldn't help but feel that the Doctor had lost something tremendous. It remains one of my very favourite scenes in the show.
The second episode that made me cry aired a few days ago, and I just got around to watching it last night. The tone of The Doctor, The Widow and The Wardrobe is like the last three scenes of Forest of the Dead stretched out over an entire episode. To be clear, and to keep from burying the lead: if you didn't think this episode was good, you are wrong. You must have watched it wrong. Maybe your TV was broken.
Claire Skinner and Matt Smith absolutely shine in their scenes together. The emotional pitches that they hit are simply stunning, and Moffat's dialogue is some of the best it's ever been. Moffat's stories often have sentimental notes, but here it is turned all the way up. And Skinner sells her grief so well, it is impossible not to empathize with her.
The title is an obvious reference to C.S. Lewis, of course, and the episode certainly contains thematic parallels: a father lost to the war, a family staying in the country to get away from the bombing, an old house and a strange box that leads to another world (and a snowy one, at that). But where it gets interesting is where the story deviates from, and especially where it actively rejects and subverts, the ideas of Lewis. In the title, the Doctor takes the place of Aslan/Jesus, and Madge is in place of the witch. The TARDIS, of course, is the wardrobe - it's even lampshaded as such. But while the Doctor could conceivably be a Christ figure (even if he makes a better Odinic warrior), he doesn't serve that role in the narrative here. Instead, he instigates the adventure and serves as a sort of tour guide / expository force. The action is centered around the Arwell family, and rightly so. Smith is channelling Troughton again here, lingering around the edges of the story and never taking center stage.
As for the other titular character, Madge is far from a bitter antagonist - she is the heroine of the story. And that leads us to what I'm going to call a tie for the best refutation of C.S. Lewis' sexism that I've ever found (the other is The Problem of Susan). Lewis made it clear that women existed to support men - this motif is played out repeatedly between the brothers and sisters in The Lion, The Witch and the Wardrobe. Of course, women have another option: they can be evil, literally frigid bitches. In other words, women are either weak or they are abhorrent.
Moffat, on the other hand, explicitly rejects this; the forest calls men 'weak' and women 'strong', and both female characters are at the center of the action, with Cyril, the son, playing the role of peril monkey. Lily gets the crucial scenes where she and the Doctor are looking for Cyril, and Madge gets... well, everything else. Coming to the rescue in a giant mech, running through acid rain, saving the population of a planet. And backing all of her actions is the distinctly feminine concept of motherhood. This is made explicit repeatedly, with the Doctor even making the inevitable 'mothership' pun. Madge draws her motivation and her power to the story from aspects of her identity that are intrinsically tied up with being female. This is Feminism in the tradition of the Female Mysteries of modern Paganism (and without even the biologically essentialist attitudes that are unfortunately common there). And speaking of Paganism, the carved/grown tree-people (and accompanying tower) have a distinctly Anglo-Saxon Pagan feel to them, which serves to make the story an even stronger counterpoint to Lewis' work.
So, we have a very Pagan Christmas story with a theme of the fundamental power of womanhood. But the real focus of the story is on the importance of family, of celebrating life with people you love. It's the sort of feel-good, heartwarming message that you might find on ABC Family. But we are saved from Seventh Heaven with Druids (Seventh Ogham?) by the superlative writing and acting. At no point does the theme feel heavy-handed or contrived; it flows naturally from the narrative.
But this is identifiably a holiday story, in the sense that it is themed along traditional holiday motifs. And, in that tradition, the Arwell family gets their presumed-dead father back. Frankly, I'm torn about this choice - I was annoyed when the very touching scene where A Mother Explains to Her Children About Their Father's Death is interrupted for "oh, he's not dead after all". On the other hand, the subsequent scene is just as touching, with Skinner once again rising to the acting challenge and effectively conveying the amazed joy of someone who finds their lover isn't dead after all.
No, I take that back. I'm not torn. Let the Arwell family have their father back. Maybe leaving him to die would be a stronger narrative, more raw and emotionally evocative. But it's Christmas. Let's embrace the aesthetic of Happily Ever After, at least this time. Just this once, everybody can live.
And now, about the Doctor. I said before that Smith was channelling Troughton in this episode. But his other seeming muse, Sylvester McCoy, is completely absent from this one. The Doctor has no great scheme here - he is simply trying to do something nice for a sad family. But significantly, the Doctor is shown to be much more human here than McCoy's Doctor. Which isn't surprising - one of Moffat's key themes (and Tennant before him) is humanizing the Doctor. We have watched the Doctor learn how to love through the course of the new series. This is a sharp contrast to, well, all of the classic Doctors to some degree. But McCoy's Doctor was the real cornerstone of this mode of being. Perhaps the best expression of the difference is from Human Nature, by Paul Cornell (the New Adventures novel, not the new series episode):
'I hope that one day, when I'm old, when my travels are over, and history has no more need of me, then I can be just a man again. And then, perhaps I'll find those things in me that I'd need to love, also. not love like I do, a big love for big things, but that more dangerous love. The one that makes and kills human beings... It's a dream I have.'
The new series answers this quote by having the Doctor fall in love without ending his travels. This takes the form of romantic love twice, obviously. But this episode shows a distinctly platonic love towards Amy and Rory. The Doctor repeatedly talks about 'happy crying' as a human trait, and then does it himself when he realizes how much Amy and Rory care about him. This is the sort of emotional investment in a companion that we haven't seen since Rose, and really didn't see before that at all (sure, there was Susan, but frankly I have a hard time believing Hartnell's Doctor loved anyone). Even Ace, who the Doctor seemed very paternal toward at times, was used by the Doctor as a pawn repeatedly.
The point is that the Doctor is a lot less Time Lord and a lot more Human than he used to be. And I don't think that's a bad thing - he's still a mythic figure, and subject to the narrative and aesthetic rules of mythic figures. But he also has the capacity to enjoy Christmas dinner with his family. Let's let him have that, too. It's Christmas, after all.
\ No newline at end of file
diff --git a/_posts/media/2012-01-01-wandering-son-reflections-episode-5-no.html b/_posts/media/2012-01-01-wandering-son-reflections-episode-5-no.html
new file mode 100644
index 0000000..9550a19
--- /dev/null
+++ b/_posts/media/2012-01-01-wandering-son-reflections-episode-5-no.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: 'Wandering Son Reflections: Episode 5 - "Natsu no Owari ni"'
+date: '2012-01-01T23:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- Wandering Son
+- Media
+- Hōrō Musuko
+- transgender
+- slurs
+- cissexism
+modified_time: '2013-10-22T11:19:51.850-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-6529912506696354505
+blogger_orig_url: http://www.stringofbits.net/2012/01/wandering-son-reflections-episode-5-no.html
+---
+
+This post was originally posted in February of 2011 here. It has been updated substantially.
You can watch the episode here.
Trigger Warning: this entry contains discussion of cissexist slurs, in particular the T-word. If you want to skip that, start reading below the ‘End of Trigger Warning’ message
Also, Spoiler Warning
I’m going to start in the most obvious place: the subtitles in this episode use the word ‘tranny’. In fact, the word gets used several times in the series, but this is the first occurrence. So, let's talk about language.
When I read that subtitle, I winced; I’m particularly sensitive to the term, and even hearing it used in a reclamatory sense makes me cringe. I’m just not a fan of this word at all. It offends me. But more importantly, it is a slur - actively harmful language. To understand my perspective on this, I actually recommend something written by someone else - Kinsey Hope’s excellent post on words and offense. In fact, for the purposes of this discussion I’m assuming you've clicked that link and read her post.
So, Kinsey has hopefully established to your satisfaction that slurs are bad. If not, well, the rest of this discussion probably won't do much for you, and I'm honestly surprised you're reading my blog in the first place. However, in a fictional story designed to be roughly representational of reality, slurs can have a function. If slurs are used in contexts that demonstrate the bigotry of the speaker or challenge their usage, then they have a place in the story. And, of course, words used in a reclamatory context are as acceptable in fiction as they are in reality.
Before we can consider how the word is used in Wandering Son, though, we need to consider that this is a translated work. So, let's investigate the Japanese world being used here, and see whether the translation is accurate. The Japanese word that is being translated as 'tranny' is 'okama' (おかま). Jim Breen’s WWWJDIC, an all-around excellent Japanese language resource for English speakers, has this to say about the word 'okama' (only the relevant part of the definition is provided):
(n) (colloquial, often derogatory) male homosexual; effeminate man; male transvestite
While gay men and transvestites are certainly insulted using the word ‘tranny’, as a slur its function is to attack trans women. As a result, this definition and the translation chosen didn’t really sit well for me. So I did some more research, and found this book, which discusses the use of 'okama' and gay male culture in Japan. The overall sense I got from this book's treatment of the term is that the dominant cultural elements in Japan often conflate gender identity and sexual orientation (this is unsurprising, as it is true of straight culture in the US as well), and while GLBT culture in Japan distinguishes between the two more accurately, there is still some degree of conflation between the two. I suggest reading the excerpts available from the book for a more detailed look at this.
The upshot of all of this is that I get the impression that the translation here is accurate in context; at least, it is accurate enough for our purposes. Given the target and the speaker of the word each time it is used, I believe it was always translated so that it is accurate after adjusting for American cultural expectations. I am by no means an expert on Japanese language or culture, however, so I acknowledge that this argument may be flawed. At any rate, I’m proceeding with the understanding that the translation can be taken at face value.
With that said, I think the usage here is fair, narratively speaking. The first usage we see is of a somewhat confused boy using it in disgust; another use is by a character who is well-established as cissexist and bigoted. The word is also used reclamatively, and almost accusatively, by Yuki (more on that in a later post). These instances of the word serve to present cisnormative reactions to the idea of transsexuality, and so help establish the narrative of the broader culture in which Shūichi is struggling to define himself.
End of Trigger Warning
The episode as a whole was pretty uneventful. It almost feels like an intermission. A couple of things do happen that I want to talk about, though.
First, this episode finally touches on the subject of 'outing': Shūichi is outed to all of his friends as a cross-dresser (which, while not necessarily accurate, is typical of the tendency to conflate all gender variance). While shocked at the time, Shūichi later seems to be somewhat relieved at having the truth (or an approximation of the truth) presented by someone else. Yoshino, on the other hand, responds to the person who outs Shūichi with hostility. This leads Shūichi to realize (via internal monologue) that Yoshino is willing to get angry on his behalf. Later, while talking to Mako, he says “People laughed at me. In grade school, they said I was girly. But you and Takatsuki understood me, so I knew everything would be okay.”
Watching those scenes, I realized something that hit me pretty hard: I never had anyone like Yoshino and Mako. Throughout my childhood, I had friends, but I was never close enough with anyone to tell them about my gender confusion. It wasn’t until I met my wife that I would find someone I was really comfortable being myself around. If I had had friends like that, I may have come to understand myself years earlier. Those years feel wasted in hindsight - years spent not being true to myself.
This kind of regret is common amongst trans people - at least, it is common amongst the trans people that I know. I transitioned at the age of 27. Looking at average life expectancies, that means I spent one third of my life lying to myself and to everyone else. Being in pain, and depressed, and not even understanding why for most of it. It is hard not to feel regret over that.
Wandering Son, of course, doesn’t really touch this particular problem; Shūichi is still very young, and the story (in the anime, at least), doesn’t progress far enough to deal with the actual issues of transition. But it drudges up those feelings just the same.
Also in this episode, the students are assigned their roles for the upcoming play. Notably, they are assigned the roles by lots; Mako ends up being Juliet, while Saorin gets the role of Romeo. This is certainly an interesting plot development, since the normal Western narrative structure here would be to give Shūichi and Yoshino those roles (as that would parallel the overall theme of the show, and set up the classic Happily Ever After ending). Instead, we get Mako, who has some gender confusion of his own, and Saorin, who certainly wanted to be Romeo, but only because she wanted to use it as a platform to profess her love for Shūichi.
And Saorin, for her part, remains as unsympathetic as ever. She broods, whines, and is unselfconsciously self-absorbed throughout the episode, and ends the episode by asking Shūichi (out of earshot) “Why art thou Juliet?”. While this certainly serves to underscore the play-within-a-play structure* that the Romeo & Juliet play represents, it serves even better to underscore Saorin’s selfish, cissexist attitude towards Shūichi. Instead of wanting Shūichi to be happy, she wants him to be hers, and her heterosexual identity means that, as a consequence, she wants him to deny his gender identity for her benefit.
This is another narrative that is common in the transgender experience. Spouses and lovers of trans people often struggle to accept their partners' transitions. This frequently leads to divorce, and is frequently accompanied by a selfish desire for the trans person to be cisgender. Some trans people choose to suppress their trans identity to keep their marriages together. Speaking partially from personal experience, I suspect that this rarely solves the problem, instead leading to resentment and depression. Saorin, here, seems to want to found a relationship on this dynamic.
* The extended homage to Shakespeare built into the first half of Wandering Son deserves analysis, but is outside the scope of this series' focus. I’ll just leave it at 'obviously, an extended homage to Shakespeare is going on here'.
\ No newline at end of file
diff --git a/_posts/media/2012-01-23-mit-mystery-hunt-2012.html b/_posts/media/2012-01-23-mit-mystery-hunt-2012.html
new file mode 100644
index 0000000..ebb90d5
--- /dev/null
+++ b/_posts/media/2012-01-23-mit-mystery-hunt-2012.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: MIT Mystery Hunt 2012
+date: '2012-01-23T09:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- MIT Mystery Hunt
+- toki pona
+- puzzlehunt
+- Puzzles
+- language
+- meta puzzles
+modified_time: '2013-10-22T11:19:51.902-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-1596101106027957713
+blogger_orig_url: http://www.stringofbits.net/2012/01/mit-mystery-hunt-2012.html
+---
+
+Every year, hundreds of people travel to MIT during the Independent Activities Period for the MIT Mystery Hunt, a popular puzzlehunt. This year was my second Hunt. This is a review, analysis, and/or postmortem of it. It contains some of the solutions, so if you want to go play with the puzzles yourself (as they are all posted online), be forewarned!
How does this thing work, anyway?
First, since most of the people who read this site probably aren't puzzlers, a brief description of the flow of the Hunt. Teams arrive and set up in pre-arranged headquarters (either a location near campus for teams that have them, or a classroom or two for any team that requests one). Everyone gets their stuff set up, then the hunt itself begins on Friday at noon with a kickoff presentation (traditionally in Lobby 7, which is functionally the 'main entrance' at MIT). Then teams return to their rooms and hit F5 repeatedly on the Hunt website (this year that was at borbonicusandbodley.com), waiting for the first round of puzzles to be released. Once they appear, the teams start trying to solve them.
Puzzles come in 'rounds', which are unlocked over time or via solving puzzles in the rounds you already have. Exactly how these work has varied somewhat from year to year. Each round also has a meta-puzzle (or simply 'meta'), which uses all of the answers from the round as the clues to some new (often quite difficult) puzzle.
Each year's hunt also has a theme: a nominal reason for the teams to be solving puzzles. This year's theme was related to the film The Producers, which led to a series of rounds based on ideas for terrible Broadway musicals (all of which were puns on existing musicals: A Circus Line, Okla-Holmes-a!, Into the Woodstock, Mayan Fair Lady, Phantom of the Operator, and Ogre of La Mancha). So, that was cute, and it made each round unlock produce a round of laughs and/or groans from the team.
If a team completes all of the rounds, they unlock the 'endgame', which usually involves some final puzzles and culminates in a runaround (a sort of scavenger hunt that involves actually running around MIT campus. Here is the beginning of one from last year). The runaround ends in the ultimate goal of the Hunt: finding a 'coin' (sometimes an actual coin, sometimes not). The team that finds the coin wins the Hunt.
There are also, at least in recent years, a number of 'events' during the hunt. Teams can send a couple members to these events, which are sometimes puzzle-oriented but can also be skill-based. The reward for the events are points that can be spent on puzzle answers. This is especially important strategic resource, and is mostly useful when you are working on a meta-puzzle and need more of the answers from its round to make sense of it.
A review
As a whole, the hunt was a lot of fun. I think last year's (video game-themed) hunt was a better hunt overall - the multiple runarounds were especially fun. But this year had a lot of interesting puzzles, and I certainly performed better than last year. I can claim two solid solves, which I'll discuss in detail later.
This year's approach to round unlocks was, I thought, quite good - each round had a set unlock time (a time at which every team was guaranteed to have it), and the more puzzles you solved the more points you accrued. Your point total was fed into a function that decreases the time until the next unlock happens. There were also multiple unlocks per round - each round came in two halves, and there were, I believe, two unlocks for each half (so, 4 unlock points per round).
This was very similar to last year's method, but more sensible - last year the unlocks were based solely on points, which accrued over time with a bonus given for solves. This made it a bit hard to get a quick estimate of how many solves your team had achieved. It felt like the points mapped more directly to how well the team was doing this year.
The result, for our team at least, was a fairly steady flow of new puzzles into the mix. This is good - it means that if a given team member didn't have any insight into any of the existing puzzles, there was always something new for them to work on coming fairly soon.
Each round in this hunt had two meta-puzzles, and the round ended in a 'production', in which teams were tasked with writing and performing a short skit that included the meta-puzzle answers as elements. I wasn't fond of this element - it strayed away from puzzling a little too far for my tastes. Luckily, there were enough people on my team that I didn't really feel pressured to participate. Still, this mostly left me longing for last year's runarounds through the tunnels.
I finally went to an event this year, as well, 'Bringing Stars Together'. I have mixed feelings about this one. On the one hand, the premise of the event was interesting: a logic puzzle (fairly straightforward, with 4 constraints) whose clues are discovered by chatting with the characters involved in the puzzle. This is a novel way to present a logic puzzle, and that part was a lot of fun. On the other hand, the effort vs. reward for this event was laughable - the event lasted more than an hour and a half, and was only worth 0.2 answer unlocks.
The hunt also seemed to have more 'mini-events' and puzzles that had physical components (that teams had to go and retrieve from various rooms around campus) than last year. I think I walked the entirety of the Infinite Corridor at least 10 times. One notably interesting one involved playing a game of Jenga to get the clues for a (very simple) puzzle. These were interesting and a welcome addition to the usual LAN-party feeling of sitting in the team headquarters staring at spreadsheets. Not that that isn't a lot more fun than it sounds, of course.
Also, none of the puzzles made it necessary to spend a lot of time outside. In Cambridge in January, this is a welcome feature. On a completely unrelated note, I really need to invest in some Boston-strength clothing.
So, that was the hunt. Codex made an admirable attempt at matching the bar set by Metaphysical Plant last year. I'd say they nearly reached it. I look forward to seeing what the Manic Sages can follow up with next year.
Puzzle Logs
I worked on a number of puzzles, most of which were eventually solved. Here are some of my thoughts on some of my favourites (and least favourites), along with a description of how we solved (or tried to solve) them.
In this puzzle I quickly realized that we have 'top' rows and 'bottom' rows of lights, and that we could click any of the currently lit top lights to change the other lights in some sort of pattern (and I mapped all of the positional changes out pretty quickly). Furthermore, the bottom 8 lights for each group of 16 top lights was counting up in binary, every time a move was made in their 'group'. At first it looked like each set of four lights were self-contained, but after finding a sequence that turned all 4 lights off, other lights in the group of 16 turned themselves on. I couldn't find any pattern to this, until one of my teammates (Max) suggested that maybe each group of 16 lights (4 groups of 4) acted like a group of four - following the same pattern. And each 2 sets of 4 lights corresponded to a letter at the top of the screen.
After some legwork (a whole lot of clicking), I turned out all of the lights, revealing the message "SolveRestThenPluralizeTitleWord4". Unfortunately, I didn't see how to solve the 'Rest', as the entire thing was already solved. This is where I dead-ended, and eventually abandoned the puzzle (after about an hour of solid work on it).
The solution, it turns out, was to find the *shortest path* that turns out all of the lights (i.e. solves the maze), which leaves the lights in the bottom rows in a state that spells out "PATENT 2,417,786" in ASCII. Finding the shortest path through this would have required both a lot of leg-work and some non-trivial programming (in javascript with greasemonkey, probably). I had considered this as a possible solution, but dismissed it as too much work to be practical. It's good to know I was on the right track, at least.
This puzzle fell into a certain class of puzzles: a simple series of images presented with little to no context. I'm not historically that great at these, but in this case, I had the a-ha moment that led to the puzzle being solved.
Image puzzles are a lot like word association games with a visual element. The first step is usually to identify all of the images, and our team had done that by the time I looked at the puzzle. Initially I just glanced at the images, nothing clicked, and I moved on. In the lull after solving Revisiting History (see below), though, I looked at this puzzle again. Someone had identified the second picture on the right side as Brahms. Which is when it hit me: the last picture on the left side was a picture of 3 coke cans.
'Cans and Brahms', of course, is an instrumental track from Yes' album Fragile, which consists of some brief excerpts from one of Brahms' pieces arranged and played with synthesizers. From there the team was easily able to deduce that all of the images could be paired to form song titles separated by 'and'.
I knew my near-encyclopaedic knowledge of progressive rock would come in handy some day.
Ahh, the Doctor Who puzzle. I recognized what was going on in this puzzle at almost the exact same time as one of my team-mates - I turned to tell him about it (as he is easily the most knowledgeable Doctor Who fan I know) only to discover he was already beginning to match the descriptions to the companion(s), Doctor, and episode titles. We had that information down amazingly quickly, but extraction was difficult - nothing we tried seemed to work. Then another team-mate noticed that the word 'who' appeared in every clue. Using that as an index got us to the answer very quickly. I think this may have actually been our first solve - we had it within the first hour of the hunt, certainly.
This puzzle was a lot of fun, and I am proud to say that I can claim most of the work for my team in solving it. It is, obviously, a 3-d maze. We took each self-contained 'piece' of the puzzle on each level and numbered them. Then, we mapped the connections between numbered nodes, and used this program (which took something like 10-20 minutes to write and test) to solve it:
[sourcecode language="python" gutter="false"]
#!/usr/bin/python
import networkx as nx
import sys
source = '44'
target = '3'
def parse_input(infile):
g = nx.Graph()
f = open(infile, 'r')
for line in f:
meta = line.split(':')
node = meta[0].strip()
edges = meta[1].split(',')
g.add_node(node)
for n in edges:
other_node = n.strip()
g.add_edge(node, other_node)
f.close()
return g
def main():
infile = sys.argv[1]
g = parse_input(infile)
path = nx.shortest_path(g, source, target)
print path
print len(path)
main()
[/sourcecode]
There were a couple of hitches: a small error in our mapping data being the crucial one. But we got a solution, then mapped it on the maze (with a highlighter). The result clearly said 'side elev' on the top row, so we took the thing and mapped it out with burr tools. We found the word 'Love' very quickly, but that wasn't the answer. So, I shelved the problem and went to bed.
Looking at it again the next day (Sunday morning), I saw the trick: the flavour text implies that the path taken should be the negative space, not the positive space. With this as a clue, I re-mapped the solution in burr tools, inverting which blocks were solid. This led to the answer: the word 'Love' was still visible on one side, while 'Etc' was visible on the other. 'LOVE ETC', is, of course, the answer.
We didn't solve this puzzle, but I want to include it because it is very clever. I almost solved it, too. I looked at the keyboard, typed out the phrase (which took a while, because I'm used to typing in dvorak), but I didn't spot any obvious patterns, probably because I was focusing too much on remembering qwerty. So close.
This was my absolute favourite puzzle of the hunt. It was delightful in every way. The cluing at the beginning sets the tone: in greek characters is the latin phrase 'nota bene: non sequitur lingua Iaponica!'. Which is to say, basically, 'what follows is not Japanese'.
Instead, it is toki pona, a constructed language (conlang) with, according to Wikipedia, 3 fluent speakers. This wonderfully obscure language is fairly light on vocabulary (120 root words and a smattering of loanwords where necessary). One of my team-mates got the hiragana transliterated into latin characters, and another team-mate identified it as toki pona (he recognized it because of a passing acquaintance with the creator of the language).
An automated translator for toki pona -> English exists, but doesn't work very well (as we quickly discovered). Instead, I translated most of the entries by hand, learning toki pona vocabulary and grammar as I went. This felt very much like my recent Old Norse translation project, and like all translation, was enjoyable for its own sake. As I translated, it became clear that the toki pona text was providing definitions of words or phrases in other languages. Eventually I found that the words at the end of each paragraph were language names in Toki Pona (the 'official' dictionary doesn't list these, as they are loanwords). After we figured out a couple of these clues, it became obvious that these were phrases or words that were used in English but were actually loanwords from the given languages.
These clues gave us the acrostic DANKESCHOENINJAPANESE. Of course, Japanese has a lot of ways to say 'thank you', but the 7/9 at the bottom of the page clued us into a 2-word phrase that, in Latin characters, would give us 7- and 9-letter words. So, ARIGATO GOZAIMASU was the obvious choice.
I often describe myself as an 'amateur linguist'. Philologist might be the better term. I really love Language. Learning languages and playing with language are both hobbies of mine. Most of the time, this isn't terribly useful, mainly because I never devote enough time to any one language to learn it thoroughly. However, in this case my exact sort of language skills and knowledge were perfectly suited to this puzzle. If any one puzzle next year is half as fun as this one was, it will be well worth the trip.
\ No newline at end of file
diff --git a/_posts/media/2012-01-25-wandering-son-reflections-episode-6.html b/_posts/media/2012-01-25-wandering-son-reflections-episode-6.html
new file mode 100644
index 0000000..760d36d
--- /dev/null
+++ b/_posts/media/2012-01-25-wandering-son-reflections-episode-6.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Wandering Son Reflections: Episode 6 - "Bunkasai"'
+date: '2012-01-25T23:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- Wandering Son
+- Media
+- Hōrō Musuko
+- transgender
+modified_time: '2013-10-22T11:19:51.858-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-2303773385345999615
+blogger_orig_url: http://www.stringofbits.net/2012/01/wandering-son-reflections-episode-6.html
+---
+
+You can watch the episode here.
Spoiler Warning
When I transitioned, I took all of my men's clothes, put them in trash bags, and gave them away. This was a very cathartic experience - the moment I left the lie behind forever. I've noticed that a lot of trans women are sentimental like that.
So, when Yuki puts on a men's suit to attend the play, it struck me as odd - keeping that kind of reminder of my past life around is something that I actively avoid, and I know the same is true for many trans women. This is, then, a great example of the fact that everyone's experience is different. Exactly what being trans means to Yuki probably doesn't match what it means for Shūichi, or Mako, or Yoshino. Or me. The show has been pretty good at conveying that already, actually, but this really drives it home for me.
This episode gives us several examples of the thing that this show does the best: presenting an understanding and empathetic portrayal of trans people without feeling heavy-handed or contrived. It is a glimpse into the lives of several trans people, how they think and feel and how they deal with navigating in a world of uncertainty. It's the genuine sense of empathy here that keeps the show from feeling sensationalizing - the focus is often on the trans experience of these characters, sure, but it also takes great pains to ensure that the characters feel like actual individual people and not just something to gawk and giggle at. In other words, even though the show is explicitly about gender issues, it never feels like it's all about gender issues.
Our first example is the one we already discussed above: Yuki feels the need to cross-dress to go back to her old school. This is something that I refer to in my own head as the Double Life Problem. See, the problem is that even a successful, pretty, fully transitioned trans woman can find herself buried by self-consciousness and doubt about her ability to pass the moment that history enters the picture. Obviously this is not a universal truth - see "everyone's experience is different", above. But for many of us, I suspect, our lives are divided into two sections: before we transitioned and after we transitioned (and of course, there's the liminal phase of "during transition", but that is, we hope, as brief as possible). And so our social circles can likewise be grouped into 'people who met us before we transitioned' and 'people who met us after we transitioned'.
So when Yuki decides to dress as a man when going back into a group of people (her schoolteachers) that haven't seen her since she transitioned, it's safe to assume it is out of fear that she might be recognized. People in general will often go to great lengths to avoid embarrassment, and added to that is the dysphoria that would accompany someone excitedly calling you by your old name and then asking why you're dressed like a girl. Yuki appears to have decided that it's better to endure a little known dysphoria than to chance the possibility of a larger amount of dysphoria coupled with public embarrassment. This is not the choice I would make, personally - I refuse to pretend any more, no matter the situation. But that works well for me; obviously Yuki prioritizes differently. Either way, this is another insight into what it means to be trans on a very real and human level. The story is very clearly about these individuals and their experiences, instead of claiming to be about trans people as an entire group - yet at the same time it finds a way to hit on a lot of widely shared aspects of trans experience.
The next example we get of the show's empathy and insight is a subtle part of a larger scene. Yuki comments that it's "too bad" that Shūichi won't be Juliet in the play. Mako, who is playing Juliet and who has gender identity issues of his own, is standing nearby and holding the dress he is going to be wearing. When he hears Yuki saying it is 'too bad' that he won't be playing Juliet, Mako clutches the dress to him slightly. The camera lingers on this for just a moment, but it is the most expressive scene in the episode. This is very effective visual storytelling, evocatively highlighting Mako's own gender identity issues, and the way they consistently take a back seat to Shūichi's.
This moment is also the first time all four of the show's gender variant characters are in the same place, and the gesture underscores the fact that they are all in different places with accepting and embracing their gender identities. We have Yuki, the role model of successful transition and passing as cisgender (ironically cross-dressing for the first time in years). Shūichi and Yoshino are both in a place where their gender identity is largely accepted (if not fully understood) by their friends, and are slowly becoming more vocal and confident about it. Mako, on the other hand, is still struggling to articulate his feelings. He isn't as confident as Shūichi, to the point that he hasn't even expressed to his friends how much having the role of Juliet means to him. His friends (well, Shūichi, at least) know that he enjoys cross-dressing, but they don't have any clue about the extension of that into gender dysphoria (which, as we'll see in a bit, Mako does seem to have). In addition, Mako feels that he is not "pretty enough" to be a girl, as he has explicitly mentioned in the past when contrasting himself with Shūichi.
At the opening of the play itself, Mako freezes, and he says (in internal monologue) "everyone is staring at me". This is the first time Mako has ever dressed as a girl in public. He is duly shocked. Despite the social acceptability of this particular gender variance, Mako is very self-conscious. And this is a feeling I understand deeply. Being trans is often something that takes a long time to accept (that is to say, it gets heavily repressed and undoing that takes a long time), and that acceptance is an incremental process. Some (possibly many) trans people, myself included, identify as cross-dressers for some amount of time. Cross-dressing (although the term becomes a misnomer when you later find that you are trans) is typically a very private thing; it is something that social stigma drives us to do in private. So, to dress as a girl and then be seen in public is like having a deep and shameful secret suddenly exposed. Even if it is in a socially acceptable context, or if no one recognizes you. Getting over that internalized idea - that dressing like a girl was something I should only do in private - took a concentrated act of will. And it took time. Mako, on the other hand, hasn't had any of that time to adjust. So he freezes.
Speaking of the play, let's talk about its context within Japanese education system. Bunkasai (文化祭) means 'cultural festival', and is an aspect of Japanese culture that has no analogue in US culture. So, the trappings and conventions here are a bit unusual to a Western audience. It is basically a sort of show-and-tell to the world, where students can provide some entertainment of cultural merit for friends and family. It's not optional - all students are expected to participate as a requirement for graduation, although I get the impression that it isn't graded per se. Bunkasai are held from the elementary level through university, although at the university level they are no longer mandatory. Plays are a fairly common choice for classes to present.
Another notable thing about the play is the way that it uses gender; all of the actors are intended to have the gender roles reversed, including the trans characters. In other words, Juliet (a trans girl) is meant to be played by a cisgender boy. Likewise, Romeo is played by a cisgender girl. This is a subtle nod to the validity of trans people's gender identity. If a girl had been cast to play Juliet, it would have implied that Juliet was a male character; by putting a (ostensible) boy in the role, it suggests that the characters involved have no problem accepting Juliet's gender identity as valid and true. That this choice goes unremarked throughout the show may imply an unrealistic world (in which trans acceptance is far more advanced than it really is), but it's a welcome, validating nod all the same. After all, the show portrays plenty of social backlash at other times, so it's nice to establish the play firmly as a narrative victory on this issue.
After the play, we get our first real sense that Mako is decidedly gender dysphoric as opposed to just a cross-dresser. He laments to Saorin that "all I wanted was for someone to see me as Juliet". Shortly thereafter, Saorin does what may be the first genuinely nice thing the character has done: she gives Saorin some flowers (that had been given to her earlier), and lies, telling him that she was told to give them "to Juliet." When he is then predictably flustered, she says "All that matters is that someone saw you as Juliet." This explicitly acknowledges both that Mako has dysphoria and that Saorin knows it (and acknowledges his evolving gender identity as valid). This contrasts sharply with her refusal to acknowledge Shūichi's gender identity, which just adds more evidence that she was simply being spiteful and jealous in her previous tirade.
While he's still very much a background character, this episode gave Mako both definition and character development. And Mako resonates strongly with me, because his experience is a reasonable match for my own experience around that age, particularly the feeling that it isn't worth trying to be a girl if you don't already look feminine enough; that thought was one of the strong motivators that kept me from transitioning much, much earlier than I did. I'm glad that they gave this character more of a voice here, although unfortunately he will fade into the background again for the rest of the series.
\ No newline at end of file
diff --git a/_posts/media/2012-01-28-wandering-son-reflections-episode-7-no.html b/_posts/media/2012-01-28-wandering-son-reflections-episode-7-no.html
new file mode 100644
index 0000000..a761fb2
--- /dev/null
+++ b/_posts/media/2012-01-28-wandering-son-reflections-episode-7-no.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Wandering Son Reflections: Episode 7 - "Barairo no Hoho"'
+date: '2012-01-28T03:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- Wandering Son
+- Media
+- Hōrō Musuko
+- transgender
+modified_time: '2013-10-22T11:19:51.883-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-1927541394080723619
+blogger_orig_url: http://www.stringofbits.net/2012/01/wandering-son-reflections-episode-7-no.html
+---
+
+You can watch the episode here.
Spoiler Warning
This episode deals mostly with Shūichi forming a romantic relationship with Anna (and the resulting fallout). It is told in an interesting nonlinear fashion; we see the two of them interacting, but not the beginning of the relationship. The story then cuts to someone teasing Anna (who is older than Shūichi) for dating him, which causes the other characters present to react with surprise. This is clever, because it aligns the character reactions with the audience reaction - it is as much a surprise to us as it is to them. This is a very effective use of closed narrative, and it manages to drop a surprise reveal into a fairly straightforward story.
Puberty sucks for nearly everyone, I suspect, but being trans at puberty is its own special form of torture. So, here we have a continuation of that narrative: Shūichi gets a zit, and wants it gone. Shūichi's concern over having a zit seems to be markedly (socially unacceptably) feminine, to the point that he has to debate and work up courage to ask anyone what to do about it. And when he does manage to ask someone, it is his sister's friend, whom he hardly knows - probably the distance between them makes it easier to broach the subject without feeling weird.
So, Shūichi and Anna's relationship blooms from Shūichi asking her for advice about skin care. Anna, counter to Shūichi's concerns, seems to take this in stride; she doesn't appear to think that there is anything wrong or deviant about Shūichi having these concerns. The social conventions that Shūichi is concerned about violating here are ones I came up against repeatedly in my own childhood, to the point that before I was Shūichi's age I had already internalized the idea that any beauty regimen beyond the bare minimum of showering was unacceptably feminine, and was careful to cultivate an attitude of wanting nothing to do with any of it. But Anna doesn't seem to care, casually accepting his behavior and not remarking on it at all. Given Shūichi's trepidations, this doesn't seem to simply be a cultural difference - Anna just seems to have a worldview slightly askew of the cultural norm.
This episode is the first time we see one of our gender variant characters (other than Yuki) dating someone (or showing any interest in someone) who doesn't know about their gender variance, as well. There are a lot of topics this brings to mind, but for now I'd like to give a sense of what it feels like to date someone while struggling with gender identity issues. To put it bluntly, being trans ended one relationship for me and dramatically altered another. So, let's switch gears from Shūichi's narrative to my own.
I have been in very few relationships. Depending on how you count, I've been in 2, 3, or 5. A comparatively small number. At any rate, I've only had two long-term (> 2 years) relationships, and those were both touched by my struggles with gender identity. In the first case, I dated a girl throughout high school. I struggled with depression the entire time, which I now recognize was repressed gender dysphoria. I used the fact that I was in a relationship with a heterosexual girl to help me invalidate the feelings of wrongness that were getting stronger over time. Eventually this led directly to me ending the relationship. At the time, I didn't really understand why I felt the need to end the relationship - certainly I knew that the fact that I felt like I couldn't tell her I liked to dress as a girl was a major factor, but looking back on it, the only justification I had for that feeling was that she was straight. I recognize now that I was already unconsciously identifying my gender variance as not "cross-dressing", but a more fundamental difference between my assigned gender and my gender identity.
The next relationship was more complicated. She was bisexual, and somehow this made me feel more comfortable telling her about my gender variance (the reasons for this are more obvious in retrospect). As it evolved (I eventually spent a lot of time introspecting and decided that I must be genderfluid. Looking back, I can see this had nothing to do with any actual masculine feelings, but was completely about me being afraid of change, since it let me confine my femininity to my private life), she was understanding and accepting. There were certainly problems, though - the biggest is probably the fact that we were married, and had planned to have children together. Adapting to the idea of not having children with me was tough (although being polyamorous was a real boon there). But on the whole, our relationship got better as I got less depressed.
My latter experience here is not necessarily common; I have heard many trans narratives in which bitter breakups come from coming out to partners. This, then, has to hang over Shūichi's head. Mixed in with the happiness and trepidation and hormone-fueled irrationality that comes with a first relationship are complex fears and nagging doubts: Will she understand if I tell her? Will she freak out, turn on me, out me to everyone, to my parents? Is dating even worth it, when I have this complex and taboo secret?
Can anyone possibly want me once they really know me?
\ No newline at end of file
diff --git a/_posts/media/2012-04-23-concerto-for-rainy-day-2012-carolina.html b/_posts/media/2012-04-23-concerto-for-rainy-day-2012-carolina.html
new file mode 100644
index 0000000..3063656
--- /dev/null
+++ b/_posts/media/2012-04-23-concerto-for-rainy-day-2012-carolina.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: Concerto for a Rainy Day - 2012 Carolina Spring Go Tournament report
+date: '2012-04-23T10:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- go
+- tournament
+- reflections
+- AGA
+- "碁"
+- Gaming
+modified_time: '2013-10-22T11:19:51.985-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-9140204723540127565
+blogger_orig_url: http://www.stringofbits.net/2012/04/concerto-for-rainy-day-2012-carolina.html
+---
+
+The day begins early - much earlier than most Sundays. I'm out the door at 8:15, for a tournament that starts at 9:00. I usually sleep in on the weekends; I didn't even know Sundays had a 9 o'clock.
The day is rainy and grey, but bright in that clean Spring way where the contrast between everything is sharpened and it feels like you can see forever. I drive in the rain to NC State campus, a twenty minute drive through the odd combination of semi-urban and rural landscape that makes up Raleigh. Once on campus, I'm a bit confused - GPS helps me get to the right general area, but I've lost my GPS signal now and end up parked in a deserted-feeling area in front of a row of buildings. There is no one else walking around here, and as I'm looking around and trying to get my bearings I hear a rumbling noise. On the far side of the road, a train goes rushing by on tracks I hadn't noticed.
The lack of people and the light rain and the sudden noise - suddenly everything feels surreal, just to the left of normal. It's a dizzying experience - this always happens when I am stepping into the unknown, especially when I don't have anyone familiar nearby. It isn't a negative sensation, though; it's pleasant in an "I might be stepping into fairyland and I may never find my way back" sort of way. I check my phone, which has gotten its GPS lock back, and realize I need to drive a block further. I spot a sign for the building I'm looking for, and park.
The surreal feeling persists as I cross the street. I realize I'm at the back of the building, which explains why things feel so deserted. I find the front entrance, and enter to find... a deserted building. No one in the lobby, no signs posted, and no obvious Go-related activity occurring. I check my email (thank the gods for smartphones) and realize I missed a detail - room 404. Great. I'll never find it.
I do find an elevator, though, and while I wait for it several other people arrive, obviously Go players (exactly how this is obvious is lost on me, but it is clear they are Go players). One of them, an older man, smiles at me in greeting, and with that, normalcy returns.
Setup
The tournament takes about an hour to get going. The organizers seem to be having trouble with their tournament software. While we wait, I say hi to the players I know from the Triangle Go Club, and end up in a conversation with someone who is about my age. We start to play a warm-up game. He gives me 9 stones, and I'm doing pretty well about 50 moves in, when we notice that the tournament organizers have set up a projector and are projecting the first round pairings. We clean up our game, and I grab a bottle of water and head over to my assigned table.
Round 1
My first game is against Andrew, rank 15 kyu. Andrew is young - probably no older than 12. He is also very polite: He introduces himself and shakes my hand before he sits down.
As I entered at 19 kyu, I have black with 3 handicap stones. I had a chance during my warm-up game to figure out how the Ing bowls work, but it takes me a minute to work out how to program and use the game clock1. They're pretty intuitive, though, and I am soon hearing an amazingly cheerful voice (it reminds me of Sumomo) telling me my timer has started counting. Since I have handicap stones, my opponent actually goes first, so I immediately press my button to make it white's turn, and hear the same message repeated again, with 'White' in place of 'Black'.
Andrew plays his first move in less than a second. This isn't too surprising - in a 3 stone handicap game, playing the 4th hoshi is an obvious opening move. I respond aggressively, approaching his stone, and now the tournament really feels underway. I throw myself into the mental space of Go, of territory and influence, attack and counter-attack.
Andrew responds almost immediately to every move I make, while I feel lumbering by comparison, often thinking for several seconds before responding. This trend continues throughout the game, and his fast moves make me feel like I need to respond equally fast, which leads to several mistakes.
His play is surprising - he pretty much discards joseki and instead favours attaching to any approach move I make. I'm admittedly weak against strange openings - even if they're technically weaker, I haven't seen them as much and so the best response isn't obvious and automatic.
More importantly, Andrew is very good, especially at local fighting. I cede more and more territory, and lose several sizable groups of stones. My opponent is the tide and I fall back before his steady and relentless onslaught. I know enough about the game to build a seawall, though, and eventually the board starts to settle. Then I see it - a critical point in one of my opponent's shape in the south-west side of the board that, if I can play there, will kill two large groups, giving me some 40 points. It's monumental, and it could turn the tide of the game. And it's my opponent's turn. If he sees the weakness and plays the point, these stones will be alive.
My hands start to shake, and I can feel my pulse in my neck, speeding up. My face flushes, and I'm afraid I might actually break into a sweat. Adrenaline. I've always had strong adrenaline reactions, but I've learned to usually keep up a calm front in the face of an adrenaline storm. Still, I feel light-headed and it's hard to think.
I stare at a different part of the board, afraid of drawing his attention to the weakness.
He makes his move, attacking my stones in the northeast corner. A few points there doesn't matter, though. This play is bigger. I put my stone on the board firmly, and it makes a satisfying click. I press the game clock, and it chirps, signaling to Andrew that it is his turn.
The game is over shortly after this. After some confusion about how to count, we calculate the score. Even with my 40-point comeback, I lose by 20 points. Still, I feel like this is a good result. He was clearly better than me, and I had some really clever play near the end.
Round 2
I finish the first game pretty early, and have a chance to watch the other games and socialize with other players who have already finished. After everyone is done, it takes the organizers a while to enter the results and pair up the contestants for the next round. This is a repeated theme throughout the tournament, but I don't mind - it's a good chance to rest my mind and let my nerves calm down a little.
This time I'm up against Larry, another young player. He is ranked at 20 kyu, so we play an even game, with Larry taking black and me taking white. Larry is very intense; he doesn't say hi, just sits down and we begin playing.
After the first round, I'm expecting to have to fight hard in this tournament, so I play very aggressively at first, overextending myself a bit. It quickly becomes apparent that I have a strong advantage in both tactical and strategic play. There are still several tricky points, and I manage to kill a large group with some pretty clever play.
The clock is running pretty low - I have less than two minutes of thinking time remaining. The smell of pizza intrudes - I'm starving. Most of the games have finished, and people are walking around while they eat. Several of the younger players are whispering nearby.. Needless to say, this is a distraction. I'm not blaming this for what happens next, but it was probably a factor. I make a huge mistake and let my opponent revive a large dead group. This probably costs me 30 points.
But I've taken all the corners and three of the sides, and pushed a wedge into the center. I win easily, by 76 points. I would suggest that Larry overestimated his strength, except he finished the tournament 3-1. I suppose my play style was just strong against his.
Round 3
Next comes some surprisingly delicious spinach pizza (in the sense that spinach pizza is not usually delicious) and Yet More Difficulty generating pairings. Now the problem is obvious - the children are competing as part of teams, so that their totaled wins and losses are considered. The pairing code doesn't have a way to represent this, though, so the organizers are manually re-pairing the team members so that they don't face each other.
I get paired with Dale, a stronger player than me - I take a 4 stone handicap. Dale is an older man, and the only adult I play against in the tournament. He is sociable and friendly, and this puts me at my ease, a relief after the previous two rounds.
Dale plays in a more relaxed style than Andrew (the only other game in which I had a handicap), and I'm able to make some pretty solid play against him. It is a very peaceful game until the end - only a small handful of captures. Still, the game is very intense and intricate as we test each other's weak spots.
When the board feels settled, Dale keeps studying it, running his time down to less than a minute. Then he makes a desperate invasion into the widest part of my territory. I know he's a stronger player, so I take a long time to respond. This stretches the game out for several more minutes as I carefully try to avoid mistakes. My fortifications hold, though, and his invasion fails.
The total comes to 67 points for me, and 65 points for him. We count again - it turns out he missed a space in his territory. 67 to 66. I win by a single point. This is the closest game of Go I've ever played.
Round 4
Even though I'm in one of the last games to finish in round 3, I know it will take a while to get the next round set up, so I take a walk to stretch. The rest of the floor is quiet - a couple students in a computer lab, and two of the young girls from the tournament playing in one of the study lounges. It strikes me how cold it is in the hall - I didn't notice how warm it was in the room where the tournament is being held. Too many bodies.
I return to the room just as things are getting set up. I look up at the projector that shows the matches, and find my name.
Table | White | Black | HD |
... |
14 | Wiggins Anna | Evans Violet | 7 |
I've been paired with a 27 kyu player, and I'm giving her a 7-stone handicap. The tournament organizer actually walks over and apologizes. He explains that they try to avoid handicaps this large, but it was the best they could do with pairing.
But I'm intrigued. This should be a challenge. I'm not great at handicap games, and with 7 stones even a beginner will have a good chance.
Violet sits down across from me. I say hi as she places her handicap stones. She returns my greeting, but reluctantly - she seems a bit shy, or maybe she's just distracted.
I scatter my opening moves around the board, approaching the corners. She repeatedly blocks by attaching high (I typically approach a 4-4 corner play via the low approach). This leaves her open to a 3-3 invasion, which I am able to exploit on all four corners. I am also able to capture a few sizable groups early on.
So, this may not be as hard as I was afraid it would be. But there's another problem - as we play, she is building a very solid wall around my territory, claiming the entire center of the board. Normally this is not a sound strategy - there isn't as much territory in the center as there appears to be, and it is harder to hold. Building that wall takes a lot of moves, and lets me firmly establish my own territory. But I'm backed against the edge pretty effectively here, and it looks like she may have enough points to win.
I manage to connect my corners, taking three sides. Violet is determined to hold the last side, though, and this is, ironically, my chance. I attack a section of her wall that isn't fully connected. Then another. And another. Eventually I've formed a couple of cracks, and I move to drive a wedge into her territory. I don't try to capture territory, just consume it. This is scorched earth - I just want to make sure nothing will ever grow here again.
I succeed, and we count the stones. I win by 25 points, which means the territory I succeeded in reducing gave me the win. Salting the earth made all the difference.
Wrapping Up
The projector is now displaying the tournament results. I can see that I did pretty well - my standing based on strength of schedule is listed, and my score is double the person below me. That win in round 3 really helped.
In the lull after the last round, people have started talking pretty loudly, and we've achieved the sort of din that only 30+ people in a confined space can make. The organizer has to try a few times to start speaking. They have divided the players into 4 sections based on strength:
C | 27kyu - 19kyu |
B | 15kyu - 6kyu |
A | 5kyu - 1dan |
dan | 2dan+ |
I'm excited by this, because sorted like this, I'm at the top of section C. When they actually announce winners, though, they announce a 3-way tie for first; they are *only* using wins and losses to determine who 'wins' here.
This seems an odd choice; surely, in a ranked tournament, one unambiguous winner per group is preferable to 2 or 3? Especially given how likely it is that, in a given group of 5-10 players, several players will finish with 3 wins and nobody will finish with 4. This is basically why strength of schedule even exists.
I'm not concerned about it, though. Some pictures are taken, and I hang around with a few other players to help clean the place up. We turn out the lights and head downstairs.
At the front of the building, I say goodbye to the people still standing around and head back to my car. The rain has stopped now, and the late afternoon air is crisp and clean.
1For anyone who is unfamiliar with Go game clocks, the clock has (in addition to some setup buttons hidden under a panel) 2 buttons for each side - one with your colour and a smaller one with your opponent's colour. They also have an indicator that tells you how much time you have left and how many moves have been played. You press your colour after you move to indicate your move is done (it stops your game clock and starts theirs). You can press and hold the opponent's colour to have your display show how much time their clock has left. In this tournament, we had 30 minutes main thinking time plus 5 30-second byo-yomi periods. Tournament time in Go is very different than in Chess and many other games.
\ No newline at end of file
diff --git a/_posts/media/2012-04-26-languages-of-skyrim.html b/_posts/media/2012-04-26-languages-of-skyrim.html
new file mode 100644
index 0000000..0248ad3
--- /dev/null
+++ b/_posts/media/2012-04-26-languages-of-skyrim.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: Languages of Skyrim
+date: '2012-04-26T02:30:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Old Norse
+- Skyrim
+- grammar
+- Gaming
+- language
+modified_time: '2013-10-22T11:19:51.916-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-2733512241258830694
+blogger_orig_url: http://www.stringofbits.net/2012/04/languages-of-skyrim.html
+---
+
+Can we still talk about Skyrim? I mean, I know it's been out for a while now, and a lot of people have moved on. But I'm still playing it, and enjoying the vast explorable terrain, hundreds of quests, and terrible, hilarious bugs.
As I've been playing, I've noticed that they've really tried to turn the production values up to eleven. The terrain feels a lot more detailed, the voice acting is improved (and there are more voice actors), the quests are more detailed and varied, and the game is sprinkled with non-human languages. Notably, the Dragon Language (spoken, obviously, by dragons, and also by the ancient Nords) and the Falmer Language (the Falmer are a race of elves who became blind underground monsters) get considerable attention in various storylines in the game.
But for all that attention, the actual language construction has... mixed results. And since I occasionally like to tear things apart and nit-pick them to death, I thought I'd discuss what they've done, and where it succeeds and where it fails.
Building Imaginary Languages
A spoken or written language that is created intentionally (as opposed to most natural languages, which develop organically) is called a constructed language, or conlang. These can be created as fictional languages (well-known examples include Klingon, Na'vi, Quenya) or intended to be used in the real world (Esperanto, Solresol, toki pona). Someone who creates constructed languages is often referred to as a conlanger.
Conlangers are often seen as eccentric nerds who are wasting their time and skill. However, they are employed with increasing frequency by big media producers who want consistent, realistic languages in their fictional universes - Klingon is an early example of this. And, of course, Tolkien is the grandfather of self-indulgent conlanging, creating at least a dozen languages, many with etymological histories, 'older' forms of the language with traceable roots, and an amazing attention to detail. Sure, he told some stories, but that was mostly just to give his languages somewhere to live.
Real-world conlangs are often made with optimistic and lofty goals: Esperanto (a fairly early constructed language), for example, was designed to be "an easy-to-learn and politically neutral language that transcends nationality and would foster peace and international understanding between people with different regional and/or national languages" (http://en.wikipedia.org/wiki/Esperanto). So, world peace through language. Sadly, 125 years on, we still seem to have a lot of war. Likewise, toki pona is designed to "shape the thought processes of its users, in the style of the Sapir–Whorf hypothesis in Zen-like fashion" (http://en.wikipedia.org/wiki/Toki_Pona).
But on to Skyrim...
The Falmer "Language"
The Falmer language is a disappointment. I know it only comes up significantly in one quest line, but still... it's not even remotely a language of its own, just English text written with an alternate alphabet. Basically, a monoalphabetic substitution cipher. I think I might have preferred untranslatable gibberish to this.
I mean, it's not that hard to whip together just enough of a constructed language for one quest. I'm not asking for much here, just something a tiny bit more sophisticated. Watch how much we can do in just a few minutes:
Start with the grammar. We can make arbitrary decisions here - no one's going to fault us for such a simple use case. Let's pick an SOV word order, with simple inflectional markers for genitive and plurals. Say, add 'i' to any word to make it genitive, and 'o' to make it plural. Words ending in vowels take 'ti' and 'to'. Simple enough. We'll also say that the language uses a fairly simple structure, with short sentences and a minimum of relative clauses. Where prepositional phrases occur, we will let them retain their natural English word order unless there is some obvious reason to use SOV.
So, take the first sentence of the original encoded text. In our new language (keeping English vocabulary for now, but simplifying a bit) it looks like:
MERCER FREY MYTI EVERY STEP ELUDES.
The next step would be to make up some vocabulary; there aren't that many words used in the original text, so it should be pretty easy to cook that up. Even an amateur conlanger like me could make something at least mildly interesting in just a couple of hours. And more importantly, it would give us a translated text with a consistent feel (it would flow like a natural language) but without falling back on something quite as obvious as basic substitution. And tools can automate a lot of our work - if we keep the original text simple enough, we could even just use sed or perl (or another search/replace solution) to do most of the heavy lifting.
You could argue that it is Gallus' 'encoded' journal, but the story makes a big deal about the fact that it was written in Ancient Falmer, which is So Terribly Hard to translate and makes it super secure. Anyone, given a few hours, could work out "he's used some other alphabet to write words in my language".
And sure, there are a lot of quests, and I don't know how big their design team was. Maybe a couple hours was too long to spend fleshing this out. But it's still a disappointment. I suppose decoding the message is a nice easter egg, but an easter egg that required digging deeper would have been more interesting to me.
Dragon Language
The Dragon Language, on the other hand, is used much more extensively - there are numerous writings in it throughout the world, the dragons and draugr will speak in it (as combat taunts, in particular), and the protagonist (along with several NPCs) can use special 'shouts' that are formed from words in the language.
With increased visibility came an increased attempt to make a language that makes sense. While the dragon language, like Falmer, has its own script, the script isn't just used to encode English; every time that script appears, it translates into something intelligible in the Dragon Language.
And the resulting language is a lot more interesting than Falmer. The grammar is very similar to English, but not identical. Word order is almost the same, but plurals inflect differently, and there is no case system (at least not that we see in the game), which is a bit lazy and feels like the result of a rushed production schedule.
Obviously we have a very small vocabulary available - there isn't *that* much written or spoken Dragon Language in the game. But still, some of the word forms are interesting. One that struck me on an initial overview is one of the most well-known and widely used words, dov. Dov means 'dragonkind', as in the entire race of dragons. The word for a single dragon is Dovah. Now, ah means 'hunter', but "hunter of dragonkind" doesn't feel right. So, this isn't a simple compound word. I suspect the conlanger was going for 'ah' here being rooted in aan, the indefinite article in Dragon Language, with some morphological drift (which is especially likely with very common words, and since 'dovah' would basically be the dragons' word for 'person', this is likely). This is an impressive touch - it shows that some real attention to detail was paid when choosing words for the vocabulary (instead of the usual fantasy conlang approach of 'string syllables together more or less at random').
Looking at the wider vocabulary, the language tends to form a lot of compound words, in a manner similar to German. I initially thought that some of its vocabulary was pulled from either Old Norse or modern Icelandic, but on further inspection I think that's just random collision. The pronoun system is suitably complex as to feel natural. It is also quite distinct from English.
Another thing worth remarking on is that the Nords are a visibly Scandinavian people. The word Draugr, for instance, is an Old Norse word, although it is used a bit incorrectly in Skyrim (the word is used similarly to 'mummy' in Skyrim, but the original meaning is closer to 'zombie' or perhaps 'revenant'). So, I am assuming that the Dragon Language is intended to sound Scandinavian, because it does. Even without obviously basing its vocabulary on any Scandinavian language, it pulls off the trick of really sounding Norse. The creators of the language have a good ear for phonology.
If I have one real criticism of Dragon Language, it's the name. We don't have anything better than 'Dragon Language' to work with. Either Dov'um or Dovzul would have been decent choices. Both can translate roughly to 'dragon voice'.
Like I said above: Bethesda really pushed the production values on this game. There is a lot of wonderful attention to detail that shines through in this game. The Dragon Language is a good example of that.
\ No newline at end of file
diff --git a/_posts/media/2012-09-07-doctor-who-asylum-of-daleks.html b/_posts/media/2012-09-07-doctor-who-asylum-of-daleks.html
new file mode 100644
index 0000000..187ee94
--- /dev/null
+++ b/_posts/media/2012-09-07-doctor-who-asylum-of-daleks.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Doctor Who: Asylum of the Daleks'
+date: '2012-09-07T19:49:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Media
+- Oswin
+- Doctor Who
+- Daleks
+modified_time: '2013-10-22T11:19:51.998-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-740397282858051190
+blogger_orig_url: http://www.stringofbits.net/2012/09/doctor-who-asylum-of-daleks.html
+---
+
+Spoiler Warning, though I should really stop giving these on Doctor Who posts. Really, you should know better anyway.
Shortly after I heard the title of Asylum of the Daleks, it occurred to me that 'Asylum' could mean two different things: a place to keep those deemed unfit, or a request for aid and protection. Since the first definition is more common, I assumed the reference would actually be to the latter. In high Moffat fashion, however, we get both instead.
But on to the actual episode. This was some very tight storytelling, with a lot of impressive, complex narrative going on under the surface. We have two misdirects that are central to the story. The first one is that Amy is used as a peril monkey - except that she isn't really in peril, the Doctor just lets her and Rory think that to keep them safe. This is a nice blending of the 7th-Doctor-esque manipulation we've seen throughout the Moffat era (what I have come to think of as "The Doctor's Odinic side"), and the caring, compassionate role that the Doctor has cultivated to varying degrees throughout the new series.
And then we have Oswin. Jenna-Louise Coleman gave a solid performance, and I'm eager to see more of her. Her surprise appearance in this episode was brilliant, and the reveal at the end of the episode was, while almost predictable (it was pretty obvious that they were focusing on the danger to Amy and overtly not mentioning that the same danger should have converted Oswin months ago. The unexpected part was that she was an outright Dalek instead of a puppet). It lets us know the general sweep of the narrative arc for (presumably) the second half of season 7. It will inevitably add emotional weight to her story, in the same way Silence in the Library / Forest of the Dead added weight to River Song's saga.
If anything, my concern is one of 'Moffat has done this story / used this trick already'. We've already seen the companion story that starts with the companion's death. I'm pretty confident, though, that the other details of the story will be sufficiently unique to carry it. And of course all of this presupposes that Oswin is the companion, as opposed to a different character also played by Jenna-Louise Coleman (unlikely, but not a move entirely out of character given the way Moffat interacts with viewers through paratextual tricks - see the coat 'goof' from Flesh and Stone).
And either way, the question remains of how Oswin came to forget about the Doctor. Obviously there is a thematic if not actually narrative connection between her erasing the daleks' knowledge of the Doctor and her own memory. I'm really hoping for a narrative connection - something along the lines of "Oswin was actually a trap for the Doctor from the future that she created by erasing the daleks' memories". That is, after all, the sort of timey-wimey storytelling that the current era often plays with, and it has a nice poetical flair to it.
As for the daleks themselves, they shine here. The story plays up the iconography of the daleks until it is working almost in more of a lyrical register than a narrative one, using imagery that plays actively with their totemic nature. Surrounding the Doctor with tens of thousands of his greatest foe, only to have them say 'save us'. Likewise, the lyrical repetition of "eggs... eggs... eggs" first by a broken dalek and then by Oswin, is vivid and powerful. And the daleks actively invoke the iconography of the Doctor in turn, with lines like "The Doctor must have companions" and, of course, with the required season-opening 'Doctor who?' line chanted by them in unison.
Also notable is that the daleks are pretty much guaranteed to return during season 7. Moffat seems intent on making up for their absence in season 6.
Not much else to say on this one, except of course: DEPLOY SPECIAL WEAPONS DALEK
\ No newline at end of file
diff --git a/_posts/media/2012-09-21-doctor-who-dinosaurs-on-spaceship.html b/_posts/media/2012-09-21-doctor-who-dinosaurs-on-spaceship.html
new file mode 100644
index 0000000..b99578c
--- /dev/null
+++ b/_posts/media/2012-09-21-doctor-who-dinosaurs-on-spaceship.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: 'Doctor Who: Dinosaurs on a Spaceship'
+date: '2012-09-21T13:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Dinosaurs
+- Silurians
+- Amy Pond
+- Media
+- Doctor Who
+- Feminism
+modified_time: '2013-10-22T11:19:52.016-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-1140725858248588875
+blogger_orig_url: http://www.stringofbits.net/2012/09/doctor-who-dinosaurs-on-spaceship.html
+---
+
+Customary Spoiler Warning.
It was pretty clear going in that this episode was going to be a fairly light-hearted comedy romp. The episode title is a Snakes on a Plane parody. The trailers made it clear we were in for 'fun' and not 'epic storytelling'. I mean, more broadly, there are dinosaurs. It is hard not to just sit back and smile when there are dinosaurs.
And we got that light-hearted whimsical story, but we also got a lot of interesting complexity - there's a lot packed into this episode both structurally and narratively. The first thing that struck me was the exposition - the episode drops us into the action in minutes. It is frenetic, it doesn't stop to explain itself, and it is perfectly comprehensible - it trusts the audience to keep up, and channels the exposition into character moments over the course of the episode. This is very efficient storytelling, and it works great for a story as active as this one is.
And the character moments are numerous. Both the historical support characters and Brian are given chances to establish themselves as characters. Amy gets a few stand-out moments as well, particularly the explicit commentary on her role-reversal ("I will not have flirting companions!"). And Rory gets to actually be a nurse for a moment, instead of just having the occasional vague allusion to it.
The imagery in the story is a delightful romp that seems to have taken the approach 'how many ideas can we juxtapose at one time.' We have an Egyptian queen, a big game hunter, dinosaurs, Silurians (well, briefly), and an amoral space merchant who is basically the unseen silent protagonist of every Star Trader descendant. And a futuristic space defense agency with a penchant for firing missiles.
So, a lot of the story is high adventure and fun, including 'shoot the raptors with stun guns' and 'ride the triceratops' action pieces that are exactly the length they need to be. And yet for all the running around and having fun, the story drops into a very serious dramatic register for the climax. Notably, the Doctor doesn't quite save the day here - he shows up too late. The Silurians are already dead. And so he foregoes his usual 'give the bad guys a chance to do the right thing' speech. In this story, amoral slave-trading mass-murderers have already crossed the line, and do not deserve mercy.
But let's leave that thread alone for now (my next post will have more to say on the subject of mercy, I imagine). Because one of Amy's lines in this episode caught my attention, and I want to talk about it:
Riddell: Know what I want more than anything else?
Amy: Lessons in gender politics?
And, well, my first instinct is to bite back several snarky responses. But a Feminist critique of Amy Pond's character has already been done, and I have commented on it once or twice as well. And while I don't agree with Lindsay in every particular, it isn't a radical observation that Doctor Who, particularly in the last few years, has had a mixed record on Feminist issues, and Amy Pond is at the center of a lot of the show's more recent problems.
This episode makes some clear efforts to rectify that, with both Amy and the Doctor getting dialogue that reinforces Amy as capable of taking care of herself. It has mixed results. Sure, lines like "I'm easily worth two men" and the Doctor's suggestion that Brian is 'a Pond' are clever. But equally, the likes of "I'm Rory's queen... don't tell him I said that" starts to edge into straw feminist territory. Because obviously, women are Too Controlling and that Threatens the Manhood of their partners. Better rein in that feistiness, girls.
More broadly, a lot of the dialogue Amy gets (both in this episode and in others) that attempts to be overtly Feminist comes off poorly. At best, it often sounds a little flat. At worst, it sounds like a man with a large amount of unacknowledged privilege trying to write feminism. Which I strongly suspect is the case. It is notable the number of women to write an episode of Doctor Who in the Matt Smith era can be counted on one closed fist. And the Davies era wasn't much better: the total number of episodes written by women during his tenure can be counted on one hand (at least it gets to be open this time).
So in terms of writing, Doctor Who is still very much a boy's club, and it shows. But at least the episode was fun. And the line about gender politics was genuinely good.
\ No newline at end of file
diff --git a/_posts/media/2012-10-03-doctor-who-town-called-mercy.html b/_posts/media/2012-10-03-doctor-who-town-called-mercy.html
new file mode 100644
index 0000000..5b44259
--- /dev/null
+++ b/_posts/media/2012-10-03-doctor-who-town-called-mercy.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: 'Doctor Who: A Town Called Mercy'
+date: '2012-10-03T06:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Media
+- Stetsons are cool
+- The Problem of Susan
+- transgender
+- Doctor Who
+modified_time: '2013-10-22T11:19:52.024-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-4226738802334633392
+blogger_orig_url: http://www.stringofbits.net/2012/10/doctor-who-town-called-mercy.html
+---
+
+This post is spoiler free! Just kidding. Spoiler Warning.
One of the stock modes of operation of Doctor Who is, of course, the collision of genres and genre elements. Sometimes this simply takes the form of colliding Doctor Who itself into another genre. Other times, the Doctor wanders in on two genres in the act of colliding.
A Town Called Mercy is, of course, a Western. It is also a space opera. The two are blended fantastically, with the warring aliens taking on roles out of a traditional Western, with the outlaw and the target of his anger. Then the Doctor shows up, and naturally takes the role of sheriff. So we have a Western, with aliens, actually set in the American Frontier. And then we introduce some plot twists and moral ambiguity. Pretty straightforward Doctor Who.
Except the plot twists and moral ambiguity are a little weak here. Sure, "the gunslinger is seeking revenge for evil visited upon himself and others" is a nice direction to take things. And the moral complexity of Jex functions at least well enough to provide a mirror for the Doctor (the parallel is made even more explicit by having Jex be called "the Doctor" by the townspeople). In general, there is a lot of potential in the moral dimensions of the story. However, Amy's speech to the Doctor is heavy-handed, and Jex' suicide was disappointing. Obviously the Gunslinger couldn't be the one to kill Jex, but either companion could have done it, and the story could have been stronger for it.
Still, A Town Called Mercy is competently executed Doctor Who set in a novel (well, maybe not so much) setting. And it has Ben Browder. So clearly there is a lot here to like. However, there was one part that really got under my skin, and left me a bit unsettled for the rest of the episode: the Horse Named Susan.
Toby Whithouse may well have had the best of intentions with this line. But as I have said before, I don't think intentions are an effective thing to talk about when we discuss whether something is problematic (for more info see Kinsey Hope's excellent post on the subject). And this is a very problematic joke. On the surface (at least to a viewer not well-versed in trans issues), the joke seems harmless, even supportive. It even has the word 'respect' in it! Every indication here is, again, that Whithouse had the best of intentions with the line.
But the Problem of Susan is obvious when viewed in terms of actual transgender people and trans experience. First is the issue of pronouns. Most transgender people not only dislike being referred to by pronouns that don't match their gender identity, they find it actively painful (strongly recommended further reading here). So, having the Doctor misgender Susan was cringe-inducing at the very least, and potentially very actively harmful.
Second is the phrase "lifestyle choices". Just like sexual orientation, gender identity has been the subject of a debate over whether it is innate or chosen for decades. The phrase "lifestyle choice" here is, then, a political statement; it weighs in on that debate. Though the tone of the joke tries for supportive, its content is still regressive.
The overall result of this is that the line suggests that transgender identities are not legitimate. That while someone may change their name and say they are a woman (or mare), if that disagrees with what they were assigned at birth (or as is more commonly thought, "what their genitals looked like at birth"), then it is just a "choice" and there is no obligation to take it all that seriously, really. Just play along a little. As long as it doesn't make you uncomfortable.
And this de-legitimization is a common theme in our culture. It is rooted deep. In many places trans people have to undergo (expensive, in some countries, and difficult to access in most) surgery, to make all of the "normal" people feel comfortable, before they can be legally recognized as the correct gender. Things that cisgender people take for granted, like using a public restroom, become sources of terror. Getting a drink at a bar is scary, because your ID is marked with the wrong gender and what if someone questions that?* It is a feeling of powerlessness.
So, this is the central problem with Susan: she isn't treated like a legitimate mare. And by the Doctor, no less. And while, yes, this is just a throwaway joke about a horse, it relies on the existence of transgender people for its humor. It has been pointed out to me that a redemptive reading is possible: you could argue that Susan is genderqueer, and actually prefers masculine pronouns but a feminine name. But given the relative lack of cultural awareness about genderqueer identities, in the current culture this still makes for problematic storytelling without some explicit framing or explanation around it.
It was a pretty good episode, and I quite liked several bits. But for me, the shadow of this poorly executed joke hangs over it.
*As a note, I live in the US. I realize that the UK has a much more progressive process for changing gender markers, but even then you have to live with this as your operating reality for at least two years.
\ No newline at end of file
diff --git a/_posts/media/2012-10-18-doctor-who-power-of-three.html b/_posts/media/2012-10-18-doctor-who-power-of-three.html
new file mode 100644
index 0000000..df31342
--- /dev/null
+++ b/_posts/media/2012-10-18-doctor-who-power-of-three.html
@@ -0,0 +1,14 @@
+---
+layout: post
+title: 'Doctor Who: The Power of Three'
+date: '2012-10-18T06:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Media
+- Doctor Who
+modified_time: '2013-10-22T11:19:52.039-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-2908703869957411894
+blogger_orig_url: http://www.stringofbits.net/2012/10/doctor-who-power-of-three.html
+---
+
+What The Power of Three is trying to do is clever - hide a drama about the relationship between the Ponds and the Doctor inside a straightforward episode of Doctor Who (in this case, it happens to be in the 'aliens invade earth' genre of Doctor Who stories). Unfortunately, that drama never really gets time to find itself; instead, the episode spends a bit too long developing the alien invasion story, and not long enough exploring the drama.
Using UNIT may have been a mistake in this direction, too. Kate Stewart is immediately likable, and Jemma Redgrave shines in the role. But this is part of the problem - the Doctor and Kate shine on camera, and this is a further distraction from what is trying to be the emotional core of the episode. Especially since bringing up the Lethbridge-Stewart family brushes against the topic of the Brigadier, and less diegetically, Nicholas Courtney.
So the episode feels unfocused, but there's a lot of potential. And fittingly, one episode from the Ponds' departure, the theme this episode explores echoes all the way back to their introduction in The Eleventh Hour. Since I wasn't writing this blog series back then, let me summarize: The Eleventh Hour is explicitly about the status of Doctor Who as a fairy tale, and more specifically about running away (or being abducted, since they are the same thing when it comes to fairies) to Fairyland. Or to Neverland, if you prefer. The episode goes so far as to have the episode comment that Amelia's name would fit in in a fairy tale.
And now the show is approaching the end of this fairy tale, where the girl has circumnavigated Fairyland, and having met many people and done many deeds, will return to the normal world with its slower pace and duller colors and safety and, basically, grow up. And in this particular fairy tale, governed by the rules of Doctor Who companions, this return is as inevitable as the running away.
But The Power of Three doesn't explore this inevitability. Instead, it asks whether running away to Fairyland is good, and whether coming back is necessary. And it comes down solidly on the side of the fairies. This is Small Worlds from the perspective of the fairy child and the fairies.
Phil Sandifer mentioned once that the fairies in Small Worlds are coded as evil, but I think the episode works, intentionally or not, as a study in extreme cultural relativism. Of course the fairies look evil. They steal our children. From their perspective, though, they are simply protecting their own, and helping them fulfill their destinies. And they are, in many ways, indistinguishable from The Doctor.
In The Eleventh Hour, we have a fairy (or a goblin, or a trickster), and the girl who runs away to Fairyland with him. And the concept of childhood is explicitly invoked:
The Doctor: So, coming?
Amy: No.
The Doctor: You wanted to come 14 years ago.
Amy: I grew up.
The Doctor: Don't worry. I'll soon fix that.
So, the story of Amy Pond begins with the assertion that childhood is good, and that the bargains of fairies can be worth the cost. The Power of Three, then, asks whether the bargain paid off and, perhaps more importantly, whether it is okay not to grow up.
And the conclusion the narrative reaches is a strong and resounding yes. Through the Doctor, through the telling of stories, we can all run away to Fairyland and remain children forever.
Except we know that the end of this tale is looming. Which forces us to consider this question: what force could possibly overrule the will of a fairy and his two fairy children, the will of the very narrative itself?
\ No newline at end of file
diff --git a/_posts/media/2012-10-25-an-adventure-in-transliteration.html b/_posts/media/2012-10-25-an-adventure-in-transliteration.html
new file mode 100644
index 0000000..c97e1e7
--- /dev/null
+++ b/_posts/media/2012-10-25-an-adventure-in-transliteration.html
@@ -0,0 +1,21 @@
+---
+layout: post
+title: An adventure in transliteration
+date: '2012-10-25T18:42:00.000-04:00'
+author: Anna Wiggins
+tags:
+- translation
+- Cirth
+- The Hobbit
+- linguistics
+- conlang
+- runes
+- Denny's
+- language
+- Tolkien
+modified_time: '2013-10-22T11:19:52.048-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-4889133135357775040
+blogger_orig_url: http://www.stringofbits.net/2012/10/an-adventure-in-transliteration.html
+---
+
+So, Denny's new Middle Earth-themed menu / Hobbit tie-in has resulted in the following billboard:
It is written in Cirth, Tolkien's version of runes. It is a bit hard to read, and seems to mix and match a bit between the Angerthas Daeron and the Angerthas Moria.
My first attempt at a rough transcription rendered this:
dh* brekfast richū ov mid*l erth awökw
Looking at this, that second character (the first one I've marked with an asterisk) may have been intended as an 'e'. Either way, it definitely doesn't look like any of Tolkien's languages, but rather like an attempt at transcribing English into the Cirth. In which case, and assuming the first word really is 'the', they were clever for using the cirth for 'dh' instead of 'th'. Good phonetic transliterating there.
My next thought was that it meant something like "Wake up to the richest breakfast in Middle Earth" in an odd pidgin of English, unless I had transliterated very badly or they had. Eventually I realized I had made several errors, and corrected them based on some further study of some of Tolkien's Cirth inscriptions (the sounds of letters vary by language and time, because Tolkien was adamant about his constructed languages seeming organic, and the writers of this billboard were seemingly inconsistent), and got:
dhe brekfast richz ov middl erth awät
Which is a really decent phonetic transcription of "The breakfast riches of Middle Earth await".
There seems to be a notion running around that the sign reads "Middle Earth is coming to America's Diner". It may be a tiny, silly bit of misinformation, but I will correct it if I can!
Edit: Looks like the good people over at theonering.net already translated this, and confirm my translation. So it's good to know I'm not way off base.
\ No newline at end of file
diff --git a/_posts/media/2012-10-31-doctor-who-angels-take-manhattan.html b/_posts/media/2012-10-31-doctor-who-angels-take-manhattan.html
new file mode 100644
index 0000000..c4a8a1f
--- /dev/null
+++ b/_posts/media/2012-10-31-doctor-who-angels-take-manhattan.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: 'Doctor Who: The Angels Take Manhattan'
+date: '2012-10-31T06:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Amy Pond
+- Media
+- Doctor Who
+- Rory Williams
+- The Weeping Angels
+- River Song
+modified_time: '2013-10-22T11:19:52.057-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-1477631718189883779
+blogger_orig_url: http://www.stringofbits.net/2012/10/doctor-who-angels-take-manhattan.html
+---
+
+The Angels Take Manhattan is about endings. Not the end of the world, or the universe, or time, like past epic stories have been about. It is about regular human endings, about saying goodbye and the things in life that keep us from the people we love. It is about leaving Neverland, finding that Peter won't be coming back for you after all, even though he might want to.
The theme of endings is played with from the opening on: the Doctor tearing out the last page of his book and declaring "I hate endings" is paid off at the end of the story with Amy's line "You and me, on the last page". The dialogue throughout the episode is poignant, but this pair of lines perfectly bookends it. Rory's death is also (once again) hinted at throughout the episode. And as a counterpoint to the theme of endings, we have references to the last two and a half years scattered throughout this episode - small moments or lines of dialogue that echo Amy and Rory's story. That this is a departure story is coded deeply and obviously into this episode.
So, what force could possibly pull Wendy from Neverland? The answer is, of course, right there in the title: the Weeping Angels.
When I first watched Blink, it seemed to me that while they were a very clever idea, the Angels could only really work once, because there was only one story they were really suited for, and I had just watched it. So, I went in to The Time of Angels warily. And it turns out there was something else you could do with the Angels - collide them into a space marine action film and then suddenly change that into a story about trust. The Time of Angels also made the angels much scarier by suggesting that they were born in imagination, by thinking about them.
And coupled with this is a realization that didn't hit me until the second time I watched Blink: the Angels can move when nobody is looking at them. Yet repeatedly, in stories with the Angels, they are clearly visible as still statues when *none of the characters* are looking at them. Diegetically, then, they should be free to move, to zap their prey back in time.
So why do they stay stone-faced? The most interesting answer - and it seems consistent with Moffat's thematic tendencies and understanding of the franchise - is that the Angels have an meta-diegetic existence. They have to remain stone because *the viewer* is watching. Time of Angels also established, of course, that the Angels defense mechanism is based in part on their perceptions; they will remain stone as long as they *think* you can see them.
In other words, the Angels know you are watching them. They can see you.
And just in case you feel safe with the knowledge that it's only a television show, remember that even diegetically, they were born from imagination. They are by their nature written into existence.
But in The Angels Take Manhattan, it isn't just the Angels that have a hinted-at meta-diegetic existence. The entire episode plays heavily according to narrative logic, so much that it acquires the existence of the viewer in order to make basic sense. The first instance of this is when the Doctor explains that reading ahead - knowing your own personal future - makes it inevitable. That you can still change things as long as you don't know they are going to happen. Immediately after this declaration, though, Rory's name is shown on a tombstone. Note that this event is now inevitable - a fixed point has been created, to borrow the Doctor's phrase. But none of the *characters* have seen the tombstone, only the audience. And yet the fact that our seeing the tombstone makes Rory's death inevitable is clearly the intent of the narrative - otherwise there is no reason for it to be juxtaposed with the Doctor's speech about spoilers.
The other example is the Doctor's statement that they are allowed to read "things that are happening now, in parallel". There are two ways to read this: 'parallel' can mean 'written events that correspond with what we are doing right now'. But it also suggests that the two sets of events, in different time periods, are somehow happening at the same intrinsic 'moment'. Russel T Davies hinted at this idea in The End of Time, as well, when Rassilon says that the Doctor is "in possession of the Moment". But the 'present moment' in a story is really the moment that is receiving Narrative Focus. The "present" is the part of the story we're reading. This applies equally well to River's book and to the episode of Doctor Who.
So the diegetic rules of the narrative universe can operate on the meta-narrative level. This isn't really anything new for Doctor Who, but it has never been used this extensively before.
So the Angels have some amount of awareness of the narrative, and this gives them the power to attack the narrative. They never threaten to destroy the show completely, but they are able to write Amy and Rory out of it. And yet they exit with a dignity that few companions have ever been afforded. They die, but in a very normal, human way, after a full and normal life. They are ripped from Neverland, and that is tragic, but they still find a way to be happy.
And so Rory grows up, and adopts a son, who will eventually track down his grandfather and deliver a letter to him at a particular time and place. From his perspective, his son and daughter-in-law have barely been gone any time at all. This is a powerful parallel to the first appearance of the Angels, and a wonderful final note for Rory. It is a shame it didn't make it into the episode. I agree with the decision to cut it, though - the final notes for the episode are on Amy and the Doctor, which is correct. Rory receives the focus of the narrative for most of the episode itself, and Amy's departure hinges on her choice of Rory over the Doctor. Thematically, Brian's scene would have weakened the ending. It is better where it is, as a piece of para-textual lore, present but not interrupting the main narrative.
And so Amy grows up, not resenting a Doctor who never came back for her, but missing a friend who was separated by circumstance. It is a much kinder ending than I expected. And it comes on the heels of a story that emphasizes that leaving Fairyland is not a necessity, that it is okay to run away and stay a Fairy Child forever. So we know that this separation is cruel and unnecessary, required diegetically only by circumstance and meta-diegetically by the format of the show (which requires that companions come and go). The show has explicitly avoided allowing a reading that says we have to eventually grow up. Sometimes we do, but not because it is the only path to happiness.
\ No newline at end of file
diff --git a/_posts/meta/2008-11-24-a-new-hope.html b/_posts/meta/2008-11-24-a-new-hope.html
new file mode 100644
index 0000000..26d3dad
--- /dev/null
+++ b/_posts/meta/2008-11-24-a-new-hope.html
@@ -0,0 +1,13 @@
+---
+layout: post
+title: A New Hope
+date: '2008-11-24T17:23:00.000-05:00'
+author: Anna Wiggins
+tags:
+- meta
+modified_time: '2013-10-22T11:19:50.569-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-2208926562653345060
+blogger_orig_url: http://www.stringofbits.net/2008/11/a-new-hope.html
+---
+
+I once had a blog on livejournal, titled slashsplat. This blog didn't see very many posts, because I had to log out of my personal journal to log in to it. So I decided that a blog hosted somewhere other than livejournal would be a good idea.
That's the purpose of this site. It will be somewhat more general; the goal of this blog is to discuss geek culture and everything that may mean to me: programming, technology, gaming (video and table-top), and whatever else springs to mind. However, each post will try to be an entity separate from myself; personal matters that I feel like ranting about will not appear here. I have a personal journal for that, after all.
Anyone who feels like reading this little piece of the Internet is welcome to come along for the ride. If it's just an exercise in self-indulgence, then so be it.
(Below this post, you may notice I've included all of the posts from slashsplat as well. Those few posts span a lot of changes in my life, so the tone will vary as you venture farther back.)
\ No newline at end of file
diff --git a/_posts/meta/2011-05-24-clearing-out-cobwebs.html b/_posts/meta/2011-05-24-clearing-out-cobwebs.html
new file mode 100644
index 0000000..72acf89
--- /dev/null
+++ b/_posts/meta/2011-05-24-clearing-out-cobwebs.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: Clearing out the cobwebs
+date: '2011-05-24T16:53:00.000-04:00'
+author: Anna Wiggins
+tags:
+- wordpress
+- life updates
+- nearlyfreespeech
+- social justice
+- tumblr
+modified_time: '2013-10-22T11:19:50.890-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-9157555665587796124
+blogger_orig_url: http://www.stringofbits.net/2011/05/clearing-out-cobwebs.html
+---
+
+Has it really been over a year since my last post here? It has been ann eventful year, that took me in directions directions that didn't quite fit the aim of this blog. You can read more about those changes in my life on my tumblr, although they are bound to affect the tone of this blog as well. Some things you can expect here now:
- me talking about Doctor Who
- increased analysis of video games from the perspective of social justice
- bulleted lists that only contain two items with actual substance, and a third item that is self-referential
- posts about an increasingly diverse set of topics, including social justice, politics, and anime
- strangely organized sets of information, with self-referential lies interspersed
I have also moved the blog from a self-hosted wordpress installation to wordpress.com. nearlyfreespeech is a fine web host, but their recent decision to charge a daily fee on a per-site basis put them just on the wrong side of affordable for me. Also, wordpress.com has a lot of nice convenience features, and I don't lose any features that I was actually using.
So sit back and enjoy the blog. I know I intend to.
\ No newline at end of file
diff --git a/_posts/meta/2011-12-08-the-direction-of-this-blog.html b/_posts/meta/2011-12-08-the-direction-of-this-blog.html
new file mode 100644
index 0000000..7800e70
--- /dev/null
+++ b/_posts/meta/2011-12-08-the-direction-of-this-blog.html
@@ -0,0 +1,13 @@
+---
+layout: post
+title: The Direction of this Blog
+date: '2011-12-08T09:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- meta
+modified_time: '2013-10-22T11:19:51.803-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-7908977211100150042
+blogger_orig_url: http://www.stringofbits.net/2011/12/the-direction-of-this-blog.html
+---
+
+When I started this blog, it was with the intention of posting technical content - posts about programming projects and Linux tutorials and the like. Over time, my focus has grown to generally include 'things that interest me', which includes rambling about video games and Doctor Who. I've also been including more Feminist and Activist content, mostly because talking about Doctor Who and Duke Nukem Forever invites that sort of discussion.
So, at this point, I think I'll state it more or less officially: this blog is about anything that can be broadly classed as 'geeky'. I'll post on any subjects where I feel like I have sufficiently interesting things to say.
I will also likely be pulling more personal (and by extension, more Feminist and Activist, given the maxim that The Personal is Political) material into this blog. In particular, I have a personal-reflection-heavy review series of Wandering Son in the works. Since Phil Sandifer recently described me as a Feminist blogger and this a Feminist blog, this seems fair enough.
Don't worry, I'll try to keep posting sufficiently interesting material to match my current level of 'interesting', whatever you think that happens to be.
\ No newline at end of file
diff --git a/_posts/meta/2013-10-22-this-blog-has-moved.html b/_posts/meta/2013-10-22-this-blog-has-moved.html
new file mode 100644
index 0000000..a21fbd3
--- /dev/null
+++ b/_posts/meta/2013-10-22-this-blog-has-moved.html
@@ -0,0 +1,15 @@
+---
+layout: post
+title: You're in the right place
+date: '2013-10-22T11:27:00.001-04:00'
+author: Anna Wiggins
+tags:
+- meta
+- apologizing for hiatuses accounts for 20% of all blog posts
+- Doctor Who
+modified_time: '2013-10-22T22:51:58.078-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5966036917837787004
+blogger_orig_url: http://www.stringofbits.net/2013/10/this-blog-has-moved.html
+---
+
+I've moved over to Blogger instead of Wordpress for hosting this blog.
Why? Because I'm administrating three other blogs, and they are all on blogger. Frankly, this was just easier. Hopefully, you didn't notice the move. The conversion tool I used seems to have worked tolerably well; I may have lost a few comments, but such is life.
As for the long, long silence, well... that may have been noticed, at least by one or two people. I've actually been avoiding writing new content because I had this plan to convert from Wordpress to Blogger, and it took me a long time to actually get around to it.
So expect more content here soon. Especially about Doctor Who and other media that catches my interest. For the sake of catching up and actually keeping content here, though, I am going to start reviewing at a condensed pace - in particular, Doctor Who Season 7 Part 2 should review well as a single entry.
\ No newline at end of file
diff --git a/_posts/technology/2006-08-22-programming-theory.html b/_posts/technology/2006-08-22-programming-theory.html
new file mode 100644
index 0000000..601c134
--- /dev/null
+++ b/_posts/technology/2006-08-22-programming-theory.html
@@ -0,0 +1,14 @@
+---
+layout: post
+title: 'Programming: The theory'
+date: '2006-08-22T04:14:00.000-04:00'
+author: Anna Wiggins
+tags:
+- programming
+- Technology
+modified_time: '2013-10-22T11:19:50.878-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-3711031036226478256
+blogger_orig_url: http://www.stringofbits.net/2006/08/programming-theory.html
+---
+
+One of my biggest problems with the IT community, both in amateur programmers and prospective employers, is the following question: "So, what programming languages do you know?" This implies that learning a language is an extremely difficult task, and collecting languages like trophies is somehow a worthy pursuit.
A programming language is a tool. A skilled craftsman isn't good at her trade because she knows how to use a given set of tools; anyone can learn that. Rather, true skill comes from knowing how to *apply* the tools. The fundamental concepts behind programming are the skills on which we should be focusing.
This applies to academia as well. The language you use to teach students, especially the first language they encounter, *is* important. I'm not about to advocate "teaching languages" like Pascal, though. I think it's important to choose a real-world language, with all the pitfalls and caveats of a real-world language, as a student's first language. At the same time, it should be a language with the features available to demonstrate all the fundamental concepts in programming. A language that doesn't support recursion would be a Bad Choice, for example.
So, when someone (a peer or a hopeful programmer-to-be) asks me "what languages do you know?", I won't respond "Well, I know C, C++, Java, perl, php, xhtml/xml/css (if you count those), lisp, prolog, LotusScript, Javascript, LSL..." etc. Instead, I'll say "I've used a number of languages, but the key thing is that I know how to learn any language." When an employer asks, I suppose I'll have to say "Well, I know @languages...". Then, though, I might add "...but I consider the fundamental concepts behind programming languages to be more important, because mastering those means I can learn to get around in any language given a week or two of study."
In summary: Learning a programming language is trivial, once you know the fundamental concepts of programming.
\ No newline at end of file
diff --git a/_posts/technology/2006-08-25-technophobia.html b/_posts/technology/2006-08-25-technophobia.html
new file mode 100644
index 0000000..a8e6c7c
--- /dev/null
+++ b/_posts/technology/2006-08-25-technophobia.html
@@ -0,0 +1,13 @@
+---
+layout: post
+title: Technophobia
+date: '2006-08-25T20:31:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Technology
+modified_time: '2013-10-22T11:19:50.884-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-6152385275314555608
+blogger_orig_url: http://www.stringofbits.net/2006/08/technophobia.html
+---
+
+I have recently realized why there are so many computer illiterate people running around. It's not that people are simply stupid - that's a grossly judgemental answer that many of my fellow geeks unfortunately arrive at. That's not it at all, because computer illiteracy reaches into technical fields. I know several computer science professors that simply can't use technology newer than 5 years old.
So, what causes this, if not simply "they're dumb"? Fear. Technology is mysterious; most people, when confronted with something unfamiliar, are uncomfortable. It feels like some delicate piece of magic; if they touch it too hard, it might shatter.
The consequence of this fear is that, once gripped by it, people start assuming they *can't* learn anything about computers; it's too arcane. So, when presented with technical terms or ideas, they stumble over them. If the technophobe stopped to think about the idea they are grappling with, they'd probably figure it out pretty quickly. But their mind won't do that, computers are "too complicated" for anyone like them to figure out.
An example: USB flash drives. Even most technophobes know what floppy disks are, but when you tell them this is similar, except it connects to that rectangular plug on the side of their computer, they give a blank stare. They can't comprehend it because it's new.
A better example: If presented with two products that very clearly do the same thing, but are made by different companies, the technophobe will invariably ask "what's the difference between these two?" If you showed them a Dirt Devil and a Hoover, they would have no such problem, but computers are *mysterious*, afforded a special class of untouchability.
So, to all you technophobes out there: Stop being afraid of the computer. I promise it won't bite. Engage your mind and really *listen* when computer jargon floats by. Make intuitive leaps; even if they're wrong, they'll eventually point you in the right direction.
\ No newline at end of file
diff --git a/_posts/technology/2006-11-09-decentralizing-second-life.html b/_posts/technology/2006-11-09-decentralizing-second-life.html
new file mode 100644
index 0000000..497c7c9
--- /dev/null
+++ b/_posts/technology/2006-11-09-decentralizing-second-life.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: Decentralizing Second Life
+date: '2006-11-09T18:23:00.000-05:00'
+author: Anna Wiggins
+tags:
+- open source
+- video games
+- Gaming
+- Technology
+modified_time: '2013-10-22T11:19:50.521-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-4815979953876330393
+blogger_orig_url: http://www.stringofbits.net/2006/11/decentralizing-second-life.html
+---
+
+So, I've been thinking about Second Life, and it occured to me that it's being done entirely the wrong way. Don't get me wrong; I enjoy SL, and have no qualms with the experience itself. It's the underlying scheme it's built on that bothers me: one company controlling all the servers, one company responsible for keeping everything running smoothly. It seems to me that all technologies built on that model eventually fail on the Internet, while distributed technologies (Web, email, usenet) thrive.
To that end, I've been thinking about how Second Life could be successfully decentralized, without adversely affecting the experience that everyone has come to know and love. I've identified key elements of the user experience that would be difficult to decentralize, and possible ways to handle them. First, though, we'll talk about the basics; how could decentralization even work.
First, LL releases the code for the Second Life server. Now, anyone who wants to can host a Second Life sim/sims of their own on a server. A central repository would keep track of the existing sims, in a vaguely similar fashion to DNS (see The Grid, below). This would allow Second Life to grow without bound, with sims run by a multitude of companies and even home users.
So, how do we keep that Second Life experience without the centralized monolith of Linden Labs?
Economy
First and most importantly, the Second Life economy must be preserved. The economy has become the most crucial element to the experience; the ability to use real money, diluted down to a virtual quantum, to purchase other users' custom created content. This breaks down into two sub-problems:
a) Managing the money. The most likely way to do this would be to set up a "bank", wherein a single host (or several different hosts) manages all of the banking transactions. I'm thinking basically a system like paypal, where you buy L$ ("Linden Dollars", Second Life's currency) from the bank, or sell $L back to the bank for real currency. Each SL server would use this central bank system to check a user's account balance, and make withdrawals/deposits, with proper confirmation on the part of the user, naturally. A public/private key system to ensure the user actually sent the confirmation could prevent abuse here, so no worries on that score. The SL bank could even be controlled by Linden Labs, as this would be a lot easier to handle than the entire grid, and still give them opportunity to have a strong stake in their creation.
b) Protecting Intellectual Property. This is a tricky problem, and the single hardest element to decentralizing SL. Since a huge portion of the money in SL is traded for users' creations, there must be a way to prevent them from being stolen. Under a decentralized scheme, when a user rezzes an object on a sim, all the data for that object (textures, sounds, scripts) would necessarily be available to the owner of that sim. The most obvious solution I can find for this is to keep the object data elsewhere, and have a rezzed object be a pointer to that data. The advantage is that compiled scripts, raw texture data, and sound files stay on a secure server independent of their rezzed location. But where is this mystical server? I see two options here: either the data is on another sim, perhaps the user's "home sim" (see User Accounts, below), or the data is in a central "asset server" (essentially the way SL works right now). Using the former approach, the client would have to make tons of connections to different servers to get all the data. Under the latter, the asset server would have to be extremely load-tolerant and robust, and all the data is stored by the same group of people, whose ethical integrity the SL user base would have to trust implicitly. Since both of these are flaws in the *existing* Second Life system, however, it is acceptable for the hypothetical exercise we're attempting here. Also, under either system the sim owner's creations could be stored on-sim for lower lag.
One other solution would be to create some DRM scheme that encrypts this data until it reaches the client. Of course, in all of these cases the client could be modified to steal the data. However, here we again reach the fact that these flaws are already inherent in SL, and there's no easy way around them.
The Grid
The ability to bring up a map and scroll around, or teleport instantly to another part of the world, is an exciting part of SL, and another crucial part of the SL experience. Fortunately, the Internet already has a great system that we can build on - DNS and hyperlinking. We simply define 2 kinds of link: "landmarks" and "neighbors". Each sim can have 4 neighbors, and neighbors must mutually agree to be neighbors (for a neighboring to work between sim A and B, A would have to set B as a neighbor and vice versa). The neighboring agreements would be stored in a central server system, modelled on DNS. A few recursive calls to this system and each sim can cache a portion of the overall grid map. Want a private island? Simply don't neighbor your sim with any others. This creates user-level "peering agreements" that could create a more logical terrain (snowy areas linked together, etc) even if the landscape does shift from time to time.
The other kind of link would work just like landmarks in the current SL system. Pretty self-explanatory, except this system would make "click to teleport" objects a necessity, finally.
If a user searches for a sim on the map, the client can grab that sim's cache of neighbors, and display more of the grid. The client could be configured to keep any amount of that information cached locally, for a more immersive experience.
User Accounts
There are two ways to handle user accounts: a centralized account server, or a sim-based account system. Under a centralized server, all accounts would be handled by, say, LL. This simplifies the system greatly, and aids in managing the asset server. With "home sims", you'd have a system similar to Jabber, where user accounts are essentially user@home_sim. I believe the centralized system will work best, given that the asset server system seems to be the most logical way to do things.
Instant Messages
Well, LL is currently planning to re-implement the IM system in Jabber, so we're pretty much covered there :P
So, in summary, we have a system that uses a centralized server for accounts and user-created assets, as well as a DNS-like neighboring system to create the world map, but grids are controlled by individuals, and hosted by companies just like web servers are now.
\ No newline at end of file
diff --git a/_posts/technology/2007-05-01-28.html b/_posts/technology/2007-05-01-28.html
new file mode 100644
index 0000000..476bbe3
--- /dev/null
+++ b/_posts/technology/2007-05-01-28.html
@@ -0,0 +1,13 @@
+---
+layout: post
+title: 2^8
+date: '2007-05-01T19:35:00.000-04:00'
+author: Anna Wiggins
+tags:
+- freedom
+modified_time: '2013-10-22T11:19:50.539-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-8561575503641306262
+blogger_orig_url: http://www.stringofbits.net/2007/05/28.html
+---
+
+09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
That is all.
\ No newline at end of file
diff --git a/_posts/technology/2007-05-13-then-they-fight-you.html b/_posts/technology/2007-05-13-then-they-fight-you.html
new file mode 100644
index 0000000..338b6a2
--- /dev/null
+++ b/_posts/technology/2007-05-13-then-they-fight-you.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: Then They Fight You
+date: '2007-05-13T20:56:00.000-04:00'
+author: Anna Wiggins
+tags:
+- freedom
+- open source
+- linux
+- Technology
+modified_time: '2013-10-22T11:19:50.548-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5431666752428348053
+blogger_orig_url: http://www.stringofbits.net/2007/05/then-they-fight-you.html
+---
+
+Microsoft threatens to sue the entire FOSS community
Where have I seen this kind of threat before? Hmm... SCO, anyone? Is MS really desperate enough for that? SCO only sued IBM because they were losing money in copious amounts, flirting with bankruptcy. Vista seems to be the straw that's breaking Microsoft's back.
\ No newline at end of file
diff --git a/_posts/technology/2007-07-24-linux-on-desktop-partial-solution.html b/_posts/technology/2007-07-24-linux-on-desktop-partial-solution.html
new file mode 100644
index 0000000..a703fbc
--- /dev/null
+++ b/_posts/technology/2007-07-24-linux-on-desktop-partial-solution.html
@@ -0,0 +1,14 @@
+---
+layout: post
+title: Linux on the Desktop - a partial solution
+date: '2007-07-24T09:56:00.000-04:00'
+author: Anna Wiggins
+tags:
+- linux
+- Technology
+modified_time: '2013-10-22T11:19:50.555-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-3632174936213313356
+blogger_orig_url: http://www.stringofbits.net/2007/07/linux-on-desktop-partial-solution.html
+---
+
+Lately, I've read a number of "Windows user tried Linux for a week and hated it, and this is why" articles. Then, while holding back the urge to scream during a Windows XP install, it hit me: we're holding a double standard, here.
In the last year, whenever someone talks about "whether Linux is ready for the desktop", the complaints that always crop up revolve around the fact that a user can't throw in a Linux install CD, click next a few times, and have a fully functional desktop environment in half an hour. Several things plague these proverbial users: the lack of mp3 support is probably the most problematic now, as is the lack of 3d graphics support. The complaints further, er... complain, that the user has to know what she is doing to enable/install all of these components.
What most people overlook, though, is that installing Windows is no cakewalk, either. Windows ships with almost no real video or audio hardware support - everything must be downloaded from 3rd party websites, and more importantly, the user has to *know* what vendor website to go to, and how to navigate the vendor's site (with some vendors, that can be a real pain!).
So now, let's be fair. I'm taking a Windows XP install, out of the box, and comparing it side-by-side with an Ubuntu Linux install. Okay, here goes.
Ubuntu Linux
No mp3 support
As a user, I have to install several non-free packages, which means changing my available repositories and running a few commands (or using the graphical tool). If I prefer the less-questionably-legal route, I would purchase Fluendo (28E for their entire set of plugins, with perputual updates, as of this writing. Still about 1/4 the price of Windows' most basic version), and follow their instructions to install it.
Of course, I also have to *know* about these options. A quick google search ("MP3s in Ubuntu") and a forum gives me the answer, in step-by-step format.
No 3d graphics acceleration
This is even easier. All we need is to install the nvidia-glx or xorg-driver-fglrx packages, depending on the card. They're also in the restricted repository, but we've already enabled it previously. If we hadn't, the google search "3d graphics in Ubuntu" gives us the correct answer immediately.
No flash player
Another quick google search turns up the answer, as always with step-by-step instructions.
And, that's it. Everything else I need to do to be productive is already provided by Ubuntu: web browser, office suite, multimedia software. Note: I never had to restart Ubuntu during this whole process.
Windows XP
No audio
First, I have to figure out the name of my audio chip, which Windows doesn't tell me. All Windows will say is "Unknown Multimedia device". By booting Linux and running lspci, I discover it's a C-Media chip, and go to their website. I have to give them the exact chip model number, and they give me a driver to download. I have to restart Windows.
No 3d graphics acceleration
Again, the video controller is just called an "Unknown display adapter". Foreknowledge tells me I have an Nvidia Geforce 6600 GT. I go to Nvidia's website (much easier to use than C-Media was), and get the driver. I have to restart Windows.
No flash player
Well, this one installs automatically. Doesn't even need a restart! 1/3 isn't bad, I suppose.
The Conclusion
What's the point of this exercise? Am I trying to say Windows is teh sux0r? No, that's not my message today. I could extoll the myriad problems with Windows that make Linux a better option (spyware, viruses, openness and all the benefits thereof, etc), but that's not the point.
The point is this: when it comes to installation, Linux and Windows are roughly equivalent in complexity. Linux has its installation issues; so does Windows. They tend to break roughly even, in my experience, although Linux has a much more readily available support structure in the form of community forums. But both OSes require a lot of user knowledge in order to get up and running. They assume you already know how to do things. What they really assume, underneath, is that
a technical person is doing the install.
The Solution
Most Windows users never install their OS; some technician installs it, either OEM at a factory, or at the local computer shop, or the in-law programmer who gets drafted for technical work (ahem...). Linux users have seldom known this luxury; instead, whenever someone talks about Linux, they assume that the end user is doing the install.
The solution is to treat Linux installation the way we treat Windows installation. Someone who Knows What They Are Doing (tm) sets up the OS and delivers it to the end user. One practical advantage for the Linux community is that all the time spent on fancy installers could be channeled elsewhere (not to say we don't like our hardware auto-detection, et al. But a curses-based menu is just fine, thanks). Make Linux installation work like OS installation always has before: technical users install their own OS, everyone else leaves it to the techs.
At least don't hold us to a double standard.
\ No newline at end of file
diff --git a/_posts/technology/2008-11-19-nintendo-and-homebrew-arms-race.html b/_posts/technology/2008-11-19-nintendo-and-homebrew-arms-race.html
new file mode 100644
index 0000000..08f7080
--- /dev/null
+++ b/_posts/technology/2008-11-19-nintendo-and-homebrew-arms-race.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: Nintendo and the Homebrew Arms Race
+date: '2008-11-19T11:51:00.000-05:00'
+author: Anna Wiggins
+tags:
+- freedom
+- video games
+- Gaming
+- Technology
+modified_time: '2013-10-22T11:19:50.562-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-7895229798301291259
+blogger_orig_url: http://www.stringofbits.net/2008/11/nintendo-and-homebrew-arms-race.html
+---
+
+When I purchase a piece of hardware, it is mine to do with as I wish. This is a long-held understanding. If I buy a piece of clothing, I can have it altered. If I buy a car, I can change the tires. If I buy a television, I can kill myself trying to screw with its insides.
It might void the warranty, it might put my life at risk or potentially damage the thing I've purchased, but it is my right as a consumer.
Nintendo takes a different view on the issue. Owners of the Wii have long been able to employ a simple buffer overflow exploit in Twilight Princess to run custom code. This exploit, called the Twilight Hack, allows a user to install, among other things, an application called the Homebrew Channel, which looks like any other Wii channel and lets you run other custom code without using the Twilight Hack again. It's the gaming console equivalent of installing a new stereo in your car.
Since the hack was made public, Nintendo has been trying to thwart it. They have, to date, released three firmware updates that included code targeted to stop the Twilight Hack. The most recent update succeeded at stopping it completely - it appears to detect the hacked save files and delete them, both on boot and whenever you insert an SD card.
So, all of this is standard fare. Whenever a console launches, homebrewers will make it run custom code. The console manufacturer will release an update to prevent this. The homebrewers will work around it. This process will continue in an escalating cycle.
However, Nintendo has delivered a low blow here. Along with the System Menu 3.4 update, they changed their terms of service.
We may without notifying you, download updates, patches, upgrades and similar software to your Wii Console and may disable unauthorized or illegal software placed on your Wii Console...
Now, that's pretty cold - deleting our custom software? Come on Nintendo, all I want to do is play videos on my Wii! Also, the first time a fully automated background firmware update breaks something, the angry calls are going to pour like rain. Power outage in the middle of a night-time firmware update? Too bad! But it gets worse...
If we detect unauthorized software, services, or devices, your access to the Wii Network Service may be disabled and/or the Wii Console or games may be unplayable.
Okay, at this point I feel it is crucial to point out a couple of things. First, these quotes come from two documents, the Wii Network Service Privacy Policy and the Wii Network Service EULA. Both of these documents are required, not to use the Wii in general, but to use the Wiiconnect24 services (the Shop channel, Nintendo channel, and Nintendo's other online content channels). So, to use their network, you agree that they may disable your system completely. This means two things:
1. You can perfectly legally run hacked code on a Wii that does not use Wiiconnect24.
2. You grant Nintendo the right to break the law (destruction of private property) if you choose to use the Wiiconnect24 service.
Now, according to a lawyer I know, a contract cannot override criminal law, even if signed in full knowledge as opposed to clicked-through (the enforceability of click-through EULAs is still up for debate in the US). So this clause is, by necessity, unenforceable.
So why is it there? Nintendo has a juggernaut legal team, famed for its ruthlessness. They can bankrupt any individual consumer with the legal proceedings necessary to challenge them, and it is unlikely that this will raise enough stink to get a class-action suit started.
I used to have some respect for Nintendo.
\ No newline at end of file
diff --git a/_posts/technology/2008-12-06-paranoid-security-establishing.html b/_posts/technology/2008-12-06-paranoid-security-establishing.html
new file mode 100644
index 0000000..983dd79
--- /dev/null
+++ b/_posts/technology/2008-12-06-paranoid-security-establishing.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Paranoid Security: Establishing a Connection the Hard Way'
+date: '2008-12-06T21:03:00.000-05:00'
+author: Anna Wiggins
+tags:
+- howto
+- security
+- linux
+- Technology
+modified_time: '2013-10-22T11:19:50.577-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-3958607884421991389
+blogger_orig_url: http://www.stringofbits.net/2008/12/paranoid-security-establishing.html
+---
+
+Recently, I was describing the personal setup I use to connect to my home machine over on watchingback (a group that has gone unfortunately silent). This setup combines port-knocking (with one-time sequences), disk encryption, and passphrase-protected rsa keys. Here's a basic rundown of how it works from an end-user perspective (i.e., once everything is set up):
First, the user (me) inserts a USB flash drive with an encrypted partition. He mounts up the encrypted disk on a local machine (I'll call this machine the 'client' throughout this article), providing the necessary password, and runs a script called 'callhome'. He is prompted for his passphrase, and then gets a terminal session on his home machine (we'll call this one the 'server').
Read on for details about this setup, and how to do it.
Warning: what follows is madness. It is overkill taken to an extreme. I am describing a way you can take a very, very simple procedure (connecting remotely to a system), and make it exceedingly complicated, all for the benefit of a little added security. Whether or not this security is worthwhile to you is, of course, your business. In an age where our governments and fellow citizens are increasingly keen on everything from our shopping and reading habits to our credit card numbers, I personally feel that cautiousness is worth the effort.
It is madness. I'm not convinced it isn't justified madness.
This tutorial assumes you are running Linux, and that you are comfortable with the command-line interface and with networked computing in general (of course, you're reading this on the Internet, so that's a good start). All of my examples will be Fedora-centric. If you don't use Fedora, you'll need to figure out what the commands are for your distro.
So, how is this complex setup I describe different from just typing "ssh user@server"? Well, first, the callhome script executes a portknocking sequence. Until this sequence is done, ssh is closed on the server. After the sequence, ssh is opened only for the IP address of the client, and only for a small time window. The ssh connection must happen during this window. The script initiates the ssh connection, which helps keep this secure. In addition, each portknocking sequence is valid only once - the USB drive contains a list of all valid sequences, and the script is set up to only use each one once.
Next, ssh on our server is set up to only allow connections with public keys. This means that even if an attacker knew the correct portknocking sequence, he would not be able to login with a password - he must have the private RSA key. The private key is on our USB flash drive, which is encrypted. The key itself is further encrypted with its own passphrase, so you still enter a password to connect home, the work to verify it is simply done on the local machine. The passphrase is never sent across the Internet, even in an encrypted/hashed form.
There are some other nice features, including a 'panic' portknocking sequence that will shut down the portknocking server itself, locking down the remote server completely. This panic script is stored on a machine to which I have a shell account. If the USB flash drive is ever lost/stolen, I can get to any machine with an ssh client, log in to the shell account, and kill the knock server. New connections to the server then become impossible.
This setup is useful for more than just a terminal connection home. You can forward X through it and run graphical apps from home (this is typically going to be very slow, however). You can forward any ports you like, so that you can route web traffic through this ssh tunnel and prevent people on your network from watching where you go on the web. Anything you can do with a normal ssh connection can be done here. Later I'll demonstrate some examples that I use. So, that's the setup.
Now I will outline exactly how to do it, one step at a time. You might want to grab a snack and use the bathroom - this is going to be a long trip.
Part 1: Dynamic DNS
Before you can call home to your server, it helps to have a name to call it by. However, you can't use a traditional hostname if your machine is on a broadband network because your IP address may periodically change. Dynamic DNS (or DynDNS) was created to solve this problem. A daemon runs on your server that periodically checks the IP address of the server and sends it to a DynDNS server. This DynDNS server then updates a DNS record whenever your IP address changes. I use DynDNS.com. It's free and easy. Just choose a hostname for your machine, then install and configure the ddclient software. You can get instructions on configuring ddclient for DynDNS.com here.
Part 2: Configuring SSH
On the server, find your sshd configuration file (on Fedora, this is at /etc/ssh/sshd_config) and ensure the following options are set to these values:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no
Now, restart your ssh daemon:
service sshd restart
Now, try to ssh into your machine (you can just do 'ssh user@localhost'). You'll get denied immediately, without even seeing a password prompt. This is what we want. Next, we create the ssh key that we will use. Run:
ssh-keygen -t rsa -b 4096
When prompted, specify a path other than the default. Your home directory is a good choice - we will be moving id_rsa to the USB flash drive later. Also, make sure you specify a good passphrase - if the USB flash drive is compromised, the strength of this passphrase will buy you time to lock down the server. Now you have 2 files in your home directory, id_rsa and id_rsa.pub. id_rsa is your encrypted, private RSA key. id_rsa.pub is the public key that matches this private key. Copy the contents of id_rsa.pub into ~/.ssh/authorized_keys. This step will allow the private key to connect to the server as this user.
Part 3: portknocking
There's still one significant security concern: unknown vulnerabilities. OpenSSH is a complex program, and almost certainly still contains a vulnerability or two that haven't been discovered. To combat getting hit with that latest exploit, we can hide the presence of ssh from the outside world completely. This is the beauty of portknocking. The premise of portknocking is that the ssh port is firewalled off unless a specific sequence of ports are first pinged, in order. This doesn't add a lot of security by itself; an attacker can simply sniff the portknock sequence, then repeat it to open the same port. Normally, portknocking will only deter attackers who don't know you have ssh open.
However, the portknocking server we are going to use supports one-time sequences. With this configuration, the correct knock sequence changes after each knock. The server has a list of sequences to use, and we will also keep this list with us on the USB flash drive. Before we begin configuring portknocking, make sure you have firewalled off port 22. There are two possible network setups we will consider:
- You have a router between the server and the Internet. This router passes ssh traffic to your server, and the router acts as the firewall that blocks ssh access.
- The server is connected directly to the Internet. Local firewall rules on the machine are blocking ssh access.
In the first instance, you need to be able to install a portknocking server on the router; additionally, the firewall rules needed will be more complicated, and will vary based on how your router is configured. My example here assumes the second case: that the server itself is listening to the knocks (i.e. it is directly connected to the Internet). The first case is discussed in Appendix C. Install knockd. Once installed, you'll need to configure /etc/knockd.conf. For now, I'll present a basic configuration (we'll add some more stuff to this later):
[options]
logfile = /var/log/knockd.log
[ssh]
one_time_sequences = /etc/knockd/ssh
seq_timeout = 10
tcpflags = syn
start_command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 5
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
In /etc/knockd/ssh, you need to have sequences of numbers to use as one-time sequences. Each entry in the list should be formatted like this:
1,2,3,4,5
There is a space at the beginning of the line; this is helpful because knockd will comment out each line as it uses it by placing a '#' at the beginning of the line. The numbers you generate should ideally be between 1024 and 65535; I generate my numbers with a script similar to the following:
#!/usr/bin/perl
$num_keys = 50;
@data = `d20diceroller --nototals "5d65535[reroll< 1024][repeat $num_keys]"`;
foreach (@data)
{
next if (/:/);
s/ $//;
s/ /,/g;
s/^/ /;
print;
}
This script uses a program I created, d20diceroller, to generate its random numbers. That tool is part of the d20tools package, and can be found at its sourceforge page. The subversion repository is currently recommended. Now that you have the one-time sequences, you must start the knock daemon. You'll most likely want to add this to an init script (such as /etc/rc.local):
knockd -i eth0 &
'eth0' here should be replaced with whatever the name of your Internet-facing network interface is. Now, portknocking is configured and running. We only need to configure the USB flash drive, and we're done with the basics.
Part 4: USB Flash drive setup
First, you need a partition on the flash drive that will be dedicated as the encrypted partition. This can be one small partition, or it can be the entire disk. I set aside the last 10 MB of the disk, myself. Use fdisk, parted, or another partitioning tool to get the disk to your liking (remember, re-partitioning can erase everything you have on the drive. Be careful). Once the disk is partitioned, you must create a secure volume, then create a filesystem on that volume. As root, run the command:
cryptsetup create secure /dev/sda1
Where '/dev/sda1' is the device name of the partition that should be the encrypted partition. Enter your desired passphrase when prompted. This should be a different passphrase than you used with the ssh key, ideally. Now, you should have a device file named /dev/mapper/secure. This is the encrypted pseudo-device Linux has created to represent your partition. Create a filesystem on it. I recommend a DOS filesystem because of its portability (an ext3 filesystem will retain the UID/GID and permissions for each file, which can get really confusing when moving from system to system and using users with different UIDs):
mkdosfs -F 16 /dev/mapper/secure
Now mount /dev/mapper/secure. On it, create a directory called .ssh. Copy the id_rsa file you created earlier into this directory, and create a file called 'config' that looks like this:
Host your.server.address home
User your_user_name
UserKnownHostsFile .ssh/known_hosts
HostName your.server.address
Port 22
IdentityFile .ssh/id_rsa
Compression yes
Also, take a copy of the sequences you created earlier (in /etc/knockd/ssh) and copy them to a file called 'sequences' in this .ssh directory. You need to modify this sequences file so that the commas are converted to spaces. You can do that with this command:
perl -p -i -e 's/,/ /' sequences
Now, create a script in the root of the encrypted partition with these contents:
#!/bin/sh
SERVER_NAME=your.server.name
WD=$(echo $0 | perl -pe 's/^(.*)\/.*?$/\1/')
cd $WD
chmod 600 $WD/.ssh/id_rsa &> /dev/null
sequence=`head -n 1 $WD/.ssh/sequences`
[ -z "$sequence" ] && echo "Error: No more knock sequences" && exit 1
for i in $sequence;
do nc -z $SERVER_NAME $i; done
sleep 1
ssh -F $WD/.ssh/config home && sed -i '1d' $WD/.ssh/sequences
This script will execute the next portknocking sequence in the list, then automatically ssh into the server. It uses the config file in our local .ssh directory, so the username and key file are already specified. Now, to unmount the USB flash drive's encrypted partition, you can execute these commands:
umount /dev/mapper/secure
cryptsetup remove secure
That's it! Now, all you need to do use the system is set up the partition as an encrypted volume, mount the encrypted filesystem, run the 'callhome' script, and enter your ssh passphrase. Extra-secure connection home, for the truly paranoid. The only upkeep required is to periodically generate a new list of sequences when you run low. This system is a bit more complicated than just using an ssh command, but I discuss how to automate the connection procedure on systems you use a lot in Appendix B.
But wait, there's more! What happens when The Bad Guys steal our USB flash drive and start frantically trying to decrypt it? Enter the panic knock.
Part 5: Disaster recovery
A scenario, if you will. You're sitting at your desk, your uber-secure connection home humming along, letting you chat on IRC without your boss being any wiser. You lock your X session and get up to grab some coffee. You get back to your desk, and glance over at your workstation, expecting to see protruding from the front your faithful USB flash drive, fast friend these many years, steadfast companion against the dangers of revealing your personal life's details to those who would kill for it. But it's gone. Someone has taken it. A quick survey of your fellow workers (and by "survey" we mean "threaten them with violence so they know you're serious") reveals that they don't have it. No one saw anyone come near your desk.
There is only one explanation: Identity Theft Ninja. Trained in the secluded mountains of Japan from birth, these versatile agents of stealth can smell a USB flash drive that allows a connection to someone's home server from a league distant. You never had a chance. Hope is not lost, however! Because the drive is encrypted, and the ssh key is further encrypted, you have an advantage. The Identity Theft Ninja have powerful computers for cracking encryption schemes, but it will still take time.
Basically, when you notice your USB drive is missing, you can execute your panic script. The panic script should live on a shell server; something you can get to from any machine. I recommend silenceisdefeat. On the shell server, you simply have a script called 'panic'. It can look like the following:
#!/bin/sh
SERVER_NAME=your.server.name
sequence=("1" "2" "3" "4" "5")
for i in ${sequence[@]};
do nc -z $SERVER_NAME $i;
done
Most shell servers will not give you execute privileges, but because this is a script, you can simply type 'sh panic' to execute it. On the knock server, we have a special action to perform when someone executes that particular sequence. Add this to /etc/knockd.conf:
[shutdown]
sequence = 1,2,3,4,5
seq_timeout = 10
tcpflags = syn
command = killall knockd
By the way, do not actually use the sequence 1 2 3 4 5. Use a random sequence, but include a number that will never appear in your normal portknocking sequences. The 'out of phase' number guarantees you never accidentally shut down the server, and keeping the sequence random guarantees that a portscan or other malicious attack won't lock you out down your server. It would be a good idea to change this sequence every time you use it, as well, to prevent an attacker from repeating the sequence to frustrate you.
Appendix A: Beyond SSH - forwarding other traffic
You can take advantage of the power of SSH to create an extremely secure tunnel for almost any data; you aren't limited to running commands on your remote machine. Perhaps you want to browse the web through the encrypted tunnel, so other users on the network can't see that you're really shopping on newegg instead of getting work done. In that case, you could add this to your .ssh/config file:
DynamicForward 8137
This creates a SOCKS proxy that you can route traffic through. Simply configure your web browser to use a proxy at localhost, port 8137. If you want to tunnel certain sites through the proxy but not others (and you use Firefox), check out FoxyProxy. Check the command 'man ssh_config' for more options you can put in the .ssh/config file.
Appendix B: Mounting your encrypted volume made easy
You need root access to create and mount an encrypted volume. If you use the same few computers all the time (and you have root access on them), you can simplify your life. First, use the 'visudo' command and add a line to the end of the sudoers file like this:
your_user ALL=(root) NOPASSWD: /sbin/cryptsetup
This will allow you, as a normal user, to execute 'cryptsetup', which lets you create and remove encrypted volumes. Next, add a line like this to /etc/fstab:
/dev/mapper/secure /mnt/secure auto noauto,user,umask=077 0 0
This will allow users to mount /dev/mapper/secure once it is created. The umask guarantees other users on the system can't see our files, which would compromise the ssh key. Don't worry, we can still prevent another user on the system from hijacking our mount; that comes next. Now, create two files in /usr/local/bin, called 'secureon' and 'secureoff'. In secureon, put:
#!/bin/sh
sudo cryptsetup create secure /dev/sda1 && \
mount /mnt/secure
sda1, of course, is whatever the device name of the encrypted partition is. You can use udev or hal to ensure this is always a consistent name. secureoff looks like this:
#!/bin/sh
umount /mnt/secure && \
sudo cryptsetup remove secure
Make both of these scripts executable ('chmod 755 /usr/local/bin/secureo*'). Now you can simply run 'secureon to create and mount the secure volume (you'll be prompted for the encryption passphrase), and 'secureoff' when you're finished.
Appendix C: Behind a router
The last case we will consider is the complex but extremely common situation where you have one device acting as a router. This changes the iptables rules we need to use with the knockd server.
First, you need to have a router that you can install Linux software on. In other words, your router must be running Linux. If you have a computer acting as your router, this is probably no problem for you. If you have a consumer broadband router, this may be more difficult. You can get Linux firmware for certain models of broadband router, however. Several broadband router distributions exist; I use OpenWRT; it is easy to install new software with OpenWRT, and knockd is available for it.
The exact rules you will need are going to depend on your particular iptables setup, but to forward a port you will need two rules: one in the filter table's FORWARD chain and one in the nat table's PREROUTING chain. The approach that I recommend is to add the rule in the FORWARD chain permanently, and use knockd to add and remove the PREROUTING rule. This simplifies the knockd configuration, and allows you to use the FORWARD chain as a handy reference for what forwards are possible.
For example, let's say you have a machine at 10.10.9.18, and the knock daemon will open SSH to this machine. First, you want to add this firewall rule permanently:
iptables -A FORWARD -p tcp --dport 22 -d 10.10.9.18 -j ACCEPT
Put that in your router's iptables configuration. If your router is running Fedora, put this line (minus 'iptables') in /etc/sysconfig/iptables.
If you're using OpenWRT, I would suggest using the forwarding_wan chain instead of the FORWARD chain. Also, on OpenWRT you can put this line in /etc/firewall.user.
The start_command and stop_command lines in /etc/knockd.conf will add and remove the PREROUTING rule, like so:
start_command = /usr/sbin/iptables -t nat -A PREROUTING -s %IP% -p tcp --dport 22 -j DNAT --to 10.10.9.18:22
stop_command = /usr/sbin/iptables -t nat -D PREROUTING -s %IP% -p tcp --dport 22 -j DNAT --to 10.10.9.18:22
For OpenWRT, use the prerouting_wan chain instead of the PREROUTING chain.
One great thing you can do with a router is use different knock sequences to forward SSH to different servers. If you have several machines on your network, you can simply add additional sections to knockd.conf (and additional rules in the FORWARD chain). As long as they use different knock sequences, you can overload port 22 to forward to whichever machine you need.
\ No newline at end of file
diff --git a/_posts/technology/2008-12-31-com-is-new-org.html b/_posts/technology/2008-12-31-com-is-new-org.html
new file mode 100644
index 0000000..57cbb9d
--- /dev/null
+++ b/_posts/technology/2008-12-31-com-is-new-org.html
@@ -0,0 +1,14 @@
+---
+layout: post
+title: ".com is the new .org"
+date: '2008-12-31T04:26:00.000-05:00'
+author: Anna Wiggins
+tags:
+- news
+- Technology
+modified_time: '2013-10-22T11:19:50.616-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-7008723687065570881
+blogger_orig_url: http://www.stringofbits.net/2008/12/com-is-new-org.html
+---
+
+No, not an angry rant about proper gTLD usage. Instead, this is more of a Public Service Announcement: silenceisdefeat, my favorite provider of life-long free shell accounts, has had their domain name taken hostage. silenceisdefeat.org now redirects to an ebay auction for the domain name. As a result, they can now be found at:
http://silenceisdefeat.com
I have updated my previous link to their site (in this article) to reflect the change as well.
\ No newline at end of file
diff --git a/_posts/technology/2009-01-07-an-aside-on-education.html b/_posts/technology/2009-01-07-an-aside-on-education.html
new file mode 100644
index 0000000..9a70e47
--- /dev/null
+++ b/_posts/technology/2009-01-07-an-aside-on-education.html
@@ -0,0 +1,14 @@
+---
+layout: post
+title: An aside on Education
+date: '2009-01-07T10:33:00.000-05:00'
+author: Anna Wiggins
+tags:
+- education
+- Technology
+modified_time: '2013-10-22T11:19:50.660-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-4480323441727822265
+blogger_orig_url: http://www.stringofbits.net/2009/01/an-aside-on-education.html
+---
+
+I first encountered Clay Burell on his blog Beyond School, where he had started a series of Unsucky English Lectures. These posts were brilliant, engaging, and poignant, and I followed them to their tragically early conclusion. (Clay, if you're reading this, pick those back up, man!) It turns out that Beyond School was actually a blog about revolutionizing education. I just happened in while he was doing a special series. I kept following his blog, though.
At any rate, Mr. Burell now has a new blog at education.change.org. In particular, one recent post impressed me, and I wanted to increase its distribution, at least by the tiny amount that people actually view this blog :P
Why Schoolwork Doesn't Have to Suck
There's some important ideas here. The concept that our technology could (should, must) become the medium through which we engage in learning is as groundbreaking as it is obvious. Enjoy.
\ No newline at end of file
diff --git a/_posts/technology/2009-01-14-5-things-i-hate-about-fedora-10.html b/_posts/technology/2009-01-14-5-things-i-hate-about-fedora-10.html
new file mode 100644
index 0000000..8859de0
--- /dev/null
+++ b/_posts/technology/2009-01-14-5-things-i-hate-about-fedora-10.html
@@ -0,0 +1,14 @@
+---
+layout: post
+title: 5 things I hate about Fedora 10
+date: '2009-01-14T11:14:00.000-05:00'
+author: Anna Wiggins
+tags:
+- linux
+- Technology
+modified_time: '2013-10-22T11:19:50.623-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-812129618914046645
+blogger_orig_url: http://www.stringofbits.net/2009/01/5-things-i-hate-about-fedora-10.html
+---
+
+Every release of Fedora feels like a step in the wrong direction. I don't say this lightly - I use Fedora at work and at home; it is my primary operating system. I have staunchly supported it in the face of critical Ubuntu fans for a while now.
First, a little background. I switched to Fedora from a mixture of gentoo and slackware around the time I started my current job, since it was far easier to keep track of one package management toolset, and several things about gentoo's packaging system had started to irk me. The current release of Fedora at the time was 7. I have been using it since, usually upgrading to new releases (via a clean install) about a month after they release.
My needs are simple, but apparently elusive to Fedora. I use fluxbox as my window manager. I prefer to perform all of my system configuration from the command line. My graphical application use is minimal (firefox, games, pidgin).
Let's explore the problems I've noticed have started creeping in, starting with the release of fedora 8. My solution/workaround for each problem is included, if I have one. For what it is worth, I realize that some of these could be the result of 3rd-party packages (such as Nvidia's proprietary drivers). However, if any of these are the result of user error, then the solution should rightly be easy to find by searching documentation, which I have done extensively in every case.
1. Pulseaudio
Pulseaudio... I hate the word
This one heads the list because it's the problem I've had to deal with most recently. I have been lucky in that pulseaudio plays nicely with the sound cards on all 3 of my Fedora machines (others have been less fortunate). However, I was stuck with audio far quieter than what I had grown used to in gentoo.
Solution: I finally discovered that pulseaudio has its own volume settings, independent of the ALSA-level audio device. You can adjust the hardware volume levels with either of these commands:
alsamixer -Dhw:0
alsamixer -c 0
It would be nice if this were clearly documented somewhere. There are some vague hints on this page, which is what pointed me in the right direction.
Thankfully, pulseaudio is no longer quite so painful when dealing with apps that only talk to ALSA. I noticed some popping in certain applications, though (Neverwinter Nights, for one). pasuspender seems to work around this, but the fact that this is necessary is kludgy.
2. GDM
The thousand injuries of GDM I had borne as best I could; but when he ventured upon insult, I vowed revenge...
GDM in Fedora has been upgraded to the latest upstream from the gnome team. The problem with this version of GDM is that it removes almost all of its configuration options. They have crippled it thus intentionally, and while they claim the removed options were "obsoleted due to redesign", it seems that some of the options were dropped to prevent users from doing stupid things.
This Lowest Common Denominator approach is fine for a default configuration, but it should always be possible to change the default behavior. Removing the ability to customize it entirely is not only against the spirit of open source software and Linux, it is insulting to the users. It feels as if the team responsible for GDM thinks they know better than I do when it comes to configuring my machine.
In my case, the default behavior that troubles me is the fact that GDM passes the +accessx option to X. Gnome includes a daemon that can override the accessx behavior (namely, enabling sticky keys if you hold shift down too long). KDE includes a similar tool. Fluxbox, however, has none - it assumes (justly) that you can turn off the accessx option at the X11 level if you don't want it. The new GDM denies you this ability, however.
Solution: Switched to KDM, which doesn't seem to enable +accessx by default. I tried XDM first, but it has SELinux errors and fails to launch fluxbox. Also, KDM looks much nicer. Alternately, I could have booted into runlevel 3 and then used startx, but I've become a fan of the graphical login prompt.
3. Upstart
The name says it all
upstart is the new init system in fedora; a replacement for the aging sysVinit. In theory, upstart is great - gives you much more granular control over what processes should happen at each runlevel, and may eventually replace /etc/init.d entirely. In practice, however, it has a rather annoying problem: sometimes it fails to respawn the ttys when in runlevel 5. This problem doesn't seem to be present in runlevel 3, for whatever reason.
Solution: no real solution at present, but you can work around it with initctl start ttyX
4. rsyslog
Hey... Listen!
The traditional syslogd has been replaced with rsyslog, a much more powerful/configurable syslog daemon. However, it seems to dump all kernel output to the console. The default configuration doesn't include any statements that should be logging to the console, so it could be caused by something else. Either way, the problem is present.
You can test this from any fedora machine: it seems to happen on every F10 box I can find. Just press Ctrl+Alt+F2, then plug in a USB flash drive. This is annoying on its own, but is especially frustrating when combined with #5, below.
Solution: none
5. PCI-Express device errors
Or How I Learned to Stop Worrying and Love X.org
On my PCI-Express video card, I receive constant error messages, both in messages and on the console (see #4, above). These happen whenever the screen is cleared or switched to. In other words, Ctrl+Alt+FX will generate one of these, sometimes two. Running 'less' generates the errors. So does the 'clear' command. emacs and vi both trigger the error. Each instance of the error takes up about 25% of the screen's real estate. This makes operating on the command line extremely difficult.
Solution: None yet. I suspect this may be related to the Nvidia drivers; in that case, a future update may fix these errors. I'll give Fedora the benefit of the doubt where I can.
\ No newline at end of file
diff --git a/_posts/technology/2009-01-17-it-is-pitch-black-you-are-likely-to-be.html b/_posts/technology/2009-01-17-it-is-pitch-black-you-are-likely-to-be.html
new file mode 100644
index 0000000..93ac477
--- /dev/null
+++ b/_posts/technology/2009-01-17-it-is-pitch-black-you-are-likely-to-be.html
@@ -0,0 +1,15 @@
+---
+layout: post
+title: It is pitch black. You are likely to be flamed by a fanboy.
+date: '2009-01-17T19:53:00.000-05:00'
+author: Anna Wiggins
+tags:
+- stupid people
+- linux
+- Technology
+modified_time: '2013-10-22T11:19:50.667-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-9201740383633416989
+blogger_orig_url: http://www.stringofbits.net/2009/01/it-is-pitch-black-you-are-likely-to-be.html
+---
+
+I feel the need to comment about this (and, subsequently, this and this).
First, a summary, for those who get a case of the tl;dr's. A woman bought a laptop to use for her coursework at a local college. She accidentally bought a Dell laptop with Ubuntu on it. When she realized her ISP's setup disk wouldn't work, she tried to get Dell to swap the laptop for one with Windows. The Dell representative apparently convinced her to keep the one she had.
She claims that this problem, combined with a lack of Microsoft Office, forced her to withdraw from classes. The local news ran the linked article; it is worth noting that the bottom portion (the part where the news agency contacted the college and Verizon, and everything got cleaned up) did not appear in the initial article.
Needless to say, the Linux community (and the Ubuntu community in particular) exploded. The article hit digg, slashdot, and reddit. The angry letters and phone calls started pouring in to the news station (though they got tons of traffic, naturally). More significantly, the woman in question was harassed on facebook.
This story shows mistakes from every party involved. The Dell representative should have helped her switch to a machine she was more comfortable with. The woman herself should have taken initiative, called Verizon and asked what she could do to get her connection working. Alternately, what's wrong with using another computer (say, at a local library) until you can get the laptop issue sorted out? Dropping all your classes for the semester is overly drastic and melodramatic.
The worst perpetrators of stupidity here, though, are the Linux community members who not only lambasted and ridiculed this woman publicly on forums and blogs, but also attacked her personally on her Facebook account. This is childish, pointless, and it paints the entire Linux community as anti-social assholes.
Unlike most groups, the Linux community IS Linux. If a Star Wars fan blogs about how everyone who doesn't know the difference between a Sith and a Dark Jedi is an idiot, the Star Wars franchise is not going to be damaged; there is a clear disparity between the creators (Lucasfilm et al) and the consumers (fans). On the other hand, if a Linux fanboy blogs that everyone should know the intricacies of iptables configuration before being allowed on the Internet, this will color peoples' perception of Linux.
Why does this happen? Because Linux is Free, open to the world. Anyone can add to it. The community and the product are intricately intertwined.
This is a false perception, though; in reality, the rabid fanboys who would harass a woman on Facebook are a completely different set of people than the assholes that argue fine technical points on LKML. (I'm using asshole here in its rare application as a compliment) However, the impression that an outsider has looking in is that Linux is some wild, anarchistic (or maybe communist) creation. This stems from the growing cultural knowledge that Linux was created by and for the people that use it. This is not quite true. Linux was created by and for developers and technology enthusiasts, true. However, not every vocal member of the community actually contributes to Linux itself; only a fairly small subset of users are actively involved in improving the software.
I don't mean to devalue the role of the community in development. Community contributors are important, welcome, and numerous. Bug submitters and other "active users" are vital to the strength of the open development model. However, the active users aren't even the people that we see evident in this article. What we see here are fanboys:
fanboy (n): Someone who is so obsessed with some subject or thing that they are blind to its faults and harass and deride anyone whose opinion differs.
These are precisely the people that Linux does not need. The community would be doing itself a favor by creating public distance from this subset of itself. We need more rational, clear-headed people speaking out about the benefits of Linux. Fanboys ranting and harassing people will get us nowhere.
I am aware that I haven't offered any advice on how to make the fanboys go away, and that's because I don't have any. I don't know how to do it, or if it is even possible. This is just a statement of a problem that I see; anyone with ideas, please share them.
\ No newline at end of file
diff --git a/_posts/technology/2009-04-27-the-case-of-odd-networkmanager-behavior.html b/_posts/technology/2009-04-27-the-case-of-odd-networkmanager-behavior.html
new file mode 100644
index 0000000..e37a543
--- /dev/null
+++ b/_posts/technology/2009-04-27-the-case-of-odd-networkmanager-behavior.html
@@ -0,0 +1,15 @@
+---
+layout: post
+title: The Case of the Odd NetworkManager Behavior
+date: '2009-04-27T08:31:00.000-04:00'
+author: Anna Wiggins
+tags:
+- fedora
+- linux
+- Technology
+modified_time: '2013-10-22T11:19:50.674-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-2909430100113595812
+blogger_orig_url: http://www.stringofbits.net/2009/04/the-case-of-odd-networkmanager-behavior.html
+---
+
+I recently purchased an Eee PC 1000HE. This is a very nice machine, and aside from one weird bug, Linux support is great. However, I've run into a very annoying problem with Fedora 10, and at the root of that problem is gnome-keyring-manager.
Misconfiguration Most Foul
We begin our tale with NetworkManager. Since I connect to several wireless networks and a VPN, NetworkManager is a very useful thing to have working. Its initial setup was great; I loaded nm-applet in my fluxbox startup, it prompted me for a default keyring password, and we were off.
However, on my next boot I was not prompted for my keyring password; I had to enter my WEP key manually. After some exploration, I learned that gnome-keyring-daemon needs to be running. The paradox is that it WAS running.
A Red Herring
I found some rather old advice thas suggested I run gnome-keyring-daemon manually from ~/.fluxbox/startup, but this didn't work; gnome-keyring-daemon starts automatically in Fedora 10, thanks to pam_gnome_keyring.so. I now had two copies of the daemon now running, neither of which worked.
What I eventually discovered was this: if I kill the automatically-started gnome-keyring-daemon (or remove auto_start from the pam_gnome_keyring options in /etc/pam.d/kdm), then start it manually with different options, it works every time. So, instead of:
gnome-keyring-daemon -d --login
which is the automatically provided command, I ran:
gnome-keyring-daemon -f -c keyring
from my fluxbox startup file. This worked, but turned out to be unnecessary.
An Anwser
My next discovery: If I disable the daemon's automatic starting (once again by taking the auto_start option out of /etc/pam.d/kdm) and remove my custom invocation from the startup file, it still starts automatically, but with different options than the auto_start version! In fact, it starts with the options work.
It turns out that nm-applet and gnome-screensaver both automatically start gnome-keyring-daemon if it isn't running. Since nm-applet runs first, it starts up the daemon, and passes it a completely different set of options than the pam-invoked version. Thanks for the consistency, gnome!
A Problem
Starting gnome-keyring-daemon manually or allowing nm-applet to start it still poses a problem: the daemon doesn't die when I log out! This means that, as I log in and out several times, useless instances of the daemon end up sitting around doing nothing. Since the apps that talk to the daemon use $GNOME_KEYRING_SOCKET to do so, everything keeps working; but it's cruft I'd rather not have.
Elementary
After following this circuitous path, I finally stumbled into the answer: it's a known bug. It is actually related to the lack of a proper $DISPLAY getting set for gnome-keyring-daemon; it isn't related to the passed in options at all.
At this point, I'm forced to fall back on a hack. I've added the following to my ~/.fluxbox/startup, above the gnome-related apps:
killall gnome-keyring-daemon
I've also removed the auto_start option from /etc/pam.d/kdm. Unfortunately, not launching the daemon with pam means that I can't take advantage of the single sign-on feature provided by pam_gnome_keyring. But until the bug is fixed, I guess this will have to be good enough.
(As for why I don't use gdm, see this post)
Update: a command explained
If you look at the --help output for gnome-keyring-daemon (or, if you've applied my hack below, gnome-keyring-daemon-bin), you'll see this output:
Usage:
gnome-keyring-daemon [OPTION...] - The Gnome Keyring Daemon
Help Options:
-?, --help Show help options
Application Options:
-f, --foreground Run in the foreground
-d, --daemonize Run as a daemon
-l, --login Use login password from stdin
-c, --components=ssh,keyring,pkcs11 The components to run
Anyone acquainted with Linux will understand the first two options, -f and -d, pretty intuitively. You'll note in my post above that my 'working' option set included -f; this is because -f prints to standard out, allowing us to capture the GNOME_KEYRING_SOCKET and GNOME_KEYRING_PID variables that the daemon spits out. However, when run in -d, these variable seem to get set correctly anyway. Further, the -c option I used in my quest seems superfluous; the daemon defaults to using the keyring component. I wanted to explain this since it wasn't clear in the original post exactly why I bounced between options. At the time, I was grasping at straws, and assigned a simple correlation (the different command-line options in use) to a causation (the daemon that started automatically, with the different options, failed to work correctly).
The option that had me baffled, though, was --login. The information in the help output is cryptic, but I finally worked out its purpose; it allows single sign-on. pam_gnome_keyring passes your login password to gnome-keyring-daemon, which uses it to unlock a special keyring called the login keyring. This keyring can then be used to store the passwords to your other keyrings, so that when you log in, everything unlocks automatically. Your system login doubles as your keyring authentication.
Further Update: Eureka! (or: building a better hack)
Based on a comment in the bugzilla entry for this problem, I have crafted a better (if more system-intrusive) hack. I simply perform the following:
mv /usr/bin/gnome-keyring-daemon /usr/bin/gnome-keyring-daemon-bin
touch /usr/bin/gnome-keyring-daemon
chmod 755 /usr/bin/gnome-keyring-daemon
cat > /usr/bin/gnome-keyring-daemon << EOF
#!/bin/sh
DISPLAY=":0.0" /usr/bin/gnome-keyring-daemon-bin "\$@"
EOF
This hack creates a wrapper script that sets the $DISPLAY variable before running the keyring daemon. Until this kdm bug is worked out, this hack performs beautifully.
\ No newline at end of file
diff --git a/_posts/technology/2009-05-27-how-to-fix-pulseaudio-in-fedora-in-2.html b/_posts/technology/2009-05-27-how-to-fix-pulseaudio-in-fedora-in-2.html
new file mode 100644
index 0000000..3abac1d
--- /dev/null
+++ b/_posts/technology/2009-05-27-how-to-fix-pulseaudio-in-fedora-in-2.html
@@ -0,0 +1,12 @@
+---
+layout: post
+title: How to fix PulseAudio in Fedora in 2 easy steps!
+date: '2009-05-27T18:40:00.000-04:00'
+author: Anna Wiggins
+tags:
+modified_time: '2013-10-22T11:19:50.692-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-4378190064502829048
+blogger_orig_url: http://www.stringofbits.net/2009/05/how-to-fix-pulseaudio-in-fedora-in-2.html
+---
+
+1. su -c "yum -y remove alsa-plugins-pulseaudio"
2. su -c "reboot"
\ No newline at end of file
diff --git a/_posts/technology/2009-06-25-my-new-project-netjatafl.html b/_posts/technology/2009-06-25-my-new-project-netjatafl.html
new file mode 100644
index 0000000..ec30f37
--- /dev/null
+++ b/_posts/technology/2009-06-25-my-new-project-netjatafl.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: My new project - netjatafl
+date: '2009-06-25T10:06:00.000-04:00'
+author: Anna Wiggins
+tags:
+- go
+- tafl
+- mancala
+- programming
+- chess
+- Gaming
+modified_time: '2013-10-22T11:19:50.698-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-4703066947394332908
+blogger_orig_url: http://www.stringofbits.net/2009/06/my-new-project-netjatafl.html
+---
+
+I've been pretty busy the last month working on netjatafl. Netjatafl will eventually be a networked client for playing various board and/or card games. It was originally created for hnefatafl and other tafl games. However, I have designed it to be extensible; I'm working on adding mancala games, and it looks like my design makes it pretty easy to add a new game. (I've added most of the logic for mancala to the client and server in just a couple hours of work). I intend to add shogi, xiangqi, chess, and possibly even go at some point in the future.
The netjatafl server (taflserv) operates on a simple, completely open protocol; it will eventually support authenticated logins and statistics tracking. Anyone could write a netjatafl client for any platform, if they wished. My clients will all be in C++, because this let's me reuse the 'libboardgame' library, which contains the game logic used by the server. I will also build in a "capabilities" system at some point, so the client and server can both advertise which games they support.
The whole thing is theoretically usable in its current state; the client is an ncurses-based text UI that is pretty cumbersome, but can be used. As far as I know, it only works in Linux. Anyone who wants to cross-compile it for Windows and send me a patch with everything you had to add, feel free! I will eventually add a proper GUI, probably gtk+-based.
Like the sound of this project? Feel free to check out the code, compile it, and let me know what you think!
Etymology notes: netjatafl is Old Norse for "net-table"; i.e. a networked table you can gather around to play games. 'taflbordh' is ON for 'tafl board' (tafl can also refer to tafl games in general), which sounds a little redundant, but it made a nice name for a client. And 'taflserv' is just 'tafl server'... 'serv' was meant to be short for 'server', but I later noticed that it's also a French word meaning 'it serves". I find this somewhat appropriate.
\ No newline at end of file
diff --git a/_posts/technology/2009-07-02-twitter-from-command-line.html b/_posts/technology/2009-07-02-twitter-from-command-line.html
new file mode 100644
index 0000000..743a84e
--- /dev/null
+++ b/_posts/technology/2009-07-02-twitter-from-command-line.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: Twitter from the command line
+date: '2009-07-02T11:38:00.000-04:00'
+author: Anna Wiggins
+tags:
+- programming
+- linux
+- twitter
+- Technology
+modified_time: '2013-10-22T11:19:50.705-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-6156350980105195782
+blogger_orig_url: http://www.stringofbits.net/2009/07/twitter-from-command-line.html
+---
+
+I've recently started playing with twitter. A nice way to use it via the command-line (using curl) was suggested here. I have taken that and improved slightly on it.
Here is the result:
#!/bin/sh
echo -n "twitter> "
read text
while [ ${#text} -gt 140 ]; do
echo
echo "Message too long; used ${#text}/140 characters."
echo
echo -n "twitter> "
read text
done
echo
echo "Message is ${#text}/140 characters. Press enter to post, or Ctrl+C to cancel."
read
curl --basic --user "username:password" --data-ascii "status=`echo $text|tr ' ' '+'`" "http://twitter.com/statuses/update.json" &> /dev/null
To use the script, copy all of that into a file somewhere in your path, then make the file executable (e.g., chmod 755 /usr/local/bin/twitter
). Now you can type 'twitter', type in your tweet, and you're done!
I even set up fluxbox so that mod4+t launches a terminal with the script running. To do that, I added this to ~/.fluxbox/keys:
Mod4 t :Exec xterm -e "twitter"
If you're not familiar with 'mod4', it is the Windows key on most PC keyboards.
I'll eventually get around to writing a slightly more full-featured twitter updater in c or c++. Until then, enjoy this script!
\ No newline at end of file
diff --git a/_posts/technology/2009-07-03-thoughts-on-transhuman-revolution.html b/_posts/technology/2009-07-03-thoughts-on-transhuman-revolution.html
new file mode 100644
index 0000000..26d629e
--- /dev/null
+++ b/_posts/technology/2009-07-03-thoughts-on-transhuman-revolution.html
@@ -0,0 +1,14 @@
+---
+layout: post
+title: Thoughts on the Transhuman revolution
+date: '2009-07-03T05:56:00.000-04:00'
+author: Anna Wiggins
+tags:
+- transhumanism
+- Technology
+modified_time: '2013-10-22T11:19:50.602-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-898649080911079486
+blogger_orig_url: http://www.stringofbits.net/2009/07/thoughts-on-transhuman-revolution.html
+---
+
+I've been reading a lot of near-future science fiction and speculative nonfiction lately, and as a result I've been contemplating the idea of transhumanism and what it means for us as a species and a culture. Transhumanism is decently defined by wikipedia, and has been explored in fiction by Charles Stross, Cory Doctorow, and others. It has been discussed extensively in the non-fiction sphere as well: Ray Kurtzweil is probably the most well-known thinker discussing the topic. However, while Kurtzweil discusses the possibilities of AI consciousness and the emergence of the singularity, I am more interested in transhumanism in this article.
Defining Transhumanism
For semantic clarity, I'm going to define what I mean by transhuman, because my definition and connotations may differ from yours.
A 'transhuman' is someone who augments reality with technology at a constant and unconscious on nearly unconscious level. The key concept here is that transhumans use technology to augment reality. This helps avoid the temptation to define any tool-user as a transhuman; a primitive man with a spear is more capable at hunting than a primitive man with his bare hands. A person driving a car is more mobile than a person walking. A person who watches a movie while browsing IMDB on their iPhone knows more about the movie than someone watching it passively (though the passive viewer may well be enjoying the movie more). By our definition, the iPhone user comes close to transhumanism. We might call her a proto-transhuman. However, these is still significant effort involved; she must look away from the movie and focus on her iPhone to search IMDB.
So, where are we now? Some people (early-adopting geeks, for example), already consider quick access to information to be something like an extra limb; as one of those affected with this feeling, I can vouch for it. Are we transhuman or not? Again, we're on the way there, but we haven't yet achieved the fluidity of control and automation needed yet.
As for where we're going next, let's begin by discussing how we got where we are.
The Evolution of Information Access
For the majority of human history, access to information has been difficult. Even after the invention of the printing press, one had to have either a personal library or access to a public library. Information could be obtained, but not in a timely manner; poring over books was the purview of academia. And even academics could only access this information when they were actually at their libraries.
As a result, the human brain has been the only way to store a significant amount of information for quick retrieval. As a storage device, the brain is not that great; storing something permanently requires multiple writes (our recall of a fact is better the more times we have heard it). It can be finicky at retrieving information; everyone who has ever had something 'on the tip of their tongue' can attest to that.
The next revolution in storage was electronic storage; in other words, computers. Of course, early computers couldn't hold a ton of information, but more importantly; that information was still stuck in one location. To look up a fact on a computer, you had to physically travel to the computer with the information on it (or to a terminal connected to that computer; typically, these needed to be pretty close to the mainframe).
Enter the Internet
And here we come to the revolution; the Internet allows us to access virtually any piece of information from any computer in the world. And with the information searching miracle we call Google, we can usually find that information very quickly. Of course, the original problem with the Internet was that you still had to get to a computer to use it. The solution?
Smaller computers.
Laptops, to be precise. Laptop computers allowed us to connect to the Internet, and its massive store of information, anywhere we could find a phone line. With the emergence of wireless networking, all we need is a wireless signal. However, laptops are big, and cumbersome to use in a hurry; if I'm in the midst of a conversation and need to recall a fact, it takes several minutes to get my laptop powered on and connected to the Internet. The solution?
Smaller computers.
Cellular telephones have evolved from foot-long bricks that required external power to pocket-sized devices with capacitive touchscreen interfaces. These phones can also connect to the Internet, play music and games, function as e-book readers, scan bar-codes and do real-time price comparison, and perform myriad other tasks. They can access any information from any location that has cellular service. This is the first real step toward ubiquitous information access. However, these devices can still be somewhat cumbersome to use. The device must be fetched from a user's pocket, then interacted with for quite some time to get the information you want. If you want this information in the middle of a conversation, it can be fairly cumbersome. The solution?
Smarter computers.
The current state of the art
Immediate mastery of a wide array of information was once a symbol of the elite. Now, anyone who can type reasonably quickly can have an online, text-based conversation and match the knowledge of anyone else on many topics (this can be tough for very advanced or specialized topics, obviously). I suspect that this trend will continue until anyone can retrieve any fact instantaneously.
The implications this has for culture are immense. Once memorization of fact is no longer a measure of the intellectual elite, intelligence will be judged along other axes; the ability to synthesize existing content (analysis) and the ability to create new content (art). The stigma that exists against artists will disappear, and we will be left with a culture in which artists are not only lauded as worthwhile members of society, but financially supported by society.
Portrait of a Transhuman
Let's look at what transhumans might look like at a point in the near future.
He wears sunglasses with transparent OLED overlays and a bluetooth radio that communicates with his personal Mobile Device (the successor to the smart phone). The overlay provides a Heads-Up Display; in it, he sees that he has 3 unread emails, 4 new RSS items, and an instant message from his wife. A pinhole camera in the glasses tracks his eye movements and responds to them; he keeps his gaze on the IM for a moment and it expands. His wife is asking him to pick a restaurant for dinner. A second pinhole camera looks outward from the glasses, feeding data about his surroundings to the Mobile Device. He looks at a restaurant down the block, and a moment later his HUD provides a menu, operating hours, and reviews. He pulls out his Mobile Device and types a quick reply to his wife.
All of the technology I just described already exists; it just needs to be made small enough, responsive enough, and accurate enough. Protocols and standards need to be developed, and our access to information needs to be made a public commodity. Once this is achieved, we will have the future. What we'll do with it, I have no idea.
\ No newline at end of file
diff --git a/_posts/technology/2009-08-22-d20tools-03-is-here.html b/_posts/technology/2009-08-22-d20tools-03-is-here.html
new file mode 100644
index 0000000..31f5b94
--- /dev/null
+++ b/_posts/technology/2009-08-22-d20tools-03-is-here.html
@@ -0,0 +1,15 @@
+---
+layout: post
+title: d20tools 0.3 is here
+date: '2009-08-22T17:27:00.000-04:00'
+author: Anna Wiggins
+tags:
+- dungeons amp; dragons
+- programming
+- Gaming
+modified_time: '2013-10-22T11:19:50.721-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-7260032130913791473
+blogger_orig_url: http://www.stringofbits.net/2009/08/d20tools-03-is-here.html
+---
+
+I've released a new version of d20tools. In addition to using a new, simpler file saving/loading scheme and better keyboard handling, the new feature is also a lot more stable. Other highlights include a more sensible entity/group management system, and the ability for any creature to be a henchman.
Get it here.
I'm lifting my moratorium on D&D 4e, as well. This means that d20tools will eventually support 4e creatures. However, this is a huge undertaking, and I have to decide how best to handle it. I'm leaning towards a system that will allow anyone to write system templates; then, any gaming system could be plugged in, theoretically. In practice, this is a lot of work for a single developer, so I wouldn't anticipate this happening any time soon.
\ No newline at end of file
diff --git a/_posts/technology/2009-08-24-the-decentralized-metaverse.html b/_posts/technology/2009-08-24-the-decentralized-metaverse.html
new file mode 100644
index 0000000..2f09f6c
--- /dev/null
+++ b/_posts/technology/2009-08-24-the-decentralized-metaverse.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: The Decentralized Metaverse
+date: '2009-08-24T22:50:00.000-04:00'
+author: Anna Wiggins
+tags:
+- second life
+- metaverse
+- drm
+- Gaming
+- Technology
+modified_time: '2013-10-22T11:19:50.712-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-2802076291360759399
+blogger_orig_url: http://www.stringofbits.net/2009/08/the-decentralized-metaverse.html
+---
+
+Several years ago I mused on the decentralization of Second Life, Linden Labs' virtual world. Shortly after that post, I dropped out of the metaverse entirely for more than a year.
While I was off not paying attention, it seems that almost all of my predictions have come true. An open-source server for running a simulator and/or grid, OpenSim, has been created. OpenSim appears to have solved many of the problems, and implemented many of the predictions, of my post from 2006.
One "problem" that remains, though, is economy.
The problem I outlined in my original post was that without a robust permissions scheme, economy would break down. Looking back, this seems terribly unlike me. Even in 2006, I had a strong dislike for anything that reeked of Digital Rights Management (DRM) even for the me that wrote that post. The permissions scheme employed by Second Life, after all, is just a DRM scheme. Like all DRM, it attempts to keep the user from using the things they purchase the way they would like, and like all DRM it is ultimately futile.
Economy on a Closed Grid
On the Second Life grid, you use real money to purchase virtual goods, which might have any of a number of permissions associated with them (modify, copy, and transfer). This permissions scheme is enforced by the fact that Second Life's grid is a walled garden; Linden Labs controls the asset server, so your data all exists in their hands. They safeguard it, preventing nefarious users from copying your creations.
Except, not really.
Like all DRM, this scheme just plain can't work. It can't. It violates information theory. It is mathematically impossible to give something to someone and then keep them from having it. This is a corollary to the Law of Cake. I will elaborate.
For the Second Life viewer (aka client software) to render the object, it needs a copy of the object. This copy is necessarily sufficient to reproduce the object. Since any viewer that can speak the protocol can connect to Second Life, all you have to do is create a viewer that copies the object data being sent to it.
In fact, exactly such a viewer has been written. Linden Labs responded to this viewer's existence by appealing to their Terms of Service. Whenever a user is caught using CopyBot, they are banned from Second Life.
In other words, there is no technical solution, only a social/legal one. This is because DRM is fundamentally flawed; it is trying to achieve the impossible.
Even without CopyBot, you could just decode cached objects from the official viewer's data cache. Programs have also been created which do this as well, although they are harder to use than the infamous CopyBot.
The point of all this is that the assumption that the Walled Garden protects your Intellectual Property is simply false. As with the rest of the Internet, piracy is a given. Anyone creating and distributing content on the web must start with that assumption.
Economy on an Open Grid
I haven't explored OpenSim enough to determine whether it supports any sort of monetary transaction, but let us assume that it does. In other words, assume that you can, via direct credit card payments or via a virtual currency, purchase virtual goods. Even if you can't do this yet, I have little doubt that OpenSim will support it eventually.
Now, let us further assume that I connect to OSGrid via a region that I run myself. This means that I control my own asset server, where my inventory resides. If I purchase an object with restrictive permissions on another region, a copy of that object will be transferred to my asset server, where I can simply log in via mysql and change the permissions. Now, I can create multiple copies of this object, or give a copy to someone else.
What I have done here is to defeat DRM, just like CopyBot. It's considerably easier, and much harder to detect. However, in practice this is no less secure to the Intellectual Property owner than Second Life's walled garden. It still requires a reasonable level of competence (running your own grid/sim) to exploit, so piracy is likely to be similar in rate. Of course, the open metaverse has no Terms of Service (although individual grids/regions within the metaverse may). But the technical merits are the same; when looking at the threat of piracy, the open grid has the same basic properties as the closed grid.
Of course, even without our own asset server, we could still use the same techniques to copy data that I described for the closed grid. CopyBot and copying assets out of cache work identically on an OpenSim grid.
Not a problem
Okay, so the economy "problem" isn't really a problem, just a fact of life. In the words of the OpenSim folks:
[The existence of piracy] is the kernel of the belief that open grids are hopeless for a virtual-goods economy. DRM discussion aside, maybe they are hopeless. But then, everyone thought the web was hopeless for selling music, and look at the success of iTunes in spite of all the piracy that still exists out there.
I am not proposing that piracy is good in any way, merely describing how it is inevitable. You simply cannot restrict how users will use the things you buy. You can't keep someone from copying digital data, if they are determined enough to do it. You can use restrictive terms of service and try to sue or press charges, but there will never be a technological solution.
So, to current and potential content creators shying away from the open grids: piracy is an unfortunate fact of life. It will happen. Start with that assumption, and work from there. If this means you don't want to create digital content, I'm sure the creative community will miss you. If, however, you realize that some people will appreciate your work enough to pay for it, without worrying about the details, then you are in the company of some fine artists.
\ No newline at end of file
diff --git a/_posts/technology/2009-08-31-emacs-23-dbus-and-libnotify.html b/_posts/technology/2009-08-31-emacs-23-dbus-and-libnotify.html
new file mode 100644
index 0000000..f252f55
--- /dev/null
+++ b/_posts/technology/2009-08-31-emacs-23-dbus-and-libnotify.html
@@ -0,0 +1,15 @@
+---
+layout: post
+title: emacs 23, dbus, and libnotify
+date: '2009-08-31T18:47:00.000-04:00'
+author: Anna Wiggins
+tags:
+- emacs
+- programming
+- Technology
+modified_time: '2013-10-22T11:19:50.826-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-6878792725228849848
+blogger_orig_url: http://www.stringofbits.net/2009/08/emacs-23-dbus-and-libnotify.html
+---
+
+A new major version of emacs is out, and it includes dbus support. This is great, because it means we can do things like this:
(require 'dbus)
(defun send-desktop-notification (summary body timeout)
"call notification-daemon method METHOD with ARGS over dbus"
(dbus-call-method
:session ; use the session (not system) bus
"org.freedesktop.Notifications" ; service name
"/org/freedesktop/Notifications" ; path name
"org.freedesktop.Notifications" "Notify" ; Method
"emacs"
0
""
summary
body
'(:array)
'(:array :signature "{sv}")
':int32 timeout))
(defun pw/compile-notify (buffer message)
(send-desktop-notification "emacs compile" message 0))
(setq compilation-finish-function 'pw/compile-notify)
Add this to your .emacs file and you will receive a libnotify popup when M-x compile completes. It will even give you the exit message, so you know whether the compile was successful.
So now you can let that long compile run, and work on something else. emacs will let you know when the compile finishes.
As written above, the notifications will stay on your screen until you dismiss them (by clicking on them). If you would like them to vanish after a preset time limit, change the 0 in the call to send-desktop-notification. Set it to the number of milliseconds the popup should remain on the screen.
[caption id="attachment_173" align="alignright" width="300" caption="Screenshot of libnotify popup showing a compiler error"][/caption]
This is just the tip of the iceberg, of course. Any application that presents a dbus interface can be interacted with from emacs, which means that emacs can also integrate itself with the Linux desktop in other interesting ways.
\ No newline at end of file
diff --git a/_posts/technology/2009-08-31-so-close-netflix.html b/_posts/technology/2009-08-31-so-close-netflix.html
new file mode 100644
index 0000000..c54ea26
--- /dev/null
+++ b/_posts/technology/2009-08-31-so-close-netflix.html
@@ -0,0 +1,15 @@
+---
+layout: post
+title: so close, Netflix
+date: '2009-08-31T12:54:00.000-04:00'
+author: Anna Wiggins
+tags:
+- netflix
+- rant
+- Technology
+modified_time: '2013-10-22T11:19:50.841-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5182228409816232070
+blogger_orig_url: http://www.stringofbits.net/2009/08/so-close-netflix.html
+---
+
+I like Netflix. I think they're a great service, reasonably priced, and they have completely replaced cable television for me. However, I have found one problem. According to Netflix:
If you are renting a series or seasons, we will ship the DVDs in order. That means:
...
* If there is a wait for a particular DVD in a series, will we wait until we ship you that DVD until we ship the next DVD in that series.
Which is great. If I add, say, Excel Saga to my queue, I can be certain that I will get disc 1 first, followed by disc 2 and 3. Under no circumstances will I have to worry about getting, say, disc 4 before disc 2. Right?
Well, in theory. In practice, some TV series (notably, Excel Saga) have discs missing completely. These discs go into your "Saved DVDs" list instead of your queue, and they aren't considered to be discs with a "wait". As a result, they get skipped over completely, and you get the next disc in the series that isn't missing.
Why am I complaining here instead of directly to Netflix? Because Netflix doesn't have any reasonable way that I can find to open a bug report or provide feedback. And I wanted to vent a little.
\ No newline at end of file
diff --git a/_posts/technology/2009-09-08-tutorial-creating-opensim-terrain-with.html b/_posts/technology/2009-09-08-tutorial-creating-opensim-terrain-with.html
new file mode 100644
index 0000000..9552ffb
--- /dev/null
+++ b/_posts/technology/2009-09-08-tutorial-creating-opensim-terrain-with.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: 'Tutorial: Creating OpenSim terrain with Blender'
+date: '2009-09-08T17:18:00.000-04:00'
+author: Anna Wiggins
+tags:
+- tutorial
+- opensim
+- second life
+- linux
+- metaverse
+- Technology
+modified_time: '2013-10-22T11:19:50.728-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5832678214939499715
+blogger_orig_url: http://www.stringofbits.net/2009/09/tutorial-creating-opensim-terrain-with.html
+---
+
+This tutorial will explain how to create RAW terrain files for OpenSim and Second Life using Blender and the Gimp.
Before we begin
You will need the following software for this tutorial. All of this software is free and open source.
- Blender, a professional 3d modelling tool. Blender is powerful but complex, and basic blender knowledge is assumed for this tutorial. Blender will be used to actually create the heightmap.
- The Gimp, a powerful program for creating and editing raster (i.e. normal) image files. The Gimp will be used for splitting the heightmap into RAW terrain files that OpenSim can use.
- gimpterrain, a plug-in for The Gimp that allows it to open and save RAW terrain files.
- terrainerizer (optional), a bash script I created to automate splitting the heightmap into RAW files. Terrainerizer only works on Linux, and still requires The Gimp and gimpterrain to be installed. It also requires ImageMagick.
In addition to the above software, you will also need a blank RAW terrain file. You could download a terrain file from OpenSim and transform it into a blank one (replace the Height layer with #ffffff, replace the factor layer with #808080), or you could just use the one I've included with terrainerizer.
Create a heightmap
A good tutorial on creating a generic heightmap in Blender can be found here.
The tutorial above creates a heightmap that is 512x512 pixels. However, an OpenSim RAW terrain file is only 256x256 pixels. This means that the above tutorial will create terrain for 4 regions, arranged in a square. If you need terrain for a different number of regions, you can modify the above tutorial to create different sized heightmaps.
For example, suppose you want to create an oblong island that is 2 regions by 4 regions in size. To do that:
1. Create the plane, but instead of scaling it to 2x2 blender units, scale it to 2x4 blender units. To do this, you can use this command sequence in blender:
- Right-click on the object to select it.
- Change the mode to Edit mode.
- Press 's', 'y', '2', 'return'.
- Press 's', 'x', '4', 'return'.
Now you should have a plane that is oblong instead of perfectly square.
2. When you configure the render settings, you will need to use different values.
- In the Scene settings (F10), SizeX and SizeY should be set to 256 * (number of regions). In our case, we have 2 regions in the Y dimension, and 4 regions in the X dimension. So, SizeX should be set to 1024, and SizeY should be set to 512.
- In the camera settings, the scale needs to be adjusted to fit the plane precisely. In our example, the scale should be set to 8. To get it just right, select the camera, and press Numpad0 to switch to camera view. You should see two concentric rectangles composed of dashed lines. Now, press F9 to view the Editing options for the camera. Now, adjust the Scale value until the outer dashed rectangle encompasses your plane completely, without including anything outside the plane. If the dashed rectangle is not the same shape as your plane, then you still need to set SizeX and SizeY in the Render settings.
Creating RAW terrain files with the Gimp
Now that you have a heightmap file, you still need to turn it into terrain files that can be uploaded into OpenSim.
Enter Domino Marama, creator of gimpterrain, an import/export plug-in for the Gimp that can handle the OpenSim RAW terrain format. Download gimpterrain and install it into your gimp plug-ins directory.
Now, if you are running Linux, you can automate the rest of this section with my terrainerizer script. See below.
We also need the blank terrain file that I mentioned earlier.
Armed with these tools, we can open a terrain file in the gimp and combine it with a portion of our heightmap.
- Open your blank terrain file (blank.raw) and the heightmap in the Gimp.
- Using the Rectangle Select tool, select a 256x256 pixel section of the heightmap, starting in the upper-left corner.
- Click Edit -> Copy
- Select the terrain file and make sure the Height layer is selected.
- Click Edit -> Paste. You should see the section of the heightmap you copied appear as a floating layer.
- Click Layer -> Anchor Layer. The Height layer should now look like the copied portion of the heightmap.
- Click File -> Save As and save this file as a new file with the .raw extension.
Now, repeat this process for every 256x256 pixel section in your original heightmap.
Performing the steps in the previous section is very tedious, especially given how long it takes to save the terrain files. To make this easier, I have automated the process with the terrainerizer script.
If you are running Linux, simply put the terrainerizer script somewhere in your path. Edit it and specify the path to your blank.raw file, then run:
terrainerizer heightmap.png
Replace 'heightmap.png' with your heightmap file. Now let terrainerizer work. It will handle everything we did in the previous section automatically. It may take a while, depending on how large your heightmap is.
When it is finished, terrainerizer will leave several files in your current directory, named with this scheme:
heightmap-nxm.raw
Where 'n' and 'm' are numbers starting at 0 that represent the column and row for that terrain file. So, 0x0
is the top left region of your terrain, 0x1
is the next region (moving from top to bottom), and so on. Just upload these terrain files and you're done!
Uploading the terrain files
Now that you have the terrain files, you can upload these files into OpenSim. There are two ways to do this.
1. From the OpenSim server console, you can simply:
change region RegionName
terrain load /path/to/terrain.raw
Repeat this for each of your regions.
2. From a viewer connected to OpenSim (assuming you are using Hippo or a similar viewer):
- Move to the region you where you want to upload terrain.
- Navigate to World -> Region/Estate -> Terrain
- Click "Upload RAW Terrain..." and select the terrain file you created for this region.
[caption id="attachment_190" align="alignright" width="300" caption="The Upload Terrain menu in Hippo"][/caption]
Repeat these steps for each region where you want to upload terrain.
Edit: Apparently wordpress.com doesn't allow arbitrary files any more, so I've moved terrainerizer to github. The links have been fixed above, or you can simply click here.
\ No newline at end of file
diff --git a/_posts/technology/2010-01-08-bulding-bridges-in-metaverse.html b/_posts/technology/2010-01-08-bulding-bridges-in-metaverse.html
new file mode 100644
index 0000000..12d37df
--- /dev/null
+++ b/_posts/technology/2010-01-08-bulding-bridges-in-metaverse.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: Bulding bridges in the metaverse
+date: '2010-01-08T07:24:00.000-05:00'
+author: Anna Wiggins
+tags:
+- second life
+- programming
+- metaverse
+- Technology
+modified_time: '2013-10-22T11:19:50.818-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5217322832347511984
+blogger_orig_url: http://www.stringofbits.net/2010/01/bulding-bridges-in-metaverse.html
+---
+
+If/once you "get it", Second Life is pretty cool. It can be a lot of different things, and its potential has barely even been scratched. Sure, the tools are cumbersome, but they are getting better. And some of Linden Lab's policies suck, but that will just drive people to OSGrid, eventually.
Anyway, there are people in Second Life that I like being able to communicate with. However, when I'm at work, it's a lot of trouble to create an SSH tunnel home, then forward a text-only client like ommviewer-light just so I can log in and see who is online.
So, as I always do, I went way overboard and created a system that can relay chat between an IRC channel (or channels) and any location (or locations) inside Second Life (or any other grid that supports LSL). It can also check the online status of users and send them one-way IMs. I call the entire system slrelay, and you can get it here.
It requires a few things to work: a running webserver is absolutely necessary. If you want the IRC features, then you also need an IRC network of your choice and a machine that can execute perl scripts. I have my IRC bot connected to irc.slashnet.org.
slrelay has a number of possible uses. You could use it to relay chat between key locations on a large landmass (say, an area that spans 3 or 4 sims). It could relay chat between Second Life and another metaverse grid like OSGrid. It can be used as a simple IRC tool to check who is online very quickly. Or it can do all of these things at once.
\ No newline at end of file
diff --git a/_posts/technology/2011-05-26-bittorrent-linux-way.html b/_posts/technology/2011-05-26-bittorrent-linux-way.html
new file mode 100644
index 0000000..b68f464
--- /dev/null
+++ b/_posts/technology/2011-05-26-bittorrent-linux-way.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: BitTorrent, the Linux way
+date: '2011-05-26T10:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- tutorial
+- bittorrent
+- linux
+- dropbox
+- Technology
+modified_time: '2013-10-22T11:19:50.897-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-8579340143964763744
+blogger_orig_url: http://www.stringofbits.net/2011/05/bittorrent-linux-way.html
+---
+
+I use BitTorrent a lot. Most Linux distributions have torrents available, and I have gotten a lot of Creative Commons-licensed music, such as the work of Jonathan Coulton, via BitTorrent. It is a great way to deliver content.
However, I have a problem with (most of) the available BitTorrent clients. Given what BitTorrent does, which is allow you to download and subsequently seed content, it should really run like a service - quietly running in the background handling your torrents. However, most of the clients for Linux work like Windows applications. They sit in your system tray, giving you "helpful" popup notifications. More importantly, they die if you logout. Luckily, I have found a solution.
Enter transmission-daemon
Transmission is one of the bittorrent clients for Linux that works like I described above - it's a desktop application. However, it comes with a variant, transmisison-daemon, that can run in the background, as a dedicated 'transmission' user. This is much nicer.
Setting it up in fedora is pretty easy. Install the transmission-daemon package. Edit /etc/sysconfig/transmission-daemon to suit your needs. You can change TRANSMISSION_HOME to whatever directory you'd like your completed torrent files to live in (you do not need to modify the actual home directory of the transmission user, but do make sure TRANSMISSION_HOME is owned by that user).
Now, start transmission-daemon, then stop it again:
service transmission-daemon start
service transmission-daemon stop
That step created the transmission configuration files, which you can now find in $TRANSMISSION_HOME/.config/transmission-daemon/. The file you probably want to edit is settings.json. Edit this file to suit your needs, then start transmission again. To tell transmission to automatically start at boot, run:
chkconfig transmission-daemon on
transmission-remote - for all your transmission-related needs
So, now you have a daemonized BitTorrent client, running unobtrusively in the background. But how do you use it?
The answer is transmission-remote. This tool is an administrative front-end for transmission-daemon that lets you add, remove, start, stop, and view your torrents, and a lot more besides. To add a torrent, you can use 'transmission-remote -a' on either a local .torrent file or a URL, like so:
transmission-remote -a /path/to/file.torrent
transmission-remote -a http://example.com/file.torrent
Once the torrent is added, it will automatically start. You can get information on all your torrents with 'transmission-remote -l'. Note that each torrent has a numeric ID assigned to it; you use that ID with the '-t' option to tell transmission-remote to perform actions on the torrent. For example, to stop the torrent with ID 42, you could run:
transmission-remote -t 42 -S
transmission-remote can do a lot more; check its man page for details. In particular, the -s, -i, and --remove-and-delete are useful flags to know.
Making things easier - the watch directory
The problem with the approach I have described is that the command line, while great for interacting with your local torrents, is not the place most people go to look for torrents in the first place. More often, you find a .torrent file on the web, and having to open a terminal and run a command is an annoying extra step.
To make things easier, you can set up a watch directory; any .torrent files placed in that directory will automatically be added to transmission-daemon. To set up a watch directory, edit settings.json and add the following:
watch-dir-enabled: "true",
watch-dir: "/path/to/watch/dir",
(I have found it is best to always stop transmission-daemon before making changes to settings.json. It often overwrites settings at shutdown)
One caveat about the watch directory: when transmission-daemon is started, every .torrent file in there will be added. While this has no effect on torrents you are still downloading or seeding, torrents you have already removed will be re-added to transmission-daemon. For this reason, it is a good idea to routinely delete the files in your watch directory. You can use tmpwatch and/or cron to periodically delete the files.
Torrents from anywhere - using Dropbox with transmission-daemon
Dropbox is a fantastic tool for always having access to important files. Any files you put in your dropbox directory get automatically synced to every machine you use dropbox on. There are also Android, iOS, and web interfaces, so you can really get to your files from anywhere.
What does this have to do with transmission? Well, you can put your watch directory inside your dropbox directory. Any .torrent file you add to that directory - from any computer or phone - will automatically be started on the computer running transmission-daemons. This means you can start your torrents whenever you come across them, no matter where in the world you happen to be.
And if you have multiple people in your household who might all like to use one machine for BitTorrent, you can simply share your dropbox watch directory with all of them.
The way computers should behave - the world according to Anna
User interface design is a complicated thing, and a lot of research has gone into it. What a lot of UI discussions miss, though, is that everyone has different needs and preferences. The setup I have described here works the way I personally like best. It is transparent; that is, it gets out of your way and just does what it is supposed to do, with no fuss. It is powerful and flexible. For a Linux power user who prefers to use the command line where she can, it is hard to imagine a better BitTorrent solution.
\ No newline at end of file
diff --git a/_posts/technology/2011-06-02-gaming-in-linux-my-adventures-with-wine.html b/_posts/technology/2011-06-02-gaming-in-linux-my-adventures-with-wine.html
new file mode 100644
index 0000000..841900a
--- /dev/null
+++ b/_posts/technology/2011-06-02-gaming-in-linux-my-adventures-with-wine.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: Gaming in Linux - my adventures with wine
+date: '2011-06-02T10:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- programming
+- video games
+- wine
+- Technology
+modified_time: '2013-10-22T11:19:50.951-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-3787689467459426007
+blogger_orig_url: http://www.stringofbits.net/2011/06/gaming-in-linux-my-adventures-with-wine.html
+---
+
+I like playing games. My 1600-word review of Portal 2 should have been at least some indication of that. I enjoy console and PC video games, tabletop roleplaying games, and board games. But today, I'm talking about playing PC video games in Linux.
wine is not an emulator
Let's start with the basics (then probably skip the middle ground and jump straight to the advanced stuff). Programs written for Windows or Mac OS can't be run natively in Linux. By 'natively', I mean you can't just click on a Windows application, or type its name on your terminal, and expect it to work. You'll get an error like this:
bash: ./windowsprogram.exe: cannot execute binary file
There are a number of reasons this doesn't work. The first and most fundamental is that Windows and Linux use different binary file formats; that is, the actual program code is structured in an entirely different way.
So why not just create a tool that can take one binary format and convert it to another? Well, to begin with, that would be pretty complicated, and probably fraught with problems; these binary formats are actually pretty complex, and include things like how to dynamically access libraries. Libraries are big chunks of code that are written separately from the program, then used by the program so that software developers don't have to repeatedly write the same code to accomplish common tasks.
And that leads us to the real problem - Linux and Windows have fundamentally different sets of libraries available. Each OS has a large collection of system libraries that developers can use to interact with the Operating System in different ways. And there is very, very little overlap between these libraries. A prominent example of a library that exists only in Windows is Direct3D, which is used by a lot of game developers; it contains code that makes it easier to do a lot of complicated things with the graphics card, thus making it easier to make pretty, visually involved games.
So, if you want to run a Windows program in Linux, you would have to create a tool that could take a Windows program, make it "think" it is running in a Windows environment, and then take its library calls and somehow convert them into a set of library calls that Linux can understand. Direct3D calls, for instance, might be converted into equivalent OpenGL calls in Linux. This is exactly what the wine project does.
Wine has been around for a long time, and it has aged well (these are the jokes, folks). The latest wine codebase does a great job handling a ton of Windows applications, including a great many games. This article is an overview of my experience using wine to play games on Fedora.
blizzards and steam valves
My journey begins with wine-1.3.18, the version packaged with fedora 13. Wanting to play Starcraft 2, I ran the installer, which executed without a problem. The game itself also ran great, without having to make any tweaks at all to wine's configuration. So, Starcraft 2 was an easy win. Blizzard's games, in general, work great under wine. I'm not sure if Blizzard just avoids strange API calls, or if wine has a lot of developers interested in making certain Blizzard's games work. Either way, this one was phenomenally easy.
The next thing I tried was Valve's Steam client. If you're somehow reading this from the past, or Steam no longer exists in the future (or you have recently emerged from a coma), Steam is a game distribution platform. You can buy electronic copies of games, install them in steam, and play them. Many games also support achievements and server-side syncing of your game data. This makes gaming on multiple computers really nice (as long as you're the only one using Steam, that is). It also has community features; you can see what your friends are playing, join them in multiplayer games, etc.
So, I have quite a few games on Steam, and before I can try to run the games under wine, I have to get Steam to run. This was a little bit trickier than running Starcraft 2. First, the Steam installer is a .msi file, which requires the msiexec tool to run. Luckily, recent versions of wine come equipped with an open-source clone of the msiexec tool. So, all I had to do was:
msiexec SteamInstall.msi
Once this was done, Steam launched, but I ran into a new problem: every time I move my mouse over the Steam windows, they would flicker, making it hard to see what I was doing. This was solved by using winecfg to set the 'Windows Version' to Windows 7. Problem solved.
The next problem I encountered with Steam was that, when I drag a Steam window, it continues to move around after I release the mouse button, as if I'm still holding it. I have to click on another Steam window to make it stop. This problem remains unsolved in the latest version of wine (1.3.21 as of this writing).
Having Steam running, though, I was able to try a few games. The first thing I discovered was that every game I tried had major problems until I unchecked 'Enable Steam community in-game'. Once I had done this, Plants vs Zombies and Darkstar One both worked great 'out of the box', with no tweaking required.
Portal, on the other hand, was not as great. Every few seconds of game play (not exactly precise, and it happens more when portals are open) the game will stutter for a moment. I spent a lot of time tweaking wine to try to fix this, but the problem remains in the latest version of wine. In addition, in wine 1.3.20, an even worse problem appeared - instead of stuttering, the game would act as if the mouse had been moved a random distance in a random direction periodically.
The last game I tried out was Team Fortress 2. It refused to start until I added an override for hl2.exe (in winecfg) disabling gameoverlayrenderer.dll and changing the Windows version to NT 4.0 (who knew Windows NT was a good gaming platform?). After this, the game worked with a stuttering problem similar to Portal's, but more dependent on how much action was happening on screen. This was probably my most disappointing experience with wine, and 1 problematic game out of 5 isn't bad.
So far, I have a (let's say) 80% success rate with running Windows games under Linux using wine, with comparatively little effort required on my part. This is a fantastic result compared to even 2 years ago, and I look forward to watching the wine project enable ever more games under Linux.
tips, tricks, caveats
If you're using Fedora, you may run into problems with pulseaudio. I recommend disabling it completely, via the following:
yum remove alsa-plugins-pulseaudio
echo > ~/.pulse/client.conf << EOF
autospawn = no
daemon-binary = /bin/true
EOF
Then, reboot your machine (or make sure you kill all running pulseaudio processes). Wine works a lot better this way. You'll probably also want to run:
setsebool wine_mmap_zero_ignore 1
To make SELinux play well with games in wine.
Something I wanted to do but was unable to achieve was run native Linux games directly from Steam, and have Steam keep track of them. After asking on the wine-users mailing list, I learned that the way wine emulates Windows process handling makes this impossible. So, instead, I created steamstub, a Windows program written specifically for Steam under wine. To use it, add it as a non-steam game to Steam, then edit the game's properties and change the name to a native Linux game of your choice. Now, before you go play your Linux game, click 'Play' on this game in Steam. Steamstub will deliver a small popup, and to your Steam friends, it will look like you are playing a non-steam game until you click 'OK'. This lets you advertise what game you are playing, even when Steam can't launch it.
One more thing you may find interesting is a tool I developed called wino. It lets you keep track of multiple wine prefixes (virtual Windows environments), so you can keep your programs separated. This makes it easier to recover if something in your drive_c directory gets broken; you only have to worry about reinstalling at most one program. If you make heavy use of steam's 'non-Steam game' functionality, like I do, then this is not as useful for you. However, wino also does a lot of other useful things, like allow you to have a default command assigned to a wineprefix (so you could just run 'wino steam' to launch Steam.exe). It can also run winecfg (and a lot of other tools) on a prefix via 'wino prefixname --config'.
\ No newline at end of file
diff --git a/_posts/technology/2011-06-08-tabletop-roleplaying-over-internet.html b/_posts/technology/2011-06-08-tabletop-roleplaying-over-internet.html
new file mode 100644
index 0000000..c4eb656
--- /dev/null
+++ b/_posts/technology/2011-06-08-tabletop-roleplaying-over-internet.html
@@ -0,0 +1,19 @@
+---
+layout: post
+title: Tabletop Roleplaying over the Internet
+date: '2011-06-08T10:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- open source
+- dungeons amp; dragons
+- epic words
+- maptool
+- Gaming
+- teamspeak
+- Technology
+modified_time: '2013-10-22T11:19:50.989-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-2780052587121914531
+blogger_orig_url: http://www.stringofbits.net/2011/06/tabletop-roleplaying-over-internet.html
+---
+
+I have been playing tabletop roleplaying games since a fateful day when I was 13. I had gone with a friend to play Magic: the Gathering at a local video game shop that also happened to sell Magic cards. One of the players mentioned a gaming group starting up at the local Media Play.
Curious, my friend and I got a ride over to Media Play. There, I found a pretty large group of people playing Magic. I also saw an interesting sight: some people with books, funny shaped dice, and little painted figures arranged on a square grid. I watched for a few minutes, and quickly got the gist of what they were doing. I asked if I could join. The response? "Sure, we need a cleric."
Thus began a hobby that has spanned half my life and cost a great deal of money. I have played a number of systems: World of Darkness, Cyberpunk 2020, Shadowrun, Rifts, Call of Cthulhu, Star Wars (the older edition that used d6s), homebrew systems created by various friends. But I always come back to D&D. It was my first system, and it remains my favorite through three editions of the game. In a lot of ways, it has grown with me.
In the last few years, though, I haven't had many chances to play D&D. I was skeptical of 4e at first, and then spent a lot of money buying 4e books after Alexandra Erin convinced me of its merits in her repeated, impassioned blog posts about it (all of those links are excellent reading, even if you already know you like 4e). I sat on these purchases for months, planning games, even getting some people to make characters. But no game formed; the other players either didn't have free time, or I didn't have free time, or we were too far away.
The Search for a Gaming Table
Eventually I found a little free time to bring a game together, and since I couldn't solve the problem of my friends' lack of free time, I started looking to solve the problem of people who had free time, but were too far away. So I started looking for a solution to playing D&D over the Internet. Namely, what I needed was something known as a virtual tabletop. I started out with simple requirements: free is good, open source is even better. Since there was no good overview or comparison of the existing virtual tabletop options, I decided to make one. I'll describe, briefly, why I didn't pick each one (until I get to the one I *did* pick, of course).
OpenRPG - frustratingly deprecated
Years ago (about 10 of them), I tried using WebRPG as a virtual tabletop. I remember it having a somewhat cumbersome and over-engineered interface, and being frustrated with it on many levels. Still, it was the first thing in my memory, so it's the first thing I looked up. Turns out it went open source a while back, and is now called OpenRPG.
Unfortunately, this was a non-starter. OpenRPG is written in Python (yay!), but doesn't work with Python 2.7, which is the de facto standard in Fedora. I didn't want to maintain a separate Python install for just one program (this is possible, but would be a pretty big hassle to set up), so OpenRPG was a bust.
Screen Monkey - expensive and cumbersome
The next program I discovered was Screen Monkey. Once again, Alexandra Erin was instrumental in this - she mentioned using it for her online games. Screen Monkey has one big advantage - for the players, it is browser based, so only the DM needs to install any client software. Unfortunately, that software only runs in Windows. So, I found an old install disk for Windows XP, and installed it as a virtual machine using KVM. Then I installed Screen Monkey Lite.
More bad news, though. Screen Monkey Lite turns out to be rather light on useful features. The biggest problem is that you can't save your work - you have to buy the $35 version of the program to save and restore a session. The tools for hiding what the players can see was also fairly awkward. Awkward, in fact, is the word I would use to describe the program's feeling as a whole. NBOS are terribly proud of their software ($35 proud) only to be outdone by multiple free and open source competitors. Sounds like some other software companies I know.
Gametable - RIP
Gametable looked promising, but doesn't seem to be actively developed (there was a sourceforge project available a while back, and remnants of it are here, but it seems to be dead now), and it didn't work very well for me.
Fantasy Grounds - pretty, but overpriced
Next up is Fantasy Grounds. I didn't even try the demo once I saw the price tag - $40 for the DM-capable client, and $24 each for the players' clients. One of my hard requirements is that my players not have to spend any money on the solution, so this one was right out. For a more affluent group, though, it might be a great solution. I will concede that it is gorgeous, and looks very well polished. Certainly a better contender for your money than Screen Monkey. And it has acknowledged, if unofficial, plugins for various game systems, including D&D 4e.
MapTool - the right balance
Eventually, I found MapTool, one of the applications created by the RPTools team. MapTool originally didn't impress me - it seemed cumbersome and unwieldy. After working with it for a while, though, I found that most of its design decisions make sense, and that it is very powerful. Like most powerful toolkits, it is subsequently pretty complicated, and using it effectively took some practice. However, once I got the hang of it, it's unbeatable. It's more stable than any of the other open source offerings, and it runs well out of the box. It lets you use fog of war, individual player views (based on available light sources), and it lets you make maps in advance but have them hidden from the players until you are ready to show them.
Also invaluable was Dorpond's 4e framework. This is a set of configuration settings and macros that work together to make MapTool work well with the D&D 4e rules. I have modified his macros a bit to fit my particular play style (notably, I prefer to let players roll their own initiatives), and am continuing to do so as I playtest them. You can find my latest version of the framework here.
Also, three caveat with maptool:
1. The network functionality doesn't work with OpenJDK. Linux users will want to install the Java JRE instead. In Fedora, I just installed the jre RPM from Sun's website, then edited MapTool's startup script and added 'export JAVA_HOME=/usr/java/default' and 'export PATH=\$JAVA_HOME/bin:\$PATH' near the top of the file.
2. When starting a server, if you do not select 'Use Individual Views', the GM will not see an accurate version of the player's view.
3. When you have tokens in the initiative list, players can only move their token on their own turn. Trying to move when they don't have initiative will send them into an annoying endless loop of NullPointerExceptions. I'm hoping this gets fixed soon by the MapTools team, because it's an obnoxious bug. Luckily, MapTools is Open Source - I may take a crack at finding that bug myself.
D&D Virtual Table - still cooking
Wizards of the Coast has recently announced a beta version of their own virtual tabletop - called, simply enough, D&D Virtual Table. It is only available to select D&D Insider subscribers. And, since D&D Insider is not worth the price for me personally (a topic worthy of an entire post unto itself), I have no idea whether it is any good. It would also certainly require every player to have their own D&D Insider subscription, so it breaks my stated rule. Still, it might be something to keep an eye on.
Adding Voice
So, now that we had a game table, we needed a way to talk to each other. Luckily, there is a readily available, cross-platform solution to this: TeamSpeak. Now, TeamSpeak isn't open source, and it is not free if you want to host multiple teamspeak servers on one machine (or have more than 32 clients connected). But it's great for a D&D game, which would never need those resources. It's dead simple to set up the server in Linux, and the permissions management is very intelligent (and again, dead simple).
Let's look at the options I didn't choose for voice chat: Skype relies on a central server, and has a history of iffy privacy practices. Ventrilo offers a Linux server, but no Linux client. And the voice chat available in various Instant Messaging programs is either unreliable, or doesn't work in Linux either. So, TeamSpeak it is, and it works great.
Passing Notes
The last thing I needed was a way to present textual information to the players. I do a lot of world-building and writing background material, and I want to make sure that is available to the players (at least, the publicly revealable parts). I also want to be able to give them things like notes that they might acquire, and possibly conduct some roleplaying between sessions if a session ends during downtime.
There are plenty of ways to simply share files, and these would be adequate. Dropbox could be used, especially for image files. Google Docs seemed like a pretty good way to share documents with players. After considering it for a while, I discovered a site called Epic Words. Epic Words gives you a journal system, so players can post in-character summaries of game sessions; this also works well as a means to deliver chunks of story-based text such as notes, riddles, etc. in a way that the players can easily access and remember.
Epic Words also has wiki-like functionality, and lets you define "references", including NPCs and places, that will be linked automatically when mentioned in a blog post. This is an especially useful feature, because it lets me, as the DM, add content to the players' writings without actually changing their creative work. It also gives you a private forum, which is perfect for the kind of between-session downtime roleplaying I have in mind.
Epic Words' biggest problem is that it only allows you to run a single campaign without either upgrading, 'retiring' the existing campaign, or deleting it. And even with the upgrade, there doesn't appear to be a way to share references / wiki content between campaigns (I don't know this for sure, because I can't really test that, but it appears to be the case). If I were running multiple campaigns, there is a slew of generic world history and other setting information I would like to share between campaigns. If you could make wiki pages independent of campaigns and then 'link' them in, that would be ideal. As it is, I happen to only be running one campaign at the moment, so I will have to cross that bridge if and when I come to it.
Final Thoughts
In the end, I ended up using three tools to interact with my players: MapTool, TeamSpeak, and Epic Words. I like this solution because it is very Unix-philosophy friendly - each tool serves one purpose. MapTool acts as our tabletop, TeamSpeak is how we communicate, and Epic Words gives us a handy place for wrap-up/reference/between-session play. The overall experience is pretty excellent; this is a good way to play D&D. It is better than I was hoping for, and even surpasses actual face-to-face play in some ways (I would love to find a way to use MapTool with a projector for face-to-face play).
\ No newline at end of file
diff --git a/_posts/technology/2011-06-18-the-escapist-decline-of-website.html b/_posts/technology/2011-06-18-the-escapist-decline-of-website.html
new file mode 100644
index 0000000..8ef4965
--- /dev/null
+++ b/_posts/technology/2011-06-18-the-escapist-decline-of-website.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: The Escapist - decline of a website
+date: '2011-06-18T08:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Duke Nukem Forever
+- The Escapist
+- angry rant
+- ads
+- hey hey click me click me
+modified_time: '2013-10-22T11:19:51.320-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5626626020120565644
+blogger_orig_url: http://www.stringofbits.net/2011/06/the-escapist-decline-of-website.html
+---
+
+I have been a fan of The Escapist for a long time. I've been watching Zero Punctuation almost since it began. I've been following Unskippable, Experienced Points, and Stolen Pixels for a long time as well. And I regularly browse around the site, watching videos and reading columns that look interesting. You could say I'm a fairly loyal customer of The Escapist.
But I've had it. I can't stand it any more. Look, Themis Media, I get that your product is advertising. That the Escapist exists, to you, as a medium through which you can deliver ads to people. But you've gone overboard. Your site now has all the charm of a geocities page from 1998 combined with an ad/malware site from 2005. You have made your site so horrible to look at and difficult to use that I can only conclude you are actually trying to drive people away from your site. Were you getting too many pageviews? Is that it? Because if that's the case, feel free to redirect every, oh, 10th user or so over to http://stringofbits.net instead. I could use the traffic.
If you are trying to drive people away from your site, well, you succeeded. I'm unsubscribing from my Zero Punctuation and Unskippable RSS feeds, and I'll be ignoring Shamus' blog posts about Experienced Points and Stolen Pixels. Because your site really is that bad.
Look, I can't even always use your site. Sometimes, when I try? I get this:
I tried to watch the latest Zero Punctuation recently, and that's what I got. Your ads crashed my browser. If I looked at an ad in a magazine, and it sprayed me with a chemical that temporarily blinded me, I think we could probably agree that it is a poorly designed advertisement (the cause, by the way, appears to be a full-screen flash ad that overlays the entire screen with a semi-transparent background, then plays a video in the middle of that). And even when the site doesn't crash, well, it still isn't exactly pretty:
I've already enumerated my objections to Duke Nukem Forever, and I have to say I'm a bit disappointed that you're still agreeing to show ads for that now that you've had time to learn about the game's content. Also, that image is repulsive all by itself. But mostly it's the sheer number of things vying for my attention here. It's obnoxious, and it immediately drains the excitement that was building at the thought of watching another Zero Punctuation.
And keep in mind, this was a fairly light instance of the page, ad-wise. Usually I get a full-screen video ad, or an ad popping up annoyingly from the bottom of the screen (usually right as I'm trying to click play, so it intercepts my mouse click).
This just isn't a good way to do business. I know, I know. You're giving away free content! Why am I complaining? Well, yes, you're giving away free content. So are tons of other ad-revenue-driven sites, and they manage to find a way to make my browsing experience much more pleasant. There are better ways to spend my time. And even if there weren't, you have exceeded my personal threshold for how much I'm willing to be annoyed when I'm trying to be entertained. You have literally made it not worth my time to visit your site.
Congratulations, I guess?
\ No newline at end of file
diff --git a/_posts/technology/2011-06-26-project-treewars-beginning.html b/_posts/technology/2011-06-26-project-treewars-beginning.html
new file mode 100644
index 0000000..f829b1f
--- /dev/null
+++ b/_posts/technology/2011-06-26-project-treewars-beginning.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Project TreeWars: The Beginning'
+date: '2011-06-26T08:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Programming
+- SDL
+- C++
+- TreeWars
+modified_time: '2013-10-22T11:19:51.363-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5020071627931204840
+blogger_orig_url: http://www.stringofbits.net/2011/06/project-treewars-beginning.html
+---
+
+My goal is two posts a week - typically, one on Wednesday and one on the weekend. This is usually a pretty easy goal to obtain - it doesn't take too much of my free time to churn out two posts between 750 and 1500 words. And yet, there almost wasn't a post this weekend. Was I playing Minecraft? Nope.
I was writing code.
Programming is something I've always wanted to do professionally, but somehow I managed to end up doing enterprise technical support instead. So, it has become a hobby. And when a project really starts flowing, it is easy to lose myself in it. So I spent three days this week spending every available moment adding code to my new project: a game I'm tentatively calling TreeWars. I've managed to tear myself away from the project for a while, but rather than put it out of my mind, I've decided to blog about interesting things that happen during the development process.
First, meet TreeWars:
Not much to look at, I know. But the project is still very much a work in progress.
Some interesting things about TreeWars:
- It is my second attempt at games programming, and my first was just a software implementation of a classic abstract board game (hnefatafl). And it was written using the graphics tools in GTK (which are serviceable, but not ideal). As a result, I'm learning all sorts of interesting things about the fundamentals of programming games.
- It is my first (real) attempt at graphics programming as well. I'm using SDL, and may eventually rewrite the rendering engine (and parts of the game engine) to make the game 3d and use OpenGL. Either way, I hope to make it cross-platform, although I'm currently only focusing on Linux, since it's my native platform.
- It is based on trees from graph theory, not those other kind of trees.
- Currently, all of those beautiful graphics are procedurally generated. It is actually harder than you would think to draw a circle, at least in SDL.
- It (and the idea to blog about the process) was inspired by Project Frontier, a fascinating project by an experienced graphics programmer who is making far more interesting things than I am with procedural content generation! But hey, give me time...
So, the first step on the path to TreeWars was to learn enough SDL to generate a simple accelerated 2D image (not that it really needs to be accelerated right now, but I hope that will change in time). It turns out, this is both somewhat harder and somewhat easier than I expected.
I found a reasonably nice SDL tutorial here. In fact, TreeWars was just 'sdltutorial' (with plans to start writing a game once I'd worked through some tutorial programs) until I got to lesson where you implement Tic Tac Toe, and my mind insisted 'Tic Tac Toe is boring, let's make a real game!' I justified that I often learn better when I'm puzzling out the best way to do something myself, and leapt into it.
The problem is, I often learn better that way, but I also often learn the hard way. I stumbled through a lot of 'wrong' ways of doing things in SDL, wasting a good deal of time hunting down the correct function (out of numerous functions available in the API) for getting a particular result. In the middle of all of that, it occurred to me that there is a knowledge level for which tutorials are never written. Tutorials are often written in a way that is so basic that I have to skip past large portions and carefully pluck out that bits that are relevant to me. On the other hand, APIs are often dense, and each function definition assumes you know the platform generally, so getting deep knowledge out of it presents a bootstrapping problem. Libraries almost never have a 'using our library for the first time' guide, or a best practices document, or a list of caveats that newcomers to that particular library may need to know about. So you get your choice between a too-low-level API for a huge, unfamiliar library, or a guide that tells you over and over that you need to call SDL_FreeSurface() when you're done with a surface.
Instead, I'd like a guide that goes something like this:
Before you start drawing anything with SDL, you need to include the headers and call SDL_Init. In Linux, the headers are typically at /usr/include/SDL/SDL.h, but for portability it is recommended that you include the SDL header directory directly with '-I /usr/include/SDL' and use "#include <sdl.h>". A common init call would look like this:
[sourcecode language="cpp" gutter="false" wraplines="false"]
if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
// error handling code goes here (return false
// if calling from an object or function,
// perhaps, or possibly exit())
}
[/sourcecode]
Typically, drawing graphics in SDL starts by creating a double-buffered, hardware-accelerated SDL_Surface object with SDL_SetVideoMode, like so:
[sourcecode language="cpp" gutter="false" wraplines="false"]
SDL_Surface* window;
window = SetVideoMode(1024, 768, 32,
SDL_HWSURFACE | SDL_DOUBLEBUF);
[/sourcecode]
You can think of this as your main window (or root window, if you are comfortable with that terminology). You can draw other SDL Surfaces onto it (a process known as 'blitting' for some reason), and you can render the current contents of the (double-buffered) window with:
[sourcecode language="cpp" gutter="false" wraplines="false"]
SDL_Flip(window);
[/sourcecode]
'Flip' may not make much sense until you understand the metaphor in use for a double-buffered surface. Think of a flat, thin surface with 2 sides - one side is visible (facing the user). When you draw onto the surface, all of your images are drawn on the invisible side - the side facing 'away' from the user. When you 'flip' this surface, the part that they were looking at is hidden, and the part you were drawing on is exposed. This lets you do your graphics updates 'all at once' instead of having the user see each object as you draw it.
So, to refresh the screen once per second, you might do something like this:
[sourcecode language="cpp" gutter="false" wraplines="false"]
// assuming you have already initialized
// a surface called 'window'
while (true)
{
// draw some stuff on window here
SDL_Flip(window);
sleep(1);
}
[/sourcecode]
There are several ways to draw things on surfaces - you can blit another surface on with SDL_BlitSurface(), or use SDL_FillRect() to draw a rectangle (this is SDL's primary primitive shape, so procedurally generating curves becomes an interesting problem).
Of course, in practice you would probably want to do other things than just continuously render images - you need to respond to user input, iterate any data that needs to periodically change, etc. You might do those things in separate threads, but it is often simpler to check for them in a loop like this one. In fact, most graphics-based programs that respond to user input do things like this.
Oh, one other thing. When you're done with a surface, you always want to clean it up with:
[sourcecode language="cpp" gutter="false" wraplines="false"]
SDL_FreeSurface(window);
[/sourcecode]
Next time, we'll look at some particular problems I encountered, and how I solved them. Then we'll look at how I solved them correctly, to demonstrate that there are usually many ways to solve a problem. This will also let us highlight the difference between good and bad code. And we might talk some more about the joys of using the SDL API.
\ No newline at end of file
diff --git a/_posts/technology/2011-07-06-project-treewars-how-to-write-bad-code.html b/_posts/technology/2011-07-06-project-treewars-how-to-write-bad-code.html
new file mode 100644
index 0000000..11429cd
--- /dev/null
+++ b/_posts/technology/2011-07-06-project-treewars-how-to-write-bad-code.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: 'Project TreeWars: How to write bad code'
+date: '2011-07-06T08:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Programming
+- C++
+- TreeWars
+- geometry
+- math
+modified_time: '2013-10-22T11:19:51.435-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-3638552600723441589
+blogger_orig_url: http://www.stringofbits.net/2011/07/project-treewars-how-to-write-bad-code.html
+---
+
+The TreeWars project is a week and a half old (at the time of this writing). It's come a long way; in its current form, it actually looks pretty neat:
There are now stats, and hit points, and the basic gameplay mechanic is in place. I've also laid the groundwork for some more complex gameplay, as well. Of course, I haven't talked about gameplay all that much yet - we'll get to that at some point, I'm sure. But what I want to talk about right now is how to write bad code.
Bad code happens. Sometimes, when you're writing code, you will hit a stumbling block. Encounter a problem where the solution doesn't jump immediately to mind. And often, you'll look back on it later and say "what the hell was I thinking?" Well, here is an instructive example of that.
This blunder is actually pretty embarrassing; I really did know better, but that knowledge escaped me at the time. As you've probably noticed from the screenshot above, my program deals with drawing circles (called either 'nodes' or 'vertices'). If a user clicks to add a new node, my code has to check and see whether it will overlap with an existing node.
So, I had a function that answers the question "is there a node close enough to the point (x,y) that a new node there will overlap?" If you're good at geometry, you probably already see the right way to do it. But I bet you can't spot the very very wrong way!
My solution (and I stress that this is a really, really bad idea) was to create a 'bounding box' around each existing node, and a bounding box around the area that the new node would occupy, then do some complex logic to see whether the bounding boxes overlap. It looked like this (and if you're not a programmer, just note the general size and complexity of this code):
[sourcecode language="cpp" gutter="false" wraplines="false"]
bool Graph::vertex_present(int x, int y, int size)
{
int delta = size / 2;
int x_min = x - delta;
int x_max = x + delta;
int y_min = y - delta;
int y_max = y + delta;
for (list<Vertex>::iterator cursor = vertices.begin();
cursor != vertices.end(); cursor++)
{
Vertex v = *(*cursor);
if (((x_min >= v.x_min && x_min <= v.x_max) &&
((y_min >= v.y_min && y_min <= v.y_max) ||
(y_max >= v.y_min && y_max <= v.y_max))) ||
((x_max >= v.x_min && x_max <= v.x_max) &&
((y_min >= v.y_min && y_min <= v.y_max) ||
(y_max >= v.y_min && y_max <= v.y_max))))
{
return true;
}
}
return false;
}
[/sourcecode]
It's ugly, and hard to read, and I knew it felt like a hack when I wrote it. But at that moment, nothing better was coming to me. Now, for those of you who don't enjoy recreational geometry, here's the right way to do it: you know that the existing node is at (x1,y1) and that it has a radius of r1. The point you're checking is at (x2,y2) and the new node would have a radius of r2. So, all you do is get the distance between the two points (basic geometry, I could have googled "the distance formula" and about 8 billion websites would have popped up to tell me how much I fail here), and then compare that to r1 + r2. Like so:
[sourcecode language="cpp" gutter="false" wraplines="false"]
bool vertex_present(int x, int y, int r)
{
for (list<Vertex*>::iterator cursor = vertices.begin();
cursor != vertices.end(); cursor++)
{
float dy = y - v->y;
float dx = x - v->x;
if (sqrt(dy*dy + dx*dx) <= v->;r) return true;
}
return false;
}
[/sourcecode]
See? much simpler.
Now, why did it take me 24 hours to figure that out? Well, I wrote the original code when I was pretty tired, and the nature of programming is that once you write a function and it works, it is easy to forget about it. After I needed to calculate distance somewhere else, though, an alarm went off in my head. "Hey," said the alarm, "You could have used that over in vertex_present()! What is wrong with you?"
Well, alarm, look. Sometimes I just can't brain as well as other times. But hey, at least it ended up being nice and pretty in the end, so thanks for that! Actually, vertex_present() doesn't even exist in my code any more; it was refactored into some other function, because I only actually used it in a single spot.
Luckily, I can go back in time and show you how awful my code used to be through the magic of git, which I use to track all of my programming projects. It lets me periodically 'commit' the changes I've made to my code, and keeps track of everything I've done. I can then 'checkout' any commit, instantly reverting my code to an old state, and then 'checkout' the latest code again when I'm done. It can do a lot more than that, too. If you write code, I highly recommend using git or another version control system.
So, that's all for today. Next time, we might even talk a little bit about gameplay! With a little luck, the game will be sophisticated enough by then that there will be something to talk about.
\ No newline at end of file
diff --git a/_posts/technology/2011-07-13-project-treewars-road-to-opengl.html b/_posts/technology/2011-07-13-project-treewars-road-to-opengl.html
new file mode 100644
index 0000000..f3812d7
--- /dev/null
+++ b/_posts/technology/2011-07-13-project-treewars-road-to-opengl.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Project TreeWars: the road to OpenGL'
+date: '2011-07-13T08:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Programming
+- OpenGL
+- C++
+- TreeWars
+modified_time: '2013-10-22T11:19:51.444-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-3584809911798792164
+blogger_orig_url: http://www.stringofbits.net/2011/07/project-treewars-road-to-opengl.html
+---
+
+Over on Shamus Young's blog, he recently said this when talking about a programming project of his:
One of the things I like about this project is that it is uncluttered by goofy, awkwardly-designed libraries.
Shamus is working on a procedurally-generated 3D world using OpenGL. Now, I know what he means. He is trying to avoid relying on things like graphics and physics engines, or 3D model importers, or any of a number of other tools that often have asinine and byzantine APIs. I am, in fact, trying to do the same thing in my project (in my case, it is because I am using this project to learn graphics programming).
However, I have to object. libgl is a goofy, awkwardly-designed library. Of course, the fact that it that is has to be, in order to do what it does. However, code like this:
[sourcecode language="cpp" gutter="false"]
glBegin(GL_QUADS);
glColor3f(r1, g1, b1);
glVertex2i(x1, y1);
glColor3f(r_mid, g_mid, b_mid);
glVertex2i(x2, x1);
glColor3f(r2, g2, b2);
glVertex2i(x2, y2);
glColor3f(r_mid, g_mid, b_mid);
glVertex2i(x1, y2);
glEnd();
[/sourcecode]
is pretty goofy. Anyone with experience writing GUI code using a Windowing toolkit would be appalled to learn that this is how you draw a rectangle. A more reasonable API would let you get a 'rectangle' object, then define things like its x/y position, its width and height, colour, etc. Then, you might make a call like:
[sourcecode language="cpp" gutter="false"]
window->add(rectangle);
window->update(); // to draw the window
[/sourcecode]
But in OpenGL, we have to tell OpenGL that we want to start drawing a polygon, then tell it the colour and position of each vertex on the polygon, and then tell it when we're done, all with different function calls. And gods help you if you get them out of order:
What happened here? I told OpenGL to draw a rectangle, and I gave it the top-left vertex first, then the top-right, then the bottom-left, then the bottom-right. This is a pretty obvious way to think about listing the points on a rectangle, right?
Except that OpenGL is designed to actually create the polygon's bounding box based on the order you list the vertices, like so:
So, OpenGL did exactly what I told it to do; we just weren't speaking exactly the same language. OpenGL requires that I list the vertices in clockwise (or counter-clockwise) order around the edge of the polygon.
OpenGL is an iceberg, though, and this is just the tip. There are Display Lists, Vertex Buffer Objects, shaders, 3D objects, normal vectors, projection matrices - it is a very complex beast, and all of that complexity is exposed directly to the user. So why does Shamus knock on all those other libraries, but give OpenGL a pass?
The answer is that OpenGL *has* to be this complicated. The reason? OpenGL lives on the graphics card. This is something that it is easy to miss the ramifications of, but they're huge - the OpenGL function calls are talking directly to analogous function calls hard-coded in a chip on a piece of hardware. When you call glVertex2i(), you put data about a vertex directly into your video card's memory. OpenGL is fast; it's what lets us have advanced graphical environments that change and that we can interact with, rendering in realtime. So, subsequently, OpenGL's end-user libraries are complicated; they have to be to let you take full advantage of what OpenGL is designed to do.
That doesn't make it any less goofy, though.
\ No newline at end of file
diff --git a/_posts/technology/2011-07-17-project-treewars-when-is-opengl-not.html b/_posts/technology/2011-07-17-project-treewars-when-is-opengl-not.html
new file mode 100644
index 0000000..8af3212
--- /dev/null
+++ b/_posts/technology/2011-07-17-project-treewars-when-is-opengl-not.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: 'Project TreeWars: When is an OpenGL not an OpenGL?'
+date: '2011-07-17T16:30:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Programming
+- OpenGL
+- C++
+- TreeWars
+modified_time: '2013-10-22T11:19:51.459-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-3674210191583093441
+blogger_orig_url: http://www.stringofbits.net/2011/07/project-treewars-when-is-opengl-not.html
+---
+
+So, I was playing around with the 'sparks' feature on Google+. Since I've been working with OpenGL lately, I made a spark for it. On that spark, I came across this thread, which gave me this advice:
A general rule of thumb is that if a tutorial contains calls to glBegin, glEnd and/or any of the glTexEnv functions then it's old and you should avoid it.
Now, I wouldn't generally trust a single person on the Internet with nothing to recommend them, but I'm seeing this advice repeated in several places now that I know to look.
So, all the tutorials I've been working with are for very, very old versions of the OpenGL spec, and the functions I'm calling are pretty deprecated; I've been learning obsolete tools. To that end, I recommend anyone following this series not use my last post as a jumping-off point for working with OpenGL, or at least know what you're getting into. Those functions and methods still work, but they've been deprecated and eventually graphics cards will probably stop shipping with support for them.
Instead, I found some more modern tutorials and documentation. Luckily, I'm not terribly invested in the way I'm doing things yet; I have maybe 100 lines of OpenGL-related code in my project, and the vast majority of it (that is, all the stuff that isn't needed for initialization and gamestate changes) is factored into a single file. It should be pretty straightforward to replace it with something better, once I've got a handle on the "new way" of doing things.
This exposes a deeper issue, too. There are several different versions of OpenGL: best denoted by their major version numbers (1-4). The most current iterations of each are OpenGL 1.5, 2.1, 3.3, and 4.0. There seem to be tutorials available for all of them. Now, there's a tradeoff to using one version of OpenGL over the other; newer versions will have less support from other libraries (Linux doesn't even seem to have OpenGL 3 headers yet). On the other hand, older versions will eventually be deprecated and phased out. Newer versions can also do things older versions couldn't, although right now I'd be happy just learning the basics.
So, after looking around on the web for a while, I settled on learning OpenGL 2.1 (and the corresponding GLSL 1.2, which we'll talk about in a moment), while avoiding all of the functions in OpenGL 2 that are deprecated in OpenGL 3. This is the approach that Joe takes in this tutorial series, so what I'm learning will line up well with at least one tutorial on the web. It is also nice because this version is well supported in Linux, while OpenGL 3 support (especially in SDL) is still under development.
Now, there is a huge change between OpenGL 1 and 2. A change so massive that the difference between 1 and 2 dwarfs the differences between 2 and later versions. This change is the move from having a "fixed-function graphics pipeline" to using GLSL, the OpenGL Shader Language. So, what does this mean? Well, in OpenGL 1.5, you tell the graphics card what you want to draw, and some parameters about how you want to draw it, but the details of that process - the functions on the graphics card that handles doing the actual drawing - are hard-coded and unchangeable. With shaders, you get to program those functions yourself, and then your application can send them to the graphics card, compile them, and use them. GLSL is the language the shaders are written in - it looks a lot like C, but it has neat built-in functions for matrix and vector math, and a ton of built-in variables that I haven't quite worked out yet.
So, I rewrote my rendering engine to use shaders. I followed the tutorial closely, modifying it to fit into my object-oriented C++ code and to fit all the other code I had already painstakingly written. I refactored large sections of my program. This took several hours, during which I couldn't even compile the program all at once, because so many changes were being made. When I finally got it to compile and run without immediately crashing, this is what I had produced:
I appear to be doing it wrong, as they say around these parts. I have simplified my program so that all it should be doing is displaying a single texture on a simple rectangle. I have no idea what's wrong here. Is my coordinate system somehow incompatible with my shaders? I don't think so - I reworked the coordinates to match the tutorial I've been using. Are my shaders for drawing a texture simply wrong? Maybe, but there's not a great way that I can find to get debugging info out of the shaders. Is SDL 1.2 not compatible with GLSL? That's a decent possibility; testing it will take some time, though.
This is the biggest setback I've encountered so far, though, so that's a pretty good sign. Hopefully, by my next post, we'll have something better than a black screen to work with.
\ No newline at end of file
diff --git a/_posts/technology/2011-07-24-project-treewars-how-anna-got-her-title.html b/_posts/technology/2011-07-24-project-treewars-how-anna-got-her-title.html
new file mode 100644
index 0000000..30a50ff
--- /dev/null
+++ b/_posts/technology/2011-07-24-project-treewars-how-anna-got-her-title.html
@@ -0,0 +1,17 @@
+---
+layout: post
+title: 'Project TreeWars: How Anna got her Title Screen back'
+date: '2011-07-24T08:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Programming
+- OpenGL
+- C++
+- TreeWars
+- GLSL
+modified_time: '2013-10-22T11:19:51.474-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-5288894543073667200
+blogger_orig_url: http://www.stringofbits.net/2011/07/project-treewars-how-anna-got-her-title.html
+---
+
+In my last post, I re-implemented all of my rendering code to take advantage of Shaders. After doing this, nothing rendered. Despite the fact that I was following a tutorial, more or less. I have been modifying it to fit my project, which has a lot of code around the rendering code already and is in C++ instead of C, and also modifying it to do something that will actually be useful for me down the line.
But, at any rate, I've checked every function call I make against the ones used in the tutorial. They all match. Everything is exactly the sa...
Oh. Wait.
One of the things you create when using shaders is an index buffer (also called an element buffer); a list of what order the vertices of your polygon should be drawn in. From the tutorial:
[sourcecode lang="cpp" gutter="false"]
static const GLushort g_element_buffer_data[] = { 0, 1, 2, 3 };
[/sourcecode]
And the equivalent line from my code:
[sourcecode lang="cpp" gutter="false"]
GLfloat Renderer::rect_elements[] = {0, 1, 2, 3};
[/sourcecode]
I got so used to things being GLfloat type that I made my index buffer floats, even though that doesn't make any sense (you can't have vertex number 0.5, after all). Not only does it not make sense, OpenGL requires that the element buffer be composed of integers. Even better, if your element buffer is of the wrong type, OpenGL fails silently: no error message, no crash. The rendering simply doesn't happen.
So, a couple hours of debugging, down to one simple line of code. I really wish GLSL had a way to report meaningful errors back to the program using it. At any rate, after I fix the line:
I'm back to where I was several days ago. But this time, I'm using shaders, which are both less deprecated and more flexible; I've set up a framework that will allow me to do more interesting things later on.
Now, on to the next challenge: rendering text. In SDL this was fairly easy; the SDL_ttf library made it pretty simple to render text to the screen. In OpenGL, however, rendering text is a bit trickier. There are a few libraries out there that do it (FTGL seemingly the best option), but they all use the fixed-pipeline functions. I'd even be willing to settle for that, and worry about ripping the code out later and putting in something more shader-friendly, except switching back and forth between Shaders and the fixed pipeline seems to be a bit tricky.
So, my options are:
- Figure out how to switch 'out' of the Shading pipeline properly and render text with FTGL, or
- Use freetype2 directly and implement my own font loading, render the text to a Framebuffer Object, then blit that to the backbuffer (the buffer that represents the next visual frame).
The first option might be easier in the short term, but the latter sounds more robust, all things considered. The problem is that stopping to get font rendering working without any deprecated functions could take quite a while (I'm not even sure on a good estimate for the time). So, I hack FTGL into working and move on.
Now, I'm ready to get things back to the way they looked before I decided GLSL was something that needed to happen. I just need to figure out the best way to draw a circle with GLSL...
\ No newline at end of file
diff --git a/_posts/technology/2011-09-07-more-thoughts-on-escapist.html b/_posts/technology/2011-09-07-more-thoughts-on-escapist.html
new file mode 100644
index 0000000..0d2f5ad
--- /dev/null
+++ b/_posts/technology/2011-09-07-more-thoughts-on-escapist.html
@@ -0,0 +1,14 @@
+---
+layout: post
+title: More thoughts on the Escapist
+date: '2011-09-07T14:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Extra Credits
+- The Escapist
+modified_time: '2013-10-22T11:19:51.549-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-586694393592148985
+blogger_orig_url: http://www.stringofbits.net/2011/09/more-thoughts-on-escapist.html
+---
+
+I've talked about the Escapist before. Specifically, when I mentioned I would no longer be visiting their website. My reasons then were essentially practical - they had simply made viewing content more annoying than it was worth.
Recent events, however, are making me re-evaluate that post. In that post, I didn't really analyze why the Escapist had such awful ads. But now I think it's worth doing. The most obvious explanation, which was more or less implicit in my earlier angry rant, is that the annoying, screen-filling, content-swamping ads didn't show up because of incompetent programming or oversight, but rather through a complete disregard for the consumer.
The Escapist (well, Themis Media) is a company. Companies exist to make money. Basic economics. Themis media makes money by selling advertisements; the more advertisements they can get to viewers, the more their advertisements will be worth to advertisers, the more advertisements they can sell, and the more money they make. Again, nothing ground-breaking here, just basic mathematics.
There are two basic ways to get these ads to the eyes of more viewers (and thus up their potential value, increasing profits): show more or larger ads per page, or attract more viewers (to create more page views). As a company that wants to Maximize Profits™, ideally they want to do a whole lot of both of these things.
The problem is that these two goals are counter to each other. The more (or more obvious) ads you display, the more people will start to say 'too many ads, see you later'. Like I did in my previous post on the subject. The trick, and the thing that most websites eventually figure out, is that there is an equilibrium - a quantity and size of advertisements that will not produce a significant hit on the number of viewers you attract.
Now, the way to actually attract more viewers is to have content that people want to view. And the Escapist has been damn good at this. They have a great deal of very good content, much of which is very popular. They have attracted a lot of grade A talent to work for them. And that may be the problem - they've got such good content, their equilibrium point has tipped so far that they can pull off obnoxious full-screen ads without driving away a significant number of users.
However, at some point, the volume of ads you display becomes anti-consumer. There's a point where you are failing your customers, where suggesting that what you are asking is a 'reasonable price to pay' for the content is farcical. Many modern magazines have fallen prey to this: I flipped through a fashion magazine recently, for instance, and counted 12 pages of ads before reaching the table of contents. That's patently absurd, and what it shows is that the company that produces the product cares more about money than they do about the consumer's experience.
But all of that was an overly long prelude to what I really want to talk about: Themis is now being accused of being anti-creator as well. Extra Credits, one of the Escapist's video features, has left the Escapist, with some very troubling accusations about Themis' payment practices. Basically, the Extra Credits crew says they haven't been paid for a long time, and that Themis is claiming that Extra Credits owes *them* money from a fund raiser that they ran to keep the show alive (and to finance surgery for their artist).
Now, in fairness, Themis has some counter-claims, which are enumerated at the second link above. However, given Themis' anti-consumer ad practices, I don't have much difficulty believing that they might be willing to cheat their creative people as well. Of course, this doesn't constitute proof of wrongdoing on their part, but it is certainly useful to observe that they already have a pattern of preferring money to delivering a good experience.
Of course, the upshot of all this, for us consumers, is that Extra Credits is no longer encumbered by the horrible pit of a website that is The Escapist. So I watched the most recent episode. Based on this one episode, it seems like a pretty good show: smart and engaging, with enough humour scattered throughout to keep it from feeling dry. They point out a lot of things that may be obvious to (some) people in the industry, but that many individual gamers are unlikely to have ever had reason to consider.
I'll probably watch it regularly now that I don't have to risk a stress headache just to watch it.
\ No newline at end of file
diff --git a/_posts/technology/2011-09-15-ea-origin-or-case-study-in-bad-consumer.html b/_posts/technology/2011-09-15-ea-origin-or-case-study-in-bad-consumer.html
new file mode 100644
index 0000000..a283b3c
--- /dev/null
+++ b/_posts/technology/2011-09-15-ea-origin-or-case-study-in-bad-consumer.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: 'EA Origin, or: a Case Study in bad consumer experience'
+date: '2011-09-15T15:00:00.000-04:00'
+author: Anna Wiggins
+tags:
+- The Sims
+- consumer advocacy
+- ea origin
+- Electronic Arts
+- angry rant
+- Technology
+modified_time: '2013-10-22T11:19:51.502-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-8613281282906755585
+blogger_orig_url: http://www.stringofbits.net/2011/09/ea-origin-or-case-study-in-bad-consumer.html
+---
+
+I don't play The Sims. The premise holds a certain amount of appeal for me, and the franchise's quirky sense of humour and artistic style agree with my aesthetic sense, but something about the gameplay - the ebb and flow of action and the effort/reward cycle the game creates - doesn't quite gel into an experience that I enjoy.
But my wife, she loves The Sims. She has sunk at least as many hours into The Sims 3 as I have in Starcraft 2 and Civ 5 combined. She owns every major expansion that's been released, as well as The Sims Medieval and its expansion.
So when her Sims 3 update failed halfway through, leaving the game in an unlaunchable state, she was understandably distressed. The game plus all of its expansions requires a lot of effort to reinstall; we'd be looking at several hours of installing, with user prompts spaced just far enough apart to make doing anything else impractical.
So, we researched the issue and discovered that the EA Download Manager needed to be updated before The Sims 3 could be updated. Now, EA doesn't make it terribly clear that the Download Manager is a separate application; it is usually launched from The Sims launcher, and is skinned to look like any other menu in The Sims when this is done. So, we found and updated the EA Download Manager.
And it turned into EA Origin.
Again, nothing told us this was going to happen, it just popped up an EA Origin installer, without telling us what Origin was, why we needed it, or why it started installing it when we were trying to update EA Download Manager.
Some further googling revealed that EA Origin is the new replacement for the Download Manager, and that it (gods help us) is "our new digital playground". Apparently it is EA's attempt at Yet Another Online Distribution System. With social features! Look, EA, I hate to break it to you, but Valve already one that battle conclusively. We need another Games For Windows Live about as much as we need arsenic.
The fact that nothing told us, at any point during this process, what EA Origin was or why it was being installed is a huge oversight. The user shouldn't have to use Google to figure out what the product you're giving them is. This is a terribly sloppy user experience.
But it's still not insurmountable. So, rolling our eyes, we proceed to install it, and then we go back and launch The Sims 3.
It launches EA Origin instead.
Why has this happened? Perhaps Origin serves as the new launcher? Okay, that's fine - another crappy application sitting in the system tray, but we can at least live with this. Let's just launch The Sims 3 through Origin.
What's worse, EA Origin wants us to create a profile before it will let us do anything. This is obnoxious - yesterday, The Sims 3 would just launch and let us be happy. Plus, we already have a login on The Sims website, which is where you go to purchase downloadable content for the game. So this is Yet Another Login to Remember, and that's annoying. With absolutely no warning, EA has added a ton of requirements that prevent us from playing a game that has worked fine on its own. Still, whatever. Let's make this profile, get this over with.
Now we can just launch The Sims 3 from here, right?
Click. Click. Nothing happens.
Did we do something wrong? Is our profile not acceptable? Is EA just not that into us any more? We close origin, launch it again, try The Sims again. Still nothing. After a few more minutes of troubleshooting, we give it the old Windows solution - we reboot the machine.
When we get back to Windows and launch The Sims again, it launches perfectly, without seeming to care about EA Origin. It's like nothing ever happened, and everything works just fine. The old Download Manager interface is even still there, and allows us to update the system. Apparently it just wanted Origin for authentication, or something?
But even though this story has a happy ending, there are still troubling implications here. EA did a very poor job of informing the user about what was happening here, leaving us to guess and google and hope that things would end up working. This was a very stress-inducing experience, which is not what you want when you sit down to play a game.
Also, the fact that they retroactively tied a single-player game into an online distribution platform seems both unnecessary and potentially problematic. When we bought the game, we did not do so with the understanding that an Internet connection was necessary for authentication or activation, for instance. We didn't agree to have the game tied in to an account that may prevent us from updating if it is ever suspended or deleted for some reason (and these things happen; no system is free of errors). While we don't have any reason to suspect that the game would become *unplayable* in the absence of Origin, this is still troubling.
In a post like this, I would, at this point, customarily make a plea to the company in question to be better, to stop disappointing its users, to be more transparent and try to foster trust. But I'm not going to bother. Because EA has proven themselves time and again to be unwilling to hear those pleas. Instead, I'm going to close with a question.
EA, what happened to you?
\ No newline at end of file
diff --git a/_posts/technology/2011-10-14-dmr.html b/_posts/technology/2011-10-14-dmr.html
new file mode 100644
index 0000000..e04449d
--- /dev/null
+++ b/_posts/technology/2011-10-14-dmr.html
@@ -0,0 +1,15 @@
+---
+layout: post
+title: dmr
+date: '2011-10-14T08:18:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Programming
+- dmr
+- C++
+modified_time: '2013-10-22T11:19:51.746-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-502111200679400757
+blogger_orig_url: http://www.stringofbits.net/2011/10/dmr.html
+---
+
+K&R is a book that has had a profound influence on my life. And I'm not just talking about the influence of it and the C language on computing in general; the direct course of my life has hinged on the language.
I didn't read K&R while I was in college (I did read it after, and it's a great reference. Anyone who wants to understand C better should have a copy). C was not even the first programming language I learned: that was C++. But the two are intimately related, and most Computer Science programs that teach C++ start with programs that are very C-like (and depending on how you do I/O, may be indistinguishable from C). The idioms and quirks of C are synonymous with the very idea of programming to me. And I owe many of those idioms and quirks to Dennis Ritchie.
C and C++ took my kindled interest in programming and stoked it into a towering inferno of inspiration. I don't think I would have been nearly as charmed if my introduction to programming had been Java, or even Python or Perl, which now make up the majority of the programming I do (and perl certainly owes much of its syntax to the C family as well). C has a certain low-level beauty to it. It's more elegant than assembly, and is minimalist and clean in a way few other languages are.
30 years ago, Dennis Ritchie said hello to the world. And now the world says goodbye.
\ No newline at end of file
diff --git a/_posts/technology/2011-11-12-desura-what-steam-should-have-been.html b/_posts/technology/2011-11-12-desura-what-steam-should-have-been.html
new file mode 100644
index 0000000..703098f
--- /dev/null
+++ b/_posts/technology/2011-11-12-desura-what-steam-should-have-been.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: Desura - what Steam should have been
+date: '2011-11-12T09:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- linux
+- Desura
+- Gaming
+- Amnesia
+modified_time: '2013-10-22T11:19:51.766-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-6872361963031367113
+blogger_orig_url: http://www.stringofbits.net/2011/11/desura-what-steam-should-have-been.html
+---
+
+I like Steam. In a gaming world of ubiquitous DRM, Steam strikes a nice balance between functionality and nuisance. That is, Steam makes it dead simple to install and launch games, and the trade-off is that it does some fairly unobtrusive DRM. This is a good model, although I can think of several ways in which it could provide a better end-user experience.
At the very top of my personal list of improvements to Steam would be "native Linux support". And I know, I know, I've heard all of the conventional wisdom: There isn't a big enough market to justify porting it. Even if there was, there aren't enough Linux-native games to make the service very useful. Everybody knows Windows is the OS for gaming.
But sitting here staring down that conventional wisdom is Desura. I've known that Desura existed for a while - the Frozenbyte Bundle and the Humble Bundle 3 both had options to acquire 'Desura keys', so it was obviously a Steam competitor. Until recently, though, I had just dismissed the product - obviously, I thought, any Steam competitor is going to lag far behind in available games and basic feature set, given Steam's popularity. Faulty logic, but there it is.
So when a friend told me that Desura works in Linux, I was pretty stunned. I had gotten used to not being the 'target audience' for game companies. And now, a few hours later, I've got Desura installed, my humble bundle keys redeemed, and I've purchased Amnesia: The Dark Descent (which was on sale at the time, and I've been meaning to buy for some time anyway).
Desura's (native Linux!) install is smooth and painless, and its (native Linux!) interface is pretty nice. It has some rough edges, to be fair: most of what it does is load websites that are skinned to feel like part of the interface (much like Steam does), and some of those pages are still obviously works in progress. On the other hand, everything works quickly and smoothly. The main options menu is accessed by clicking the Desura logo, which doesn't look obviously like a button. So that's a design flaw, but it didn't take too long to work out. Redeeming gift keys is more streamlined than in Steam (once you find where to do it!).
Now, Desura certainly isn't perfect, and it lacks very useful features that Steam has had for some time. One problem I noticed is that it lacks Steam's resume-after-closing feature; I started to install Amnesia, absent-mindedly closed the client later, and it didn't auto-resume after I opened Desura again. Desura doesn't track how much time you've sunk into a given game. It also doesn't have any way to access your save games from multiple locations (a la Steam's cloud sync), and while their developer info mentions achievements, I haven't seen any games implement Desura-specific achievements, nor would I even know where to look to find them.
Another feature that both Steam and Desura need are tags, or some sort of organizational system for your games. Right now all Desura has are 'all games' and 'favorite games'. Steam has a categories system, but it doesn't always save that information across accounts, and you can't tag games with multiple categories. A proper tagging-based sorting system would be great.
So, Desura has a spartan interface, but it's also still very young. And more importantly, it runs flawlessly in Linux, which makes it very appealing to me. If you game in Linux at all, check out Desura. It's already a great service, and it looks like it's only going to get better.
\ No newline at end of file
diff --git a/_posts/technology/2011-12-18-project-treewars-going-in-circles.html b/_posts/technology/2011-12-18-project-treewars-going-in-circles.html
new file mode 100644
index 0000000..3b3c6b0
--- /dev/null
+++ b/_posts/technology/2011-12-18-project-treewars-going-in-circles.html
@@ -0,0 +1,18 @@
+---
+layout: post
+title: 'Project Treewars: Going in Circles'
+date: '2011-12-18T09:00:00.000-05:00'
+author: Anna Wiggins
+tags:
+- Programming
+- OpenGL
+- C++
+- TreeWars
+- circles
+- GLSL
+modified_time: '2013-10-22T11:19:51.866-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-1786093955840700947
+blogger_orig_url: http://www.stringofbits.net/2011/12/project-treewars-going-in-circles.html
+---
+
+It's been quite a while since I actually worked on TreeWars. Various things have distracted me, including some other programming projects. But I actually made some progress way back in July, before I shelved the project temporarily. So, let's talk about circles.
OpenGL gives us a few different ways to draw things, which I've talked about before. When we were using the fixed-pipeline functions (glBegin(), glEnd(), etc), I could draw a circle the same way I drew it in SDL: draw a bunch of same-sized rectangles, shifting the coordinates around a central point so that they overlap. Do enough of them (using small enough increments), and it makes a very smooth-looking circle. I never did this in OpenGL, but the SDL code looked like this:
[sourcecode language="cpp" gutter="false"]
void DrawUtils::draw_circle_filled(SDL_Surface* dest, Sint16 int_x, Sint16 int_y, Uint16 int_r, Uint32 colour)
{
float x = static_cast<float> (int_x);
float y = static_cast<float> (int_y);
float r = static_cast<float> (int_r);
SDL_Rect pen;
float i;
for (i=0; i < 6.28318531; i += 0.0034906585)
{
pen.x = static_cast<int> (x + cos(i) * r);
pen.y = static_cast<int> (y + sin(i) * r);
int w = static_cast<int> (x - pen.x);
int h = static_cast<int> (y - pen.y);
if (w == 0) pen.w = 1;
else if (w < 0)
{
pen.x = x;
pen.w = abs(w);
}
else pen.w = w;
if (h == 0) pen.h = 1;
else if (h < 0)
{
pen.y = y;
pen.h = abs(h);
}
else pen.h = h;
if (pen.x >= dest->clip_rect.x &&
pen.y >= dest->clip_rect.y &&
pen.x + pen.w <= dest->clip_rect.w &&
pen.y + pen.h <= dest->clip_rect.h)
SDL_FillRect(dest, &pen,
SDL_MapRGBA(dest->format,
(colour >> 16) & 0xff,
(colour >> 8) & 0xff,
colour & 0xff, 1));
}
}
[/sourcecode]
I was pretty proud of this code when I wrote it. The magic is at the top of the for
loop: from 0 to 2π, it increments a tiny bit and finds a new rectangle that has one vertex at the center of the circle, and the opposing vertex at some point along the circle. It does this 1800 times per circle, which isn't terribly efficient, but it got the job done.
With OpenGL and the shader pipeline, we *could* still do that. We could do the following in a loop, 1800 times:
[sourcecode lang="cpp" gutter="false"]
GLushort Quad::rect_elements[] = {0, 1, 2, 3};
GLfloat buffer_data[] = {x1f, y1f, x2f, y1f, x1f, y2f, x2f, y2f};
GLuint vertex_buffer;
glGenBuffers(1, &vertex_buffer);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(buffer_data), buffer_data, GL_STATIC_DRAW);
GLuint element_buffer;
glGenBuffers(1, &element_buffer);
glBindBuffer(GL_ELEMENT_BUFFER, element_buffer);
glBufferData(GL_ELEMENT_BUFFER, sizeof(rect_elements), rect_elements, GL_STATIC_DRAW);
glUseProgram(program); // the shader program, created earlier
glUniform4f(shader->uniforms.colour,
GLUtils::convert_colour((colour >> 16) & 0xff),
GLUtils::convert_colour((colour >> 8) & 0xff),
GLUtils::convert_colour(colour & 0xff), 1.0);
// Put the vertices in an attribute
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glVertexAttribPointer(shader->attributes.position, 2, GL_FLOAT,
GL_FALSE, sizeof(GLfloat)*2, (void*)0);
glEnableVertexAttribArray(shader->attributes.position);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, element_buffer);
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, (void*)0);
// Clean up the GL state machine
glDisableVertexAttribArray(shader->attributes.position);
[/sourcecode]
Now, that's a lot of fairly hairy OpenGL code. In my actual program, that's abstracted out into several function calls within several different classes - a Quad object inherits from Drawable, and uses a GLUtils library to create the vertex and element buffers. The actual render code is in Drawable, but it calls a subclassable sub_render function that helps it know how to draw a rectangle specifically.
But we don't want to call that code 1800 times for a single circle - where it was a bit inefficient in SDL, here we're making 1800 separate calls to the OpenGL hardware system (well, actually more as we copy data into GPU buffers and such, but 1800 glDrawElements()
calls). That's 1800 different writes into GPU memory. It's ugly. It'd be a horrible idea.
Luckily, we can draw a circle with a *single* call to glDrawElements()
. The secret is in 'GL_TRIANGLE_STRIP'. OpenGL defines several different methods it can use to interpret the vertex data we send to it. In 'Triangle Strip', it uses the first three vertexes to draw a triangle. The next vertex you add creates a triangle from it and the previous two vertexes (the last two of the previous triangle). If you 6 vertices in your vertex buffer, and the element buffer was just 0-5, it might look something like this:
We could use THAT to draw a circle too, but it would be cumbersome. Instead, we'll use GL_TRIANGLE_FAN. Like GL_TRIANGLE_STRIP, the first three vertices are used to make a triangle. Subsequent vertices, however, use the previous vertex and the first vertex to form the next triangle. In effect, this gives you a 'center point' and lets you draw triangles outward from it. Its drawing pattern looks like this:
This lets us do some really elegant, simple drawing of curved shapes.
Of course, we still need some trigonometry here:
[sourcecode lang="cpp" gutter="false"]
for (unsigned int i = 2; i < 122; i+=2)
{
unsigned int j = i/2;
float rad = j * 0.104719755; // 2*Pi / 60
buffer_data[i] = x + (cos(rad) * rx);
buffer_data[i+1] = y + (sin(rad) * ry);
element_data[j] = j;
}
[/sourcecode]
But that logic is much more concise and easy to understand than any of the previous approaches. I've chosen to use 60 points around the circle somewhat arbitrarily - using more of these will the circle look smoother, but cost more in terms of rendering power. Even 1800 points would probably be pretty trivial for the program in its current state, but better to form good optimization habits now, I suppose. Also, the circles look pretty perfectly smooth at 60 points.
And most importantly, it works!
Of course, this still doesn't look quite the same (or as good) as the SDL version. I have some positioning issues to work out, and a lot of stuff still isn't implemented that I had there. But I'm definitely on the right track.
Of course, as I said at the top of this post, I've had this project shelved since July. There may be some new updates in the future, but this is probably the last Project TreeWars post for a while.
\ No newline at end of file
diff --git a/_posts/technology/2012-04-19-pygo-go-game-client.html b/_posts/technology/2012-04-19-pygo-go-game-client.html
new file mode 100644
index 0000000..c755c80
--- /dev/null
+++ b/_posts/technology/2012-04-19-pygo-go-game-client.html
@@ -0,0 +1,20 @@
+---
+layout: post
+title: pygo - a go game client
+date: '2012-04-19T02:30:00.000-04:00'
+author: Anna Wiggins
+tags:
+- Programming
+- go
+- pygame
+- SDL
+- pygo
+- python
+- GTK
+- "碁"
+modified_time: '2013-10-22T11:19:51.955-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-1830924094339482390
+blogger_orig_url: http://www.stringofbits.net/2012/04/pygo-go-game-client.html
+---
+
+If I have anything like 'regular readers' (I'm not certain from the traffic patterns on the blog whether or not that's true), you're probably wondering where I've been. The answer is, basically, the same as it ever is: writing code.
I've also been playing a lot of Go, and doing some tabletop roleplaying. My latest programming projects are related to those hobbies. Today I want to talk about pygo, my new Go game client.
There are already a tremendous number of game clients out there. So, why would I want to create Yet Another One? There's always the excuse of 'it is a learning experience', but I also try to make things that I hope will be useful to me personally. And the problem with all of the existing Go clients is that they come in one of two styles:
- Desktop clients that are timed, and expect you to play an entire game in one brief sitting. Of these, cgoban3 is by far my favorite client (although it can only connect to its own kgs server).
- Web-based clients that expect your games to take a long time - usually you make a move, and come back later to see what your opponent has done.
I wanted a client for medium-length games: a game that unfolds over the course of an afternoon, or maybe a couple days, while the players are simultaneously doing other things. So it needs these features:
- Untimed - infinite thinking time allowed
- It is possible to put it down (close the program) and pick it back up later
- Desktop-based. Being on a website makes me feel like I should play just one move and check back much later, and I want to avoid that mentality
- Ability to play multiple simultaneous games
I couldn't find a client that met all of these requirements, so I decided to build this one.
First steps - pygame
My first implementation of the game used pygame. Pygame is a pythonic layer on top of SDL (which I've talked about before, with some convenience libraries added for games. Unfortunately, this really means 'games' in a much more 'modern video game' sense, and this library felt less and less like a good fit the longer I worked with it. When I started implementing network play, it really fell apart; getting pygame to work with either threads or existing networking libraries (like Twisted) is painful. Adding widgets like buttons or menus requires adding third-party libraries, and theming them is an additional layer of work.
Here is what the pygames version looked like before I scrapped it. This represents a long weekend's worth of very casual hacking (maybe 6-8 total hours of distraction- and interruption-filled programming):
[caption id="attachment_728" align="alignnone" width="480" caption="This looks okay, but those buttons are an eyesore, and just feel like bad UI"][/caption]
Note the fairly ugly buttons along the side; several of those buttons (Quit, Join Game, Listen) would be better off in a menu. But menus (especially via a menu bar) are non-trivial with pygame.
Now with more GTK
With pygame scrapped, I decided to use a widgeting toolkit that wasn't aimed for games, because I don't really need anything graphically sophisticated. GTK is an obvious choice, because I've used it extensively before. It was the first widgeting toolkit that I used, and it is still, in my mind, how such toolkits "should work" (I realize there are toolkits out there that may be better, but this one feels like the natural way because it is what I learned first). Python's GTK bindings, pyGTK, are really good.
So, in much less time than it took me to create the previous version of the game, I had re-implemented it in GTK. To be fair, I didn't have to re-implement any of the actual Go logic, because that was encapsulated in a GUI-element-free class (good programming technique pays off). I also haven't started working on the networking code again yet, but I'm pretty sure Twisted can integrate into GTK's event loop seamlessly, giving me sensible threads-free networking.
Anyway, here is what we have now:
[caption id="attachment_729" align="alignnone" width="480" caption="Notice the menu bar and the nicer-looking buttons."][/caption]
Much prettier. We even have a menu bar, with all of the cruft unrelated to a specific game hidden away. Even better, with Glade laying out and drawing that menu is free - it doesn't require me to write a single line of code. I just tell glade what function to call when each menu item is clicked, and it handles all of the boring GUI stuff.
The biggest problem I've run into with the GTK version was also a problem I had with pygame - the board graphics take a long time to update. With GTK it is especially problematic when I try to redraw the board.
So, I modified the Goban class (which has all of the Go game logic) to return a list of positions that should be re-checked for new information. Then, in GTK, I only redraw the parts of the board that may have changed. This makes the game perfectly responsive - no detectable delay. And using python's list data type makes this beautifully easy and elegant.
The Future
There's still a lot of work to do here. I plan on having direct peer-to-peer network connections, as well as having a server that players can connect to. Playing multiple games simultaneously isn't implemented yet (although with GTK, this should be almost trivial). I may implement timed games as an *option*, and alternate board sizes, komi, etc. still need to be possible. The code can't do scoring.
Now that the project is in pretty good starting shape, it's also available on github.
\ No newline at end of file
diff --git a/_posts/technology/2014-12-27-what-hell-is-happening-to-psn.html b/_posts/technology/2014-12-27-what-hell-is-happening-to-psn.html
new file mode 100644
index 0000000..dfb997e
--- /dev/null
+++ b/_posts/technology/2014-12-27-what-hell-is-happening-to-psn.html
@@ -0,0 +1,19 @@
+---
+layout: post
+title: What the hell is happening to PSN?
+date: '2014-12-27T13:45:00.000-05:00'
+author: Anna Wiggins
+tags:
+- DDoS
+- security
+- PSN
+- System Administration
+- Sony
+- Musings of an SRE
+- Technology
+modified_time: '2014-12-27T13:49:42.848-05:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-3128031459361770482
+blogger_orig_url: http://www.stringofbits.net/2014/12/what-hell-is-happening-to-psn.html
+---
+
+All day yesterday, I watched my husband trying to log into FF XIV on the PS4. All day, the PSN sign in servers remained down. They're still listed as offline now. Xbox Live has been back up since yesterday afternoon. So what's taking Sony so long?
Keeping production servers online is a large part of what I do professionally, so... I know this problem domain pretty well. And I've seen a lot of... speculation that is deeply misinformed. Here are my thoughts on the problem.
First: the cause of the outage. All evidence points to this being a DDoS (Distributed Denial of Service) attack. This is when a whole lot of computers from a lot of different locations send as much traffic as they can at a service, in an attempt to overwhelm it and knock it offline. The most common tool used to send all this traffic is a botnet. Building and maintaining a botnet requires a large amount of technical expertise. *Using* a botnet, on the other hand, just requires money and connections. Because the people who take the time to build a botnet often want to make money from it, so they sell time on them.
Which brings us to the culprits of the DDoS; a group calling themselves Lizard Squad has taken credit for the attack. Whether they have any technical expertise is unknown, but they certainly seem to have access to one or more reasonably effective botnets. However, they claim to have stopped their attack yesterday, and PSN remains offline. Mitigating DDoS attacks is a tricky problem; there are things that work pretty well, but there's always an upper bound on how much traffic you can mitigate.
So there are a few possibilities.
- Lizard Squad is lying, and is still attacking PSN. If they have some vested interest in making Microsoft look more competent than Sony, this is pretty plausible. Mitigating a DDoS is a real challenge, and Sony and Microsoft both clearly can't cope with these attacks. The usual solution would be to bring up more instances of the signin server; if that isn't mitigating the issue then the network infrastructure may not be able to cope either. Which doesn't say great things about Sony or Microsoft's network infrastructure. But then, this whole scenario doesn't say great things about the infrastructures of either services.
- Another group is also attacking PSN. Not much to add here; if Sony is still overwhelmed with traffic there's little they can do.
- Sony intentionally kept PSN offline to do some sort of emergency upgrades. This seems really unlikely to me; there's simply too much demand during the holidays to justify this. Sony would surely bring the servers back up and work on patches in parallel with that.
- The attack exposed a software bug in Sony's signin servers. If the signin server software is crash-looping or inexplicably serving errors now, it may be down despite engineers working on a fix as hard as they can. This would suggest that they're relying pretty heavily on some sort of stateful information that has entered a bad state, possibly a cache of some kind. (which can't be invalidated for some reason) Another possibility, which would suck for everyone involved, is that some bug caused user authentication data to be corrupted when the server was overloaded. If Sony is having to restore username/password hash data from a backup, that would explain why they are still offline. It would also explain why PSN seems to be working for some users but not others right now.
Personally, I suspect #4. It fits the evidence and observed behavior of the system the best. If so, we can only hope that there's no permanent authentication data lost, because that could mean broken, unrecoverable login accounts.
\ No newline at end of file
diff --git a/_posts/technology/2015-10-30-intel-nuc-remote-controls-and-fedora-22.html b/_posts/technology/2015-10-30-intel-nuc-remote-controls-and-fedora-22.html
new file mode 100644
index 0000000..c702dfd
--- /dev/null
+++ b/_posts/technology/2015-10-30-intel-nuc-remote-controls-and-fedora-22.html
@@ -0,0 +1,16 @@
+---
+layout: post
+title: Intel NUC, remote controls, and Fedora 22
+date: '2015-10-30T18:12:00.002-04:00'
+author: Anna Wiggins
+tags:
+- Media
+- System Administration
+- linux
+- Technology
+modified_time: '2015-10-30T18:14:24.849-04:00'
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-2467150110977202956
+blogger_orig_url: http://www.stringofbits.net/2015/10/intel-nuc-remote-controls-and-fedora-22.html
+---
+
+I've had a fun time getting kodi to work with my new remote on an Intel NUC. So, in case you're in a similar situation, here's what worked for me! These instructions are for Fedora 22 and the hardware I linked to in this paragraph, but a lot of the instructions should be applicable in slightly different situations as well.
- Update your Intel NUC to the latest bios. At least on the RYH line, they fixed some problems with the IR receiver in a recent update.
- In the NUC bios, make sure the IR port is enabled and set the IR controller type to "RC6". Kodi works much better out of the box with this protocol. Some of your buttons aren't going to work right, though. The hard part is fixing that.
- Do not install lirc. lirc is an unintentional trap created by well-meaning people. It will not help you here.
- Instead of lirc, install v4l-utils to get ir-keytable:
dnf -y install v4l-utils
- Now, here's why you don't want lirc: with an RC6 receiver, the kernel is going to parse your remote's input and output keyboard events. Unfortunately, many of the keysyms it sends aren't properly handled by Xorg. So, you need to remap those keysyms to working keysyms of your choice. To do that, you need exactly one bit of the process described here. Copy the
/etc/rc_keymaps/rc6_mce
file provided by wstewart at that link, and then run the command they mention:
ir-keytable -c -p RC-5,RC-6 -w /etc/rc_keymaps/rc6_mce
You'll need to get that command to run at startup, as well. I found that all the rest of wstewart's instructions were unnecessary with a modern kernel and kodi installation. - Now, fire up kodi, and bask in the glory of your remote working correctly!
If you want to remap what some of the buttons do, you can get the scancodes with ir-keytable -t
, then edit /etc/rc_keymaps/rc6_mce
. See the kodi keyboard shortcuts page for details on what keypress you need to send. If you can't figure out what the constant name for a key is, (most of them are obvious) refer to the kernel source's input.h.
\ No newline at end of file
diff --git a/_posts/technology/2015-11-06-the-orange-box-custom-usb-flight.html b/_posts/technology/2015-11-06-the-orange-box-custom-usb-flight.html
new file mode 100644
index 0000000..d67367f
--- /dev/null
+++ b/_posts/technology/2015-11-06-the-orange-box-custom-usb-flight.html
@@ -0,0 +1,19 @@
+---
+layout: post
+title: 'The Orange Box: A custom USB Flight Control Panel'
+date: '2015-11-06T11:05:00.000-05:00'
+author: Anna Wiggins
+tags:
+- Programming
+- electronics
+- 'Elite: Dangerous'
+- maker
+- diy
+- Technology
+modified_time: '2015-11-06T11:05:16.611-05:00'
+thumbnail: http://4.bp.blogspot.com/-DAZG1CkJy9s/VjphmdMmBZI/AAAAAAAAG_s/8R2F-hNYIEw/s72-c/single_switch.jpg
+blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-9195320296970552731
+blogger_orig_url: http://www.stringofbits.net/2015/11/the-orange-box-custom-usb-flight.html
+---
+
+I play a lot of Elite: Dangerous. And while I use a reasonably nice HOTAS, I've long wanted a flight panel: a bank of toggle switches with LED indicators that would act as a USB joystick. I can only find one company selling such a thing, and their solution leaves exposed wiring. (a no-no when you live with cats) Also, their website looks like it is from the 90s and just feels kind of sketchy. (Seriously, guys, if you happen to read this, your website does not inspire confidence)
And, anyway, I've been looking for an excuse to learn some basic electronics for a long time. So, I built my own! Several other people have built similar things, but I decided to jump in head-first and not follow any guides, in hopes of learning about electronics and wiring along the way.
Acquiring Gear
First up, a parts list:
And a partial list of tools I needed:
Getting Started
Ok, now that you have this big pile of stuff, what do we do? I started by emulating everything; I was a bit worried about frying my new Arduino board! So I designed a circuit using
123d.circuits.io. You can see it
here. Connecting the switch turns on the LED and changes I/O pin 2 from high to low. (the pin is configured as INPUT_PULLUP, see the programming section later)
Next I replicated this with my physical tools. I started by wiring everything up, (you'll want those hybrid jumper/alligator wires to hook up the toggle switch!) then plugged my Arduino into the PC to give it power. Before throwing the switch, I uploaded this very simple sketch to it:
void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT); // this is the Arduino's on-board LED.
}
void loop() {
int state = digitalRead(2);
if (state == HIGH) digitalWrite(13, LOW);
else digitalWrite(13, HIGH);
}
If this works as expected, then flipping the toggle switch should light up both the breadboard LED and the on-board LED (marked 'L' on the Arduino board). The logic is inverted (we write HIGH when we read LOW) because I'm using INPUT_PULLUP, which reverses the usual logic of the input pin. (This lets me wire the LED without worrying about how much current the input pin can sink. I'm probably being overly cautious here, actually.)
Building the thing
Now that I had a proof of concept, I moved on to building things in earnest. First, I needed a box to store it all in. I had trouble finding an appropriately-sized box (again, see "lessons learned"), so I decided to 3D Print one! I have access to a shared Ultimaker2 3D printer. So I designed and printed a box. I really don't recommend using this design. This was my first attempt ever at 3D printing. The print took about 13 hours, and the resulting box had a bunch of problems, despite my attempt to make careful measurements. I had to drill out the holes for the switches more, and had to hack up the back pretty badly to get the USB port out. I also neglected to put mounting posts in for the lid, (I printed some later, but it was a huge pain) or holes to mount the arduino board on. (The odd bumps on the inside and the plastic bar were meant to be a little physical barrier to hold the board in place, but they printed out way too low to actually do anything.)
So anyway, now I have a box. (the project quickly got nicknamed The Orange Box, naturally) Next, I created five of these, with varying LED colors:
This is just the design from the breadboard realized in a way that lets it interface with the Arduino sensor shield. The red wire is connected from 5V through the LED setup and onto one of the switch posts. The LED has a resistor in series with it; I used 1kΩ resistors for my red and yellow LEDs, and 10kΩ for blue and white.
The other switch post has lines going to both Ground (black) and the input pin. (white) The wire splices and connections are all soldered, *except* for the 3-pin dupont casing. To make those connections, I had to learn to work with dupont pins, which is a little complicated. You have to:
- Strip the end of your wire.
- Twist the exposed wire strands together. (this is often a good idea when working with stranded wire)
- Lay the wire onto the 'open' part of the dupont pin, and push it in a bit. Ideally you want the bottom of the pin to be flush against your wire casing.
- Fold the metal flanges on the pin around the wire with needle-nosed pliers, so that it's semi-closed.
- Crimp those flanges down with a crimp tool. Be careful not to crimp the 'top' half of the pin, where you don't have wire. You'll need that to mate the pin with the headers on the board.
- Using the pliers again, squeeze the metal that was flattened by the crimp tool into a rounder shape.
- Insert the pin into the casing. (For this project, I hade to make sure the voltage line was in the middle, to match the pinout on the shield) There is a correct orientation but it's a bit hard to describe. The pin should click into place and not come back out easily.
It takes a little practice to get the hang of it, but not having any connections soldered directly onto the Arduino makes it a lot more reusable!
Once I had all 5 of these, I mounted them in the box and wired them onto the sensor shield (which was connected to the arduino board. It just plugs right in on top!) With the 3-pin dupont widgets, this was super easy:
Those 3 rows of pins are just a row of Ground, a row of 5V, and then a row for all the I/O pins. So the white wires are all on the bottom row (the input signals), and the black wires are on the top. Each row is labelled on the board: G, V, and S.
Programming the Thing
For me, this was the easy part. Familiar territory. Arduino's "IDE" is really just a slightly specialized C++ framework. I wanted the OS to treat my device as a joystick with as little hassle as possible, so I used this
custom firmware for the Arduino's USB communication chip. (Note: you want to install that *last*, because while it's installed you can't upload new sketches to the Arduino. It's easily reversible, though, so you won't ruin anything.)
I wrote a simple library to interface with the Joystick firmware, and a sketch tailored to how I have my inputs setup and what I want them to do. The sketch interprets the toggle switches as momentary inputs; that is, it sends a short button-press event every time you toggle the switch, as opposed to "holding down" the button the entire time the switch is on. This design makes it work well with most of Elite: Dangerous' controls.
In a future iteration I hope to make this all a bit more generalized and include a lot more functionality in the Joystick library. But for now, this works really well!
The Finishing Touches
I printed some support structures to make it possible to screw the box (mostly) shut:
After putting these in place, I briefly lamented not printing counter-sunk screw holes into the box, but then I realized ABS plastic was soft enough that I didn't need them. All I had to do was tighten the screws a bit more, and:
And finally, with everything screwed in place, the finished product:
Lessons Learned
- 3D printing the project box sounded super cool, but I wouldn't do it again. It took too long, the resulting plastic is a bit weak for the job, and getting the hole placement just right was a pain. (and 3D printed parts don't take especially well to drilling) For my next iteration of this box I've purchased a pre-made project box.
- If I were to 3D print again: remember to put screw-holes and posts in!
Mounting the LEDs was a bit of a problem, since the LED holders assume you're wiring them in place. I couldn't use their intended mounting setup, and had to just hot-glue them into place instead. This happened because the LED holders were back-ordered, and didn't arrive until late in the project. - Soldering is fun, but moderately permanent. For future projects I'd rather invest in connectors that are slightly easier to disconnect. I bought a bunch of these in the hopes that the female connectors can mount to switch/button terminal posts. (early tests suggest they will work well)
- The Arduino Uno R3 + sensor shield is nice, but the total package is a bit big. I later discovered the Yourduino Robored, which has the same 3-row pinout as the sensor shield, but in a much smaller (and cheaper) package. I ordered a couple of these and intend to use them in future projects. One downside: they ship from Hong Kong and take a while to arrive.
- In the quiet of night (when I often play Elite) these toggle switches are loud enough to wake up and scare my housemate! I bought a bunch of rocker switches with LEDs already integrated for future use.
\ No newline at end of file