[ Content | Sidebar ]

gospel morality: matthew 5

December 21st, 2010

This is where we really start seeing moral pronouncements laid down. First, a sequence of “Blessed are the X: for they shall Y” lines, where X is generally something that’s good (or, at least, causes your life to be difficult), and where Y is a reward for that. In general, I support the X’s (sometimes more so in Lattimore’s translation than in King James: in particular, contrasting their versions of Matthew 5:5, I have nothing against meekness, but I actively like gentleness.) I have more mixed feelings about the Y’s: sometimes, it’s a simple “it gets better” vibe (Matthew 5:4, “Blessed are they that mourn: for they shall be comforted”), but sometimes there’s a sort of passive aggressiveness with a real edge to it (the aforementioned Matthew 5:5, “Blessed are the meek: for they shall inherit the earth”).

Then the gloves start to come off: Matthew 5:16 “Let your light so shine before men, that they may see your good works, and glorify your Father which is in heaven”, and Matthew 5:18-20, “For verily I say unto you, Till heaven and earth pass, one jot or one tittle shall in no wise pass from the law, till all be fulfilled. Whosoever therefore shall break one of these least commandments, and shall teach men so, he shall be called the least in the kingdom of heaven: but whosoever shall do and teach them, the same shall be called great in the kingdom of heaven. For I say unto you, That except your righteousness shall exceed the righteousness of the scribes and Pharisees, ye shall in no case enter into the kingdom of heaven.”

Clearly, God is not messing around: jump when He says jump, or (as we see in Matthew 5:29-30) you’ll be “cast into hell”. And these verses support a narrow moralism that I’m not at all comfortable with: the “break one of these least commandments” bit quoted above, or “whosoever looketh on a woman to lust after her hath committed adultery with her already in his heart” from Matthew 5:28.

Though even here, there are bits that I wholeheartedly get behind: e.g. Matthew 5:23-24, “Therefore if thou bring thy gift to the altar, and there rememberest that thy brother hath ought against thee; Leave there thy gift before the altar, and go thy way; first be reconciled to thy brother, and then come and offer thy gift.” In other words, while prayer is all well and good, you should get your actual actions in order first.

I actually rather like the bits against swearing, from Matthew 5:33-37: a sense of letting your actions speak for you. And then we come to the whole “turn the other cheek” bit (Matthew 5:38-48, e.g. 5:39 “But I say unto you, That ye resist not evil: but whosoever shall smite thee on thy right cheek, turn to him the other also.”) This is absolutely my favorite part of the moral pronouncements so far, a very strong statement indeed: don’t fight evil with evil, respond instead with compassion. I only wish that God would take Jesus’s advice on that score earlier on in this chapter, instead of threatening everybody with hellfire!

From a philological point of view, I really wonder what’s going on here. The different parts of the chapter seem to me to be in rather different styles and from rather different points of view; maybe I’m just reading my own biases into something that’s not there, but maybe the text is an agglomeration of different points of view.

gospel morality: matthew 3-4

December 20th, 2010

Repenting your sins is all well and good; I can’t get behind the naked threats in Matthew 3, though. Take Matthew 3:12, “Whose fan is in his hand, and he will throughly purge his floor, and gather his wheat into the garner; but he will burn up the chaff with unquenchable fire.” Even if you accept that the chaff in question really have done evil, how does that justify burning them with unquenchable fire? It reminds me of the “lock them up and throw away the key” philosophy that the United States has followed for the last three decades.

Matthew 4 is more to my taste: I particularly like the bit where the devil says to Jesus that God will look after him if he does something stupid, and Jesus’s response is “Thou shalt not tempt the Lord thy God” (from Matthew 4:7). Even if you believe that you’re the chosen one, that’s no excuse to press your luck, or to abuse that privilege! On its own, I’m not so thrilled with “Thou shalt worship the Lord thy God, and him only shalt thou serve” (from Matthew 4:10), but in the context of having the Devil asking you to worship him and be rewarded with vast riches and power, it’s a pretty good response. And then there’s Jesus’s going around and healing people right and left; it’s certainly hard to find that as anything other than wholly admirable!

gospel morality: matthew 2

December 19th, 2010

The heros of this section: the three wise men, a.k.a. the three Magi. I enjoyed listening to Amahl and the Night Visitors when I was growing up, glad to see them make their appearance here. (The night visitors, that is, not Amahl.)

Though I feel strangely conflicted about the gifts that they’re bringing. They’re giving riches to the son of God, to one whom they call “King of the Jews”: I don’t blame people for sucking up to the rich and powerful, but I don’t consider doing so to be a sign of good, either. The truth is, though, that Jesus and his family weren’t rich and powerful at this point in the story (at least I assume they weren’t, though I’m not sure what on the text I’m basing that on), and soon after the Magi show up, they have to leave town pronto: doubtless being able to sell the gifts was very useful to that end! So sure, let’s give the Magi the benefit of the doubt, and commend them for supporting those in need without worrying about their motivation in doing so.

And I’ll certainly enthusiastically support the Magi’s decision to not head back to Herod: he really was rich and powerful (and willing to kill to support that), so bully for those who work to foil the plans of the powerful who abuse said power. And, similarly, Herod is evil, boo Herod, to say the least.

Then there’s all the linking of various people’s actions with prior prophesies. If I were to take the most gratuitously ungenerous reading imaginable, I would wonder at the use of “that it might be” in Matthew 2:15, “And was there until the death of Herod: that it might be fulfilled which was spoken of the Lord by the prophet, saying, Out of Egypt have I called my son.” (Lattimore takes a similarly deterministic tone.) Is this all some sort of twisted game that God is setting up? I don’t want to emphasize that too strongly, though: it’s just a choice of words in this one sentence, other similar sentences use different words to link the actions with the prophecies (e.g. Matthew 2:17, “Then was fulfilled that which was spoken by Jeremy the prophet, saying,”).

So, while I do get uncomfortable (to put it mildly) at the idea of some God setting up chains of actions that include the massacre of innocent children, I don’t think it’s fair to read these sentences in such a fashion. But it is, perhaps, not quite so unfair for them to serve us as a caution against excessive fatalism, as a warning against what can come from saying that God is in charge and whatever he wants will happen, so we don’t have to worry about our actions ourselves.

And what about my use of that game metaphor in light of my status as a video game player and developer? Accepting for a moment the hypothesis of a God as powerful as the Christian God, he probably would be so different from us as to be almost incommensurable on moral terms. So maybe we should see this all potentially as one big game, a sort of Sim Universe, with this level of death no more of an issue to the player than are the fate of the units that I move around in a game of Civilization. Given my status as human rather than all-powerful divine being, though, I’d rather not go too far down exploring the morality of that point of view; and even if we were to do so, it would give a certain perspective on the moral issues behind such deterministic fatalism. After all, if the history of human civilization is a game, it’s probably not a game without constraints, so it’s probably very difficult indeed to reach a good outcome without some unfortunate events along the way.

gospel morality: matthew 1

December 18th, 2010

The New Testament opens with a genealogy: 42 generations leading from Abraham to Jesus. To which my initial reaction was a bit of bemused snark: I thought the whole point was that Jesus was the son of God, so why recite that list? But I actually felt a little bad after thinking that, because the text immediately launches into a discussion of Jesus’s parentage, in the context of Joseph’s reaction. Which is a very personal issue, enough to make me feel abashed about the whole idea of blogging about anything having to do with morality: what do you do when your wife is pregnant, and you know it’s not your kid?

His initial reaction is Matthew 1:19: “Then Joseph her husband, being a just man, and not willing to make her a publick example, was minded to put her away privily.” I wish I knew quite what the ramifications of “put her away” are (which, incidentally, is the same phrase that Lattimore uses, though the rest of that verse reads a bit differently), but I’m willing to accept that Joseph is being a decent guy about a sticky situation. And then he has a dream where an angel tells him what’s really going on, and he’s happy to get with the program.

What I like about this is what it says about the meaning of family. I can only imagine the thoughts that would go through your mind if you learn that your wife is pregnant with somebody else’s kid; and I wouldn’t for a moment blame people for having any of a wide range of reactions to that. But if you end up deciding that the marriage is important, then yes, the child is very much a part of that marriage and will be very much your child, and the facts of the biological parentage have nothing to do with that, any more than they do in, say, a case of adoption. So actually leading off with that family lineage is a pretty awesome statement about what family is, and I was kind of being an asshole by thinking snarky thoughts in response to seeing that lineage. (Score: Bible 1, David 0!)

What I don’t like about this chapter: we don’t see anything about Mary, or indeed about women in general (the family lineage at the start is all men). For this verse, at least, women are just vessels, men are what’s important.

(A side note: when writing the first paragraph, I wasn’t sure whether to write ‘god’ or ‘God’, probably as a reflexive atheist reaction against the whole concept. But I’m going with the latter: among other reasons, in this context I’m happy to treat it as a proper name, and we capitalize those.)

gospel morality: introduction

December 17th, 2010

