[ Content | Sidebar ]

correction re “employees as commodities”

April 13th, 2011

A correction in regards to my earlier post on “employees as commodities”. My guess as to why my peer bonus gift cards was cancelled was incorrect: a former coworker got curious and asked around, and it turns out that, due to a mishap, a bunch of gift cards got cancelled. And Playdom decided not to tell any of the recipients. So it wasn’t directed at ex-employees: current employees also had their gift cards cancelled, and also didn’t find out until they tried to use them (or check on the balance).

Which is odd in its own way, but I’m glad to learn that this isn’t directed at ex-employees, at least. And if any of my former coworkers are reading this, and you got a peer bonus in January that you haven’t used, you might want to check on the balance of the gift card first…

text adventuring on the ipad

April 12th, 2011

I played through Planetfall recently (still an amazing game, about which more later); but, before doing so, I had to decide what platform to play it on, given the plethora of Z-Machine interpreters. And I decided to give Frotz on the iPad a try.

That was an experiment, but not a particularly eccentric one: I far prefer reading PDFs on the iPad to reading them on a computer screen, and it’s better for reading e-mail, blog posts, etc. as well. In general, if you want to read text, the iPad (in vertical orientation) is the way to go: it does a great job of being a programmable sheet of paper. So, given that, interactive fiction seemed like a pretty good match. (And in a horizontal orientation, it’s a natural match for point-and-click adventures; I certainly thought it was a good fit for Puzzle Agent.)

The verdict: it worked well, but not as stunningly so as I’d hoped. For one thing, a text adventure (at least in its Infocom iterations) isn’t something that you play just with a device: you play with pen and paper at hand, to make a map and take notes. So I couldn’t just curl up on a sofa with the iPad: I had to be sitting somewhere where I could write and draw. Now, that’s not necessarily a drawback for playing on the iPad as compared to a computer: I’d have the same problem if I were trying to curl up with a laptop! But it does mute one of the iPad’s main advantages.

Also, the interface isn’t a joy to look at and use the way, say, Reeder is. The margins are nonexistent, the font is too small, there aren’t the sort of surprising touches that the best iPad apps have. Again, this doesn’t make it any worse than a computer Z-machine interpreter would be, but it missed a chance to be better.

And, finally, there’s input. The iPad is great for reading and for touch interfaces; it’s acceptable but slightly annoying to use for typing. Which you do a lot of while playing a text adventure! Also, not infrequently you’d like to use the up arrow key to edit your previous input, but that’s not available on the iPad. So that’s a bit of a bummer, the one area where a computer has a clear advantage.

Those are the downsides; the truth is, though, that most of them aren’t downsides as much as a lack of a potential upside, and it remains a nicer device to get close to than a computer. Still, there’s a lot of room for improvement! At a minimum, I’d prefer better layout and typography; and if somebody could come up with a keyboard interface that was a little less grating (maybe providing an up-arrow somehow, maybe somehow working each game’s dictionary into the autocompletion?), that would be great. And if there were a good way to draw maps in-game, that would be awesome: I see that Frotz does have a note screen (though I only discovered it after finishing Planetfall), but most of the time what I really want to do is draw maps instead of typing textual notes.

My guess is that I still prefer text adventuring on the iPad to text adventuring on a computer. But it’s closer than I expected; I should probably do my next experiment on a computer instead. Fortunately, I was impressed enough by how well Planetfall has held up that I’ll probably do so sooner rather than later!

come work for sumo logic!

April 10th, 2011

I’ve been at Sumo Logic for about a month and a half now, and I’m really enjoying myself: very interesting programming, great coworkers, and I’m quite optimistic about our product. So if you live in the Bay Area and think it would be fun to write Scala code to do real-time analytics on very large data sets, we’re hiring, please join us! Or, if Scala isn’t your thing, we also have a product manager opening, a dev ops opening, test automation openings, and a user experience opening.

alexandrian minecraft

April 7th, 2011

When I first started playing Minecraft, I spent most of my time, well, mining. Or at least underground: I’d obsessively dig stairs going straight through the rock in one direction or another, I’d occasionally hollow out a blocky room whenever I needed a space for a chest or a crafting table, and every once in a while, I’d run into a natural cave, some of which were mundane and others of which were spectacular.

Eventually, though, I got bored (or perhaps overwhelmed) with those underground caves, so I decided to work on a house. I didn’t head outside to do that, however: the opening of my mine was at the base of a fairly large hill, so I decided to hollow out the space above the entrance into a room.

Since I was working above ground, I hit the side of the hill fairly soon, so I put in a window. And, as I continued to enlarge that room, I hit another side of the hill; following my Christopher Alexander fetish, I recognized this as Light on Two Sides of Every Room.

One of Christopher’s Alexander’s main points is that you shouldn’t design buildings in isolation, you shouldn’t design them abstractly: you should design them in context, you should design each building so that the area around it is made richer by the presence of that building. And one of the wonderful aspects of Minecraft is that it’s a building game that encourages such an approach. Yes, if you want, you can build in Minecraft as if you were working with Legos, assembling the blocks that you have at hand into whatever shapes you find pleasing. But one of the most amazing aspects of the game is the terrain that it generates: and a building that fits into that terrain and finds a way to fill a gap that is missing is much more powerful than a building that’s plunked down into a plain that you’ve artificially leveled.

Indeed, going through Alexander’s fifteen properties, we see many that have echoes in Minecraft. The walls of the house that you build to survive your first night are an excellent example of Boundaries. The wonderful overworld combined with the importance of mining (and with natural caves bringing space to the interior of the earth!) provide Deep Interlock and Ambiguity and Positive Space in a context of Contrast. The large blocks, in their own way, provide Roughness; the terrain is full of Good Shape, and not infrequently I turn a corner and am struck by a wonderful waterfall (or lavafall!), a single tree in just the right place, or a forest of trees filling a valley, any of which makes a Strong Center indeed. And the range from single blocks to trees to hills to mountains to the span from bedrock to the top of the sky has room for several Levels of Scale.

Which isn’t to say that it’s a perfect Alexandrian space. There is room for several levels of scale, but the size of the blocks imposes a limit: the world may stretch on forever horizontally, but you only have 256 blocks of height to play with. And the context that Alexander wants you to place your buildings into isn’t defined only by the pre-existing shapes that are present: it’s the context of the people who will be using those buildings, people who are (pace the pleasures of multiplayer servers) almost entirely absent in Minecraft. Nonetheless, as much as I’ve enjoyed other construction games recently (Social City being the most prominent example), Minecraft does a much better job of providing context.

And it certainly does a good enough job of providing context to make me realize that I’m pretty bad at architecture! Take that picture above: one of the windows in question is at an angle (so it’s perhaps more light on one-and-a-half sides rather than two sides of a room), and the wall between the two is a much weaker center than a corner would be at that location. In retrospect, I was much too deferential to the existing shape of the hill when I hollowed out that room: I should have taken a slightly firmer touch in places, reshaping the walls to make the interior space more usable while not harming its outside appearance. I tried to do that some on the third floor, but that also led to problems: I ended up extending past the sides of the hill in a few areas, with the result that there are overhangs above the windows on the second floor, meaning that they didn’t provide as much light as they should have. And one side of the hill in question led into a natural arch; a wonderfully strong center in its own right, but again windows facing that arch didn’t provide enough light to make the adjacent rooms really livable.

Still, I got better at creating and enhancing centers as I proceeded up the hill. I’m rather fond of the way the third floor balcony turned out: the Deep Interlock and Ambiguity that it provides as a Boundary between the interior and exterior, the Level of Scale that it provides in relation to the larger interior room, and that sunset view is hard to beat. The stairs going up the outside of the hill from that balcony also provide a nice accent to the existing shape of the hill, and, going further up, there’s a turning set of stairs inside a large glass enclosure that provides an even bigger boundary area between inside and outside than the balcony did, while solving a somewhat thorny problem posed by the pre-existing geometry of the hillside and my third floor room. Up on the roof, I originally planted five trees before chopping down all but one of them, since its power as a Strong Center would more than make up for the absence of the other four.

There’s so much more to do, so much more for me to learn. I’ve hollowed out perhaps a quarter of that hill: how best to acknowledge the rest of it? And then, how can I move away from the crutch of using an existing hill to form the shell of my house: how best to build houses outside in the Minecraft landscape, at first hoping only to not mar the beauty of that landscape too much, but eventually finding ways in which I can make the landscape a bit more whole? And how to reconcile that with the part of me that likes digging corridors, that would enjoy nothing more than to lay down minecart tracks in a straight line all the way to the horizon?

employees as commodities

April 6th, 2011

Edit: The speculation in the second half of this post is incorrect, see this followup for clarification.


Probably the main reason why I wasn’t unhappy to leave Playdom was that I’d gotten the feeling that much of the upper management viewed the company’s employees as commodities. After the acquisition, the company didn’t make any effort that I saw to keep its employees around; partly as a result, lots of people left, including quite good people, and I didn’t get an impression that upper management saw this as a problem. The company also didn’t pay for anybody to go to GDC this year who wasn’t speaking: fine for me personally even if I’d stayed there, I don’t see any reason why Playdom should have paid for my pass, but I imagine that I would have felt differently if I were a game designer.

To be fair, Playdom didn’t force people to take vacation time to go to GDC, which does cost more than the price of a pass. The startup perks haven’t entirely gone away, either: as far as I’m aware, there are still free lunches and dinners, and they were good enough that I didn’t bring my own food from home. More importantly: there are a lot of people there who care a lot about their fellow employees and about the games they’re making. (Speaking of which, give their latest, Deep Realms, a try! It’s a dungeon crawler with a lot more item / attack management than other Facebook games that I’m aware of.) But I was recently reminded of Playdom’s bean-counting aspects when I went shopping this weekend.

