Not satisfied with driving women in the video games industry, and their families, from their homes with their repeated threats, the “GamerGate” movement sank to a new low this week when they forced Anita Sarkeesian to cancel a talk at Utah State by threat of shooting spree this week. I won’t attempt to give a summary of the ongoing shitstorm, instead here’s Gawker’s take.

My take? Maybe there’s a problem with journalistic ethics in video games, but it has far more to do with the possibility of AAA game reviews being largely bought by publishers rather than hypothetical scenarios of women using their sexuality to secure promotion for their indie games. And the rampant sexism, misogyny, racism, etc. in the field need to be dealt with before we deal with reviews. We can’t even have a civil discourse right now because of the shrieking mass of hate that is the vocal minority.

Guess what, gamers? Video games become more and more mainstream every day. Enjoying video games is now socially acceptable. Women play video games. Real, flesh and blood women, not the pinup caricatures of them overwhelmingly featured in games. In my mind, this is a good thing. Most women, like most men, are decent people and not out to manipulate others for their own gain. I think it’s great that more and more of them are sharing my hobbies. Just because more women are playing video games now, doesn’t mean you can’t enjoy them yourself.

Furthermore, show me one good reason why discussion on the representation of women (or any other group that is not white men) in video games is a bad thing. Nobody’s going to come and take away your Dead or Alive. Those kinds of games will probably always be made so long as there’s a market. Critiquing games, discussing areas where they can improve, is critical for the industry to grow as an art form. Yes, an art form.

Having more variety of content, and even content with better representations of not-white-dudes, isn’t going to hurt you. You don’t have to play it if you don’t want to. You can stay in your cave with your jiggle physics.

Gamer culture should be a culture of inclusion. I know I’m not the only person who was bullied as a kid for being a nerd/gamer/geek/etc, and I for one cherish my friendships, both with men and women. Why can’t we welcome newcomers to our hobby with open arms? Why all the “fake geek girl” bullshit? The stereotypical nerd, despite what we might wish to believe, is not so desirable a mate that women will go out of their way to fake being nerdy just to draw our attention. We need to get off our collective high horse about this. If a woman is participating in nerdy hobbies, more likely than not she’s doing it because she wants to, not because it’s advantageous for her to do so.

What really boggles me, though, is how these people think they’re going to get away with their hate crimes. Just because some social websites have a poor track record of responding to abuse reports doesn’t mean they won’t comply when law enforcement shows up with a subpoena for the IP addresses that sent rape threats, bomb threats, shooting spree threats, etc. And it’s going to happen soon. The FBI are already involved.

Free speech does not mean you are protected from the consequences of your actions. You’re not as anonymous on the Internet as you think you are. People who make these threats should be identified, tried, hopefully convicted, and punished. Ideally treated for whatever deficiency they have that causes them to behave like this.

Maybe after that, we can get back to calling shenanigans on blue shells, or saving the world from aliens, or exploring new planets. Video games are supposed to be fun after all.

TL;DR: The hate in the video games community needs to stop. Yesterday.

Earlier this year, I was cycling to work and had to evade a car. I did so, but in the process lost my balance and fell, breaking my right arm. It’s fine, I’ve recovered now. I’ve even started cycling again, though it takes more courage and determination than it used to. Part of me’s scared of getting hit again, I suppose. Which is probably perfectly reasonable.

What really grinds my gears is the way medicine works down here. I get that public healthcare does not exist and everything is private. Yeah, it’s great that I have effectively full coverage through my employer – which is the only way I’d ever move to the US – but what’s not great is the way billing is handled. Billing is in fact pretty terrible. I received a bill this week for services back in May, that my insurance hadn’t paid their part on until July, and apparently I owe late fees on this amount. I make a point of paying my bills as soon as I get them so I’m not entirely sure where this came from. Unless I just didn’t get the bill originally to begin with. Or maybe I did, but I didn’t notice it when I opened my mailbox only to receive junk mail to legitimate mail in a 10:1 ratio at best.

I’m not blaming USPS, I know they’re in dire financial straits and are struggling to remain solvent. People aren’t sending as many letters as they used to and junk mail is their bread and butter now. But I consider it a chore to check my mail because it nearly always consists of:

A million flyers

A credit offer I’m not interested in. I try to be fiscally responsible, which seems to be a shockingly foreign concept to the credit agencies. Or maybe that’s why I get all the offers, because I actually pay my bills and live within my means.

Sirius XM begging me to subscribe to their services

If I’m lucky, there might be a piece of mail I care about in the mix somewhere. Usually not, but sometimes. I wouldn’t be surprised in the slightest if a bill was sent to me but just didn’t make it to my apartment because I didn’t see it amidst the junk mail.

Really, the whole system seems inefficient. Bill me electronically – clearly the capability is there as my insurance is able to notify me by e-mail whenever a claim comes in. Stop sending me flyers that go straight into the recycling without getting more than a sigh from me. Let me come to you if I want more credit. Right now it’s just a waste of everyone’s time in fuel delivering me this paper, only for me to throw it in the recycling, or shred it, and then truck it off to the recycling depot.