I’ve decided to start a series of blog posts where I read through the gospels (i.e. the first four books of the New Testament of the Christian Bible), with an eye towards trying to figure out what I think of the morality therein. To be completely honest, I have very little idea why I’m doing this; it’s an idea that’s been floating around in the back of my head for a couple of years now, and my brain seems to have decided that now is the time for it to go into practice. (The fact that it’s Christmas is sheer coincidence.) I apologize to those of you who are here for video game or programming material and aren’t interested in this; the project will, for better or for worse, probably lead to a fair number of posts, but they’ll stop soon enough, and they’ll all be clearly labeled in the subject.

Some background that may (or may not!) help explain the doubtless curious approach that I take here: I’m an atheist, and my parents didn’t go to church when I was growing up, either. And I grew up in a college town; many of my friends were Christian, but many weren’t, and in general I don’t remember religion as being a big theme. I actually have a bunch of books on various religious topics lying around the house, but relatively few of them are Christian: there are a lot more books on Buddhism (I even took a couple of years of Pali courses in college) and Taoism than on Christianity. The flip side, of course, is that I live in a country where Christians are dominant, so I can’t avoid picking up some amount through osmosis. (And some more through reading, of course.) Still, my ignorance on this subject is vast; I apologize in advance to Christians reading this who feel that I am mischaracterizing the Bible, as I surely will frequently do.

I’m mostly reading Richmond Lattimore’s translation, though when I quote here I’ll generally grab the King James version for familiarity.

i am getting old

November 30th, 2010

Earlier this evening, I wanted to dust off some JavaScript code I’d written a little while ago. The editor I’d used while writing it initially was TextMate, which I’d liked okay but not enough to convince me that it was worth spending fifty bucks on once the trial period expired. So I opened up the code in Emacs, and started reading around in it.

And then I started making changes, at which point I hit the tab key, and Emacs indented the line by four spaces. The problem is, the file used two spaces for tabs. But I’ve done this enough times, surely I can quickly figure out how to configure this? Let’s see: C-h tab-width looks promising, but it has the value 8, so surely it isn’t relevant. The first answer while googling mentions c-basic-offset, which sounds just dubious enough (that c- prefix) to be right; but its value, rather than being a number, is “set-from-style”.

At this point, I have a few options. I can set c-basic-offset to a number, to see if that works, and then figure out the appropriate mode hook to do that for me. I can figure out what set-from-style means, to do it right. I can do more googling, to find a better answer.

But, I think, the best answer is: realize that I have better things to do with my life than to put up with that sort of user interface crap. (Or with the absolute joke that is Emacs’s “Preferences” menu item.)

(Another charming instance of Emacs’s user interface: on a lark, I thought I might as well go through the motions of looking through menus, though I’d be shocked if anything relevant was found there. And, of course, I didn’t find anything relevant; but what I did discover was that one of the menu options was “Read Mail (with RMAIL).” How many people in the entire freaking world are using RMAIL? Is there even one such person? I read my e-mail in Emacs for a very long time, but even I moved off of RMAIL more than a decade before I gave up on reading e-mail in Emacs.)

So, I guess, that’s the reason why I’ll buy TextMate: because I want an editor that doesn’t have an actively hostile UI (and no, don’t suggest vi, its UI is at least as hostile), that can be used for programming, and that isn’t as super-bloated as IntelliJ or NetBeans or Eclipse or whatever. (Admittedly, I haven’t used NetBeans and Eclipse much, so maybe I’m mischaracterizing them. But I doubt it.) $50 still seems like a ridiculous price to pay for it, and I’m worried by its apparently stalled development, but it has enough supporters that maybe it has virtues that I’m missing? If anybody has other editor suggestions, though, I’m all ears.

looking back at my first year at playdom

November 28th, 2010

It’s been a little more than a year since I joined Playdom, so I figured I should collect my thoughts about how it’s gone so far and get ideas about what I might want my next year to look like. Looking back, it’s kind of amazing how many different things I’ve done over that last year; it’s certainly been a lot of fun!

Things I’ve liked:

  • Great teammates: I’ve been on two teams here, and quite enjoyed being a part of both groups.
  • Having what I do make a difference in somebody else’s life in a matter of days or even hours; a huge change from my last job.
  • Being able to talk to people on the business side about what I’m doing, showing them the current state and asking for (and responding to!) feedback.
  • Learning technologies I wasn’t previously familiar with: JavaScript, a bit of ActionScript, a bit of Hadoop. And getting a chance to put a CSS Zen approach to concrete use, too.
  • Tools supporting agile programming: getting to use an IDE with refactoring support; using a mocking framework.
  • Brushing up on Java isn’t a bad idea, though not inherently exciting; at least it helps reduce my risk of being pigeonholed as a C++ guy.
  • Doing front-end work; I love getting to work with what our artists create.
  • Being a programmer instead of a manager.
  • Working with games; getting back to playing board games regularly.
  • Deepening my appreciation of testing by looking at business metrics.
  • Getting experience with growing a successful product.

I could probably write one or more blog posts about each of those; lots of great experiences, in retrospect it’s a bit hard to believe all that happened over one year! But that’s last year, what do I want out of next year?

More exposure to new technologies would be nice, though I imagine the rate there will slow down. Still, there are some possibilities: I imagine I’ll get more familiar with ActionScript, I might get exposed to Lua. (And I might get more exposed to PHP, though I can’t say that I’m excited about that.) Might get to learn more about data scaling ideas, too.

Helping add significant new features to an existing game has been rather interesting, and I’m glad I did it. On the flip side, though, I’d like to work on a new game at some point, to get a better feel for the tradeoffs that are relevant there.

And then there are teams and roles. I’d been a manager on a team where we had some agile theory but had a hard time putting it into practice, especially on the business side. It’s been nice being a non-manager, and having a much tighter turnaround for the customers and customer proxies.

Ideally, I’d like to be on a team merging some of my previous experience with the virtues of my recent experience. Adding a bit more agile theory (and lean theory) to what we’re doing at Playdom would help, I think, but not at the cost of losing the virtues of our current approach. And the more the team (broadly conceived, of course, not just the programmers) works as empowered individuals evolving a common creative vision, the better. (I don’t want to be a manager, but I don’t want to be told what to do by a manager, either!)

Good times past; looking forward to good times future.

piczle lines

November 18th, 2010

When I play a puzzle game (or do puzzles on paper), my goal isn’t to find solutions to the puzzles: my goal is to prove that there is a unique solution to the puzzle, with the production of that unique solution a side effect of that proof. This approach is so deeply ingrained into my approach to puzzles that I’d never really considered whether or not other people treat them the same way; thinking about it a bit more, I’m now assuming that I’m a bit of a freak in this regard, but I’m curious how y’all approach puzzles. (It wouldn’t surprise me if y’all were freaks, too, admittedly.)

The reason why I’m bringing this up is that Piczle Lines forced me to think about what I meant by uniqueness. The game has you connecting numbers with paths of the same length: for example, if you have two 9’s, then you connect them with a path of length 9. Also, each number has a color, and you can only connect numbers with the same color. Given that, the strongest form of uniqueness would be that there is a unique set of legal paths connecting the numbers.

That turns out to be too strong, though. Say that you’ve got a 3×3 square with 9s in the upper left and lower right. Then you can fill that square with paths going up and down or paths going right and left; and, it turns out, choices like that show up all the time in Piczle Lines puzzles. While it’s possible to come up with puzzles that have a unique solution under this definition I also suspect that such a constraint would be excessively limiting.

I was going to say that the puzzles working under such a constraint would be too easy, but, actually, Numberlink does have that constraint, and my memory is that Numberlink puzzles are plenty difficult. (Incidentally, don’t be misled by the use of numbers in that puzzle, they have a completely different meaning than the numbers in Piczle Lines, but both puzzle types share other core concepts.) Still, it’s a constraint that I don’t think is inherently beneficial; I certainly enjoyed Piczle Lines more than Numberlink, though I’m now planning to revisit the Numberlink book I have.

But it’s not the only possible definition of a unique solution. The next level of uniqueness would be that there’s a unique way of pairing up the numbers, and that the regions traced out by the paths is unique. (So, returning to the example above, that those numbers would always be linked through a path tracing out the same 3×3 square.) This also turns out not to be the solution that Piczle Lines chose: fairly frequently, you’d find a decent-sized region with two pairs of numbers that could divide up a given chunk of space in multiple ways. Again, you could probably design puzzles using this form of uniqueness (though I don’t have a good feel for how that would turn out), but it’s not what we see here.

The weakest form of uniqueness uses the colors. Piczle Lines puzzles aren’t abstract puzzles, they’re drawing a picture, so maybe all solutions to the puzzle end up drawing the same color regions? For a while, I thought that this was what the game meant by uniqueness, because most of the puzzles do have a unique solution in this regard, but eventually I ran across a puzzle where you could trace out one region of the border between colors in two different ways. Still, such examples were relatively rare, and my tentative opinion is that they’re a bug: if the idea behind the puzzle is that we’re trying to make a picture, then puzzles should pin down the picture that they’re making.