Playdom has an employee bonus program, where each person can give out cash bonuses to a few coworkers each year. Which has its pluses and minuses, but I will say this: I gave out a couple, and they meant something to me on a personal level, and the one I received meant something to me as well. The bonus comes in the form of an AmEx gift card; I’m assuming the thought there is that it’s a tangible object that you can hand over to the person you’re giving the bonus to, to make it more of a personal ceremony.

The down side of a gift card, though, is that it’s a little hard to use up (compared to, say, having extra money magically appear in your paycheck); so mine sat in my wallet for several months. But I had an extra-large grocery bill this weekend, I asked the store if they could split it among multiple payment sources, and tried to use up the gift card that way.

I failed (doubtless annoying the customers waiting behind me in the process; sorry!); when I called American Express, it turns out that Playdom had cancelled the card. So I guess, from Playdom’s point of view, it wasn’t a cash-equivalent bonus after all, or a recognition by a coworker for what I’d done in the past: it was a loss that they were happy to pounce on when they had the chance.

Don’t get me wrong: this was not some sort of huge bonus or anything, nothing that I actively regret losing. (So, actually, I’m more surprised at the pettiness of their canceling the gift card than anything else.) Going through the Kealia acquisition and then the Playdom acquisition, however, has been an informative illustration of some of the different ways that companies (both the small companies being acquired and the large companies doing the acquiring) view their employees, of what matters to people with the real decision-making power within those companies. (I imagine if I’d stuck around through the Oracle acquisition, that also would have provided an interestingly different perspective.) Something to keep in mind if I’m ever in a position to affect such decisions at Sumo Logic, or to try to feel out whenever the next time might be that I’m considering changing jobs. (Which I don’t expect to be any time at all soon!)

looking for earbud recommendations

April 4th, 2011

I usually listen to podcasts when I walk to and from work or do the grocery shopping, which means that I like to always have a set of earphones in my pocket. And, unfortunately, they have a habit of breaking more often than I’d like: it’s not unusual for me to have to buy a new set every two or three months. Which is annoying!

So, given my lack of luck and finding a pair that will work reliably, I thought I’d ask for help. Recommendations? Some things I’m thinking about:

  • All things being equal, I would of course prefer ones that sound better. I realize that you can’t ask for too much out of earphones that live in my pocket, and I mostly listen to non-musical podcasts, so I’m not willing to pay a huge premium for better sound, but I don’t want the sound to be super-crappy, either.
  • A built-in microphone for phone usage is nice but not essential: I’d pay somewhat more money for that, but I’m quite willing to consider ones without a mic.
  • I’d be happy to spend more money on pairs that I had reason to believe would last longer: I’m more or less trying to minimize the total replacement cost per year of use, subject to the points above. Though the flip side is I’m not quite sure what evidence would convince me that a given pair of earphones would last more than three months or so!

Any suggestions? For what it’s worth, ones I’ve been using are: these V-MODA ones without a mic, these V-MODA ones with a mic, and Apple’s. All of which sounded acceptable, but none of which reliably lasts more than three months.

social network publishing

April 3rd, 2011

I (along with a lot of other people) was curious about Diaspora when it was first announced, though I can’t say that I’ve been too excited about its initial release. (Incidentally, feel free to add me if you’re already on Diaspora, and I also have invites available if people want them; I don’t currently plan to check the site at all frequently, however.) It seems to focus more on restricting on whom you publish different updates to than anything else; I don’t want to minimize the importance of that, but I personally am not very worried about restricting my updates, and to the extent that I’m interested in selectively publishing my updates, I’m more interested in having that as an option for readers to chose than one that publishers choose. (I also far far prefer Twitter’s asymmetric following model to the symmetric one that Facebook uses and Diaspora copied.)

To me, the most interesting aspect of the project as initially announced was its decentralized aspect. That seems to have been largely a failure at the start: it was possible to get accounts on different nodes, but the early buzz seemed to be that they didn’t all work equally well, and all the people I’m following (all four of them) are on the same node as myself. I don’t want to second guess Diaspora’s apparent choice to deemphasize the decentralized aspect of the project, but personally I would be more interested in its possibilities if aspects weren’t there but if people were spread across hundreds of nodes, and if it were easy, performant, and secure to run your own server instance. Hopefully that will come, though, and that probably wouldn’t make any difference at all from a social point of view, so I guess I shouldn’t worry too much about that. And I certainly don’t want to write off Diaspora: it seems to still be getting a healthy stream of commits, which is great.

Anyways, enough about Diaspora: what do I want social network publishing to be like? My current model is to do all my posting on Twitter, with that syndicated to Facebook. That has some good aspects: my attention isn’t spread, I feel at home in my Twitter feed but I also appreciate the comment threads that occasionally pop up on Facebook, I have a social graph available for Facebook game purposes. But, of course, it also some bad aspects: it gives too much control to Twitter (I don’t even have an archive of my own posts!), Facebook is more of a second-class citizen than I’d like.

So: what can we do about this? One computer science reflex is to solve problems by adding an extra layer of indirection, and that doesn’t sound like a crazy response to the current power that Twitter has over my publishing. (In fact, I’d vaguely hoped at one point that maybe I’d switch to writing on Diaspora, and syndicating from there to both Twitter and Facebook.) The problem with that approach, though, is that you need to make sure that you don’t lose the current benefits of those sites: Twitter isn’t publishing, it’s a conversation. So you’d want to pull in conversations from Twitter and Facebook as well, presenting you with a merged feed (including detecting duplicates from other people who are also syndicating). (Incidentally, one aspect of 龍が如く for Twitter that I really liked was that, when showing you a tweet that was a reply, it automatically included the replied-to tweet as well: yay for increased visibility into conversations.) And you’d want to combine all of that with a searchable archive: I still find it kind of amazing that there’s no way to search your Twitter feed, to pull up past tweets that you’ve read about a topic. (You could further extend that archive functionality, e.g. saving the target for shortened links.) Eventually, you’d want to support direct syndication between instances of this mythical platform, to avoid the need to go through a third party at all. (And exporting a social graph for non-conversational purposes, e.g. games, is important!)

And then there’s the problem of the platform owners. Twitter has a nice and flexible API, but they’ve recently come down hard against third-party clients, and the dickbar debacle has left me with a bad feeling. I’m embarrassed to say, given my previous employment, that I don’t even know what Facebook’s API is like for reading the feed: I assume it has one, except that, if it does, why isn’t there a better iPhone client out there, a Tweetie analogue? (There probably is, it’s doubtless just my ignorance showing.)

My first reaction is that the best place to start attacking something like this would be with the archive aspects. The fact that I don’t have a record of my own microblogging bothers me (though, honestly, less than I would have expected a few years ago: I’m comfortable with the ephemeral nature of my tweets); and if we could combine that with an archive of conversations, so much the better. That’s a concrete task that would force the implementor to confront with the realities of the data; hopefully, adding publishing on top of that wouldn’t be difficult.

Though the problem with taking that kind of data-centric point of view: where is it stored? I depend on having Twitter access from all sorts of places; would I be comfortable adding a layer of server indirection to have access to that? (And that’s just what would be necessary to make clients possible: actually writing them is a whole other kettle of fish!) If I don’t want to have a persistent server, would I be comfortable having my iPhone as the trusted repository for this data?

Thoughts? I’m not seriously proposing this as a project that I’m going to launch into—I have a job keeping me happily busy, after all! And certainly there are way too many social network ideas floating out there. But there is something wrong with social network publishing as it currently stands; I’d like to better understand how I’d like that world to look.

dragon age: origins – awakening

March 30th, 2011

I try to write here about every full length game that I finish, but for better or for worse I don’t have a formal policy about DLC. I thought I might blog about all of the Mass Effect 2 DLC, but I never got around to doing so; and, indeed, I don’t think my brain does well at composing that sort of survey. Maybe I should have concentrated harder on just one of the pieces of DLC and found something to say?

I got the ultimate edition of Dragon Age: Origins, so I had access to all the DLC for that game. And, for better or for worse, I figured I’d just go along with my inertia and launch into the DLC immediately after finishing the full game. (Except for The Golems of Amgarrak: that one seems to be about something that I’d explicitly chosen not to do in the main game, so it would have felt jarring to do it as DLC.) I wasn’t planning to write about any of it, but after a couple of evenings, it became clear that Dragon Age: Origins – Awakening is as long as many full games that I play, so I figure I should say something about it.

So: it’s more Dragon Age. In a different area of the map, one which is festooned with gear that is designed for characters in the level 20-30 range; quite a coincidence, that! You see some familiar faces, but not many (and in particular not my true love; incidentally, would it have been that much work for them to actually take note of that correctly when doing Awakening‘s final credits?); Anders piqued my interest enough that I’m looking forward to seeing him in Dragon Age 2, I rather liked Sigrun’s personality (though she does an awful job of filling the rogue slot), and I wish I’d spent more time with Justice.

And then there’s the plot. Which I was unimpressed by at the start: the Darkspawn menace is supposed to have been quelled for now, but we can’t cook up another similarly dire threat in short order, so we need an excuse for them to reappear. I know, let’s have them talk this time! And then it took a turn for the odd: the Mother and Children get added as another sort of weird Darkspawn enemy, which seems to be trying to take the game in a sort of horror direction, but not at all effectively. (The game kept on telling me how horrifying the Children are, but it sure didn’t feel that way.) The Broodmother bit in Origins hit similar themes, but in a way that hit me much harder.

So I was quite surprised to discover that, when I reached the last couple of hours of the game, I really rather liked the plot, in fact probably much more than the main threat aspect of the plot in Origins. The original game had an entirely cookie cutter main threat, and was cookie cutter in a way that’s politically problematic. We’re at war with an other, they want to destroy our way of life and slaughter us wholesale, and it’s okay to slaughter them wholesale both to return the favor and because they’re mindless drones acting at the behest of their leader. (And they look really different from us, too, which helps make the killing okay.)

