In 2015 I participated in HandmadeCon, a convention created and run by programming guru Casey Muratori about game development. The event included five speakers: Tommy Refenes, Mike Acton, Jonathan Blow, Ron Gilbert, and myself. The event was hosted at the Seattle Public Library, with Casey interviewing each of us in turn about the technology behind […]
Whose bug is this anyway?!?
At a certain point in every programmer’s career we each find a bug that seems impossible because the code is right, dammit! So it must be the operating system, the tools or the computer that’s causing the problem. Right?!? Today’s story is about some of those bugs I’ve discovered in my career. This bug is […]
Avoiding game crashes related to linked lists
In this post I’m going to talk about linked lists, a seemingly trivial subject that many programmers — even good ones — seem to get terribly wrong! Then I’m going to share techniques (with source code) to make your game engine code simpler, faster, more memory efficient and more reliable. Wow! This post is part […]
Tough times on the road to Starcraft
I’ve been writing about the early development of Warcraft, but a recent blog post I read prompted me to start scribbling furiously, and the result is this three-part, twenty-plus page article about the development of StarCraft, along with my thoughts about writing more reliable game code. I’ll be posting the latter parts over the next […]
Debugging running server applications
So you’ve written an awesome online game that works perfectly in the test environment, but when real users are playing the game server doesn’t work properly. Now what?!? I was reading an article by Mike Perham called Debugging with Thread Dumps and wanted to share a related technique from the development of Guild Wars that […]
Marketing yourself as a programmer
A number of readers asked questions about programming careers, both about getting into game-development as well as staying employed in software engineering. I started writing a comment to JM about age-discrimination but it turned into this blog post about getting a great software engineering job. JM asked: How did you manage to stay in this […]
Scaling Guild Wars for massive concurrency
TL;DR: Server-side game recording is awesome for performing scalability testing, as well as reproducing game bugs and enabling players to replay their game experiences. How to load-test game servers In anticipation of the launch of Guild Wars 2 in August I thought it would be interesting to talk about some of the techniques we used […]
Detect client disconnects using named pipes in C#
TL;DR: Solved – after several failed attempts I discovered how to detect client disconnects when using named pipes in C# — the article below includes relevant code snippets from my CSNamedPipes GitHub project. In my spare time — of which there’s not much since I have four kids — I’ve been helping someone solve a […]
Error handling using forever-loop
One of the biggest hassles in programming is handling error conditions. It’s also one of the most important parts to get right because improperly handled errors lead to security defects and general unhappiness of your users. Error-handling code sucks because it complicates the flow of the code that does real work. Consequently, most programming articles […]
Building Linux virtual machines on Windows
TL;DR: Want to build Linux virtual machines to run on your Windows computer? Check out linux-vm, which contains everything you’ll need. Edit: The original scripts (“build-linux-vm”) no longer work. I’ve rewritten the project and created a new GitHub repository (“linux-vm”) that *does* work, and changed the links in this article to point to the new […]