My confusion about what uniqueness meant in the context of the puzzle solutions was mirrored by confusion about tactics to use. One of the quirks of the puzzles is that it was possible to leave squares blank: most puzzles filled up the entire board, but not all of them. This has an effect on how you can reason: if a corner square is filled up, for example, then there’s only one way for a line to enter and leave the corner, but what if the corner is blank?

The interesting thing about this (at least if you share my psychological peculiarities) is that you can calculate from the outset whether or not there are any blank spaces: you have enough information from the numbers alone to determine the total area traced out by the paths in the puzzle, and you can compare that area to the size of the area you have to play with. Or at least you could, if you really wanted to: it would be a pain, though. What I ended up doing was having faith that, most of the time, the puzzles would fill out the entire space, and that, the rest of the time, the blank areas would be fairly obvious, instead of isolated squares here and there. Which proved to be true, and if a puzzle did have white space, it generally came in large clumps whose borders were fairly clearly marked. (Frequently in large part by straight lines, where uniqueness is obvious.)

This same sort of calculation was also theoretically possible for smaller areas of the puzzle: perhaps there would be an area of the puzzle where you had filled out all of the boundary except for one area. Then, by calculating, you could at least figure out how much the boundary in that area extended into the surrounding region (or, conversely, how much the surrounding region pushed back into the area in question); sometimes, that knowledge alone was enough to uniquely determine where that boundary was located.

What makes this last sort of example different is that adding up the numbers inside to calculate how the boundary was shaped really could be useful. (In contrast to the whole-puzzle situation, where it’s confirming something you were almost positive was the case anyways.) I didn’t actually go to the trouble of carrying out the calculation (or at least I rarely did), but it added some real pacing to the structure of solving the puzzle: I’d get nervous if I had a large area and then would feel relieved when I got to where I understood exactly where the boundary to that region had to go.

So, in two different ways, the game managed to present me with a fair amount of uncertainty (what uniqueness meant, what the results of adding up the numbers in a region of the puzzle would be) in a way that still had some scaffolding for my desire for proof to cling to (my hypotheses of uniqueness, how I would use the result of adding if I were to carry out the exercise). And at least partly because of this, the game did quite a bit towards allowing me to push towards solutions that I couldn’t prove were unique. I’d trace out lines that seemed to make sense (but not connecting them all the way, to give me a reminder that I hadn’t proved their validity); and, once I got to a choke point for a region and could prove that the boundary had to look a certain way, being able to connect a half-dozen of uncertain lines at once felt great!

Mind you, I still spent a lot of time just staring at puzzles, not tracing out anything, looking for something that I could prove was true. Liesl noticed me playing it constantly, started playing it herself, and got just as hooked as I was, and the contrast between our styles is quite striking. She traces out lines that make sense, runs into situations where something has gone wrong, and fiddles with them until everything fits properly. So the result is that she spends a lot more time actually putting stuff on the screen than I do, spends a lot more time backtracking, and ends up getting to a solution at about the same speed as I do. (She is a rather experienced puzzle solver; incidentally, Miranda has also been known to pick up the game, it’s a good thing that we have multiple devices in the house that are capable of playing it!)


The business model for the game is a free initial download with subsequent downloadable puzzle packs available for purchase; and, in fact, one of the download packs is free. (They’ve since released another free one.) And the download packs are very cheap: you can get quick a lot of puzzles for a buck.

Also, not all puzzles are created equal: in particular, some of them fit into a story mode. Which I found surprisingly effective, despite its extremely threadbare nature (or, perhaps, not so surprising, given my “video games plots as musicals” ideas). In particular, once, I’d gone through the first chapter of story mode, and found that could buy the entire rest of the story mode (containing another hundred puzzles!) for the princely sum of ninety-nine cents, there was no question that I was going to buy it. (I’m not at all surprised that story mode was, by far, the most downloaded content pack. And yay for developers who share blog about their experiences, see here and here as well.)

And, once I’d finished those, I’d gotten more than enough pleasure out of the game to immediately buy the rest of the DLC. Who knows what the right set of price points is for this sort of content (and, if the developers are reading, I’d be happy to buy more DLC, especially if it consisted of large puzzles!), but it makes me happy that a free product that narrative hooks, free DLC to get you started, and a crystal-clear value proposition (the hardest puzzles would easily take me a half-hour or more to solve while costing just over one cent each) can lead to a good conversion rate. I just hope that the total sales are enough to keep them going!

dragon age pacing

November 16th, 2010

Here’s a summary of what I’ve done in Dragon Age so far. Note: when I say “city” or “dungeon” in the following, I don’t mean a literal city or dungeon, but rather a relatively free-form inhabited area (with other traditional associated trappings, e.g. shopping) versus a relatively linear combat-focused area.

  • I decided to play as a female elf mage, so I went through the mage opening story. Which started off with a quite small dungeon, then had some city exploration, a micro side-storyish dungeon, and finally ended with another (more normal size for a start of a game) dungeon. (Which, incidentally, had me feeling a lot more conflicted than almost any other quest in recent memory, but that’s a topic for another blog post.)
  • Then on to the first area. Again, some city exploration, a dungeon, a brief interlude, and another dungeon.
  • At this point, the plot opened up, and I apparently had a choice of four tasks ahead of me. One of which seemed like it should be done last, but I wasn’t so sure about the other three. I didn’t have a choice, yet, though: the next area was chosen for me. Which had city exploration, but the only dungeon was a micro side-story dungeon. That exploration did serve to push me along one of the possible four tasks (pushing a layer onto its stack of intrigue), so I went in that direction next. And was, incidentally, quite happy with the pacing at this point: the cities had been interesting, the dungeons hadn’t overstayed their welcome.
  • A city, where I got a third layer pushed onto that task’s stack of intrigue. This was followed by a battle that’s longer than normal but not intricate enough to qualify as a dungeon, and then a real dungeon, with a bit of a twist at the end. (And a reappearance of the same conflicting feelings from the first dungeon.) Which was where I started to wonder a bit: my tentative hypothesis had been that the new layer here was a twist on the layer I’d heard about in the previous location, but no, it’s a separate problem. So the result is that I’ve popped the new layer of intrigue back off the stack, but the intrigue level is still where it was when I entered the city. (In other words, I hadn’t actually made any progress at all!)
  • But I did have a next direction to go in. Which wasn’t a place I would have gone to otherwise at this point, but it was an interesting enough city to be in. Relatively rich in side quests, so I did one sequence of micro-dungeons (that, I suppose, added up to a smallish dungeon), plus another dungeon. (And accumulated lots of other side quests; this game likes throwing side quests at you, but they seem quite small on average.) I didn’t get any closer to resolving the quest that I was in the middle of, but did get told the next place to go.
  • So I went there. Which was a micro-city, existing only to front a dungeon. Which I entered, and made it through the ruined temple. But the item I’m looking for wasn’t at the end of the ruined temple: instead, there were caverns. So I went into them (through one of two routes, thinking that surely I’ll come back soon along the other route?), wandered for quite a bit, and by now had slaughtered four or five times the number of people that apparently lived in the micro-city outside the dungeon. Finally, I made it to an opponent whom I talk to before killing. But even this isn’t where the item is: instead, there’s a passage out to the mountaintop. Which is, admittedly, a reasonably suitable location for a major plot item, so surely it will be waiting for me there, possibly after another boss battle? Well, no: there was a dragon there, but no item. I tried (and failed) to fight the dragon once, it seemed quite tough (probably significantly tougher than anything I’d seen so far), but also optional. Whether or not I fight the dragon, I’ll have to go into the next area, which I discovered upon stepping into it was called “The Gauntlet”: apparently neither the lengthy dungeon leading up to this nor the quite difficult dragon qualified as a gauntlet, I have something even more, um, enjoyable waiting for me?

That’s where I am so far. I’ve done something like eight dungeons worth of content, six of which are on the main plot line. I may be close to finishing the first major non-introductory quest but, well, I’ve thought that before, and I’ve been wrong. I may be close to finishing this dungeon but, well, I’ve thought that before, and I’ve been wrong. I started playing yesterday when Miranda started getting ready for bed, I gave up for the night at least half an hour later than was wise given when my alarm clock was going to wake me up the next day. (In retrospect, of course, I should have stopped earlier, but nobody wants to stop playing in the middle of a dungeon, and surely the game wouldn’t make me slog through another half hour of this stuff, would it?)

The game has a limited inventory system, and despite my buying every backpack that was for sale, I’ve had to throw away decent-sized chunks of my inventory on three separate occasions in this one dungeon alone. The game is being generous enough with money that I don’t feel like my progress is being actively hindered by losing that potential item sale income, but it does manage to take any joy I would have out of accumulating items in the dungeon. (I haven’t quite gotten to where I head the other direction when I see a chest, but I’m pretty close.)

I still have three major plot quests ahead of me; maybe this one is unusual, but I don’t yet have any reason to believe that is the case. And, for that matter, I don’t have reason to believe that further quests won’t pop up: indeed, it seems quite likely that there will be an endgame segment that I don’t know about, though one of the quests I do know about has the vague potential of being the endgame segment. So I think the best case estimate is that I’m a third of the way through the game, but being only a fourth of the way through the game is probably more likely, and even that could easily be optimistic.