That is a scenario that plays out over and over again in the real world. (It’s playing out now, certainly!) And, in the real world, it’s never that simple, even in the most extreme of cases, even where your enemy is doing genuinely horrific things. Yes, the game is a fantasy, yes I happily do a lot of things in games that are horrible in the real world. But still, it’s a lazy plot, in a game that isn’t so lazy in many other aspects.

And Awakening subverts that directly! It works within the constraint of plot continuity, and doesn’t present the Darkspawn as horribly misunderstood; but it does say that yeah, they probably shouldn’t be mindless brutes, so let’s work with that while leaving a certain amount of uncertainty in the situation. (As befits a nation that’s emerged from a horrible war.) Rather well done, as it turns out.

Which isn’t to say that I love everything about the plot in Awakening. I’m not thrilled with the pairing of the intelligent/wise father figure with the misguided and emotional mother figure; for that matter, I’m not that thrilled with the great leader trope at all! Still, I left the game impressed on balance; and playing it significantly increased the chance that I’ll play Dragon Age 2 sooner rather than later.

java, maven, and include files

March 28th, 2011

Libraries, Interfaces, and Dependencies

The code base for my new job is rather larger than the code base at my last job, which means that I have to start thinking about the build process more than I’ve been in the habit of doing recently. I know how to set up a good build system for C-based languages (hint: gcc -MD is your friend), but I’ve never felt as comfortable with the options for Javaish environments, even for relatively straightforward projects that are just building a single program.

And we’re not building a single program: it’s a distributed system, with a collection of programs using some common libraries and some distinct libraries. Which is quite similar to the situation at Kealia, but the build system feels rather different. Part of that is related to the source code layout (we’re putting each module in its own git repository), but part of that is due to differences in the Java/Scala way of compilation and the C-language way of compilation.

At Kealia, our product code was spread across three directories: interface, which had one subdirectory for each library, containing the public header files for that library; lib, which had one subdirectory for each library, containing the .cpp files and private header files for that library; and prog, which had one subdirectory for each program, containing the code specific to that program that we didn’t feel like pulling out to a library. So the build process was in two phases: it built all the library code in parallel, and then all the program code in parallel. (If I’m remembering it correctly, actually, the build system was happy to start working on program code even if some of the libraries weren’t done building, but at any rate dependency chains at the library/program conceptual level were never more than two deep.)

In Javaish languages, though, that doesn’t work, for the simple reason that the language doesn’t have a notion of a header file: if library A depends on library B, then you have to build library B before library A. Java programmers like to talk about how, in C++, header files mean that you have to write your class interfaces twice; that’s a quite valid complaint, but it bites you in situations like this. Though the situation isn’t quite as simple as that description makes it sound: in a lot of situations, Java interfaces end up acting a lot like C++ header files, giving you some amount of separation of compilation while also requiring you to write some of your class interfaces twice. Certainly proper use of interfaces is important in reducing long dependency chains; I don’t think we’ll be able to get down to two levels of dependencies, but what is the shortest chain that we can reasonably get to?

One answer might be three: break each library up into an interface part and an implementation part, like the include and lib directories from my C++ example. Programs should only depend on libraries and interfaces, and library implementations should only depend on other libraries’ interfaces, never on their implementations. That sounds plausible to me, both in terms of being achievable and in terms of being a good idea, but I’m not sure that it’s enough to get us to three levels of dependencies. The problem is that one library’s interface can reasonably depend on another library’s interface: e.g. if you happen to be writing a video server, you might reasonably have some generic MPEG classes that are referred to in the interfaces of multiple libraries, which means that they themselves have to be in a separate library. So that’s four levels of dependency; I can even imagine that it would be hard to avoid introducing a fifth level, because you might have some fundamental data structures (e.g. some sort of widely used numeric abstraction or custom collection) that shows up in the interface of shared classes that are a bit more domain specific.

So: five levels of dependency. That doesn’t sound like a very good rallying cry, does it? Still, at least it’s a stake in the ground, and having those five layers be well defined (programs, library implementations, library interfaces, shared interfaces, and a handful of core interfaces) is something.

Is even that achievable, though? C++ header files define a few different sorts of concepts. There are abstract interfaces; these are a lot like Java interfaces. There are ADTs; these belong in my interface layer above, but contain actual implementation as well. And there are methods that you call without having an object instance at hand: static methods, but also constructors.

What do you do about this latter class of functions? In C-family languages, the linker happily resolves them for you; what’s the analogue for that in Java? I guess the answer there is: if you have a static method (including class constructors) associated to a class that’s not plausibly an ADT, then you have to make sure that there’s an extra layer of indirection involved to let you do the wiring at the program level instead of at the cross-library level. In other words, you have to get serious about dependency injection: library A shouldn’t depend on the implementation of library B, even to do the basic setup for that library. Instead, library B should abstract all those static methods out into an interface, library A should be written in terms of that interface, and every program that uses library A should pass an implementation of that interface to library A. (It can get that implementation from a static method in library B, but the point here is that it’s the program layer that’s grabbing the static method from library B, not library A’s implementation layer.)

At first blush, I think that should work. Actually, it even seems plausible to me that it would lead to better structured programs than you would get if you didn’t worry about rigorously adhering to such standards. Five layers of dependencies: it’s good for your software! (Not the best rallying cry I’ve ever heard…)

Maven

The other aspect of our setup at work that’s new to me is Maven. I’m really not sure what I think about Maven yet: I’m willing to believe it’s better than Ant, but I’m also willing to believe that that is not much of an accomplishment. I like its emphasis on convention, I like the way it’s good at pulling in known versions of external resources (your Scala compiler, your jUnit version, etc.). But I’m less sold on its insistence in separating every artifact into a separate project: what happened to Recursive Make Considered Harmful? And it boggles my mind that, in this day and age, a build system would be written that only supports parallel builds as an experimental feature in its as-yet-unreleased third major revision number bump! We’ve known for most of a decade now that many cores are the way forward, yet I’m using a build system that can’t even keep two cores on my machine busy? That is ridiculous.

Another part of the picture is Hudson: our build system at work is set up so that you’re encouraged to have Hudson build artifacts that you’re not actively touching. (And Hudson is capable of doing those builds in parallel. This perhaps makes it possible to live with the aforementioned Maven limitation, but in no sense excuses it: if I’m starting up a project, I absolutely should not be required to set up a continuous integration server just to get non-braindead compilation performance. I realize that the Java world is not known for its fondness for lightweight systems, but that is… Sigh. I will stop ranting now.) I haven’t yet figured out what the Maven way is here: is Maven perfectly happy for you to have all your build artifacts under your own control, is Maven actively hostile to you having all your build artifacts under your own control, or is Maven agnostic about that question?

This all also bears on the question of source code repositories that I mentioned above. At first, once I got over my surprise, I kind of liked the idea of having each module in its own git repository: let’s take the idea of separate modules seriously. But once we start breaking up one conceptual module into an interface part and a library part, I’m less happy about having them in separate repositories: you’ll want to change an interface and the code that implements that interface in lockstep, which means that changes to them should be part of a single commit. And I’m also not sold on this idea that we should have Hudson in charge of building all these different artifacts for us: maybe I’m conservative, but I still like the idea of checking out a known version of the entire project’s source code, doing a build of it, and getting a reliable, reproducible result.

Lots of interesting questions to think about, lots that I still have to learn. (And that’s without going into my discomfort about dependency info generation for Javaish languages!) Probably the best thing for me to do would be to start a project at home: I should come up with something to write (probably purely in Scala, I don’t think that mixing Java in will either make me happier or clarify the situation) that I can plausibly break out into multiple libraries, so I can really grapple with these dependency issues.

finished my pro keys run

March 23rd, 2011

Over the last couple of months, I’ve been going through all the Rock Band 3 Pro Keys songs on Expert, going through each one several times to try to do as good a job on each one as I can. You can find more details on my other blog, if you want blow-by-blow narration, but I figured I’d give a bit of a recap here now that I’m done.

It’s been a very interesting experience. Some of that is what I talked about yesterday: I just don’t put in that sort of repeated focused practice in other video games, and I don’t think other games support that nearly as well as the Rock Band series does, Rock Band 3 in particular. And after years of doing not particularly well in competitive multiplayer video games with the VGHVI crowd (who, I assure you, are an extremely congenial bunch, I can’t imagine losing to nicer people!), I take a certain pleasure in having one mode in a game that I can point at and say that yes, I’m better at this than the vast majority of you. (As of this writing, I’m in 34th place on the overall Pro Keys leaderboard. Though I’m pretty sure that at least one person reading this blog is better at Pro Keys than I am…)

And watching the leaderboards has given me a glimpse into how this game appears different to people with different musical backgrounds: while my ranks on individual songs are all quite decent, they aren’t uniformly so. On some songs, I worked hard and still ended up with a rank in the two-hundreds, while there were other songs where I finished my first run through the song, felt that I’d done a kind of sloppy job, and was already up in the mid thirties. The pattern there seems to be what kind of playing the song requires: I don’t do so well on songs that require you to play the same notes over and over again quickly and precisely, while I can easily imagine somebody who is much better on Expert (non-pro) Guitar than I am will find that those skills transfer over to let them do well on such songs on Pro Keys. Whereas songs that require you to play through melodies and natural sequences of chord changes are ones that I can pull off without much thought at all: my hands know how to do that sort of stuff, no problem. (I knew that figured bass training would pay off eventually!)