I miss Canada. Less junk mail and saner health care. Assuming King Steve hasn’t gutted everything while I’ve been away.

I’ve been with Google for a bit more than a year now. Where did all the time go? I’m not entirely sure, but I’ve renewed the lease on my apartment so I can finally go for a year without moving. Which is really nice – I’m finally decorating the place a bit and it feels more like a proper home.

Reflecting on recent events, I don’t think you could sit the me of a few years ago down and tell me where I’d be at this time in my life. Living in the United States, owning a car, working for Google, all that. Oh, and I can’t forget managing globally distributed systems which make the build system I worked on at Relic insignificant by comparison. The tech, the scale, the complexity and elegance of everything is just mind-boggling and many mornings I wake up still feeling incredulous about where my lot in life has taken me. I’m very fortunate.

The biggest thing I didn’t expect was that I’d be forced to learn to go with the flow, to choose my battles, by virtue of not having enough energy to do otherwise. I’ve struggled to learn to prioritize and ration my energy to make it through the day. This all began when a routine physical and blood screen detected elevated compounds in my blood, leading to diagnosis of a condition causing me fatigue, mental fogginess, lethargy, the works. Throughout this, I became intimately familiar with the spoon metaphor. Also, there were plenty of days where I was basically a zombie – physically present but not contributing much of anything mentally.

That was finally dealt with this week, conclusively, via surgery, and already I notice a huge improvement. I feel like a massive weight has been lifted from my shoulders. I’m beginning to have energy again. Today I was able to do whatever I wanted without feeling pressed to ration my energy and ensure I can make it through the day. I’m tired right now, but it’s the kind of tired caused by my body being physically worn out. Once I’ve finished recovering from surgery I hope to get right back to the gym, right back into cycling to work, and shed the weight I’ve gained this year. Now that my mind is rapidly coming back into order, getting the rest of me into shape ought to be easy by comparison. Right?

I’ve been with Google now for nearly seven months. It’s pretty great. Game development was fun, but I’m glad I’m done with it. As far as good development practices are concerned, the games industry is just plain immature. Not as in childish – I’m not entirely sure how to explain it to be honest. Too intense and political, I guess? The freedom to work on what I want is probably the best thing about my role. Right now I’m looking at more automation, to eliminate a tedious manual process and free up more of my seniors’ time.

My role on Space Marine was on the Tools team, administering the build farm. I really didn’t know much about pipelines going into it, though on my 2007 Co-op at EA, I did have some exposure to the central build group for sports games in Burnaby, called Orca (at the time, I know they’ve changed names a few times since then.) So I dove into being build guy at Relic, and learned quickly. Now that I’ve been through a full product cycle, I have a better understanding of how things work, and the role of a build system. For the same of this topic, I define:

A build system is an automaton existing to convert a set of source files of varying formats and produce a set of output files representing the product in development or to be released. These source files are usually the output of members of a project’s production staff (programmers, artists, animators, audio designers, level designers, etc.) but can also be previously generated output from the build system. The output files can consist of loose files, archives, install packages, disc images (anything which could run the product, conceivably), tools produced from the same set of input files (not to be shipped), and log files for the build operations.

That definition is all well and good as a starting point, but it’s obviously insufficient. How do you determine what needs to be built? How do you provide the input and retrieve the output? What if there are special cases (e.g. a tool has changed, requiring a rebuild of all animations) or dependencies between assets? Complicating all this is the wetware producing the input data – humans don’t always follow the pipeline properly, for a variety of reasons. Sometimes it’s a problem with the pipeline, they forget, there’s a new step they haven’t amalgamated yet, and so on. As well, third-party tools are not always reliable. They have bugs, and so will your build system. We also don’t want to release nonfunctioning output to the team. So, let’s come up with a more concrete set of requirements.

A build system should:

Detect changes to the set of input files and automatically rebuild output data as necessary

Test the output at the completion of an operation for some basic level of functionality

Have the throughput to build each submitted change individually for finely-grained detection of failures (continuous integration)

Have redundancy in place to tolerate bugs in the system which may erroneously report failures

Have a facility in place to request rebuilds of certain data sets as required

Distribute output data to users, at their convenience, promptly.

Each of these requirements looks simple at first, but expanding each requirement quickly expands the scope of the system. It is no longer just a process running on a server, but an integrated part of the pipeline and tool chain, with deeper integration for different parts of the system. To expand on the complexity of some requirements:

Detecting changes to the input files requires some kind of notification that files have changed. A straightforward way of doing this would be to set up a trigger in your source control system to notify the build system that files a, b, and c have changed. It is naive to assume that just because a, b, and c have changed, you only need to rebuild three files. What if a is a texture shared between five other assets? Then you also need to rebuild d, e, f, g, and h. How do you know this programmatically? Some sort of asset tracking system is now needed.

Automated testing of basic functionality can fall into two categories: smoke testing and unit testing, the former seen in use more commonly than the latter in my experience. A smoke test is a very basic test to determine if the software can be started and some basic operations performed without a crash. If that fails, there’s not really any point sending the build out to the team for consumption. On the other hand, a unit test is used to validate specific classes and functions, in much finer detail, and would be useful to find bugs before QA does. A failed unit test should throw warning flags, but not prevent the entire build from being released to the team.