I’m sure there are people for whom this sort of pacing is wonderful. Right now, though, the game’s main accomplishment (despite its considerable virtues in other areas) is making me grateful for another one of BioWare’s teams: Mass Effect 2 was designed to be playable in chunks that are an hour long or even shorter, and that was a much better fit for me. In fact, to my surprise, I’m wishing that Dragon Age were more like Persona 3: that game rather overstayed its welcome, and had a fair bit of padding right from the very beginning, but its rhythm was admirably consistent. I wasn’t always excited about the dungeon crawling, but I knew how long each dungeon crawling segment was going to take; the plot progression was somewhat roundabout, but was roundabout in a known fashion; and while I played it for longer in total than I would have preferred, after the first couple of sessions I never had to worry about whether or not I’d be able to save the game at a good stopping point by the time I wanted to go to bed.

Quite an accomplishment, really: it’s a rare game that can make me look fondly back at JRPG pacing.

focused practice in games

November 8th, 2010

With the addition of Rock Band 3‘s pro mode, there’s quite a bit more to learn when mastering a song; to that end, they’ve added a new variant of practice mode. Rather than simply having you play through the whole song (with options of changing speed and going back through sections), they pull out a few tricky bits of the piece, and have you loop through those over and aver again (again, with the option of changing the speed), repeating each one until you’ve mastered it. (Or are sick of it!)

And I was struck by how different that feels, and how realistic it feels. When you’re learning a new piece of music in a non-game context, it’s tempting to just play through the whole thing over and over again, but that’s not the way you make progress the fastest: instead, you find the tough bits, zoom in on them to figure out what’s going on, and repeat them over and over again until you can play them correctly. Which is exactly what the game does; in fact, the game encourages you to get 100% on a section three times before moving on, which is also fairly true to practice.

In previous iterations, since you were limited to five buttons, there was only so much in the way of difficulty that the game could throw at you, and only so much substance behind that difficulty. With pro mode (so far only keyboards for me, I’m waiting until the real guitar appears before trying pro guitar), the sight reading can be somewhat tricky (so far), but, the vast majority of the time, there are notes (chord progressions, melodies) underlying them that are generally pretty familiar. So, once you figure out what’s going on with them, the sections turn out to not be that hard to play from a mechanical point of view.

And the new training mode turns out to be great at bringing out the underlying music! If I’m confronted with a tricky section, I’ll stumble at first, mostly guessing at the notes to play. But after a few iterations, probably at a slower speed, I’ll figure that out; and once that happens, my hands will realize that the chords are in fact quite familiar and natural ones. So all of a sudden I’ll go from a 50% success rate on the notes to close to a 100% success rate, and will usually manage to reach 100% success after another couple of iterations. I can’t think of any other mode in a game that has done such a great job in bringing out the latent structure in challenges that the game offers.

The situations where the mode hasn’t worked for me have been interesting, too. Antibodies wasn’t tough from a sight-reading point of view: it was just throwing notes at me at a fast enough pace, and with an irregular enough rhythm (especially on hard mode, where they leave out a third of the notes) that it was challenging in the same way that the hardest non-pro guitar songs are. And I’m still working on Roundabout: the underlying chord progressions that it uses are quite a bit more unusual than in, I think, any other song on the disc. Most other songs feel natural once I realize what’s going on; with that song, my fingers are continually surprised at what they’re being asked to do. Very interesting, I hope we get more Yes music soon.


So: if you have a music game, and you encourage your players to focus on their learning the way a musician would outside of a game, results are good. But Rock Band is a special case, given its nonfiction nature; are the benefits of such focused practice unique to it?

I certainly wouldn’t want this sort of practice mode in every game, or even in most sorts of games. If I’m in a game for the narrative, for a single journey through its sights, then I imagine that I’d find this sort of focus to be tedious. But for games where I want to build towards excellence in my play, focused practice sounds like a great idea. Consider, for example, competitive non-musical real-world endeavours: if I’m trying to get better at playing go, I’ll certainly spend a lot of time playing go games, but I’ll also spend time solving life and death problems or going through joseki. If I were learning a martial art, I’d spend time in practice matches, but I’d spend more time repeating isolated techniques over and over again. If I wanted to be a better basketball player, I’d play a lot of basketball, but I’d also spend time alone on a basketball court just taking shots.

What games have used this sort of approach? Fighting games sound like a natural fit; I haven’t played them recently, do they incorporate this sort of training mode? (I seem to recall setting up one of the Soul Calibur games to always have the opponent use the same attack against me, so I could work on detecting and blocking that attack, though my memory could be fallible.) I don’t think I’ve ever seen a first-person shooter do something like this, but I can imagine getting a lot out of repeatedly attempting a short sequence dealing with a fixed set of enemies in a given terrain layout. I’m almost completely unfamiliar with real-time strategy games, but given their depth, surely they contain tactics that would support focused study?

When replaying Super Mario 64 recently, one of its aspects that struck me in comparison to more recent platformers is how short many of the stars were: they’d ask you to do one thing, you’d do it (perhaps failing several times first), and you’d be done. That seems to me to be within the spirit of this idea, as does the recent wave of platformers filled with extremely short, extremely difficult levels and no cap on the number of lives you can use. Though, I suppose, to really be within this spirit, that can’t be your only mode: you also need longer levels where you can put your skills to test, ideally levels where absolute perfection isn’t required but that remain difficult enough that you’ll have quite a hard (and tedious!) time overcoming them if you don’t break them down with focused practice.

More and more, the games I’m finding interesting are ones that eschew filler, games where every moment matters. For games that take such a route while bringing out the richness that is possible in players’ performances, any lens with which to better see that richness and any trial crafted to deepen our performances is a gift.

the rational optimist

October 31st, 2010

I just finished reading The Rational Optimist, by Matt Ridley, and I’m finding it both interesting and interestingly unsettling. Its subtitle is “How Prosperity Evolves”, and it’s a look back at various aspects of human development from an optimistic libertarian point of view. Basically, his thesis is that new ideas lead to new niches for specialization, which generates time savings that give more room for new ideas to grow, creating a virtuous cycle; to make things even better, ideas turn out to be surprisingly good at mixing and recombining to give new areas for improvement. So, if you put all this together (and don’t get in its way; governments are Ridley’s favorite target), you have an incredible flourishing of prosperity; and there’s nothing magic here, so no reason to believe that this flourishing won’t continue over the coming centuries.

Which I found it really refreshing to read. It is, to me, undeniable that the world has gotten hugely better over the last few centuries; and I like seeing somebody say “why assume that that progress will stop now?”, backing it up with plausible reasons why that might be the case. As he says, there’s a lot of pessimism out there; if there’s reason for that, fine, but is there?

His focus on specializing was a bit of a wakeup. Over the last several years, I’ve spent time in intellectual climates that warn of the dangers of specializing; certainly I prefer the role of generalizing specialist myself. Having said that, there’s no particular reason why what I prefer should be good for the progress of society as a whole! He points out Ricardo’s law of comparative advantage: even if person A is better at person B at producing both X and Y, if it happens to be the case that A can produce X faster than Y while B can produce Y faster than X, it’s still best for everybody if A specializes in producing X and B specializes in producing Y, because that leads to the most production for the least effort, despite Y being produced less efficiently than it could be. (That sentence is pretty abstract, so follow the above link for some numeric examples.)

Given this, why not specialize wherever possible? Lean and ToC give one answer, namely the dangers of suboptimizing. And Ridley gives another answer: new ideas appear through the mixture of other ideas. (Among other means.) So I don’t have to feel bad about my penchant for sticking my nose into random areas of thought; but the flip side is that what I do professionally (and, to a large extent, in my free time) is solidly grounded in the details of programming, and that’s healthy. (And, looking back over the course of human history, my profession certainly qualifies me as highly specialized.)

He also had some interesting negative things to say about movements that I’m ideologically sympathetic to, namely the organic food movement and the movement against global warming. I don’t entirely agree with his criticisms of both of those movements—in particular, I think he both overestimates how seriously people took some previous disaster scenarios (e.g. acid rain) and underestimates how serious some other previous disaster scenarios actually were (nuclear war; actually strike the word “were” there and replace it by “are”), fitting them to a bit of a narrative Procrustean bed. And, to some extent, the reason why some of these didn’t turn out badly seems to me to be because of the sort of government intervention that Ridley dislikes; in general, he doesn’t seem to me to spend enough time on Tragedy of the Commons problems.

But there’s a lot in his criticisms of those movements to think about, and I agree whole-heartedly with one part of his criticism and approach to criticism, namely that you should get your metrics right. Metrics aren’t everything, but they’re important, and you shouldn’t cherry pick them to lead in the direction where you’d like the answer to be. (And his other point that there’s a lot of unwarranted pessimism going around is probably true, too.) I hope that the environmental movement isn’t as bad in this regard as Ridley claims (I certainly hear a lot more bad said than good about corn-based ethanol, for example), and the Azimuth Project (including blog posts like this one) makes me optimistic that good use of metrics will be (hopefully, already has been) a strong part of the discussion. But it’s an important enough point to deserve to be hammered home.