When I first started Pro Keys, I found the notation a little bit frustrating, but I got the hang of it soon enough. And one of the realizations I had over the course of that process was that, if an interval was too wide for me to be able to read it at a glance, it was almost certainly an octave: that made certain songs a lot easier for me to play. But, dense as I am, it took me a while to realize the following: that’s very useful for me, because my hand has decades of experience in exactly how wide an octave is, but it’s a lot less useful to somebody who is coming at the game without a keyboard background! And octaves are only scratching the surface: my hand also knows what all sorts of triads feel like, including their various inversions and the combinations of black and white notes that show up in different keys. I have a huge amount of respect for anybody who has made it through the expert songs without a piano background: you (and your hands!) have learned a lot in that process. (My hands have learned something in the process, too: I would seem to be better at playing fast arpeggios with a reasonably even rhythm than I was before I survived Antibodies and Roundabout.)

So now I’m definitely a supporter of the notation that the game uses for notes. It’s obvious what the notation means, and the color divisions make sense on both a musical and a tactile level. It’s still not nearly as second nature to me as standard musical notation is (in particular, I seem to do most of my positioning by comparing the relative location of new notes to earlier notes, combined with knowledge of what makes sense musically, instead of directly translating a note on screen to an absolute position on the keyboard), but I can’t remember the last time when I had to look down at the keyboard when playing, so the notation is more than good enough.

Or at least it’s more than good enough within the constraints of the game. A two octave keyboard is a huge improvement over five buttons, but it’s too small to play all but the simplest of real songs; what’s worse, you’re never playing more than an octave at any given moment. So you play through the whole game with one hand, and while I suppose it’s convenient to have a hand free to activate overdrive, it’s very stripped down compared to real piano playing. (And, I suspect, compared to real keyboard playing in a rock band, though I don’t have any experience with that.) My guess is that the distance between Pro Keys and playing on a real instrument is significantly larger than on Pro Guitar or (probably) Pro Drums, though I could be wrong about that as well. I would love it if Rock Band 4 could have a much more serious Pro Keys mode, though it’s not at all obvious to me how to do that while working within the confines of the screen and without falling back to standard musical notation; then again, if anybody can come up with a way to cross that gap, it’s Harmonix. And, of course, I’d be perfectly happy with a mode that gave standard musical notation while letting me use both hands, though that would shrink the potential audience even more: as is, I’m somewhat worried that Harmonix is on the wrong side of an Innovator’s Dilemma slope.

But if they’re on the wrong side of that slope, it’s because they’re adapting their game more and more to players like me. Good times.

focused practice redux

March 22nd, 2011

Pro guitar mode in Rock Band 3 turns out to be totally fascinating: I’m still going through the songs on Easy, and I’m amazed at how much there is to learn and think about even on that setting. In particular, last weekend I decided that I would stop looking at my left hand while playing songs, focusing instead on the feedback that the screen and the feel of the instruments provide, and it turned into a much richer experience: I had to learn the locations of the seventh and twelfth frets, the distance between the two of them, I had to think harder about which fingers of my left hand to use when, and the patterns in the notes (reflecting underlying patterns in the music) became a lot more important. And, best of all, I didn’t have to be perfect at any of this: it turns out that the onscreen guide gives enough feedback to let you adjust fairly well in real time (at least if you’re playing with as few notes as Easy throws at you), much more so than Pro Keys does.

I was going to write a long blog post about how special this sort of focused practice in games is, but then I realized that I’d already done so. But since blog posts have a way of being forgotten quickly (even by their authors, it would seem!), I’ll just repeat the ideas here. The game is providing me with a short but meaningful challenge: meaningful in the sense that I have to work a bit to succeed at the challenge, and also meaningful in the sense that, by succeeding at the challenge, I’ll also gain something else that matters to me. (Listening to music, and learning something about the music while doing so.) The challenge is surprisingly rich, containing quite a bit more “depth on demand” (as Randy Smith puts it) than is apparent on the surface: I can decide whether or not I want to look at my hands, I can decide how much I want to think about where my hands should go, I can decide how much to think about the underlying musical issues that inform the challenge, I can decide whether my goal is to finish the song with no fail on, to finish it with no fail off, to finish it with five stars, to full combo it, to do better than my friends who are also playing the game (answer: no, given that Dan Bruno is on my Xbox Live friends list!). The challenge spans a single song, so is over in less than five minutes and can be repeated several times without trying my patience should I so choose; but that challenge is one of seventy-odd songs in the game in a carefully graded progression difficulty, and I have three more tiers of increasing difficulty coming from increasing inherent richness waiting for me once I’m done with those songs.

That is wonderful.

And also rarer than it should be. Some of which is my fault: if I spent more time playing multiplayer FPSes or fighting games, I would see more such focused challenges. They wouldn’t be crafted nearly as well towards my practice, towards improving my craft as Rock Band manages; but those genres also allow improvisation and creation far beyond Rock Band, which is a huge strength. (Hmm, maybe I should spend more time placing racing games: mastering a track provides a focused challenge, while the other racers provide unexpected stimuli to react to.) But I’d love to see a competitive game that comes with a series of prescriptive katas to help hone your skills for use in subsequent improvisation. (Or at least I think I’d love it: I’m not sure I’ve jumped at the learning modes (“virtual reality missions” and the like) in games that have tried to provide them. I did like the graded bot challenges in Perfect Dark, though…)

But it’s not all my fault. Too many games throw repetition at you for the sake of repetition, typically using the promise of narrative advancement as a lure to get you to put up with the repetition of the challenges. (And, sadly, the narrative is as threadbare as the challenge, more often as not: super wonder meh twins unite!) Admittedly, I could change my approach towards such games—when confronted with narrative games, I tend to dial down the difficulty level rather than embrace the challenges at the expense of prolonging my progress through the narrative—but there’s no need for games to force me to make that tradeoff, or to present me with two unsatisfactory choices rather than two tantalizing choices.

And I do need to improve my skills for thinking and talking about challenges in games. One of my favorite parts of working at Playdom was having excuse to play board games every week (with really fascinating company): those games focus much more on their mechanics, they’re fascinating, but I haven’t talked about them here as well. One of my favorite games over the last year was Flight Control HD, and right now I’m going through Tiny Wings: again, both focus on the mechanics, and Tiny Wings also does a rather good job of giving you focused challenges to help you see more of the ramifications of those mechanics. If that’s what we’ll find in this new world of cheap iOS games, then there’s a lot of good to be found there.

But also a lot of good to be found beyond there. Just put together the focused learning of Rock Band 3‘s pro modes with the improvisational possibilities of our best competitive games, and find a way somehow to couple that with narrative that reinforces and is reinforced by the mechanics. And do it all while mercilessly removing padding. That’s not too much to ask for, is it?

composing, decomposing, and recomposing methods

March 17th, 2011

Applying Compose Method

After I wrote that post on precedence, map, and function composition in Scala, I started to wonder: I’ve been thinking that I should experiment more with applying Compose Method. That refactoring recommends that, if I start with the original version of my code,

data.foreach(s => writer.addDocument(createDocument s))

then I should extract the body to a method. Which, I guess, would lead me to something like this?

data.foreach(addStringAsDocument(_, writer))

Except that that’s actually not what Compose Method really recommends: that’s merely one standard way of applying it to languages that are somewhat lacking in expressive possibilities. If all you have are manual looping constructs, and if you want to “keep all of the operations in a method at the same level of abstraction” (Smalltalk Best Practice Patterns, p. 22), then yeah, you’ll pull out your loop bodies to methods, but there are other ways to reach that end.

So, looking at the code that I actually ended up with that post (with the kind help of my readers),

data.map(createDocument).foreach(writer.addDocument)

is everything there at the same level of abstraction? That’s not entirely clear to me: if I wanted to, I could certainly extract a couple of methods out of that, and end up with something like this:

addDocumentsToWriter(createDocuments(data), writer)

Examining Alternatives

We’ve seen four examples of how that code could look; let’s replace the first of those with one that raichoo suggested on the previous post, giving us the following list:

  1. data.foreach(createDocument _ andThen writer.addDocument)
  2. data.foreach(addStringAsDocument(_, writer))
  3. data.map(createDocument).foreach(writer.addDocument)
  4. addDocumentsToWriter(createDocuments(data), writer)

Anybody want to argue for any of these being noticeably better or worse than all of the others? I’ll have to say: while they all seem fine to me, I can’t get too worked up over the need for using Compose Method in this case. Though, as I’ve been typing them up, I’ve wanted to add “fromString” in various places, which suggests that the method name createDocument is perhaps not as well chosen as it could be: maybe I should have called it something like stringToDocument instead?

Hard to say, I’m still happy enough with the third option. It says fairly directly that I’m starting with a bunch of data, turning it into a bunch of documents, and adding them to the writer: fine by me. (The first option seems approximately similarly expressive to me, as well.) There are, of course, situations where one or the other composed method would be preferable (as I said at the end of that earlier post, I ran into one an hour after I ran into the above!), but this doesn’t seem like one.

Recomposing and Natural Transformations

Maybe it’s the category theorist in me, but this also raises one other question: consider the two composed methods, 2 and 4 in the above list. Say that you reflexively went with option 2, but then decided that it didn’t seem quite right. You could (probably would) inline the function, and then distribute and regroup to end up with the fourth version; that seems like a pretty standard sort of thing to want to do. (It wouldn’t be too much of an abuse of language to call it a natural transformation!)

So: if we’re going to make a taxonomy of micro refactorings, might we not only also want to list ways of composing them (as, indeed, Refactoring itself suggests; see also Refactoring to Patterns or the hierarchies of patterns in A Pattern Language), but also ways of undoing them and composing them differently, along the lines of associativity laws?

loom

March 13th, 2011