Output data from a build process is more than the program and its dependencies, it is also the logs and reports from each stage of building and auto-testing. Networks are fast today, but on a large team with a large build, the speed of the drives containing output data will become a bottleneck. Thus, an intelligent distribution system is needed to perform load-balancing and deliver files to users in a manner such that they can pull their data from multiple sources. The logging system should parse the return code, stdout, and stderr from each process ran, extract the relevant data, and present a human-readable log to the users for troubleshooting. The full logs should always be available in case the summary is insufficient.

This concludes a very high-level overview of what a build system can do to improve the productivity of the team using it. In future posts, I will discuss the varying subsystems in greater detail and propose algorithms to address their requirements.

My time on Space Marine has ended. My first game as a professional game developer launches tomorrow night in North America (though street dates seem to have been broken in Europe already), and I must admit I am glad to have a break from being build guy. The last few months have been very intense: running release candidates, preparing submissions to MS/Sony, dealing with several 11th-hour emergencies, and all the extra hours of finaling. I knew finaling would be tough, but I definitely underestimated just how tough it would be.

I hope Space Marine does well – general reaction to the demo from those who have played it, as far as I can see, is quite positive. The people claiming we’re a Gears clone are finally quieting down, and a following seems to be starting up. I hope it translates into more sales.

What did I learn? Well, I certainly put my Distributed Systems course to work, as I took the build farm from a fault-intolerant eight-node system to a significantly more tolerant 33-node system. The biggest nagging issue I was unable to solve was that for some asset types, on a blade server with no physical GPU, a tool would occasionally fail on a given asset (and then succeed in subsequent executions), and the logging I had in place was not sufficient to track down the issue. Then we went into pipeline lockdown and we let the issue lie.

Besides that, I learned a bit about the file systems on the Xbox 360 and Playstation 3, and the different methods of distributing content on those platforms. I learned how to publish on Steam, and while I think Microsoft has the best publishing tools of the three, I have to give Valve credit on how approachable they were for any publishing/distribution issues I had. The PS3 and X360 discs, as well as the Steam digital download, are my largest user-facing contributions.

I learned a bit about Flash too, as I fixed some UI audio issues in the endgame.

Overall, Space Marine was great to work on. I proved myself as a programmer, rose pretty quickly from junior to intermediate, and will be moving into gameplay on my next project, on what looks to be a pretty cool feature. I won’t say what, yet, until I’m sure it’s fine to talk about it. THQ has announced and shown it, so it’s probably fine, but I want to play it safe.

Annual reviews at Relic were last week, and, I am no longer an Associate Programmer III. I’ve been promoted to Programmer I, woo! This is awesome on two levels. First, it’s a silent I-told-you-so to the companies that wouldn’t even give me the time of day when I was looking for work in 2009. One company flat-out told me they don’t hire juniors, period. I think that’s a terrible HR decision, but that’s for another post, and I don’t want to sound too vain.

The second is for the major confidence booster. For the past 17 months, the vast majority of the code I’ve written is build server code in C#, then tools in an assortment of languages, and a very little bit of C++ game code. I’ve been worried that when I finish on Space Marine and move into a role more directly involved in game code, my C++ skills will be too rusty, and I’ll take too long to ramp up to a new role and a language I haven’t seriously used in a long time. On the other hand, I’d only touched C# in a single class in university before diving into our heavily distributed build farm, and I picked it up just fine. I’m surely making mountains out of molehills, as usual. The specific language is a minor part of being a good programmer, after all.

Anyway, promotions, woo! An additional woo is reserved for when I finally get over my self-doubt issues.

Random other stuff:

The lack of posts on here has been due to the combined factors of not wanting to simply repost everything we officially post about Space Marine (and seeming like a drone in the process) and not having anything meaningful to post about.

I am totally going to buy an Emissary later this year once Space Marine is done and we move to something bigger.

This came about as a result of Angelina commenting on Persona 3. I looked for it on the shelf, and didn’t see it. “Oh, it must be in the games to sell box,” I said. An amusing few minutes later, Angelina now has FF12 Collector’s Edition, Persona 3, and Scribblenauts. Apparently this is Christmas morning/shortly after moving in all over again. I have been encouraged to post the contents of the Games – Sell box, so, here it is.

Some of these are pack-ins from motherboards and graphics cards, some of them are free games from undergrad co-op jobs, and some are just games I either just could not get into, or aren’t good enough to keep a spot on my shelf.

If you’re reading this and have an interest in anything on the list, drop me a note and we shall see what can be worked out. Due to the account registration policies of yesteryear, I make no assurances regarding the online playability of the PC games.

Magazines are starting to appear featuring our game. So far, I’ve seen us on the cover of Gamers.at and consol.AT, Austrian gaming press. We’re also in their German counterparts, ConsolPLUS and GamersPlus.

I’m looking forward to seeing what English-speaking press have to say about the game. I’ll probably be snapping up physical copies of any magazines featuring Space Marine for memorabilia’s sake. It’s my first game as a professional, rather than a co-op, after all!