Certainly a book I’m glad to have read. (And it’s a fast read, too.) A hat tip to Jesse Schell for the recommendation.

rock band 3 first impressions

October 30th, 2010

My very first impression of Rock Band 3 was surprisingly negative. Liesl, Miranda, and I sat down to play; I’d assumed that we’d go through career mode on Miranda’s band. The game, however, created a band for me and then refused to let us change to one for her. (I didn’t look into it too closely; we’ve since all created bands, hopefully things will go better next time time.) No big deal, we just went into quickplay mode; Miranda wanted to play keyboards, we saw some premade list that mentioned them, so we gave that a try. And then the game told us something about having to go into “all instruments mode”; I don’t understand why it needed us to do that, and it threw us for a loop momentarily, but after a bit, we decided that that seemed harmless enough, so we started playing.

Which was fun, but then the set list we’d chosen proved to be a mistake: the first few songs were fine, but the difficulty ramped up too quickly for a keyboard novice. So we backed out, and went into the general quick play mode; that, however, confronted us with something like 360 songs. (And that’s before exporting the Rock Band 2 tracks!) Fortunately, they have a good filtering system in place, so we could get the game to only show us songs with keyboard parts, and sort them by difficulty; and we had a lot of fun starting on the resulting list. And, in fact, all instruments mode (with its associated karaoke vocals) ended up being an actively good thing: it was nice to be able to see the lyrics even though we weren’t singing, and when Imagine came along (which doesn’t have a guitar part), I could just drop out (which Rock Band 3 lets you do on the fly) and sing to it. It would have been annoying if we’d had a guitarist, bassist, keyboard player, and singer, all of whom wanted their score to count, though (and I still don’t understand why the game doesn’t allow that—it’s still only four controllers), but we weren’t in that situation, so it was okay.

Liesl and I poked around a little more later on in the evening. It’s a pity that you can’t import your Rock Band 2 band/characters, but creating new ones is fun enough. (Good facial hair options; Rock Band 2 had a much better top hat, though, if I’m remembering correctly, and to get the jacket I want, I’ll have to somehow earn 5,000,000 points with vocal harmonies…) It also doesn’t know which DLC you’ve played in previous versions of the game, so at some point soon we should go back to Rock Band 2 to find out which songs we haven’t yet played through; that’s reasonable enough, certainly. The career mode has been somewhat modified, but the new version seems pleasant enough, and I like the range of alternate band goals the game provides. And I’ve enjoyed what little of the the music I’ve played so far; not everything was to my taste, and perhaps the focus on vocal harmonies and keyboards has diluted the guitar play a bit, but it was good stuff, sometimes surprisingly so. (I’d never heard of Maná before, but Oye Mi Amor was a lot of fun to play; and while I certainly had heard The Power of Love before, I wasn’t expecting much out of it, but it turns out to be a lot of fun to play on (expert non-pro) guitar.) Nice usability tweaks, too—being able to drop in and out on the fly is useful, if you fail you can continue from the place in the game where you failed; and you can also change difficulty on the fly.


That was last night; today, I gave the keyboard a try myself. On pro keys; as one of my coworkers had warned me, trying to sight-read was kind of odd. I’m competent at reading traditional piano notation; that doesn’t transfer at all to the notation that Rock Band 3 uses, so I had to do a lot more thinking than I would have liked figuring out which key to play when something shows up on screen.

Fortunately, some amount of general musical knowledge does come through. Playing up and down melody lines felt pretty natural: once I found the initial note, I didn’t have to do too much thinking to find the notes after that. Chords were harder, but not infrequently, they’d click, and my hands would happily shift from chord to chord.

Which doesn’t mean that everything went swimmingly: I got lost pretty often. Just starting a song made me nervous: not having perfect pitch and not having played these songs before, I would have no idea where on the keyboard the first notes would be, and what notes I’d end up using! (Given that the tutorial has you go through various different scales, it might be nice for the game to tell you what key you were playing in, so you could prepare better?)

I started off on medium; the easiest songs have very little keyboard in them, though, so that was really boring, and I moved up to hard. Which was a good choice; so far, I’ve made it through the three-star songs without too many mishaps. Chord sections definitely give me a lot more trouble than melodic sections: sometimes they’ll click, and even if they don’t, if the chords are repeating, I can figure it out quickly enough, but if I get lost and chords are moving around quickly, it’s hard to orient. (I have to wonder how much harder the four-note chords that expert gives you will be.)

At first, even orienting myself on the melodic sections was hard, too, but my reading ability is already improving. The color coding of the regions of the keyboard is sensible enough; and I found that using the black keys to keep track of where in a section of the keyboard a note is works pretty well. (So, ironically, songs in C major turned out to be rather more difficult than songs in keys with a handful of accidentals.) It’s definitely a work in progress, though: I don’t see any reason why I won’t eventually able to directly translate between the distance of keys on the screen and the distance of keys on the keyboard, and I’m already better at that than I was when I started, but I’m certainly not there yet.

And it’s still the case that, when things go wrong, I have a surprisingly hard time getting back on track. Some of that is just the nature of the beast, but some of that is the relative lack of feedback that the game provides. You don’t hear the wrong note you played (just a clink sound followed by silence), so it’s possible to miss notes without realizing it at all, and it’s also surprisingly easy to not be sure whether you played the wrong note or the right note at the wrong time. And you also can’t use sound as feedback for how far you need to adjust your mistakes up or down, you have to resort to logic or visuals or touch.

The keyboard itself was pleasant as an instrument. My main quibble is that the pivot point for the keys isn’t very far back, so if your fingers are up on the keys, there’s not a lot of depth. At first, turning on star power was tough, but then I realized that there’s rarely much point in using both hands while playing keyboard, given that the game will only have you playing from a range of just over an octave at any given point, so my left hand ended up mostly free. The keytar handle had the downside that Zippy was lying next to my left leg, and would periodically bonk his head against it when he tried to look up and, but we solved that by moving Zippy. And it works just fine sitting on your lap, I have no desire for a separate keyboard stand.

Good stuff. There are tweaks I’d make—show what key you’re playing in, in particular—and the game’s in-song visuals have gone quite a bit too far into distraction. But still: it’s Rock Band! With keyboards! Where you can play more than five notes! I gave Bohemian Rhapsody a try on hard, and was feeling pretty smug through the opening section; I fell apart soon enough, though, but I’ll be a lot happier putting in the time to really learn it than I ever was with a song in previous iterations of the game.

Incidentally, Rock Band 3 is this week’s VGHVI game; chime in on that post if you’re free Thursday evening and want to join us!

making a mockery

October 25th, 2010

One of the things I got out of Agile Open California this year was a decision that I should work harder at removing database access from the unit tests for our Java code. It will probably be a pain, but I’ve dealt with legacy code before, I know the basic ideas of what to do, and reading Growing Object-Oriented Software introduced me to mocking frameworks, which seemed like a tool that might serve me well in this context. My best guess was that it would take me a day, plus or minus a factor of two, to get something in; and it shouldn’t take too many weeks (days, hopefully, if my next project is the right sort of thing) to for that to turn into a time savings.

So, once I’d made it through the accumulated post-conference tasks, I looked at the last set of unit tests that I’d written. And, actually, it looked like they’d be even easier to tame than I thought: I’d already put in a legacy code barrier by writing the new functionality there as a static method, so I didn’t even have to instantiate an instance of the class that I was allegedly testing, just instances of the arguments to the method in question.

Looking more closely, it turned out that there was really only one argument that I needed to worry about. It was an instance of a concrete class that was a pain to instantiate without running through all of our Spring machinery: it created a static Memcache object, it had another static instance variable that was looking up a Spring-initialized bean (that eventually depended on grabbing some data configuration from a static data file), etc. I certainly know techniques for delaying static initialization, and thought about going down that path for a minute, but then I stopped myself and said: I want to start using jMock for the heavy lifting of instantiation, so I shouldn’t go that route at all!

That means that I need an interface instead of a concrete class; is that okay here? I looked at the test and the code under test, and they weren’t about that messy concrete class, I was just testing something that was using it in a not-very-deep manner. Given that, I didn’t see any reason why instantiating an interface instead would weaken my test. I didn’t have an interface handy, so I created one for the concrete class to implement; I thought for a couple of minutes about what it should look like before realizing that I didn’t actually care right then, what it needed to look like was (at first) enough to get the test in question to compile! That bit of test and product code called a grand total of two methods of the original class; I added those two methods to the interface, and looked up the jMock boilerplate for instantiating an instance of that interface; and poof, my tests were compiling, without any database-dependent code involved!

Of course, they weren’t passing yet: assertions were failing, and jMock was also informing me that mocked out methods were called. I looked a little more closely, and realized that one of the two methods in question was a setter that (in the context of running these tests) was only being called to set up the object so that the other method would return what I wanted. Which makes sense in a non-mock context, but in a mock context, you can just directly tell the method to return what you want. So I deleted that setter from the interface and from the test code, told the test’s Mockery to return some appropriate data when the other method was called, and ran the tests.