I recently played through Loom along with the Vintage Game Club, and I wished I had more to say about it. It’s a point-and-click adventure game; instead of accumulating an inventory of items to use, however, you accumulate an inventory of tunes. Which is a pleasant change of pace, and helped make the puzzle solutions be less arbitrary: there’s not as much “find the key to use here”, or “find the completely arbitrary object to use here” as in other adventure games, instead each tune has a function, you can generally figure out which tune to invoke to do what you want in a given situation, and there are tunes that are used in multiple situations and even puzzles that allow multiple solutions.

Having said that, it’s still an adventure game. So yes, you will get stuck at times; sometimes you’ll feel like it’s your fault, but not infrequently the environments were hard to navigate, and there were some crucial item interactions that I missed where the game could have helped me more. It has more of a plot than a lot of early adventure games (though, to be honest, I’m actually not that familiar with graphical adventure games), but the plot ended up disappointing me more and more as the game progressed, and KAOS Chaos was just ridiculous.

It’s a short game; these days, that’s normally a good sign for me, except that it didn’t feel like the sort of short game where every part had its place and there was nothing more to add without being superfluous. Instead, it felt like it was a bit rushed, like they didn’t have time to polish it. So, while its length wasn’t an active negative (I’d rather have an unpolished short game than an unpolished long one!), it also wasn’t an active positive.

A pleasant enough way to have spent a few hours and a few dollars; I’d just hoped for more.

starting rock band 3 pro guitar

March 12th, 2011

Now that my Squier and MIDI adapter have arrived, I’m starting on the Pro Guitar mode for Rock Band 3. I’m mostly going to be blogging about it on my gaming experiences blog, but I figure I should mention it here in case somebody was curious to read about it but was put off from that blog by the mass of Minecraft and Pro Keys posts. I imagine that I’ll post about the experience here sporadically as well: that blog is for diary-like stuff, while this blog is more for talking about what I’ve learned from the experience. (Then again, it’s not like I’ve been posting here about what I’ve learned from Minecraft and Pro Keys, despite my intention to do so! One of these weeks…)

All the Pro Guitar posts should be under the tag “pro guitar“—WordPress even automatically generates an RSS feed for the tag should you be interested.

blog comments and forms of responses

March 8th, 2011

Another podcast that I got around to listening to in my GDC commute was the CDC Podcast episode on “A Post-Comment World”. And thinking about that episode added a twist to my understanding of forms of publication and discussion on the web. The number of online publication niches continues to grow: it’s not just blogs and Twitter, there’s Facebook (including posts, comments, and likes), Tumblr, Quora, Buzz, Formspring, and I’m sure that all of my readers can add another half-dozen types onto that list. And I continue to be amazed at how each of those niches functions differently: you’d think they’d be redundant, but they each have their own reason to be.

So: say somebody has written a blog post, and you want to respond. Where might you do this? On the comment thread to that blog post, of course. Or you could be motivated to write a blog post in response. Or you could post about it on Facebook, or comment or like somebody else’s post on Facebook, or simultaneously post it on Buzz and share it in your Reader shared items, or you could link to it on Tumblr, or you could tweet about it. (Or you could talk to people in person about it, or talk about it on a podcast, or e-mail the author, or write a book about it, or write an academic journal article about it! But I digress.)

These all have their roles, these all have their distinct characters. A Facebook like is the simplest signal, while a blog post response is probably going to allow for the most thought and nuance. Facebook comments are short-form and part of a conversation among a few people; Buzz comments have that same conversational feel but, in my experience, have room for more context; Twitter is similarly short form but less conversational and is read by a broader audience.

As a blog author, you may prefer some sorts of response to others. And, to some extent, this is in your control. If you want responses on Facebook or Buzz, you’ll forward your posts there; if you don’t, you won’t. (Not that you can prevent other people from linking to your posts in those fora, of course.) If you want responses on your own blog, you’ll have it open for comments; if you don’t, you won’t.

It strikes me as entirely reasonable to value and hence want to actively encourage some of these forms of discussions more than others. Roger Travis, for example, has decided that he finds Buzz discussions more useful than comments on his blog posts, so he’s turned off comments on his blog posts and encouraged people to comment on Buzz.

And I suspect that many blog authors would prefer responses to their posts that come in the form of other blog posts. We’re likely to learn more from such responses, because they’re likely to be longer and less impromptu; and we also like the ego boost that comes from somebody’s being inspired enough by what we have to say to take the time to write a post in response. If that’s where you want responses to appear, then turning off comments is a pretty reasonable strategy.

I would also say that it’s an overly optimistic strategy—what are the chances that somebody would write a blog post instead of leaving a comment?—except that I’ve done that twice myself in response to Ben! In both instances, I probably would have left comments on his blog instead of posting on my own blog if that option had been available to me; I suspect that Ben is glad that I responded on my blog in both cases, and I know that I’m glad that I responded on my blog instead of in comments, because I learned more from the act of writing the blog posts than I would have from leaving comments.

Listening to the podcast discussion made me wish that more people turned off comments on their blogs, not because I think it’s a superior strategy but because I’m curious how that would affect the culture of response. And, now that I think about it, on the culture of craftsmanship that goes into writing blog posts: by stepping away from the possibility of immediate conversation, would authors feel compelled to put more work into ensuring that posts stand as objects on their own? (Ben, Daring Fireball, and Kill Screen all care about aesthetics, certainly.) I’m not yet convinced that I should turn off comments myself, though perhaps I should fork off another comment-free writing space where I take more care with what I produce; in a gesture of solidarity with Ben, though, I will turn off comments on this particular post. (While leaving on trackbacks: I’m all for blog-to-blog conversations!)

standpoints, lists, and selection

March 7th, 2011

One of the side effects of attending GDC last week was that I spent a lot of time in my car; not my favorite place, but at least I got to catch up with podcasts. In particular, I’m glad that I had time to listen to the three part Critical Distance “2010 in Review” podcast: it’s about three hours long, but there were great guests on it, and I always like listening to smart people talking about games. They started off by talking about events of the year, blog posts and articles that seemed particularly interesting; then they switched to going through an incredibly long list (I didn’t count, but my guess would be about 50 games; kudos to Eric Swain for assembling it) of major 2010 titles, and talking about whichever ones they had something to say about. (Which turned out to be most of them: the participants were an opinionated, talkative, well-informed crowd!)

Quite a show. But then, when it ended, I realized: I have three personal candidates for 2010 game of the year, and yet none of them made it on that list despite its length! What’s going on with that?

One of my candidates is Minecraft, and there I think the answer is clear: the game doesn’t have a release date. I can’t remember for sure, but it wouldn’t surprise me at all if they actually did talk about Minecraft in the first half of the podcast; it’s just not going to naturally show up in a chronological list, though, and you could make a case that it’s not a 2010 game at all.

Another one of my candidates is Rock Band 3. I’ll have to chalk that one up to an oversight (I know one of the podcast participants is a big Rock Band fan, though I don’t think he had input into the creation of the list): it’s a huge advance in an important gaming franchise, of course it should be on there. But your eyes glaze over when going through comprehensive lists of releases, it’s impossible not to occasionally miss something when whittling them down to a manageable size.

My final candidate is Flight Control HD. It makes my list by virtue of being an incredibly fun game, superbly matched to its system, that I cannot imagine improving: it seems to me to be a local maximum in the design space of games in the same way that Tetris is. But it wasn’t on the list. In fact, no iOS games were. (I’m not a huge Angry Birds HD fan, but a lot of other people are, and Osmos has certainly gotten its share of buzz.) Actually, did I miss an Angry Birds mention in the podcast? Christopher Williams mentions it in the comment thread, so maybe it did show up in the podcast list? Unfortunately, it’s hard to check facts about a three-hour long podcast…

And the iPad and iPhone aren’t the only platforms that were left out. I honestly can’t remember if any DS games were listed, though I suspect not: I just checked July, and Dragon Quest IX is missing, which is the first candidate off the top of my head. (I also can’t remember if any PSP games were listed, but I have no idea what games came out for that platform in 2010.) And the other missing platform is Facebook: I bet CityVille has been (is still being!) played by more people than any other game in their list, but it’s missing, as are FrontierVille, City of Wonder, Ravenwood Fair, and Cow Clicker.

Lists like the one on the podcast are always going to be incomplete; having said that, this complete omission of games on three of the current most popular platforms seems like a pretty big oversight to me. So I’ll repeat my question from above: what’s going on with that?

Eric is the only person who can answer; maybe he’ll chime in in the comments. And I don’t want to turn this into some sort of big accusation or anything: I really enjoyed the podcast, and it’s a lot of work making a list like that, so I don’t want to turn that into something that’s even more thankless than it would otherwise be. But in the meantime, I’ll speculate.

Presumably he’s not a fan of games on those platforms. That is, of course, perfectly fine: there’s no reason why he, or anybody else, should be! And one’s tastes are always going to affect the contents of lists like this that one creates.

Another contributing factor is probably the fact that it’s a Critical Distance podcast. And there just aren’t that many blog posts about games on those platforms on the sorts of blogs that Critical Distance links to. (I’ve been sadly remiss in discussing such games myself.) Or at least about any of the games I mentioned above other than Cow Clicker, but that game is enough of a special case that I can see its not being included.

And another potential contributing factor is that games on those platforms aren’t targeted at people like those who participated in the podcast. At GDC, the phrase ‘forty-three year old woman’ was bandied about a lot; as far as I know, all the podcast participants are men in their twenties. As are a lot of the authors of blog posts that Critical Distance links to, so this factor and the previous one are linked.

Christopher Hyde has been pointing out for years how much tunnel vision the “critical game blogging” community has: we (and I very much include myself in this) spend an awful lot of time playing and talking about AAA games, which seems to more or less mean games targeted at men in their twenties that are expensive to make and sell lots of copies. There is, of course, nothing wrong with talking about such games; but there are a lot of other spaces worth exploring.

building characters

March 6th, 2011

In a role-playing game, you customize your character’s abilities, refining that customization as the game progresses. Your character will typically have a class (fighter, mage, priest, rogue, etc.), which you pick at the start of the game and generally doesn’t change; this sets broad limits of your character’s abilities. You also typically have cross-class attributes (strength, dexterity, intelligence, wisdom, charisma, constitution, etc.); these increase as you level up, letting you focus on areas that are more important to you. As you level up, new class-specific abilities also appear: for example, a mage may learn new spells as she levels up. Sometimes these new abilities are determined for you; sometimes you have a range of potential abilities to learn that you can choose from. And sometimes there’s further branching: for example, in the most recent role-playing game I played, Dragon Age, each class has four specializations (of which you can eventually choose two), and each time you level up you’re able to pick one of a dozen or so abilities to learn, some of which are tied to a specialization, some of which are tied to your class, and some of which are available across classes. And that’s not all: some games allow you to change classes if you level up far enough, and some dispense with the concept of class entirely, allowing you to mold your character as you choose based on the attributes and abilities that you select.

In general, I’m drawn to these more flexible games: I like the idea of shaping a character according to my playing style, according to the way I like to behave, even according to my idea of the sort of person that I am. Even in these more flexible games, though, classes are latent: not all combinations of choices are equally powerful, so if you search forums or wikis or gamefaqs, you’ll find recommended builds, giving you combinations of attributes that work best to, for example, allow you to do the most damage in the game, or absorb the most attacks, or heal your party members the most. (The presence of multiple members of your party encourages this sort of specialization.) You can ignore these, but you do so at your peril: you’ll have a hard time making it through the game on hard difficulty settings if you’re haphazard about the choices you make.

This focus on character construction is one of the ways in which role-playing games are adolescent games: they’re all about figuring out whom you want to be when you grow up. Which, like all great themes, actually spans all ages. Or maybe I’m stuck in adolescence, because I’m still trying to figure whom I want to be when I grow up!

And, just as I prefer more flexible approaches to building your character in role-playing games, so too do I prefer that when constructing my life. I’ve already changed classes once: while I don’t talk about it much here, I leveled up for years as a mathematician, eventually spending five years as a postdoc at Stanford. At which point I changed classes, becoming a programmer. (Fortunately, I’d leveled up that skill while growing up and during my undergraduate years.) One debate that I’ve had over the last few half-decade was whether I wanted to change classes again, and become a manager; I dabbled with that for a few years, though these days my general feeling is that I’m a better fit as a programmer. (Actually, my real feeling is that I’m a better fit as a member of an anarchist collective, where either nobody or everybody is a manager, but never mind that.)

But, of course, not all programmers are alike: and life is definitely the sort of game where you have to choose where to improve your abilities, you don’t have preset skills that you gain as you advance. (Outside of college curricula, at least! Which is one of the reasons why I don’t like them, I suppose.) I have a habit of going deep enough into some area to be able to do pretty well at it, and then switching over to something else rather than going all-in. (The exception, I guess, is agile: it’s both deep and broad enough that I haven’t yet gone all-in with agile, but I also haven’t stopped exploring further.) I switch domain areas fairly frequently: programmer tools, then streaming video, then video games, and now computer security. And, as a bonus, I don’t even go all-in on programming as a whole: yes, there are 208 posts on this blog tagged with ‘programming’, but there are 327 tagged with ‘video games’. (Similarly, I read a lot more novels than math books when I was a grad student. And, going back to my undergrad years, there’s the whole ‘Sanskrit major’ thing.)

That’s my life; what would games suggest will be the outcome? When I make a build like that in a role-playing game, it’s fun enough to play, but never really optimal for progressing in the game. So I’m pretty sure that, if you looked at the great strategy wiki of life, you wouldn’t find my particular career trajectory on the ‘recommended builds’ list. Which is something that I’ve been thinking about with this latest job change: in fact, that’s as good a way as any to thinking about the last parts of my recent “job search and narrative” post. As a result, I’m now focusing on a build that will let me do well with startups, that will present me as an agile server-side programmer who can deal with large amounts of data, and whose checkered past will make him ready to face with equanimity the sorts of surprises that happen frequently in startups. I’m still pretty far away from the recommended startup build—I’m 40 years old rather than 24, I’m not going to be putting in 60–80-hour work weeks—but there’s a certain strength and coherence to it.

The truth is, though, I’m better off not following a recommended build. A recommendation isn’t made in a void: and recommended builds are designed to let you progressing through the game as smoothly as possible. Games have metrics that you can use to measure that progress; life has metrics as well. You can choose which ones to pay attention to, which ones to ignore; and even if you are paying attention to a metric, you can choose how to respond to it. Returning to Dragon Age, that game has per-party member approval meters: you can try to raise them all as high as possible, you can try to raise a few specific ones as high as possible, you can even try to lower them all if you’re feeling particularly perverse! Or you can step away from the idea of controlling them, and instead see them as gauges reflecting your personality, reflecting your nature, reflecting your character. My build may have made certain battles tougher than they would have been otherwise (though, to be honest, it’s probably really my RPG-playing skills that are to blame for that), but I’m fine with that: I’m more interested in seeing my choice of actions reflected in the reactions of those around me and in the tales that unfold.

Which is a pretty good way to think about life as well. GDC just ended, and I can’t imagine a better way to have spent a week: stunning talks, I feel privileged to have been able to spend time with people as I did, and honored to have been able to play a part in facilitating one such meeting. And today I’ve been sitting around the house, working on my pro keys skills, having Miranda show off the underwater house she’s built in Minecraft, picking out tunes on my new guitar, hanging out with Liesl, being glad that Zippy can still make his way around, and I’ll read a few chapters of a Scala book when I go to bed. It’s a good life: if my character build has somehow led me here, it has more than done its job.

gdc 2011: friday

March 5th, 2011

9:30am–10:30am: “The Game Design of Starcraft II: Designing an E-Sport”, by Dustin Browder

2005. Dawn of War just shipped: 4 sides, 63+ units, with more to come. Supreme Commander about to ship: 4 sides 100+ units. Starcraft 2 planned with 3 sides, 45 units. (Some of which are effectively identical!)

This sounded crazy to him: units = choices = gameplay = fun. They need more!

The response: this is an e-sport. That’s new, hard to do. Think of this as “basketball 2”. That means it needs to be: watchable: clear, simple, skill-based, uncertain.

Let’s drill down into these. “Clear” is why the artists hate him. He gives an example of an ultralisk: it’s not nearly as impressive as it could be, it would look a lot better if it were bigger. But if he did that, it would hide smaller units (he showed it hiding 20 zerglings), destroying clarity/readability. Especially important in the case of effects: you don’t want them making an imprecise light show all over the screen, you want to know exactly who is affected and whether it succeeded. 

Simple: minimum number of units. For Starcraft, 12-15 units per race. Too many and viewers are confused, pros have to guess, and some units end up functioning as reskins. But: you still need tons of choices with that small number of units. They started by just experimenting with movers and shooters, fiddling with the stats to bring out differences. (Including area of influence, how they move.)

Interlude on upgrades. Banelings are better than marines; but marines + stim are better than marines. So upgrades don’t just make a unit more like itself, they flip relationships. (And that relationship can get flipped again with a handling upgrade.) Or the roach can be upgraded in two different ways: 1 unit, 3 uses.

Skill: micromanagement is important to them. It’s part of the game: an RTS isn’t just a really fast turn-based game. (Also, micromanagement is fun to watch, important for a sport!) And it allows for degrees of skill, degrees of success/failure. Force field example: easy to use it at a choke point; hard to use it to protect a group on the field; still harder to use it to split an opponent force. (And you can do any of these better or worse: a better player won’t leave as many gaps between force fields.)

(Flanking and terrain examples that I didn’t quite understand)

Uncertainty: that’s why the Zerg rush is there. Anything is possible in the first few minutes of the game. A rush is always going to be possible at some point in the game: so why push out the possibility away from the start?

Those are the core values; now on to ripple effects.

Story: as discussed above, units on screen are smaller than would be ideal for narrative purposes. So they exaggerate in the other direction in story art, so you’ll be able to imagine how cool the units are. Similarly, units are tiny ants on the battlefield, so make them over-the-top characters in story mode.

Solo tech: they had cool, fun units, but they overlapped with other units. So they weren’t suitable for e-sport usage, but still valuable content.

Missions: the narrative arc for the e-sport is exposition (scouting), complication (early battles), climax (deciding battle), resolution (gg, post-game analysis). With single player, though, it didn’t work the same way: a real cost to losing an individual battle, so players would play defensively until they had an overwhelming advantage, at which point there would be a long mop-up period. So they added in lots of different mechanics to the single-player game, to shift the narrative arc. E.g. outbreak: night = terror, day = payback. (Still too much mop-up, though.)

11:00am–12:00pm: “Hybrid Orchestration – Scoring Need for Speed, by Troels Folmann and Charles Deenen

They’re talking about Need for Speed Shift 2: Unleashed.

Charles started:

Development wants cinematic Gladiator-liked score. Marketing wants youth-relevant licensed songs. Traditionally, you separate these two; they decided to merge them into a single hybrid score. Take very popular tracks, reorchestrate / rescore them.

Different music styles: epic = driver’s win, dirty = battle, two others that I didn’t catch in time. (Surreal = preparation, I think, and then special purpose for full-motion-video?)

They did a concept with a single 30 Seconds to Mars track; worked surprisingly well. So let’s go with it! But required signoffs from lots of different people; and its a huge amount of work even with the bare minimum of 10 songs. And very tight pipeline, with serious risk of having signoffs denied late in the process.

They decided to start with a test bed to get early approval from one of the bands, to reduce risk. They had different composers produce sample orchestrations in the different styles, to see what would work. (Same audio tracks, but everything else was different.) Made about 20; sent top 7-8 to band.