And they passed! Indeed, they passed so quickly that, at first, I assumed things had gone wrong: the compilation still took a few seconds, but once the tests started running, IntelliJ didn’t even have time to show me the listing of all of the tests that it was running before they all finished. But I did some poking around, adding assertion failures or commenting out lines of product code, and the tests were indeed all running, they were just running approximately 250 times as fast as they had been before.

Which was a huge success! And not only were the tests fast to run, they were also fast to write. I’d estimated that this would take a day or so; in fact, it took somewhere between half an hour and an hour for me to get this working, despite my complete prior lack of jMock experience. Admittedly, I’d lucked out by picking a clump of tests that was particularly easy to convert, but still: my tests were running hundreds of times faster after less than an hour of work! Amazing.

Flush from that success, I used jMock for the next feature that I was working on. That feature involved bringing some (actually pretty well written) legacy code under test, doing some replumbing to make it more extensible, and then extending it slightly. There were several more function arguments to deal with here, but all but one of them was already an interface. The one exception was the class that I’d just started to convert to an interface; so my first step when bringing each chunk of code under test was to try to replace the class with the interface when it showed up as an argument in that chunk of code, see what the compiler complained about, pull those methods up to the new interface, and repeat. (And if it got too thorny and if I was in a code branch that I wasn’t going to reach with my test, I’d just throw in a cast to silence the compiler.)

Then, once I’d gotten it to compile, I’d create a unit test that instantiated mock objects and called the method. This would immediately point out a calls that I needed to tell the Mockery to expect; that’s fine, I could iterate on that every 30 seconds, so even in the most complicated case, I had the test running in under five minutes, and passing for the right reason a minute after that. The upshot was that, within a few hours, I had all of the relevant code running with tests that were good enough to support the refactoring I wanted; a few hours later, the first refactoring was done, and I was in a good TDD flow for the first time since I’ve started my Java work on that project. A couple of days later I had the new functionality in place, running correctly in the first end-to-end try, with the total number of unit tests on the project increased by 50 percent or so, and with a structure in place so that will enable us to knock off a bunch of upcoming feature requests in an hour or two each.

I am, obviously, very pleased with the results, and very impressed with jMock: it’s amazing how much work it’s been saving me. So I’m a total convert to using it to tame legacy code; what I’m interested in next is how to use it, as Growing Object-Oriented Software suggests, to guide the development of new interfaces going forward. (It pulled out an interface for me in the code I was working with last week, but it was an ugly interface, serving more to point out warts in the existing structure than anything else.) Lots of fun, I look forward to the next step in that journey.

agile open california 2010, day 2

October 12th, 2010

Another good day, and as always a quite successful conference: I came into the conference with two areas in which my testing doesn’t feel right, and I came out with concrete suggestions for what to do next on both of those; my off-the-wall session went much better than I could reasonably have hoped for; and a couple of the other sessions were interesting as well.

And it’s funny in retrospect how blase I’ve gotten about open space conferences: of course we managed to self-organize and come up with loads of interesting and useful sessions, isn’t that the way it always works? Amazing when I first saw it, but now I’ve seen it happen four years in a row, so it’s clearly a quite repeatable process.

8:30am

I didn’t end up attending any of the early morning sessions today, what with dog- and daughter-related interruptions overnight; I guess that counts as my session to take a nap in today?

10:00am: Coding Dojo

This ended up rather interesting in a completely unexpected way. I was looking forward to having a technical hands-on session instead of a conceptual touchy-feely session, and the plan seemed promising: we picked a problem to TDD (the Bowling Kata), and there were few enough of us (five plus the convener) that we decided to just rotate pairs through a single computer every five minutes.

But things went wrong in a bunch of ways right from the start: the convener inserted himself way too often (in my opinion), participants ignored each others’ suggestions and blithely threw away their code, they occasionally openly insulted each others’ technical competence, at times a participant had a hard time picking up on what was going on quickly enough to make any progress during the 5-minute coding slot. (And that’s just what I saw in the behavior of the other five people there; extrapolating from that, it seems quite likely that I was behaving badly in a way that I was blind to as well.)

I was thinking of giving up and leaving, but the thing is: these are dysfunctions we see all the time on real teams, they were just magnified because of the quick pace of the format. So I decided to stick around to see if we could resolve them; and, indeed, we brought up some of the worst of the issues and started dealing with them; half an hour later, we were going much more smoothly, and were writing actual workable code.

So: good stuff, though I still kind of wish we’d been able to spend more time on code issues than people issues…

11:30am: Enterprise Agile Transformation

Pleasant enough chatting, but I don’t have a lot to report here.

1:00pm: TDDing JavaScript

This was one of my sessions; I was happy enough for the conversation to go wherever people wanted, but ultimately it came out my dissatisfactions with TDDing JavaScript at work. The problem that I have is that my TDD instincts aren’t working well: the first code that I’m tempted to write (if I start from the user point of view) is so closely tied to the layout details that turning into tests would be tedious and lead to low-value, brittle tests; I’m also not entirely sure about tests that I’d get starting from the back end communication point of view, because there I’d be testing XML parsing that is both relatively simple and could silently go stale if the format changes. So the upshot is that I start off not writing tests for my code, and I stay in that mode for far too long.

For the code adjacent to the back end, I really want integration testing; and, indeed, that would be useful at both ends, I should definitely do that more. So we spent some time talking about possibilities there (basically, me getting more of a Selenium education); that was useful, but I don’t want to go down that path too deeply, because I’ll end up with slow tests that have a hard time getting at non-surface problems.

Fortunately, Mike Wright managed to eventually break through some of my problems: after encouraging me to explain why I didn’t like the tests I would normally think about writing, he took a BDD-point of view to asking me how to express tests that I might like to write. And by taking that approach he managed to come up with tests that get close to the layout to while not being excessively brittle. E.g. if I’m testing a feature that involves voting for one of two avatars in a walkoff, I can test that the layout contains exactly two divs with a “walkoffAvatar” class: that’s expressive enough to force me to be doing something meaningful with the data when generating the layout, but it’s generic enough that it doesn’t tie me to the specifics of the layout, specifics that are only useful to the extent that they produce something pleasing to a human eye. Best of all, it means that I can start happily unit testing right from the start, instead of trying to pick a moment when the code is getting interesting enough to need testing.

Really useful, I’m hoping that this will encourage me to TDD my JavaScript significantly more often than I have been these last few months.

3:00pm: Agile for Introverts

I’m an introvert, as was the convener, but a lot of the participants weren’t; can’t I escape for a moment from those extroverts? (Joke.) Honestly, I was surprised how many extroverts attended, but they were really very well behaved, I probably spent as much time talking as most of them did.

The notes list many of the topics we talked about, but two concrete techniques seemed particularly useful. One is to maximize the chance that introverts will speak up in a meeting: when you’re thinking of moving on to a topic, ask if anybody has questions, then pause for a second, and then count down from five to zero, starting with an open hand and folding down one finger at each number. (A variant of a technique I found very useful when teaching: when you want to elicit questions, wait for noticeably longer than is necessary for people to start feel uncomfortable with the silence.)

And the other is some gestures that you can introduce: wave your hands with fingers spread out to express agreement, hold up a hand with two raised, crossed fingers to express that you’d like to speak fairly soon; and one other gesture whose details I can’t remember (maybe a sort of hitchhiker’s thumb?) to express that you’d like to make a followup comment to the last statement. So normally those last people get priority, but if somebody’s been waiting with fingers raised for a while, you give them priority.

agile open california 2010, day 1

October 11th, 2010

I’m seeing a lot more familiar faces at Agile Open Northern California 2010 than I had been in previous years: before, I’d always been surprised at the low percentage of repeats, but this year I’m seeing people I know everywhere I look. So: glad others also find this valuable enough to keep coming back! (Or maybe they, like I, are suckers for the setting, by far my favorite conference venue.)

10:30am: Why Agile?; User Documentation and Agile

I stayed for about half of the first one session listed here. We spent most of that time talking about how people problems are important but hard. Which is true; it’s something I struggled with at Kealia/Sun, it’s something I’m struggling with at Playdom.

After that, I wandered around a bit, ultimately ending up in a doc writing session. Interesting questions there, e.g. If you implement a single button (of multiple planned ones) on a page, when do you document it? I have a first instinct for what the answer is, but I suspect the question could shed some new light on problems with feature flow. And if tech writers are a shared resource (which seems fairly common), that throws another wrench into the works.

(Though of course I have an answer to that from a technical lens: avoid specialization when possible. Is it possible there? E.g. How well do tech writer and QA skill sets overlap?)

12:00pm: So You Have Slow Tests, Now What?

We started off taking a poll of what we meant by slow tests, and got a huge range of responses, from 5 minutes (or even 25 seconds) to multiple hours (or even more than a day, but they parallelized that one to only be a few clock hours). Which would make me happier about the length that the tests in my current group take, were it not for the fact that we have so few! (In particular, no automated integration/end-to-end tests that the team maintains, though I’m actually working on improving that right now.)