And, fortunately, the band really liked it! Kept feeling of the song while reinterpreting it in really cool ways. This helped convince execs and other bands, too. (Eventually, all 10 targeted bands signed off.)

Now Troels speaking:

The Four Noble Truths: everything is suffering, suffering arises from attachment to desires, … (Ed.: one of the more unexpected slides I’ve seen in a GDC presentation.)

And: what does “hybrid” mean? One important consequence: don’t follow a traditional song structure; this is hard! Also, refine concepts: epic alone isn’t good enough: need epic clean, epic emotion. So a specific hybridization for this project.

(Previous example: mismatch between sound, game. Kill your darlings, listen to client / game. Surprised he was invited back.)

Created a template for this hybridization. Focused on percussive elements, also mention of strings and brass that I didn’t understand. (And what is “RMX and deep-sampled percussion”?) Ethnic choirs, custom signature samples.

First example: “Night of the Hunter” by 30 Seconds to Mars. Showed various refinements, …

Second: “Issues”, Escape the Fate. Lots of revisions. What’s the right number of revisions? 7 was definitely too much.

So he hit the wall. How to overcome this? Communicate; find personal joy; make mockups; face the wall; ignore the wall. Took the last strategy: took three days off completely. Sat in his garden, recorded bees, turned them into different songs. (Hi-hat, Hammond, …) Made a pretty amazing video out of it. Also tried various objects: crowbar, light bulbs, coffee pot, playground poles.

Third: “Take a Load Off”, Stone Temple Pilots. Went a lot faster this time, only a few revisions.

Fourth: (unreleased song) 7 revisions, but all small, so not a big deal.

Back to Charles.

Postproduction. Increased clarity, better instrument and frequency separation, more TV-friendly sound, even composer agreed it was worth it.

Post-mortem: how to approach hybrid? Create template, ensure everything connects textually, identify signature sounds, identify rhythmic elements that merge with orchestral and synth elements.

12:30pm–1:30pm: “The Game Design Challenge 2011: Bigger than Jesus”, by John Romero, Jason Rohrer, Eric Zimmerman, and Jenova Chen

Eric Zimmerman (moderator). For this year’s theme, he wanted to merge games and religion: create a game that could be a religion. (Not about religion: the game itself and the act of playing should be a religion.)

Jason Rohrer

Chain World: A humanistic video game religion that someone will play today. Religions used to try to explain physical mysteries; that role has been usurped by science and technology recently. He talks about a detour that I-77 had to take around a town in Ohio because of a fight his grandfather led. Talks more about visiting that town, about things his grandfather allegedly said. Lots of details about his grandfather that he doesn’t really know whether or not they’re true: his grandfather is turning more into a saint-like figure. We become like gods to those who come after us.

His game idea: you control a world, then pass it on to the next player. Game designer is god, he passes the start state to the player, leading to an end state. But what if your end states somebody else’s start state? Each player is like a god to the next.

You want to do this in a game where modifications don’t screw up the playing field for the next player. (So not like Mario, where you modify the world by destroying blocks.) Players might have intent for how they want to modify the world for the next player; players might wonder what the previous player intended with an aspect of the world.

That’s the frame idea; what’s the actual game? Minecraft! A specific world on a specific USB stick. Play the game, don’t erect signs with text, play until you die. Save, pass it on, never play again.

John Romero

What is a religion? Deity, worshippers, devotion. In the beginning, there were lots of gods, one true god emerged @God6502; he had a son @Messiah6502. Follow him on Twitter: first twelve followers are his apostles. They come down to the front of the room; quite a distinguished bunch. Each gets a pad of sticky notes, to gather followers.

The winner: the apostle with the most miracles: some of the sticky notes have star markers. (@SquirrelTweets) But: to win the game, you must kill him, John Romero. (Doom image.)

Jenova Chen

Here are his slides.

He’s Chinese, so supposed to be an atheist. Did lots of research. Chinese believe in gods, but not the same sort of belief that you see in modern religions: a god is an unknown, a value. Dao = way of life, how to live. Recent China: socialism, then developmentism, then consumerism. These three are all about being happy, which seems fairly fundamental. Or: belief in something bigger.

Inspiration: Campbell, Csíkszentmihályi, Darwin.

What drives happiness? Money is useful at first, but beyond a certain level more money is irrelevant. Hierarchy of needs: top is self-actualization, not addressed by money.

At the end of the hero’s journey, he returns, giving something back to the community.

What is our purpose? He wants one that works for primitive humans, even for nonhumans. Circle of life: propagation is the more interesting part. These days, propagation of ideas is more important.

But what ideas should we propagate? Evolution says: look at the ones that survive, refine them. How does selection happen? Unknown: god. (Editorial note: not really, no…)

TED: Ideas worth spreading. But they’re not good game designers: the website is very passive, even the slogan is. TED: Influence with your ideas. No ranking for videos: rank by view count, or better by number of people inspired by them. Give each video a page, showing whom you’re influencing. Twitter follower count, badges in a Chinese twitter-like site.

Badges alone aren’t a game: you need a feedback loop. So: badges / points lead to promotion system that help draw other people to watch your video.

Propagationism.

(Rohrer won.)

2:00pm–3:00pm: “An Apology for Roger Ebert”, by Brian Moriarty

(Here’s the text of Moriarty’s talk.)

“I am, in fact, Professor Moriarty.” This is an apology not in the sense of anything done wrong, but in the sense of a defense.

(Discussion of 2005 Ebert article, 2010 flaring up of the argument.)

Why return to this? He wants to discuss Ebert’s claim that there isn’t a game worth of comparison with the treasures of world literature, movies, music, paintings.

Discussion of painting: Northcote, Chess Players, c1730. Two chess players: the game industry, self absorbed, satisfied. The golden boy is art itself, looking at us, pointing at a paper containing his secrets.

Read lots of art history; never saw games mentioned as art. (Ed. Nobody stood up for go? Oy.) Math is elegant, but nobody confuses mathematics with art, they’re different categories! Considering games as art is radical; then again, the idea of great works of art is also radical, only 500 years old.

Photography, movies entered realms of art relatively recently; why shouldn’t video games? Because games are old: if chess and go aren’t art, why should video games be?

Interlude: we know what video games are. But we don’t know how to define art, let alone great art. C.f. Duchamp urinal. Also, games can clearly contain great art from other media. But that’s not enough: mechanics and affordances are key. Can mechanics and affordances be considered art?

(Taste, intersubjectivity. Not all movies are Art.)

Eliciting emotion isn’t enough for art. Art is about attraction. (Ed. really??) But how to distinguish sublime art?

Kitsch. Is it art? Somebody claims: yes, art with three characteristics. Highly charged with stock emotions. Instantly and effortlessly recognizable. Does not enrich our associations. Nearly all popular art is kitsch. (Bombast: all adaptations are kitsch? Oy.)

More on games as kitsch, whee.

Celebration of kitsch = camp. Ultimately an evasive strategy.

Big studios won’t make art. Indies won’t. Who will make art? Those who would make art anyways: the artists. Warning: don’t just follow the trappings, then you’ll get something arty.

Technology of film largely stable for more than 100 years.

Structural reasons why games won’t produce sublime art. Ebert talks about direction of artist, inevitability of meaning. (Oy.) Romantic point of view. Schopenhauer: free will and individual choice are illusions, desire a prison. Leap off the wheel of desire via the contemplation of sublime art. Transcends will, frees us from agony of contingency and causality.

“Flow is an an-aesthetic.”

If the purpose of sublime art is to solve the mystery of choice, then …

Sublime art is the still evocation of the inexpressible.

All sublime art is devotional.

Edit: I thought Emily Short’s discussion of this talk was quite good.

3:30pm–4:30pm: “Message Queuing on a Large Scale: IMVU’s Stateful Event Architecture”, by Jon Watte

His slides:

Want: any-to-any messaging with ad-hoc structure. Lightweight (in-memory) state maintenance. Added queues as a building block, with two kinds of messaging: events and states. Integrated into a bigger system.

User to queue: connect, listen, send. Queue to game server: validate users/requests, notification. Game server to queue (didn’t catch it).

Design goal of 1M simultaneous users. (10x current use.) Real-time, meaning 100ms end-to-end. 20M queue creations/day.

Existing solutions didn’t work. (Wished they could buy Gtalk, AIM, etc. solutions!) Inspired by mochiweb: 1M users on a single machine, written in Erlang.

Implementation.

(Journey of a Message diagram: send to queue, validate, forward to other users listening to queue.)

Queue: multiple mounts (chat – message; scores – state; subscriber list).

One machine isn’t enough: doing some math on volumes and memory speed, would take over 3 seconds per message. So need to scale across machines.

Scale in two dimensions: gateway machines and queue machines, connected via a consistent hashing mechanism that allows moving chunks of queues via a central map of buckets to nodes.

Erlang. I’ll skip the details, but: basically, custom designed to solve their problem.

(Dozed off some: load balancing; marshaling via protocol buffers.)

Have a boss node keeping track of what gateway, queue nodes are doing. Looks like a single point of failure, but things keep running without it, you just can’t add more nodes until the boss is restarted.

Message could go out via a different node than where it entered; led to time skew. So sent messages out via entry node.

Hot add node diagram: make sure to forward messages while move is in process.

Problem cases. User goes silent; detect via ping. Reconnection of user, possibly to a different gateway: user-specific queue arbitrates. Node crashes (yet to happen in production, go Erlang!): state is ephemeral, user might get logged out. Gateway crashes: client reconnects, gets resent missed updates, application above queue API doesn’t notice. Sometimes want reliable messages; higher level API stores it in database. Firewalls: use proprietary protocol on port 80/443.

Build and test. Continuous integration, continuous deployment. Erlang supports in-place code updates, but too heavy for them; use failover instead.

Future: replication; scalability limits; open source what they can.

gdc 2011: thursday

March 3rd, 2011

I broke two talks out to their own posts:

The rest:

10:30am–11:30am: “Biofeedback in Gameplay: How Valve Measures Physiology to Enhance Gaming Experience”, by Mike Ambinder

Current control schemes: one dimension of input, map intent into control schemes, lacking feedback mechanism. Add in player sentiment, emotional input, get more immersive and calibrated game experience.

Emotion is a subjective internal state, usually a response to external events. A vector: has both magnitude (arousal) and magnitude (valence). Correlates with physiological signals of various sorts.

Heart rate. Beat to beat interval of blood flow; measure both baseline and deltas over time. It’s a cheap, easy way to get at arousal; not so easy to get valence. Also, its prone to movement artifacts, and the onset after stimuli is delayed.

Electrical resistance of skin. Measures arousal; get both responsive and anticipatory spikes with low latency. Hard to get valence, though; can’t always associate spikes with events; range varies across subjects.

Facial expressions: track muscle movement. Get both valence and arousal. Not well automated yet.

Eye movements. Fun fact: when our eyes are moving, our brain isn’t processing. So if you measure eye movements, you can find windows when you can update the screen without the player seeing! Index of attention, arousal (pupil dilation), reliable. But very expensive, requires lots of analysis.

EEGs: electrical potentials of the brain. Different frequencies represent different emotions. Get arousal, valence; expensive, intrusive, noisy, though.

(I took a nap during the rest of the talk: it wasn’t bad, but I was quite tired. He showed using these to affect the AI Director’s behavior in Left 4 Dead and using eye tracking for control in Portal 2.)

12:00pm–1:00pm: “No Freaking Respect! Social Game Developers Rant Back”, by nine speakers

This was largely excellent.

Brenda Brathwaite: Resists the title: won’t turn against her fellow designers who have supported her for 30 years. (History lesson.) We stood together because we love games. … Wish I could have recorded end of that, really something.

Update: fortunately, it was recorded! Here’s the transcript, and here’s the video.

Brian Reynolds: Really boring.

Steve Meretzky: No, you can’t #%*$&ing design. Execs who think they can design; execs who think that game design isn’t needed at all! 10,000 hours of learning experience is way low, in his opinion, and everything is constantly changing. And then the rant really heats up…

Chris Hecker: Potential Unreached. Was going to rant about gamification, but doesn’t care about selling shoes. Games as a means to save the world is great, but games are valuable as an end. And we’re not reaching their potential: lots of emotional headroom we’re not reaching. Want “lifification of games”. Games currently can’t express the difference between Seinfeld and Friends. (The Sims is the only game that looks like either.) Want to increase our expressive range; need more human interactions, we don’t need more aliens and orcs. Doesn’t have to be difficult to implement, or result in casual games. We just have to try.

Scott Jon Siegel: You’re Doing It Wrong: Why the Last Few Years Have Not Been Awesome Enough. Never gets feeling of a really awesome system in social games. In 2009, had Parking Wars, Bejeweled Blitz, Mouse Hunt. Fault of Farm Town. Led to current great social game fallacy. Need to rethink the last two years of social game development, start over.

(His slides are up.)

Mini rant: Jane McGonigal et al. Games as escapism is bullshit.

Trip Hawkins: Fear that we’re all lambs to the slaughter. Licensing agreements. At least Nintendo had the decency to tell us how they were going to screw us. Don’t try to be the winner of American Idol.

Ian Bogost: Shit Crayons. Amazing performance.

1:30pm–2:30pm: “Experimental Gameplay Sessions”, by fourteen speakers

Focus on experiments: in search of dynamics, or new meanings.

Hanford Lemoore, Maquette

It’s about recursion. The game world contains a model of itself inside one of the buildings: changes in one are mirrored in the other. What’s more: can take block out of model world, put it in outer world, and vice versa: effectively shrinks / enlarges objects. (A key turns into a bridge.)

Michael Brough, Sense of Connectedness

Game board is a brain, with no explanation. You have to make and test hypotheses over and over again. E.g. you explode at some point: why did that happen?

Nicolai Troshinsky, Loop Raccord

Raccord: the feeling of continuity that you get when a cinematic cut works well, looking smooth and continuous. The game shows you a chain of video clips: you have to stop and start them so that it looks like objects are passing smoothly from one to the next.

Stephen Lavelle, Opera Omnia

There are several time manipulation games: all about cooperating avatars to modify the present. Opera Omnia: the present is fixed, need to find a better explanation for how we got here. The playing field is cities: you can control migration between cities, and there are various events (e.g. famines) that happened in the past that affects population as well. Takes an Orwellian turn when a population segment was massacred in the original history, but the population migrated in an alternate history.

Jason Rohrer, Inside a Star-Filled Sky

Recursive shoot-em-up: it’s gotten a fair amount of coverage recently, so I won’t go into details here. The death mechanic resets a level when you progress; that seems punishing, so an earlier version kept your progress. But then a simple “always move towards the exit, never shoot” strategy works; that’s boring, prevents learning.

His explanation for why he did the game basically boils down to conveying the experience of yak shaving.

Agustin Perez Fernendez, Mantra

An experiential game about meditation. There’s an endless spiral that you have to avoid; it makes a noise if you hit it. As you do better, the visuals go away; want to play guided by the mantra and the sounds that happen when you make a mistake.

Andy Schatz, Experiments in User-Generated Content

Started with The Abrupt Goodbye. It presents a conversation tree, with up to five answers. With fewer than five, it gives you the opportunity to enter a new response; the game ends when you do that, and adds your response to the list of possibilities. Unpopular choices get culled; also, there are male and female branches, so both sides of the tree are user-generated.

PlayPen. Collaboratively built world: comes with a graphics editor, users can edit screens and add hotspots.  Infinite Blank. A platformer: when you come to a new area of the level, you own it and can do whatever you want. PlayPen has collective ownership, with all the good and bad that that brings. 

6:00pm: Dinner

The annual game bloggers / journalists (with a few developers sprinkled in for good measure) dinner; I had a fabulous time. I spent most of it talking to Tami Baribeau and Dan Apczynski.

gdc 2011: brenda brathwaite, the prototyping of tragedy

March 3rd, 2011

Thursday 4:30pm–5:30pm: One Falls for Each of Us: The Prototyping of Tragedy”, by Brenda Brathwaite

My favorite talk of the conference, or indeed any GDC that I’ve been to. Brenda said that she now gets introduced as somebody who makes games that make you cry; I can attest that she gives talks that make you cry.

This talk was a “pre-mortem” for the game One Falls for Each of Us. Which makes her anxious: this game is a personal effort instead of a group product, and her personal design process is odd.

It’s part of a series called “The Mechanic is the Message”. The first is about the slave trade; she made it for her daughter. The second is about the Cromwellian invasion of Ireland. Which is more related to her personal family history. The third is Train, about the Holocaust: zeroing on complicity, complexity, regret. The fifth is Mexican Kitchen Workers. Then Cité Soleil, about day and night violence in Haiti. (People playing two different games on the same board.)

All these games use the same little people figures: the same underneath, different colors on the surface.

The fourth: One Falls for Each of Us.

These games were originally design challenges: she was teaching at a college, didn’t have access to programmers. Interlude: talking about a conversation between photographers about choosing whether to take the picture. Alien to her: you don’t generally get to choose not to make games.

Tragedy as a topic. At first, she thought it was alien to games, but not so. Puerto Rico, Colonization; but Super Columbine Massacre and Six Days in Fallujah are anathema to many in our society. And she doesn’t have to worry about topics, packing, time, schedule.

She liked the potential of these games; others were less impressed. Commenters on blogs reacting negatively; Indiecade award was special, though.

Her process of approaching tragedy: she believes deeply that the game already exists, she needs to find it. And that she’ll be able to do so: it will take some thinking, but she has time, the game will reveal itself eventually. (As opposed to, say, Ravenwood Fair: she feels that she makes that sort of game rather than finds it.)

Interlude on art: Richard Serra, Jackson Pollock. Jackson Pollock would spend a lot of time just circling the canvas.

Taking a road trip back from Indiecade: what would it mean to leave her home? Really hard for her to find an entry point. But: where there is a human-on-human tragedy, there’s always a system. How could she find it? She spent a lot of time studying maps.

She had a discussion on Twitter about appropriation of culture.

Finding the system: how did they “remove” these people? How did these people respond? Why did they do this? What was their motivation? What resources were they given? What were given up?

Interlude on Irish soldiers in the US who were told to attack Mexico: they instead fought on the Mexican side. Reports of numbers told by Americans and Mexicans are radically different. Don’t trust any of the history of this stuff.

Back to appropriation and systems. You’re playing it as a white guy, not as an Indian. She thought maybe the board should be the USA. Previous games made you feel complicit: how to do that here?

You’re playing a white man; four of you, removing five Indian tribes. With a game of massive scale: the game will have 50,000 pieces. So a piece represents a person: if you want to play the game, you’re going to have to move a lot of pieces.

The subconscious and symbolism. The pieces come in bags of 100. Then, she opens the bag, dyes them: the bag looks like a hamburger wrapper. They dry out on newspaper; one session was right after the Haiti earthquake, making some amazing juxtapositions of red painted figures and photographs of Haitians in the earthquake.

Concerns (or where it is now). She wanted to have it finished by GDC, she had her weekends planned out. But then crunch time intervened. Why did she let that other game take precedence over this game of her own heart? She won’t do that again.

Where it starts: part 2. In fall 2006, she was attacked in a horrific way, and laid in bed for a long time after that. She’s trying to understand what happened, why they did that. She was thinking about making a level in a game that would represent this. She made a game in her imagination, exploring pain as a system.

Then she played The Path. Which gave her a release, an amazing moment. It made her realize games can do anything.