I mainly went because our unit tests are way too slow: they almost all depend on doing database access, and while we try to avoid constantly setting that up, it’s still the case that running even one “unit” test can take a good 25 seconds, which is a real friction point for doing TDD. And the answer to that is pretty obvious: by hook or by crook, I need to mock out that. Which I’ve been putting off, but talking about it in public makes me confront the question of how hard it can be? And, when I think about it, my best guess is one day to get something in, plus or minus a factor of two; I can definitely find time to do that soon.

1:30pm: The Christopher Alexander Bench

After looking at the bench last year, I decided that I had to hold a session there unless it was pouring: its presence is too much of a coincidence to pass up, and the setting here is so gorgeous that I’ve always felt it was a shame that we never have sessions outside. So I scheduled one, with absolutely no plans for topics to discuss: if the setting inspires us to discuss something, that’s great, otherwise we’ll just look at Alcatraz and Angel Island for a bit and then wander off to other sessions.

And it was great! A dozen people showed up, Tom Looy began with an appreciation of Alexander’s notion that variation within a pattern leads to beauty, and we were off and running. For whatever reason, we talked a lot about planning meetings, starting with the benefits of physical cards over Jira tickets and ending up with a heated discussion about estimation; no idea why we ended up there, but people were actively participating, which is all I need to declare it a success.

We did touch on the bench occasionally, too: I passed around the book, and we were inspired by the paragraph at the beginning of the relevant section:

In the kind of dynamic process I have in mind, where each act that is taken, is related, in a structure-preserving way to the whole, and takes its place in a long time-line through a long sequence of events, each part, then, is carefully shaped and placed into the whole, making the whole more than it was before.

(Incidentally, I think the bench in its setting gives a great example of that last bit.) I talked a bit about those of the fifteen properties that I could remember; Lev Ayzner pointed out an example of Alternating Repetition that I’d missed, namely between more abstract and more naturalistic patterns on the front tiles.

Good stuff; I’ll probably do the same session again next year.

3:00pm: Kids / Education; Code Excellence; nap

I seem to be unable to attend a conference without napping through one session per day; this was today’s choice.

4:30pm: Key Unlearnings for Agile

Very good session, about bits of the pre-agile mindset that we not only needed to unlearn in the agile transition, but still need to unlearn! E.g. that I have to have all the answers, or an us versus them mentality between different groups (workers and managers, developers and product people, developers and testers). We generated lots and lots of examples, which almost all rang true to me; I recommend going to the notes on the wiki and the mindmap.

miranda pasta

October 9th, 2010

It’s been a while since I’ve done a recipe post here; but this is a recipe Miranda came up with a few months ago, we’ve made it several times since then, and it’s really quite good. (Not good as in “good for a recipe my daughter came up with” but good as in “better than the strong majority of the pasta recipes in the cookbooks we have lying around”.) Plus, it’s super-easy!


Miranda Pasta

Ingredients:

4 oz. prosciutto
1 1/2 lb. tomatoes
fresh basil
1 lemon
6 Tbsp. olive oil
salt to taste
4 oz. goat cheese
1 lb. pasta

Instructions:

Sliver the prosciutto and basil; seed and chop the tomatoes. Juice and zest the lemon. Crumble the goat cheese, and mix the non-pasta ingredients in a large bowl. Cook the pasta, combine, and serve.

super mario 65

October 8th, 2010

The main question that I’d like to understand better in the current Vintage Game Club playthrough of Super Mario 64 is how the game fits into the taxonomy of the genre of platformers. Or, indeed, whether it fits into the taxonomy of that genre: while, at the time it was released, Super Mario 64 seemed to me like the natural transition of the genre from 2D into 3D, experience with later games has increased my appreciation of just how large a break with the platforming tradition it was.

At least, that was my theory; given that I hadn’t played Super Mario 64 since 1998, however, that theory could be complete bunk! So, with a replay of the first 30 stars under my belt, how do I feel now?

The Castle Grounds

The opening of Super Mario 64 is, to me, very telling. You’re not placed at the left end of a traditional level or on a map laid out like a game board: instead, you’re on the grounds surrounding a castle. And while you are “supposed” to head straight into the castle, I never considered for a moment starting by doing that. Instead, I wandered around here and there, climbing trees, swimming in the water, reading the signs and trying out the moves, wondering why there was an underwater door and so many underwater grates, trying to figure out if it’s possible to reach the coins that are hanging under the bridge.

And the music encourages this wandering. To me, it sounds significantly different from, say, the music in the original Super Mario Bros. The music in the original game isn’t relentless, but it’s always supporting your moving from left to right. Here, though, the castle theme starts off sounding like somebody tiptoeing around, wandering this way and that. Then, after three variants of said tiptoing, it transitions into a slightly more expansive bit, saying “wow, look at all this neat, stuff. (happy sigh)” That sequence repeats; and then, mimicking the player’s increased confidence, the theme has you wandering this way around the grounds, with a bit more purpose in your step. But still wandering: there’s not this feeling that you have a place to go, things to do. The plot may be suggesting that you should get to work rescuing the princess, but the music is happy to let you drink in the world.

There was a lot of talk about ludonarrative dissonance a couple of years ago; in its own way, Super Mario 64 exemplifies that, and I just can’t bring myself to consider that a problem. Instead, I’m going to stick with my earlier claim that musicals are a perfectly good model for video games: focus on your set pieces, and treat your plot as light scaffolding to let you hop from piece to piece, and good will come of it. And if the purpose of the opening set piece is to set the stage and motivate the entire rest of the game, then the wandering we have in the castle grounds is the core and foundation for the entire game.

The Levels

So: the opening is quite different from the 2D Mario games. It’s also quite different from the later 3D Mario games, Super Mario Galaxy 2 in particular. (Which also starts you off in an area outside of the levels that you can just mess around in; there’s surprisingly little scope for messing around, however, and it turns out that the area really primarily exists as a sort of trophy room for collecting guests.) But what about the levels proper?

They, too, have a completely different feel from later and earlier games. When I first played Super Mario 64, the levels seemed rather large to me; I was fairly sure that they’d look a lot smaller in the light of subsequent 3D games. And they are; but they’re also a lot denser than I remembered, and somehow manage to accomplish that without seeming abbreviated or cramped. Take Bomb-omb Battlefield as an example: there’s a small area at the bottom where you start, a medium size field on the right and a couple of small meadows on the left, a path that quickly spirals a couple of times around a mountain, and the mountain top that’s barely large enough for a boss fight. Yet somehow the game fits six stars in that area plus the hundred-coin star, and does it without feeling repetitive.

Ultimately, then, the core idea that I’ve gotten from replaying the beginning of Super Mario 64 is that what makes it special is the joy with which it invites you to explore a world. (I suspect the addition of the third dimension significantly affects the tenor of the experience, though I’m not sure I can justify that well right now.) And it’s a mistake to think of that as somehow inevitably tied to platforming: you can have the same feeling of exploration while driving, while leading a life of crime, while rolling around in a ball swallowing up everything in your path.

The Jumps

Having said that: while I no longer consider Super Mario 64 to be a model for a 3D platformer, and while I think it has ultimately been more influential outside of the platformer genre than inside it, diving back into the game has reminded me of how much it has to bring to platforming. Because it’s not about exploring a space in the abstract: it’s about exploring a space as Mario, as a person capable of superhuman feats of jumping. To that end, Super Mario 64 adds not one but four new moves to his repertoire: the backflip, the long jump, the triple jump, and the wall jump. I love the exploration that the game allows, and the extra moves let me travel more widely, with more choices of how I get from here to there; and one of my favorite challenges so far has been the “Wall Kicks Will Work” star in Cool, Cool, Mountain, forcing me to figure out exactly how I’ll be able to navigate my way up a series of crevasses.

In fact, this may be pointing out the narrowness of my focus: I say that those moves are new, but of course the 2D Metroid games featured wall jumping as well. And the Metroid games were about exploring environments much more than the 2D Mario games were. Though they’re much more cramped than Super Mario 64; part of that is the theme, but I’m fairly sure that a lot of that is the way 2D encourages you to fill your levels with walls if you want to combine exploration with the joy of movement. And, in a curious twist, the Metroid games shifted as much in their transition to 3D as the Mario games did; I don’t think that’s a coincidence, though I’m not sure I can justify that suspicion, either.

While I’m hesitant to label Super Mario 64 as a 3D platformer, that has more to do with the essentialist nature of labels than anything else. The game sure has a lot of platforming in it, and that’s very much a strength.

Roots and Offshoots

The title from this post came from an amusing choice of names that my computer made while copying files. But it’s curiously suggestive: the gulf between Super Mario Bros. 3 and Super Mario 64 is, indeed, rather large. There’s clearly an ancestral relationship there; but there are a lot of other connections in the family tree, and the tree continues to spread.

super mario galaxy 2

September 27th, 2010

In general I think of myself as the sort of person who feels compelled to complete video games at a narrative and geographic level, following all of the obvious side quests as well as the main line, but not to master their mechanics. And of late I haven’t been entirely comfortable with that state of affairs . More and more, I’m valuing video games for their density; to that end, might I not get more out of my (quite limited) gaming time if I were to make my way fairly directly through games, or even not to finish them, bailing out once I’ve gotten most of their novelty? Or, alternatively, maybe I should dive into video games in more depth, really trying to plumb their depths, to master them? When contrasted with those alternatives, my current state of affairs looks like a middle way that speaks more of spinelessness than Buddhist virtue.

Which brings us to Super Mario Galaxy 2. Sure, it’s a well-constructed game; but I hadn’t gotten too far before I started to wonder: haven’t I seen this before? Haven’t I spent enough time moving from one end of a linear path to the other end, while dutifully wasting time looking for loosely hidden trinkets (comet coins in this case) along the way? Looking at the alternatives above, there’s really not much scope for mastery here: either you can make it to the star at the end or you can’t, I’ve played enough platformers that I fall into the former bucket quite reliably, and I have no particular desire to repeat levels trying to shave a few seconds off of my time. Instead, I was thinking that I would switch over to just getting enough stars to be able to advance through the game, and was even toying with the idea of stopping before saving Princess Peach.

And then I hit the first of the comet levels. As soon as I finished it, the game threw several more comet levels at me. (I’m not quite sure why it batched them up that way.) And it turned out that there was reasonable scope for the game to bring out my (frequently latent) mastery urge; from that point, I was hooked, making steady progress through all 120 stars. Which is, in itself, kind of interesting: I don’t have the desire to hone seconds off of my time, except that I’ll happily do that if the game tells me? I’m honestly not entirely sure what’s going on with my psychology there; I have no complaints about the results, however.

Because it really is a lovely collection of challenges. I wouldn’t want to play games like this all the time—the two-and-a-half year gap between the original and its sequel was none too short for me—but it’s more varied than any game of its sort that I’ve seen, it has a wonderful rhythm in its difficulty variations (the comet levels made all the difference, but one comet level out of every three or so turns out to be just right), and it doesn’t outstay its welcome when it ends.

Exactly what “its sort” means, however, is something that’s on my mind right now. I came up with a theory a couple of years ago that Super Mario Galaxy and Super Mario 64 are pointing in quite different genre directions, to the extent that I’m no longer sure it’s appropriate to call Super Mario 64 a platformer at all. At the time I wrote that, however, I hadn’t played Super Mario 64 for almost a decade; for all I knew, I was completely mischaracterizing the game.

Fortunately, I have an excuse to remedy that gap in my argument: the Vintage Game Club has just started a playthrough of Super Mario 64! I’d been really looking forward to that for a while, and the first few days of the playthrough have done nothing to dampen my enthusiasm. And, just to be helpful, Super Mario Galaxy 2 itself throws in a remake of one of the iconic Super Mario 64 levels near the end, making it particularly easy to contrast the two.

If you’re at all interested, I encourage you to join in our VGC playthrough; and I hope to have more to report here over the coming weeks.

cow clicker viral participation

September 19th, 2010

(Obligatory disclaimer: these are my thoughts, not Playdom’s/Disney’s.)

One of the things that has impressed me the most about Cow Clicker is the culture that has sprung up around its wall posts. Wall posts are offers of bonuses and/or requests for help that games encourage you to post. And in my experience (which, I should add, is a guess, I haven’t looked at the numbers for this), people generally don’t follow games’ suggestions to post to their walls most of the time; and when they do, they generally leave the post as is, instead of adding a personal message.

With Cow Clicker, however, my friends seems to be posting to their wall a fairly high proportion of the time that they’re invited to do so, and almost universally add a message when they do so. Why is this?

The first part can, I imagine, be explained by a combination of the second part and the considerable help that posting to your wall gives you in game. (It’s basically impossible to make enough money to buy the better premium cows without either paying or clicking on lots of others’ posts or having lots of people click on your posts.) So really, the interesting bit here is why this culture has arisen of personalizing the posts. And not personalizing them in a random way: as with the example here, the personalizations almost always consist of wordplay of some sort, typically riffing on the type of cow that you currently have.

Some theories I have:

  • It’s a satirical game, and those of my friends who play it are generally word-loving people who don’t play many Facebook games. And so they’re relatively unacculturated to Facebook game norms and not burnt out by viral requests, so perhaps they’re more likely to take the time to add a message.
  • The standard message (“I’m clicking a cow”) is ridiculously bare; maybe that void encourages people to fill it.
  • The art style is quite witty in a dry way; maybe that encourages people to follow up similarly.
  • The game itself has a fair number of jokes: the currency (Mooney), the cow types (the Oil Cow, the Holy Cow), and many of those jokes are puns; maybe that encourages people to follow up similarly.
  • Maybe my friends are just a bunch of weirdos, and other people playing the game don’t behave that way. (To clarify: certainly my friends are a bunch of weirdos, and maybe this is a manifestation of that fact.)

Not sure what’s going on; seems like a place where experimentation is called for. If you want virals to be posted and clicked on, then it’s certainly a good idea to make them extremely useful for in-game progression; but, beyond that, it may be helpful to leave so much space that players feel uncomfortable if they don’t fill it. (And giving them a nudge in the form of latent humor doesn’t hurt.) I doubt that’s the only way to proceed along these lines—I’ve been impressed by the copy writing in City of Wonder (but does that game’s good copy writing show up in its virals? I honestly can’t remember right now)—so probably going out of your way to make the default viral text stand on its own is also a valid approach. It wouldn’t surprise me, though, if most games end up in a middle space between those two ends and that said middle space is less productive.

the beatles: rock band

September 12th, 2010

I normally blog about a video game here when I finish playing it; that causes problems with games that I never actually stop playing, and the Rock Band games are the worst offenders in that regard. Still, with Rock Band 3 coming up, I figure it’s time to come to some sort of stopping point with The Beatles: Rock Band.

I decided that I’d declare victory when I’d gone through all the parts (including vocal harmonies) on all the music (including all the DLC). And the fact that I’d do such a thing (indeed, had already almost finished doing that, I only had three album parts to finish before this last push) is both a sign of the excellence of this game and a sign that I’m still sticking with my earlier thesis about the non-fiction nature of the game. Because I learned something over and over again when doing that, whether about the music or about my relationship with the music.

The music: Paul McCartney’s bass lines are awesome. Ringo’s drum parts, while less inspired, are surprisingly pleasant. Playing through the different eras of songs brings home in a very direct way how the band evolved, how much the music changes every couple of years. Drive My Car is super fun to play. The tabla part on Within You Without You is a revelation, completely different from any drum part in any other Rock Band song I’ve played. The trombone part in All You Need is Love is not so much fun to play: the controller has more of an effect than I’d expected. (I had the same experience with the Scherzo from Beethoven’s Symphony #9; more reason to look forward to keyboards, though it won’t be a perfect match with either of those examples, of course.)

And then there’s my relationship with the music. I do a lot better with the drum parts and vocal parts than I do on most Rock Band songs (my vocal range isn’t that great a match for Paul’s, but I actually kind of prefer singing in falsetto, so it ends up a wash); but, despite intending to branch out more, I still ended up spending most of my time on guitar. I’m lousy at vocal harmonies, in particular almost completely unable to hit them if the harmony is beneath the lead vocals; but on those occasions when we do hit them, it feels great. In fact, it’s one of the most powerful experiences I’ve ever had when playing a video game; the flip side is that it’s one of the video game experiences I’ve had that is least tied to the medium, which is a somewhat unsettling thought: maybe I should be spending more of my time elsewhere! I tried out simultaneous guitar and vocals, though I also didn’t spend as much time with that as I would have liked; and even for songs where I knew the vocal parts well, playing expert guitar turns out to demand enough of my concentration that singing along became quite difficult. (I wonder how much that speaks to the artificiality of pre-Rock Band 3 guitar parts? It’s not that the mechanics of playing expert guitar parts are necessarily so difficult, I just can’t do them by ear.) And actually medium guitar turned out, in some ways, to also demand more of my concentration than hard: so many of the notes were missing that I had to concentrate a bit more to hit the rhythms.

Also tying in to the nonfiction nature of the game, and to the mentoring power of achievements: the achievements for hitting all the hammers-on and pull-offs in a piece. When I first saw them, I thought it was a fun idea, but it seemed odd to include three such achievements: wouldn’t one be enough?

As it turns out: no. I’m not a guitarist in real life, so doubtless Dan will correct the details here, but it turns out that the three songs use hopos in rather different ways. Octopus’s Garden is the most traditional; the hopos are rather elaborate but ultimately they’re there for runs of notes. In Dig a Pony, however, you’re sort of sliding around the guitar; in particular, it has the highest proportion of chord hopos. And in Dear Prudence, the actual music is finger picking instead of strumming, so the hopos are used for notational purposes, to heighten the fact that you’re simultaneously picking out a melody part and harmony parts.

Quite a game. It’s a real shame that the other ten albums didn’t make it out as DLC; but Harmonix had good enough taste in the three albums that they chose and in the on-disk content that I don’t feel too sad about that. And, after all, I have thirty or so pieces of regular Rock Band DLC sitting on my hard drive that I haven’t gotten around to playing; I should really take care of that before Rock Band 3 lands…