December 29, 2007

Review: "Sweeney Todd" (2007)

I managed to see "Sweeney Todd" opening night, and it was a rather odd creature.

"Sweeney Todd" is based on a Broadway musical and in many ways succeeds. One of the primary challenges in bringing any play to the big screen is fleshing out the world that the play inhabits. So much that can be left to the imagination on the stage cannot be on film, and with only a couple of missteps "Sweeney Todd" is well realized. London is effectively transformed into a dark and dreary Burtonesque nightmare. There were only a couple of scenes where the CG used to bring this about were obvious (one near the beginning where they forgot to add any shadows to the actors, one involving a quick trip down a tunnel which made everyone seem like a cardboard cutout, and one near the end involving a giant meat grinder), but you can't fault the rest of the production values.

As far as acting goes, you can't really fault any of the actors either. Sasha Baron Cohen was an inspired choice as the rival barber, and Johnny Depp truly became the Demon Barber of Fleet Street. I wish Helena Bonham Carter had managed to actually pick an accent and stick with it through the entire film, but her characterization was spot on.

There is one large glaring hole in this film, though. For a movie based on a musical, the musical portion of the film fails miserably. Neither of the film's leads can carry a tune in a blood-spackled bucket. To be quite honest, I think the film would have been more enjoyable had they simply transformed the music into conversations. Quite the shame, given how much I've enjoyed other musicals-turned-film in the past.

If you are a Depp or Burton fan, it's worth seeing, but beyond that it is an ideal example of how to fail when bringing a musical to another medium.

December 15, 2007

The Rest of the Year

Yesterday was my last day of work for the year. Fortunately, this final day of work for the year didn't involve a surprise layoff. (See the four posts on December 4, 2006 for reference.)

This weekend, I'm trying to finally hit 300 games on I was hoping to hit that milestone earlier this week, but I spent a lot of time trying to troubleshoot some issues with "Star Wars: Dark Forces II: Jedi Knight" on Intel laptop chipsets with little success. When I get my next advertising check, I'll have to pick up a cheap Intel chipset laptop to include it in the process.

Monday is my thirteenth wedding anniversary, and that is a milestone that most people I knew thirteen years ago didn't think I'd make. There was actually a pool going around with people betting that we wouldn't make it three, let alone thirteen. I wonder if outlasting the pool means we win...

Tuesday morning, we're flying up to Utah and will be there until the 27th. We've got friends who are going to be watching the apartment in our absense. I'm going to have limited to no connectivity up in Utah, so there will be no updates to this blog or during that time.

We get back the evening of the 27th and I'm off until 9:00am on January 2, 2008.

November 30, 2007

Spam Plugin Spam

It's always nice when you are advertising a plugin used to keep your blog spam free, and the first comment in reply is spam.
Screen capture of spam in question

Also, I've got a non-computer-related site that should be going live before the end of the year. I'll keep you posted as I get closer, but in the meantime, go hug your pets. (hint hint)

November 29, 2007

MSNBC Channels LOLCats

I was reading on MSNBC about how Rodney King was shot, and I noticed something a little odd...look at the image caption.

Link to picture because my wonderful template is chopping off the appropriate part of the image...
Rodney King was beated?
Evidently, he was beated instead of beaten.

November 27, 2007

WORKAROUND: WSE Web References Not Upgraded In VS2008

You are using Visual Studio 2008 to upgrade a Visual Studio 2005 ASP.NET project that used Web Service Enhancements 3.0 (WSE 3.0). After upgrading, the secured reference is missing.

Keep a copy of your old project.
After upgrading your project, open the old project in Visual Studio 2005.
Select "Show All Files" in Solution Explorer, then drill down into "Web References," then your WSE web reference, then and finally into Reference.cs or Reference.vb, depending on your language of choice.
There will be two classes in here. The Wse class (which was removed by the VS2008 upgrade) will be at the top of the file. Copy that class into the same file in your VS2008 project.

November 21, 2007

WORKAROUND: Visual Studio 2008 Fails To Install

You are running as a limited user on Windows Vista and when you run Visual Studio 2008's installer and approve the UAC prompt, setup either hangs during the .NET Framework 3.5 installation or the installation hangs during setup.

Reboot your machine.
Log in as an administrator.
Install the .NET Framework 3.5 installer by itself.
Reboot your machine.
Log in as your normal user.
Install Visual Studio 2008 as normal.

November 19, 2007

PS3 Development Now "Cheaper" Than PS2

A PlayStation 2 development kit used to cost $10,000. You can now get a PlayStation 3 development kit for $10,250.

Unlike the PS2 development kits, the PS3 development kits include the development tools now. (They used to cost ~$2,000 a seat additional previously.)

Also, you can now use the test kits for development purposes.

Wow...Sony actually learned from Microsoft on this one. An Xbox development kit costs $10,000, comes with the development tools, and you can compile against a test kit. Say what you will about the hardware, but when it comes to making things developer friendly, Microsoft knocked it out of the park.

Now if they'd just learn from the 360's kernel design, the PS3 might be a bit more attractive.

November 16, 2007

FIX: Vista Freezes For 10-15 Seconds Every 10-15 Minutes

While using Windows Explorer, Internet Explorer or anything that accesses the disk drive on a regular basis, the Windows UI seems to freeze. If Process Explorer is open, you'll notice that Hardware Interrupts are pegged. You can still move your mouse cursor, and at the end of the 10-15 seconds any UI actions that you had started will happen, seemingly all at once.

Motherboard with an Intel chipset with integrated RAID support and SATA drives, like most recent Dell Dimension motherboards, but you are not using RAID.

RAID is enabled on the motherboard. As a result, the RAID version of the chipset driver is loaded.

(NOTE: This solution involves changing settings in your BIOS. Modifying these settings if you do not know what you are doing could result in your system not being able to boot up. Please do a full backup of your machine prior to attempting this fix.)
Reboot your machine.
Go into the BIOS settings and look for the RAID settings.
Disable them. (On a Dell Dimension, change the motherboard settings from "RAID Autodetect/ACHI" to "SATA/PATA".)
Save the modified BIOS settings.
Boot into Vista.
Go into any profile; new drivers will start installing that require another reboot.
Reboot when prompted.

November 15, 2007

Game Mashups

I've been trying to stretch my creative muscles more and more lately in an effort to keep myself sharp. Over at Shacknews, they've been having lots of contests lately that have given me a chance to stretch myself with an end goal in mind. One of the more recent ones has involved envisioning game mashups.

A few of my entries:

Nintendo licenses Activision's 1980's portfolio and pulls a "Doki Doki Panic" on them...

The plot for the new "Ghostbusters" game has been leaked...

Someone asked for the Cyberdemon vs. Phoenix Wright...

EA and Harmonix monopolize classical music...

Konami and Fox combine two lagging IP's to form...

November 14, 2007

Coming Home

I'm coming back to Utah for a bit this winter. Things have settled down enough at work that I can actually take a vacation.

I'll be arriving on December 18 and flying back to Dallas the morning of December 27.

Hopefully I'll be able to get together with lots of the old SLGTest guys and perhaps some Shackers.

November 7, 2007

SafeDisc Vulnerability

I'm on record as saying that if I have to deal with media-based copy protection, I want it to be SafeDisc. The 2.x series of SafeDisc was not only the least intrusive series of CD-based copy protection software ever released, but there hasn't been a CD or DVD drive released in the last seven years that has been incompatible with it. It's even had support for it built into Windows XP and beyond.

Unfortunately, it is now being used as an attack vector against Windows XP and Windows Server 2003.

If you are running Windows XP or Windows Server 2003, download and install this update immediately. This will patch away the attack vector, but I am disappointed that this vulnerability managed to slip through.

November 6, 2007

"Portal" in 18:05

"Portal" completed in just over 18 minutes.


Four Digits and Falling Behind

One thousand posts. It's a milestone I never thought I'd hit.

Of course, having one thousand unread E-mails in my personal inbox was a milestone I didn't want to hit. (Yes, that's a current image.)

I never expected my left toe to be the number one hit on Google Image Search and the number one traffic source for my site.

Eight hundred sixty posts since getting my job at Ritual, in part because of my blog; two hundred sixty posts since losing it. (As a side note, the person I stated that I respected greatly no longer has my respect. Sending me an E-mail within four days of my layoff asking me to stop talking about being laid off because it was bringing negative attention to the company was a really low blow.)

Three hundred twenty-four posts since I finished the widescreen patch and SDK for "SiN (Steam)" that will never be released.

Five hundred sixty-four posts since going on the offensive.

Six hundred thirty-five posts since being challenged by a six-year-old to a game of "Quake III: Arena."

I've been doing this for over three and a half years publicly, and while it hasn't always been the most positive experience, I'm glad that I've done it.

To be honest, I'm not sure if I'm going to hit 2,000. I'm not even sure that's going to be a target. I'm just going to take it one post at a time. Expect fewer posts overall from here, but higher quality posts when they do show up.

Thanks for reading.

October 31, 2007

October 29, 2007

Tester, Developer, Author...Songwriter?

I wrote an 80's-style power ballad on game cliffhangers for a contest over at Shacknews, and I was one of the top five. I'll find out this weekend what place I was in.

This was a bit of a stretch for me because I had to essentially divorce myself from existing melodies. I've done my fair share of song parodies over at the Shack...

Shub-Niggurath (to the tune of "Bohemian Rhapsody")
A brief take on the Source engine stuttering bug to "Mony Mony"
An Oompa Loompa warning song about Steve Gibson's unfortunate tendency to drop servers
We Didn't Start This Subthread (to the tune of "We Didn't Start The Fire")...just a listing of Shackmemes
Winter of '69 (to the tune of "Summer of '69")...based on a bug where all of the posts after the rewrite were showing up as being made back in January 1969.

...and this is just a small collection. Sometimes, you just have to stretch your creativity into new fields in order to keep your mind fresh.

October 27, 2007

XNA and VB, One Year Later

Over the last while, I've ranted and raved about Microsoft's XNA Game Studio Express Edition not supporting Visual Basic .NET.

Now that the ZMan is updating again, I've noticed a new post about some really poor communication skills from the XNA team about VB.NET support. He links to a great XNA/VB rant from a Microsoft MVP about it.

Now, awhile back one of the Microsoft guys said that the reason VB wasn't supported on the Xbox 360 was because VB used some features of the CLR that their version of the Compact Framework didn't support. I think I finally figured out what it was, and if it's the case, we have only our older VB6 brethren to blame.

The XNA team could have easily said that you couldn't use "My" on the 360, even though it's supported in the full .NET Compact Framework. They could have easily said that the Microsoft.VisualBasic namespace couldn't be used on the 360, and we would have adapted, even though it is also supported in the full .NET Compact Framework. But remember back in 2001 when the value of True was a big deal? It does make me wonder what other "hacks" were put into the full CLR to support the older VB6 way of doing things.

I love VB.NET with a passion, but over the last couple of years I have started to lose my faith in VB's future. When you look at many of the new features that are coming into the .NET Framework, the syntax that is being used to bring these features into VB is becoming more and more tortured, and some language constructs now go against best practices. (Using "Handles" with WPF applications means that you aren't using the WeakEvent pattern, for example.)

So as a result, we're going to have to move back to the realm of VB hacking to get things done...even though we no longer have that VB hacker icon to follow. If you want to use XNA and VB, you can check out Alan Phipp's page for now, but if we want full access to the managed world, we're going to have to tell Microsoft two things. One, it's okay to let the VB6 way of doing things die, and two, .NET-capable technologies that Microsoft releases must support all languages that are supported by Visual Studio out of the box.

Teams like the XNA team and the Windows Home Server team may only have the funding to support one language, but if something like that is detected inside Microsoft, the platform evangelism teams should step up to the plate with either funding or staff to help them support the other languages. After all, language diversity doesn't mean anything if Microsoft is only going to be giving us items we can use with C#.

October 25, 2007

Trapped in an Elevator

I wish that the title of this post was a lead-in to a witty non sequitor, a metaphor for a wasted life attempting to alternatively claw my way to the top of the corporate ladder and glide past all those nasty steps at the same time, or even a pithy euphamism for sexual intercourse, but alas, none of those apply at the moment.

I got off of work about 5:15pm this evening, wandered into elevator car #7, hit the button for the first floor, felt the familiar lurch as the elevator started to move and waited. The elevator ride at work is usually a very smooth one, so my first hint that something was amiss was when the doors hadn't opened after a few minutes.

I checked my watch and after five minutes had passed I opened the callbox door and pressed the emergency call button. A horrible-quality recorded voice informed me that they knew where I was and that someone would be on the line shortly.

A few moments later, a nice lady picked up the line. After I relayed my location, she asked if I was alright and if I was alone, and I answered both in the affirmative. She asked me to press and hold the "door open" button for five seconds because evidently in some elevator models, that makes the broken lift suddenly functional. This wasn't one of those models.

She asked which floor I was on. I said, "I'm on one of the express upper tier elevators, and the sign says I am on floor 'X,' so I must be somewhere between ten and one.". She said she'd call building security and hung up.

I stood there and in the silence I could hear the other elevators around me, merrily dinging and whirring away as they ferried their passengers up and down as they were designed to do. Meanwhile, mine was acting like a stubborn child refusing to follow the most simple instructions.

After fifteen minutes of not doing anything constructive, I checked to see if this was one of the cars where you could get cell service. I was expected to meet up with my wife later, and the inability to catch up to her because I was incarcerated in a 6'x8' cell an indeterminate number of feet off the ground tends to hamper one's ability to keep appointments. Unfortunately, there was no service.

A few times, I thought I heard a voice on the other side of the doors and called out, but there was no reply.

To attempt to occupy my mind, I sat down in the corner and played a few card games from Magmic Games on my BlackBerry, the entire time mentally lambasting the company for caring enough to animate card dealing but not caring enough to properly handle their menus after completing a resumed game or even handle the red "hang up" button from in-game per the interface requirements. Time trapped in an elevator goes so much more quickly when something else is wrong that you can fixate on.

After 40 minutes had passed, I called again to see if there was an ETA on being helped. The gentleman who answered said that the repairman was on his way and that he'd be there "soon.". I marvelled at his ability to vocally put quote marks around the word "soon" and resumed my wait.

After almost an hour and a half of being wrongfully imprisoned by a counterweight with a superiority complex, the doors opened a half of an inch. I peered out to see a short dude with a salt-and-pepper beard and the evening security guard. They asked if I was all right, then asked me to wait about five more minutes. Ten minutes later, the doors slid open. I was so happy to be free that I stepped through the doors just to have them close on me. Not "close on me" like the doors were being cockteases saying, "Ha ha, you can't get out...shoulda been faster.". They closed on me closer to how a Venus Flytrap closes on a meal. After a brief yelp of pain, I was able to extricate myself...onto the floor I started on.

I hopped on a different elevator, went down to the first floor and called my wife while I waited for the security guard. Once I gave him the information he needed for his report, the maintenance man told me what happened. The elevator goes up just slightly before going down, but this time it tripped some circuit and thought it was travelling down to the ground floor when in all actuality it remained two inches above the floor it started on.

So now I am sitting on a bus heading to the train station. To my left is a woman sobbing unconsolably because her boyfriend broke up with her via her cellphone tonight. Everyone else is pretending to ignore her while she is trapped in an emotional elevator waiting for the release that only a good cry brings. I guess I was able to turn this experience into a crappy metaphor. All I needed was the right motivation.

October 24, 2007


Five more posts and this blog will enter four-digit territory. I've made some minor template changes, etc., in preparation of a change that's coming with post 1,000. hit 225 games this week. More are on the way. With out-earning this blog on a day-to-day basis by an average of 5:1, it makes sense to put a little focus over there.

You may notice a few posts being updated over the next few weeks. Some advertisers have asked if they could sponsor some of my "greatest hits" posts. Don't worry...any ads will be clearly marked. I won't let this become a spam blog.

I'm going to be away from my computer most of this weekend. Saturday is going to be a bit busy because I'm going to be starting up with a new D&D party (trying to get back into some in-person gaming and at least feel like the money I invested in D&D 3.5 was justified) as well as attending our neighborhood's annual Halloween party. Sunday will be my first trip to Six Flags Over Texas.

Finally, while I may not be all that happy with the minimal work I've done on USEMP, my XNA coding is working out a bit better. If all goes well, I'll actually have something you can play before the end of the year.

October 20, 2007

Steam (Or Lack Thereof)

Over the last six months, the amount of energy that I've had to pursue a lot of my personal interests has really dried up.

I haven't been happy with the code I've been writing for USEMP. Every line I try to write just makes me feel...dirty. My XNA projects have stalled out. I haven't been on MSN Messenger in months. Even my gaming has slowed down significantly.

Part of it is due to stress from before the surgery and the recovery and bills afterwards. Part of it is that work has required a lot more of me due to several departures from my department over the last year. Part of it is due to a bit of an emotional rollercoaster due to some dirty tricks by a former employer or a former employee of theirs...unsure which.

Regardless, Sarkie and Skeetles are still hard at work on USEMP (or not - see below), is renewing interest in me, my upcoming casual game projects are giving me a chance to stretch my legs, and I'm finally beginning to relax.

Short term goals: Post 1,000 is just around the corner. I've got three major projects that are going to be complete next week.

Medium term goals: Finish wrapping my head around LINQ.

(Update: Fixed typo, added correction per a comment.)

October 18, 2007

"30 Days Of Night" (Mini-Review)

I got a chance tonight to watch a free screening of "30 Days of Night" at the Cinemark 17 in Dallas. There are times when free costs too much.

"30 Days of Night" is the first movie ever released in theaters where you can experience an entire month of boredom in real-time.

The number of legitimate scares in the film can be counted on one hand, all of the interesting scenes are either shaky-cam'ed to death, not shown or immediately cut away from, and the majority of the speaking parts are accompanied by both dialog that is stilted and out of place and acting that makes Keanu Reeves look energetic.

That said, there are a couple of fairly creepy scenes, including a scene with a child devouring a parent and the child's subsequent dispatching, but they are too few and too far between. The most frightening thing, however, is that this movie was considered good enough to release.

Your Halloween scare budget would be better reserved for your local haunted house or "Saw IV" when it comes out next week.

October 13, 2007


I've finally given up and made the shift over to Firefox from Internet Explorer, but it isn't Microsoft's's Adobe's.

Under Vista, some embedded Flash animations interact with the browser in such a way that the entire Aero interface freezes for anywhere from 30 seconds to five minutes. Using Process Explorer shows hardware interrupts shoot through the roof. It doesn't matter if it's Vista 32- or 64-bit. It just sucks.

It isn't that I really like using Firefox. From a usability standpoint, I prefer IE. But given how critical Flash has become to using the Internet, until this interaction is fixed, my browser has changed.

October 9, 2007

The Most Dangerous Code

Over the last few months, there has been a gradual exodus from my department at work. As a result, I am currently the only programmer in the department.

In some ways, it's kind of nice coding solo. Because it's my design, I know the requirements, how all of the pieces fit together, what pieces can be reused elsewhere with a little extra design work and so on.

However, there is a hidden trap in coding solo. We are limited to our own experience and points of view. When we program with others, we benefit from code review as well as having sounding boards that we can bounce our thoughts off of. When coding solo, your own coding gremlins run around unchallenged. Your limited perspective runs unchecked through the design. You may miss the easy solution to a problem or the elephant-sized hole in the middle of your implementation.

I find myself coding a lot slower and doing more research to try to minimize the risks involved with coding alone, but you can never eliminate those risks completely.

What techniques do you use do keep the quality of your code up when you are coding alone?

October 5, 2007

SQL Injection...Again

We've got someone new trying to inject some bad SQL against our server at work.

An IP address originating in Mexico sent this query at us:


Decoded out, they sent us:

declare @q varchar(8000) select @q = 0x57414954464F522044454C4159202730303A30303A323027 exec(@q)

Decoded out even further, they were trying to execute this:

WAITFOR DELAY '00:00:20'

While I'm glad that none of their attacks have been successful so far, it keeps me up at night worrying that maybe I missed validating a query-string variable or that I've forgotten to handle a text-box.

Asshats like this make me sick.

September 30, 2007

BUG: CSI: Hard Evidence installer missing DLL files

If you are getting an error about missing DLL's (like msvcr71.dll or msvcp71.dll) when you try to run "CSI: Hard Evidence," go to where we have the DLL's available for download.

Updated on May 18, 2008 to fix link into the new

September 26, 2007

Serious Games

It's time for me to start brushing back up on my game development skills.

Starting in November, I'm going to be working on games again. Not full-time, and not first-person shooters, but I will be working on some "serious games" here at work.

It's kind of an interesting experiment. I'm still learning the meetings industry, so creating games to teach how to be a better meeting facilitator or how to handle large expo events more cost-effectively will be an interesting challenge.

The fun part is going to be trying to find out what choices people have to make to handle these sorts of situations and extract out the "interesting" part of it. I've done some serious games in the past under contract from Utah State University, but the design was completely done for those before I got them, so all I got to do was the implementation work. For these, I'll be handling all design and most of the coding, so it will be an excellent stepping stone back towards what I feel is "normal."

September 23, 2007

"Resident Evil: Extinction" in 60 Seconds [Spoilers]

Be warned, this post has spoilers if you want to watch the movie...

(Alice wakes up in a shower)

AUDIENCE: We saw this in the first movie.

(Alice turns the corner and walks into the laser hall where half the cast of the first movie died.)

AUDIENCE: Oooh, this is different.

(Through a variety of acrobatics, Alice jumps up into the vent, shimmies down a ventilation shaft, and eventually gets killed by an obscure trap that pops up out of the floor.)

BAD GUY: Meh, toss her corpse.

(Opening credits.)

(Claire Renfield and company from the second movie travel through the desert.)

CLAIRE: Hey, look, a hotel. Go check it out, guys.

(Mike Epps goes and gets bitten by a zombie.)

MIKE: Ouch, that hurt. Okay, it's clear.

(After a night of casual sex, everyone wakes up to alarms being set off by Edgar Allan Poe's worst nightmare...Ravens times two to the power of ∞ - 1.)

EVERYONE: Oh, shit, a Hitchcock homage.

(Birds freak out, kill one-third of the cast. Alice shows up and causes a giant fireball in the sky.)

CLAIRE: What the fuck?
ALICE: Evidently, I'm telekinetic now.
CLAIRE: Hmm...I'm going to go be moody now.

(Meanwhile in a different Umbrella hive.)

RED QUEEN #2: Hey, bad guy, I can detect psychic people now.
BAD GUY: Cool. Let me go borrow these extras from "28 Weeks Later" and send them to go kill Alice.

(Some plot stuff happens.)

CLAIRE: Okay, we have a choice. We can live, or we can go on a roadtrip to Vegas.
EVERYONE: Woohoo! Roadtrip! Take it off!

(Everyone arrives in Vegas. Zombies pop out of a freight container, all wearing the exact same outfit.)

PAUL W.S. ANDERSON: See, we wanted to replicate the experience of playing a video game with limited texture memory here, so...
AUDIENCE: Shh...we want to see Alice kick ass!

(Alice kicks ass.)

BAD GUY: She's kicking too much ass. Hit the PAUSE button.

(Henchman picks up his DUALSHOCK(tm) 2 controller and hits PAUSE. Alice stands still. Another third of the cast dies.)

HENCHMAN: Oh, shit, she's going Psycho Mantis on our ass!

(Alice unpauses herself and kills all of the bad guy's henchmen.)

BAD GUY: Run away!

(Bad guy gets bitten by one of his borrowed extras from "28 Weeks Later" and gets flown off to the Vegas hive.)

ALICE: Okay, now that enough people are dead, let's go get a helicopter to fly everyone else away.

(Alice goes and gets a helicopter for everyone else, then goes down into the Vegas hive.)

ALICE: Funny, it looks like I'm playing "Doom 3" on the Xbox...guess I don't need to worry about vertical aiming.
RED QUEEN #2: Not so fast, Alice.
ALICE: Hey, holobitch, whazzup?
RED QUEEN #2: Dr. Isaac...
RED QUEEN #2: I think you call him "bad guy."
ALICE: Ah, okay. Go on.
RED QUEEN #2: "Bad guy" has turned into a bad extra from Japanese tentacle porn.
ALICE: Great...maybe now we can earn this "R."

(Very anticlimactic battle occurs.)

ALICE: Cool. Now let's show hundreds of clones of me so we can set up for "Resident Evil 4."

(End credits.)

September 22, 2007

Bug: CRC error on CD will cause Explorer to crash in Vista

If you are using Windows Vista and you are working with an older CD that due to the passage of time has CRC errors on some files, expect Explorer to crash a few times while using it. Basically, the thumbnailer seems to crash if it can't read a file because the file is actually unreadable, but is able to handle security issues and corrupt files just fine.

As a workaround, browse your CD in Details View, or XCOPY the CD to your local machine with the /C switch so that you can figure out which file has gone bad.

September 18, 2007

GarageGames Purchased

A majority stake in GarageGames has been purchased by IAC, Inc.

At least for now, there is no news as to if this will affect public availability or pricing of the Torque engines or toolsets.

September 17, 2007

120 Down...

1,880 to go... in the News

GameSanity picked up on over the weekend. The site seems to be holding up so far, which is a good thing since the site also hit the 100-game milestone over the weekend.

I've not forgotten about this blog. I've got a big rant brewing about QA and objectivisim, as well as another fairly hefty rant involving why my current exile may be the best thing possible for my career in QA.

Stay tuned.

September 13, 2007

C# 2.0: ? Operator and Anonymous Methods

Nothing too big with this one. If you are using the ? operator, the return types can't be anonymous methods.

This code will fail to compile with the message "Type of conditional expression cannot be determined because there is no implicit conversion between 'anonymous method' and 'anonymous method'":
results.Sort(GridViewSortDirection == "ASC" ?
delegate(MyClass p1, MyClass p2) { return p1.CompareMe.CompareTo(p2.CompareMe); } :
delegate(MyClass p1, MyClass p2) { return p2.CompareMe.CompareTo(p1.CompareMe); });

To get around it, break it out into a standard "if":
if (GridViewSortDirection == "ASC")
results.Sort(delegate(MyClass p1, MyClass p2) { return p1.CompareMe.CompareTo(p2.CompareMe); });
results.Sort(delegate(MyClass p1, MyClass p2) { return p2.CompareMe.CompareTo(p1.CompareMe); });

September 10, 2007

Still Recovering

I'm slowly returning to the realm of normality.

I went back to work on Thursday, but I just couldn't make it on Friday. I nearly passed out halfway to the train station, so I went home and went back to sleep.

I managed to kick back over the weekend for the most part and did a lot of low-impact "make busy" tasks like adding two dozen games to Almost eighty games listed now, could be higher this week.

I'm at work now, but the torrential downpour here has been insane. Nothing quite like seeing water gushing up out of street vents, massive slabs of street sinking into the ground, and eleven-foot-high wakes being left by vehicles to make you want to go back home and crawl into bed again.

September 6, 2007

Back At Work...

Well, I'm running at about 50%, but I'm back at work.

Fortunately, I'm not having to debug the SQL Query from Hell™ today, but it's still difficult to concentrate.

I nearly didn't make it to work. I missed my connection between my train and my bus this morning, and while I was standing waiting for the next bus, I started to get really light-headed and nearly fainted. After sitting down for ten minutes, I was okay, but I almost passed out again while waiting for people to get off the bus so that I could get on.

Fortunately, the people who were waiting for the bus with me saw that I was in a wee bit of distress and let me on first. I napped for 40 minutes and awoke just in time to get into the office.

I intend to vegitate this weekend if at all possible to try to recover a little more strength.

September 5, 2007

Stints Leaving In Two Hours

I'll be leaving here in two hours to go get the stints in my nose removed from my septoplasty last Thursday.

I'm gradually returning to normal, and hopefully once the stints are gone, I'll be up to 90% fairly quickly.

I'll be making a fairly large post about the entire experience of the last week later this weekend, but just one quick tip. If you are ever going to have major surgery, don't read anything from Ayn Rand prior to surgery. Objectivism and pain don't mix very well on a subconscious level.

September 1, 2007


It hurts to move my face and I'm having problems staying awake for more than three hours at a time or sleep for more than two at a time.

I wasn't expecting them to remove my tonsils and uvula at the same time as they fixed my septum and turbinates.

I'm still in a lot of pain, but I'm still alive. Hopefully I'll be able to start to return to normal soon.

August 29, 2007

Twenty-one Hours To Go...

In 21 hours, I'm fairly certain that I'm going to start humming that Ramone's classic, "I Wanna Be Sedated."

I'll be on a small padded table under searingly bright lights while men better educated than myself crack into my face and restructure portions of the inside of my skull.

I'll come to about four hours later and then understand the true meaning of pain about six hours after that when I start screaming incoherently about daggers against the inside of my eyelids and realizing that my face is more swollen than Tom Cruise's ego.

Over the following several days, as my body begins to return to a state similar to what it was before its violation, I'll be home. No work. No code. No worries.

If there are any problems, I'll provide my wife with my usernames and passwords so that she can inform the appropriate people. Hopefully, we'll speak again shortly.

August 27, 2007

Pre-Knife Jitters

I spent most of the weekend working on various projects to try to keep myself calm, given the pending knife to the nose Thursday morning.

I managed to get up so that it can start getting crawled (hopefully, I'll have per-game comments working soon and have it so that it looks less like a domain parking page and more like a valuable Vista resource). I managed to polish off a lot of design for stuff at the office. I managed to get my ass kicked at "BioShock" on hard after sailing through it on medium. My book proposal has been passed back to the publisher after making modifications based on their recommendations.

Of course, all that does is temporarily push the fact that I'm about to have my face cut open to the back of my mind. The doctor's been paid off, but the surgical center still hasn't run my insurance and I'm getting nervous that I may not have enough to cover it.

68 hours to go.

August 26, 2007

Bikini Waxing Monkeys?

There are times when I fear the Internet...

This is one of those times. Prelaunch

Some of you may have noticed a lot of Vista gaming "tips & tricks" lately. Well, they've quickly become the most searched for pages on this site.

Because of that, I'm "prelaunching" today.

Right now, there are only a few games listed, but I'm keying them in as quickly as I can. I'm starting with the titles that have problems and workarounds, and I'll start working on patches later this week. Hopefully I can have it at 100% before my surgery on Thursday morning.

(Update: Thirty-six games up now, several minor bugfixes, slightly better CSS. Still working on getting the ENTER button hooked up to submitting search.)

August 25, 2007

Perspective on Games and Protection

I'm a gamer.

I play games on my PC. I play games on my Xbox 360. I play games on my PlayStation 2. I play games on my GameCube. I play games on my BlackBerry. I play board games, card games, word games...I play games.

I've been playing games now for thirty years.

I remember going to arcades as a kid...and even managing one as an adult. I remember writing games on my old Timex Sinclair 1000, then moving on to the Atari 800XL after my membrane keyboard bit it. I remember getting so pissed off when the hard sector copy protection on a game caused head knocking on my ancient floppy drive.

I remember when games started shipping with license agreements. They confused me. "I bought the damn game...who are they to tell me what I can or can't do with it?"

I see the same comments all over the place nowadays. I've been there.

I still get pissed at protection that affects how your system functions (like StarForce). Hell, StarForce pushed me past the edge in the past. I'd like to point out a quote from that post back in 2005...
I would rather lose a sale due to piracy then lose all future sales due to an experience like this. A sale lost to piracy can lead to future sales if the game is good enough. A customer lost due to poor experience will never come back.
Yes, that's right. I said that. The poster child against piracy. Of course, sixteen months later the pirates were eating my lunch, but that's another story.

I guess I'm just seeing another death spiral. I remember the backlash against hard sector protection at the user group that I used to go to back in the 80's. I saw the piracy going on all around me and back then, I kept quiet...even when I shouldn't have.

PC gamers are calling bullshit on the copy protection. Game developers are calling bullshit on the piracy. With all of this bullshit going back and forth, the consoles are walking through relatively unscathed. On a console, you don't need to worry about the number of simultaneous have one and it's on the disk. You don't need to worry about CD keys, protection damaging your drive, driver issues, etc.

Developers are moving to consoles because of the lack of piracy and the relative ease of development (lack of config problems due to locked hardware, static performance profiles, etc.). Gamers are moving to consoles because there are no just play the game.

But PC games are just beginning to see the beginning of the depths of protection, and you need look no further than business software to see where it's going. After all, a PC is at its very nature a business machine. Admittedly, games have driven the development of PC's, driven the performance needs, driven the overall focus of the industry, but in the end your PC was still designed for Excel and Word.

Look at PC gaming today. We have master servers authenticating our games, license authentication to install and launch, media-based protection is acting as a dongle in a CD tray, hardware fingerprinting, CD keys...the business side has been there and when it comes to license enforcement, they're leading the way.

To be honest, they really have to. All software, games included, are sold as licenses. You do not own the software you buy. Even free software like Linux is made available to you under a license. Licenses have varying levels of freedom attached to them, but the fact that we are only acquiring licenses to the software cannot be discounted. (If it could, would sites like this exist?)

If we were truly buying the software, we could copy it all that we wanted and pass it out to our friends. We could disassemble it, distribute modified versions of it, and so on. Some software encourages redistribution, but most do not. Games fall in that bucket.

Most license terms aren't enforced. Game rentals are specifically forbidden by the license agreements of pretty much every console game released over the last decade, but game rentals thrive. "Hot Coffee" was discovered because modification was pretty much encouraged on the side as it kept interest in the product. But license enforcement is starting to ramp up and you're starting to see the first effects of it.

"SiN Episodes" and "BioShock" caught a lot of flack for trying to enforce license constraints on an offline game, and while they may have been among the first, they'll be far from the last...and it's going to become more and more harsh as time goes on.

The only thing that could really correct this would be a radical redesign of PC's, essentially integrating license enforcement into the platform in a seamless manner like on the consoles or the iPod...essentially making the enforcement a seamless part of the experience as opposed to the hacked-up, piecemeal approach that we currently have.

But until that day, I'll go where these is less hassle or where the hassle makes it worth my while. I bought "BioShock" on the 360 because I can kick back on my couch and enter Rapture in a relaxed manner. I'm going to buy "The Orange Box" over Steam because even though having to connect to Steam may be a little bit of a hassle, the ability to reinstall my entire Steam library after a system format with a couple of mouse clicks and an overnight download makes me very happy.

Now I'm not defending the license terms that we get hit with. I still believe in the first sale doctrine. You should be able to lend, rent, etc., any licensed software that you have. But I do support the right of the company that issued the license to ensure that if you do lend or rent your software that you aren't using it while it is out of your possession.

If those rights can't coexist at some level, then there is no marketplace...and that is what will kill PC gaming.

August 24, 2007

The Who Down In Gameville

All of this BioShock hubbub on the net brought out the Seuss in me. Apologies for the length, and for the meter being off in some sections.

The Who down in Gameville love to play
Video games all the night and all day.
They play them with meals,
They play them on wheels,
They play them online,
They play them all fine.

The gamers defend their systems with glee,
Some on PC, others on 360.
A straggling few have a PS3,
But their numbers are too small
To matter, you see.

The 360 gamers had plenty of games
But the means to control them were all the same.
No keyboard, no mouse would enter the fray;
With joystick, it was deemed, all games will play.

The PC gamers had games out the nose
And many could be played with a rubber hose.
Though hardware and drivers made compat pure shit
The gamers could play the game as they saw fit.

The 360 was capable of finishing the war
That Master Chief started this year less four;
But the PC gamers didn't really feel sore
Because they felt their computers could do so much more.

A few undesirables in either camp
Would pirate the games with their digital stamp,
But the PC suffered from warez much more often
That the 360 suffered in its small red-ringed coffin.

The makers of games saw the pirating void
The 360 protection automatically deployed.
It was too hard for most people to pirate and mod,
Unlike the PC where DRM's a fraud.

The makers of games kept selling to both
But the revenue figures weren't giving them hope
So they decided to turn PC games on their ear
And put in some roadblocks for casual pirates to fear.

They put in some code to check for the disk,
Figuring that would reduce their risk,
And for a while, the sales were in tune,
Until one day in the middle of June
When a fellow who went by the name of Woon
Etched into the code his Eldritch rune
And with that act of modification
The pirate people resumed their duplication.

The makers of games saw this,
And they were not pleased.
So they tried it again,
This time with product keys.
The crackers struck with the greatest of ease,
Bringing the simple code to its knees,
And copying again was as simple as a breeze.

While the battle to reduce bad copies commenced,
The good PC gamers were left on the fence.
While 360 gamers played games left and right,
Their PC shelf experienced a blight.
The PC got ports; even then, just a few.
Several had more bugs than a case of the flu,
So the PC gamers decided on just what to do.

"Our platform of choice is wounded right now
Because makers of games hold their too-sacred cow
Of keeping their games legit,
But unfortunately for us,
They're giving us shit.
The bugs, the crashes, the gamepad controls,
The 4:3 graphics, the sad online trolls.
We'll hold out for games that make us complete,
Only then will we go and suckle the teat."

A new game came out that would fit the bill,
And the PC excitement betrayed their thrill.
The screenshots filled their hearts with such glee
For it looked just as good as it did on 360.
The water effects were astoundingly good
And did you hear the sounds of bullets on wood?
The enemy AI was really a treat
And the game would take many hours to beat.
The PC gamers were also excited to see
It designed for 16:9 instead of 4:3.

Gamers of all kinds went out on day one
To pick up their copies and have them some fun,
But one of the PC'ers decided to see
What the game looked like in old 4:3,
And what he saw he decided to abhor:
People in 4:3 could see just a teensy bit more.

While the 360 gamers were exploring Rapture,
The PC gamers were starting to capture
The fury of others at what they perceived
As attempts to trick them, make them deceived!

The 360's plasmids were making them cautious
While the PC gamers claimed to be nauseous.
The 360's were hacking and splicing with glee
While the PC gamers were chanting "FOV!"

While the 360 gamers were after old Ryan,
A wee PC gamer, who we'll call Brian,
Discovered the PC version didn't want
Him installing his game wherever he'd want
And if he installed too many copies at a single time
He'd have to call for permission (albeit on the dev's dime).

The devs explained that you could install it twice
Compared to the 360's once, now wasn't that nice?
But the PC gamers grew incensed, they say.
"Can't install how we want? Then we won't pay."

The 360 gamers were saving the Sisters
While the PC gamers were making new blisters
Typing out hate mail to community relations
Typically reserved for some Third Reich nations.

The makers of games attempted to appease,
Saying "Five installs now, and soon FOV!"
But the PC gamers said, "Too little, too late,"
While 360 gamers learned Andrew Ryan's fate.

The 360 gamers took a rest and paused their games
Since the plot twist made them question their aims.
They went to the forums to discuss the game
But found that they had been covered in flame.
They looked at their copies, the same FOV,
The same behavior in 4:3.
Only one copy in use, just like on PC.
They saw the debate and thought it quite lame
And then they unpaused and continued their game.

As the 360 gamers completed their quest,
The PC gamers thought they were the best
For getting their way was what mattered now;
The game had become secondary to their sacred cow.

In the end, PC gamers got what they wanted
But the game left their shelf space curiously haunted.
The uproar scared other devs away
As they asked, "Why didn't they just play
The game as designed? It's the game that they needed.
It wasn't these petty demands to be heeded.
The 360 gamers played all day long,
They shuddered when the Sister sang her eerie song.
They loved the game, it's easy to see;
They didn't whine, bitch and moan like those with PC's.
We pour our hearts into these games that we make,
But seeing the toll these arguments take
Really do encourage us to flee...
To hell with PC, we'll build for 360."

Now that you have read my sad tale,
Of PC gamers chasing their white whale,
Can you see why elitism made it to be
Just too much trouble to build for PC?
The PC market's feeling the cruch,
For Blizzard's "WoW" has been eating their lunch
And they're fairly certain about this small hunch
That pirated games delivered the sucker punch.

But pleasing PC gamers is no small feat
And elitism raises the bar they must meet
So the makers of games still love the PC....
As a tool to make games for the 360.

(Edit: Fixed typo. [Wrote this thing on a BlackBerry...])

August 20, 2007

HOWTO: Find Controls In Wizard Navigation Steps

If you use ASP.NET's Wizard control, chances are that you've needed to get ahold of one or more of the controls in the navigation area using FindControl() but have been unable to.

The reason is that when ASP.NET adds the navigation area controls to the wizard control, it adds a prefix onto the control name.

To find the control, add the appropriate prefix to the control name:
If your control is in...Use...

For example, if you want to find a button named "FinishButton" in the finish navigation step, you'd use a line of code like this...

Button finishButton = Wizard1.FindControl("FinishNavigationTemplateContainerID$FinishButton") as Button;

At this point, you'll be able to use all of the normal properties of the button, like this snippet to disable the finish button after it has been clicked:

string script = String.Format("window.setTimeout(function(){{{0}.disabled = true;}},10);", finishButton.ClientID);
finishButton.OnClientClick = script;

August 18, 2007

August 17, 2007

Service Notice

Just a may see one or more posts briefly pop up here and then vanish this weekend.

I'm going to be testing some automated processes associated with a new project, as well as seeding a new domain.

Do not be alarmed.

August 16, 2007


I'm homesick.

I know that sounds funny given how much there is about my home state that I dislike, but I am definitely homesick.

I miss my family. I miss my friends. I even miss my house.

Down here, I spend so much time working that I really don't have much of a chance to go meet anyone. During my two years at Ritual, I wasn't able to get out to do anything because of the constant workload. Even with my time here being reasonable per day, the longer commute has killed my time during weekdays and I've just been feeling spent during the weekends.

I guess the uncertainty of the last year has finally gotten to me. Where will I be next year? In five years? When (or if) I retire? I've got a fairly solid idea about where I'll be next year...[deleted due to NDA and ongoing negotiations]. But after that, the future is vague.

Well...I hope that 0x21 is going to be a good year.

August 15, 2007

WORKAROUND: The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).


ASP.NET 2.0: You are trying to add a control to a page where you are using code blocks (<% ... %> or <%= ... %>). When you do, an exception is thrown with the message "The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>)."


The easiest workaround is to drop a PlaceHolder control where you want to add your new controls, then add the control to the placeholder instead of to the page directly. This works in the body as well as headers.

Because we use master pages and only add controls to the header in two locations, I dropped a PlaceHolder control in my header called "HeaderAddIns" and I call a helper function to add literals to my header as necessary...
public static void AddControlToHeader(Page p, Control c)
PlaceHolder ph = p.Header.FindControl("HeaderAddIns") as PlaceHolder;
if (ph != null) ph.Controls.Add(c);

For other workarounds, check out this article on Rick Strahl's blog.

August 14, 2007

Collision Of Mail And Blog

At any one time, I tend to have between five and ten unfinished blog entries in the queue that I'm trying to polish off. When I get one to what I feel is a completed state, you get to get an entry in the 500-700 word range. Ones that are over 1,000 words tend to get split into multiple entries.

I mention this because I got an E-mail today that touches on three pending posts, so I'm going over my posts, trying to see if there are any angles that I missed so that I can properly reply to it.

The really funny part is that two of the posts I'm working on that need to be involved in my answer partially refute some previous posts I've made.

When talking in public, I tend to take a very absolute stand on a topic even though the reality is a bit more grey. The reason I take a harsh stand is that while it may be untenable, it does tend to bring out more debate. It's easier to fight with a stationary target. Once the majority of the debate is out and about and the battle lines are drawn, that's when the shades of grey start getting filled in...where you give to coexist with your fellow man.

However, when I'm dealing with people who contact me privately for information, I skip the polarizing stand and try to shoot for the exact information that they're looking for...white, black or grey.

That's where the trick is coming right now...looking at the absolute, finding the reality, and trying to reconcile the two.

Pre-Op Plunder

The bills for my upcoming surgery are starting to come in.

After insurance, my doctor is going to be charging me a little over $450. I'm still waiting on what the surgical center charge will be or the anasthesiologist will charge. I'm guessing that my total out of pocket is going to be around $900.


I should be able to handle the doctor out of my next check, but it'll be tight to handle the surgical center and anasthesiologist out of the check after.

August 13, 2007

XNA 2.0: Microsoft Getting It

XNA Game Studio 2.0 announced. Runs in all versions of Visual Studio, usability enhancements, networking, and more.

Want to use Microsoft Game Studios content in your game for personal use (aka placeholder art)? Go ahead, just follow the license.

Want some extra code for that $99 annual membership fee? Get the Ship Game (looks a bit like XNA Descent.)

Expect more information later on The Z-Buffer and XNA Creators Club Online.

Looks like they're finally getting where the difficulties in community-generated content lie.

Game QA Bill of Responsibilities RFC

Late last year, I posted what I saw as the Games Quality Assurance Bill of Rights.

Because of some news that I'm hoping I can announce in the next ninety days (NDA's and negotiations always take time and precedence), I'm trying to draft a companion piece: The Games Quality Assurance Bill of Responsibilities.

I want to come up with a list of ten things that are pretty much necessities for a tester. I want something that can essentially be tied to a job description that says, "At a minimum, you are responsible for this." However, this is something that I don't think I can do alone.

So this is an open call for people who are currently working in games QA. What should an entry-level tester be responsible for? What responsibilities are shared between all levels of quality assurance?

August 11, 2007

NOTE: Dark Messiah of Might and Magic Crashes On Exit in Vista

If you are playing "Dark Messiah of Might and Magic" on Vista, the game will crash when you quit, but only when you quit.

You may receive this pop-up after play as well, but at least at the moment, there are no ill effects from the crash.

Crash caused by Half-Life 2 Game Engine

Debugging Frustration

Current status of USEMP:
Could not load library client

Frustrated. Taking a brief break. Will attack it later when I can see straight.

(Edit: To top it all off, Blogger locked up while updating my blog so I have to update and republish an entry to fix it.)

August 10, 2007

Diabetic No More?

I got my lab results back for my most recent blood test. Some very interesting notes were scrawled on it by my doctor.

My fasting glucose level was 136. I'm one of those people who bottom out overnight, so I'm just happy to be under 150. He thought it was a little high in his notes, and then he went to the next page.

Hemoglobin A1c was 5.7. Fasting insulin was 17.2. Normal.

He doesn't think I have diabetes.


August 9, 2007

FIX: Warhammer 40k: Dawn of War Won't Install On Vista

(Note: These instructions are for "Warhammer 40,000: Dawn of War: Platinum Edition" and "Warhammer 40,000: Dawn of War: Game of the Year Edition." Modify as appropriate for the version you are trying to install.)

Open a Command Prompt window by typing Windows-R, then typing "cmd" and pressing ENTER.

Type in the following command all on one line (where CD drive is the drive letter of your DVD drive):

msiexec /qb /i [cddrive]:\dowsetup\dawnofwar.msi TARGETDIR="C:\Games\THQ\DoW"

Okay the UAC prompt. Let it install.

Open the Registry Editor by typing Windows-R, then typing "regedit" and pressing ENTER.

Okay the UAC prompt.


Right-click on the "CDKEY" key and pick "Modify." Enter your CD key (including dashes). Hit "OK."

Right-click on the "CDKEY_WXP" key and pick "Modify." Enter your Winter Assault CD key (including dashes). Hit "OK."

Right-click on "InstallLocation" and pick "Modify." Enter the target directory from the above step. Hit "OK."

Close the Registry Editor and Command Window.

Open Explorer, browse to your DVD drive into the DCSetup folder.

Run setup.exe to install the Dark Crusade.

The "Trick" To ESRB Ratings

I was talking with a few people last night about violence in video games, and the topic of the ESRB rating system came up, specifically wondering about games like "Grand Theft Auto III" and "Manhunt 2." Since I've been through a few rating cycles, I was able to add a bit of clarity to the situation.

The ESRB doesn't care about the quality of your content when it comes to violence. You could have blocky 3D models getting blown to bits and you'll get the same rating as high quality 3D models getting blown to bits. If you're going for an obviously cartoonish quality, you may get cartoon violence instead, but it's all counted as equal in their eyes. Violence against those who cannot defend themselves is considered particularly heinous.

The mitigating factor in rating violence is the consequences of the player's actions. Does anything bad happen to the player when they act in a violent fashion? Do the police come after them ala "GTA3?" Do they get a different ending ala "Silent Hill?" Does their game immediately end ala "Rainbow Six?"

I think that's the reason that the "Grand Theft Auto" series was rated "M" but "Manhunt 2" was rated "AO." In the "GTA" series, when you do something uncivilized, the police start after you and you are essentially running until you are either forgotten, arrested or killed. The world reacts to your behavior in a negative way. In "Manhunt 2," you were encouraged to kill viciously, without remorse and without penalty aside from getting killed first.

So the trick is that if you want to get a particularly vicious game made, make sure that there consequences to your actions. If there is a demonstratable downside to a player's actions, it makes it easier to justify your content.

August 8, 2007

The Anti-Disney

Blind Ferret Entertainment is throwing together a feature-length animated film based on their comic strip "Looking For Group," which is loosely based off of the Horde side of "World of Warcraft." (Hoping I can have the time to reactivate my account later this year.)

If you've ever wanted to see what "Part of your World" would be like if it was sung by a homicidal undead maniac, here's your chance.

August 6, 2007

I'm in ur OS bypassin ur UAC

Forgive the LOLCat speak, but I felt it appropriate.

The new Steam update came out today, and from the Settings dialog you can opt into the Steam Community beta. (My page is located here.)

If you're running Vista, the Steam Service gets installed as part of the update. As far as I can tell, the service exists solely for the purposes of bypassing UAC so that Valve can write into the Program Files folder at will.

Gee, wouldn't it have been easier just to code to the Windows development guidelines in the first place? My only real problem with Steam is that it replaces one set of guidelines for another, completely incompatible set of guidelines.


The View From Hell

The onsite launch went okay for the e-Commerce stuff, aside from the alternate currencies not being available due to the credit card processor not being ready in time and a couple of issues with address verification.

We're trying to lock down the return pathway for the next deliverable portion, and you know that you're in for a good time when you've covered half of a whiteboard with functions and proofs to ensure that you're doing your work right.

Little things like:
If (ReturnTotal > LineItemTotal - LineItemShipped)
WorkflowIterations = (Shipped - PreviouslyReturnedShippedLineItems) -
((LineItemTotal - ReturnedLineItems) - UnprocessedReturnedLineItems)
Else WorkflowIterations = 0
...can become really nasty when you're trying to construct a SQL view due to the subqueries involved in any one of the terms in question.

Side note: I deleted two posts made over the weekend. This blog has had enough drama associated with it over the last year...although at the request of some Shackers, expect to see some more angry dev posts in the near future.

Will Kurtz strike while the panda is hot?

I know that Scott Kurtz is in the middle of his San Diego Comic-Con storyline, but I'd be surprised if he doesn't take at least a brief break for a panda attack after this story.

(Update 8/8: No break, but he managed to get around to it via Fark.)

August 4, 2007

The Disposable QA Manager

Over the last decade, I've been trying to track a lot of trends, both from personal experience and from information provided to me by other people in the industry. For the most part, the trends have been mixed.

On the downside, there is a lower ratio of full-time QA engineers per project to artists and programmers. The ratio of tester weeks to production weeks is also fairly low (1:12 to 1:25 depending on the company). On the upside, both of these ratios are starting to go up slowly for the first time in nearly six years.

However, there is one trend which I doubt can be easily reversed and at least over the last decade has remained fairly constant. The first QA manager in any studio/group has an 85% chance of being terminated or transferred within the first three years...and this isn't just in games.

The reasons are fairly straightforward. When internal test is first introduced to any organization, they are generally tasked with introducing not only the concept of testers to an unfamiliar staff, but all of the trappings associated with testers (more detailed checkin E-mails, test specs and approvals, bug databases and bug workflows, etc.). In short, they become a change agent.

Going off of the employee stages chart in the linked Wikipedia article, it takes eighteen months to three years to get a group of employees who are just getting introduced to QA processes up to the end of stage 2: anger and resistance. Because the degree of anger and resistance is generally proportional to the magnitude of the changes, this inevitably leads to a conflict or confrontation between the QA manager and the rest of the development team. Without significant buy-in from management and the testers, this often leads to the QA manager being gone within 18-36 months, either via transfer to another position/set of responsibilities or via termination.

If a second QA manager is brought in immediately that continues the same path as the original QA manager, the transition into stage 3 (acceptance and adaptation) becomes very smooth. Differences in approach or a delay in the reintroduction of QA processes can lead to a regression and additional delay to the end of stage 3.

What can you do to prepare for these problems and try to avoid the disposable QA manager problem?
  1. If you are planning on introducing internal QA for the first time, be prepared for at least three bumpy years.
  2. If you are part of a larger company, make sure that whoever you bring in would have a place to go besides your group.
  3. If you are part of a smaller company, try to hire your QA manager locally or find a quality-minded individual who is currently respected by your team to fill the position.
  4. Expect some friction and's an unavoidable part of the process.
  5. Look for the warning signs of stage 2: increased rejection of QA initiatives, massively reduced approval of QA as a whole, depression and an air of futility coming from QA.
  6. Have upper management present a united front in support of the QA processes and initiatives, and specifically the QA manager.
  7. Have patience.

The Spammers Beat Technorati

How can you tell when the spam linkers have finally beaten your blog rating engine?
I'm #1?
When their spam-masking links back to this site make this small corner of the blogosphere the number one blog on Technorati.

Update: Yes, I know that it's a bug on the details pages and that Engadget is the number one blog...but you've got to admit, this is one Hell of a bug.

August 3, 2007

PDC 07 Delayed

If you've been impatiently waiting until October 2 for PDC'll have to wait a little bit longer.

FIX: McAfee VirusScan Update Breaks Websites, JavaScript

If a recent update to McAfee VirusScan made using the Internet nearly impossible because of broken JavaScript and navigating McAfee's support web site completely impossible, go to this page:
This page will allow you to bypass the problematic module in VirusScan so you can get to the McAfee uninstaller and links to get the latest non-broken version of VirusScan.

August 2, 2007

August Update

I saw my wife and granddaughter off this morning. It was a sad parting, but I'm hoping to see Kait this winter sometime and Yvonne will be back on the ninth. She'll sleep until the eleventh, but she'll be back on the ninth.

Now that work has slowed down, I've been able to go back and dive back into USEMP. I'm trying like Hell to get it to the point where it's a stable alpha. The alpha is already four months late, and every day the community for it dies a little more.

My column in "PC Gamer" has reignited interest in me from various parts of the industry. I've got a few interesting opportunities in my lap right now. The biggest downside is that if I take any of them, any direct involvement with USEMP has to end immediately.

I've also got my surgery on August 30, which means I'm going to be out of commission until about September 5.

I've been doing quite a bit of reading lately on the bus to and from work. (I used to take my laptop back and forth, but every time I'd launch anything, I'd get some dude saying, "Is that a laptop?" in Bill Engvall's "dorkfish" voice and then I'd get nothing done for the next half hour.) Orson Scott Card's "Empire" was amazingly well done and while a bit conspiratorial, it did a good job of coming across as plausible and that's the scary part. John Grisham's "The King of Torts" was a great read for the first 75%, but fell apart during the last 25% as he tried to tie up all of his loose ends.

August 1, 2007

The Last Night

Kait and her grandpa (Me)Tonight was my last night with my granddaughter Kait. Yvonne is taking her back to Utah tomorrow morning and she won't be back until the ninth.

I didn't get to spend a lot of time with her because of our crunch period at work. I'm hoping I can get up to Utah later this year to spend some real time with her.

On the upside, we were able to spend some quality time together. We went on several walks and talked about a lot of the things that mattered to her. She was kind of sad that she wasn't able to see Squirrel at Ritual while she was down here, but she understood why. She's growing into a normal pre-teen as her relationships at school and her phone etiquette have shown. She's improving at playing a regular guitar but I can still kick her ass at "Guitar Hero II."

It's kind of a sad commentary on the type of job that I get where it doesn't matter where I'm working, I always end up in crunch mode when my granddaughter is around. Last year when I was at Ritual, she was at least able to come down and spend a little time with me at the office while I was busy fighting off pirate assholes asking for tech support. This year, even my weekends were spent trying to finish up the site for a Montreal launch just to be undercut by the underwriters and this last weekend was spent being the at-home support structure for eighty people in a country I've never been to.

At least I'll be able to see them both off in the morning before going into work, and hopefully we'll get to see each other again this holiday season.

August McAfee VirusScan Update Disables All JavaScript

This has been a fun morning. Woke up sick, went back to bed, woke up later and had a McAfee popup saying that a new update was available and my system had to reboot. Clicked the button to allow it to reboot, and when my system came up, the first symptom that something was amiss was my sidebar gadgets weren't working...even after another reboot.

Vista gadgets broken

No JavaScript would execute in Internet Explorer either, even if I went to "Manage Add-ons" and disabled the JavaScript proxy. I went to try to get Firefox, but since the "Get Firefox" button is JavaScript, I had no link to get the file.

I went to McAfee's website to try to get help, but since every single step of their site uses JavaScript in some fashion or another, I was completely stuck.

I uninstalled McAfee VirusScan, and now my system is working fine...but I'm not reinstalling it until we find out what the Hell went wrong with this update.

July 31, 2007

Robin Link

Since Technorati shows no sign of finding a way to get rid of the unwanted spam links (I'm in the top 5,000 now with an authority of 610), I figure I may as well try to use my increased rank to try to help out some other sites...steal traffic from the spammers and give to those who need it. Some I've linked to before, others not at all.

Quality Assurance

Game QA Blog - Just over a year old, Zachary's writing seems to be following the same path that mine did for the longest time. Starts out rather idealistic in many ways, and then realism sets in and the important thing becomes figuring out which ideals to stick to and which ones you can trade to get the work done.

Climactic Avenue - Sam Kalman started out doing certification testing, then went to doing contract testing for business software, and is now working on Unity.

Development - Great feed that's been going over theory, some nuts and bolts plumbing and optimization tips on game AI. Very C++ focused, but many of the template tips and tricks work just as well with VB.NET and C#.

Coding Horror - I may not always agree with Jeff Atwood, but I agree with him more often than not.

Worse than Failure - Formerly "The Daily WTF," this blog is a daily must-read for any developer. If you see something and don't understand why it's a WTF, you've just learned about a hole in your skillset.

MSDN Magazine - I'm still amazed at how many people don't know this, but MSDN puts all of their magazine's content and code up on the site at the same time as the issue ships. You can read the entire issue online...without ads. - The basic information that you are needing to solve just about any game development problem can be found on one of these two sites.

The Z-Buffer - A great starting point for finding XNA and Managed DirectX information. Andy, you need to find more things to update about.

Annals of Oracle's Improbable Errors - Working with Oracle is a nightmare. Working with Oracle via .NET can be even worse. For someone with a SQL Server background, a site like this is a godsend. While lately it has been a bit focused on Oracle application server issues, any major Oracle issue you have probably has an entry here. - Cory's VB/.NET focused blog. Like me, he gets very angry when a first-class language gets relegated to the position of red-headed stepchild.

Miscellaneous - Fascinating photography.

Pay Raise or Death?

I'm going to try to get a pay raise next month. If you don't hear from me, you'll know why.

July 30, 2007

Farewell, MDX

Over on Let's Kill Dave, the announcement came that the new DirectX SDK is available for download, along with some additional information. Let's go over the announcements.

1) Shift to quarterly releases. I'm glad about this. Six a year has been a bit much. Hopefully with fewer releases per year, they'll be able to spend more time polishing them.

2) Direct3D 10.1 technical preview. Useless until Vista SP1 beta.

3) XAudio2 beta (going to replace DirectSound). I really like this. The Xbox audio API's rock.

4) XACT session windows. I know a couple of audio designers who are currently spooging over this. I can't speak for it one way or another, but they're loving the idea of it. They'll let me know if it's a major improvement.

5) Unified DX9/DX10 DXUT. I'm all for a supported, unified utility framework.

6) Removals. This is the biggie because this is the last version that will have any of the below. Let's go over the removals one by one.

a) Direct3D 8 and below and DX8-era HRESULT conversion routines. I'm glad for this. DirectX 9.0 is a mature API, and while backwards compatibility will remain part of the operating system, it's time for coders to move on.

b) Direct3D retained mode. Again, same feelings. Direct3D retained mode has been superceded by Windows Presentation Framework anyway.

c) DirectAnimation. This was essentially "DirectX talks to web pages." With support gone in IE7, it's a good removal.

d) DirectMusic. I knew it was coming, but it's still sad to see DirectMusic go. There were a few great usage scenarios for DirectMusic that still aren't directly covered by XACT, DirectSound or XAudio2, but it's a good API that has run its course.

e) DirectInput 7 and below. Microsoft's guidance for the last eighteen months has been to use a combination of XInput and Windows messages instead of DirectInput, and to be honest, while the code may be slightly more complex, it's a bit more stable that way.

f) DirectPlay. While I'd like to see some supported network sample code for WinSock and XSockets (the Games for Windows - LIVE version of WinSock), DirectPlay really ran its course years ago. The last production game that I'm aware of that used DirectPlay was "Microsoft Golf 2001 Edition." (Yes, "Links LS 1998" up through "Microsoft Golf 2001 Edition" used DirectPlay for networking.)

g) DirectPlayVoice. Useless without DirectPlay, so a good cut.

h) Managed DirectX samples and documentation. This is the only cut that pisses me off. I know that XNA is supposed to supplant Managed DirectX, but you'd think they could have at least waited until they had a version of XNA Game Studio that would integrate with all Visual Studio SKU's before killing MDX. Of course, since there were deprecated assemblies for DirectMusic, DirectInput and DirectPlay, I guess it was inevitable given the above.

Regardless, it's a big release so get to downloading.

July 29, 2007

FIX: Far Cry: mouse not working in Vista

Problem: When you install "Far Cry 1.4" in Vista, the mouse works in the menus but does not work in-game.

Fix: At the main menu, go to Options -> Control Options.
Select Default -> Yes.
Go back to the main menu and exit "Far Cry."
Restart "Far Cry."

(Look for this and other fixes over at

Updated on May 18, 2008 to update the link to

July 28, 2007

The Case Of The Differing Environments

I woke up feeling pretty good about myself. The new server was supposed to go live the evening before, and it had passed all of its production tests prior to my going to bed. Before going to bed, I'd even set my BlackBerry on loud so that if anything did go wrong, it would wake either myself, my wife or my granddaughter up so it could be taken care of. The red blinking light and the vibrating BlackBerry told me that there seemed to be a difference of opinion between me and RIM about what "loud" meant.

"Half of our credit card transactions are getting denied and we don't know why." Needless to say, that made me panic a bit. That portion of the server had been tested non-stop for nearly a month. It was the first part of the server to get completed, so it not working really threw me for a loop.

I VPN'ed into the server and looked at the audit logs. Sure enough, there was some goofy error code there that I had never seen before. I logged into our credit card processor's site and saw that the code was an Address Verification System failure. I went back to my code and saw that I had a check in for AVS failures that had passed unit tests against their test system, but it was a different error code.

Now, these people's cards would have been denied anyway, but they were getting the incorrect message. I was abstracting the processor code behind an enum of my own, so instead of code 101, they'd be getting CreditCardResult.DeniedMissingInfo and instead of code 204, they'd be getting back CreditCardResult.DeniedOverLimit. Any code that I didn't recognize that was a failure would come back as CreditCardResult.DeniedOther. The number of things that could result in DeniedOther were fairly small, but because the code I was getting back differed between test and production, AVS failures were returning DeniedOther instead of DeniedAVS.

Others were showing different errors. The bad card number error code was being used for missing card information, and other things weren't matching up either.

I spent a few minutes looking to see which code were being returned for which values and I was rather disturbed by the change. Did our tests pass because we were using values under $25? How did our test environment differ from our production environment?

After digging a bit deeper, I found the reason. Our test environment on the processor server side had been using GPN on the back end instead of Global Collect. For them, AVS errors were code 203 instead of code 200. All of the failure codes varied slightly as a result.

A quick bit of code to detect if we were in production or test and a quick mapping table for the correct codes to the proper environment, and all would be good again once the next production build was pushed live.

And now onto the next mystery...

July 27, 2007


Nothing is more depressing in software development than hitting all your deadlines and then having your product stopped in its tracks due to an external dependency.

Twenty minutes ago, I should have thrown the switch on the new multicurrency system, but due to a hitch with an external partner, I'm stuck here twiddling my thumbs, waiting for the them to finish dotting their "I"'s and crossing their "T"'s.


Of course, the coming 96 hours are going to be fun in and of themselves. I'm the support back home for a conference that's going on in a different country, which means that the vast majority of my last week with my granddaughter is going to be spent stuck at home next to a laptop VPN'ed into our network.

I guess it could be worse. I could still be working for JagTech. (Still haven't seen dime one from them...)

July 25, 2007

"Guitar Hero" says F*ck The Common Man

I bought "Guitar Hero 2" so that I could have something that my granddaughter and I could play together while she was down here.

However, after seeing this video, all I can think is that my fingers mean too damn much to me to keep playing this game beyond the level I'm at.


Polish. Compile. Unit test. Publish to test server. Unit test. Rinse. Repeat.

Polish. Compile. Unit test. Find bug uncovered by polish. Fix bug. Compile. Unit test. Find other areas with the same bug. Refactor fix so that code can be better used between sections. Compile. Unit test. Publish to test server. Unit test. Rinse. Repeat.

Polish. Compile. Unit test. Think of some goofy corner case that you never thought of before. Test for corner case. Fail corner case. Refactor code to handle corner case. Compile. Unit test. Publish to test server. Unit test. Rinse. Repeat.

Load test. Notice odd issue between load balanced servers and backend server. Diagnose. Test fix on load balancer.

Take a break. Visit the Shack. Check E-mail; feel bad that there are over 300 unread messages. Check the automated error E-mails. Wonder why the wife called you and complained that her keyboard's "N" key broke.

Polish. Compile. Unit test. Publish to test server. Unit test. Rinse. Repeat.

July 23, 2007

Colocation Planning

For the past year, I've been trying to keep close tabs on my bandwidth usage so that I can properly cost out what it would cost to switch over to a colocated server.

I put 99% of my images on a subdomain to improve loading times on the site as well as to seperate out the bandwidth for tracking purposes.

Right now, I serve between 800Mb and 1.2Gb a month of HTML, and between 2Gb and 6Gb of all non-HTML files per month.

Now that I've got my stats fairly locked down, I need to start doing some heavy-duty bandwidth estimations on some of the other items that I'm planning on offering. I also need to start pricing out 1U servers.

Fun times...

July 20, 2007

My Column (Now With 100% Less Rape)

Now I know why PC Gamer UK hasn't published my column online yet. They decided to publish it in PC Gamer US. Would have been nice to know ahead of time so I could properly pimp it.

Anyway, if you can find a copy on shelves, it's Issue #165 (September 2007, Space Siege) on page 16.

The only thing I will say...PC Gamer US rephrased the opening paragraph to eliminate the phrase "chaingun rape." Funny thing to eliminate...I thought it set the tone for what we were going through at the time.

July 19, 2007

Nations of the World (Live)

Sticking with the evident animation theme of the day, this video of Rob Paulsen (the voice of Yakko Warner) singing "Nations of the World" live made me briefly long for my childhood again...

Of course, this clip of the Animaniac Macarena made it go away.

"Charlie Brown:" Anime ninrei wa judai de aru

(I hope I translated "Charlie Brown: Anime in their teens" correctly...still learning Japanese.)

Yes, an artist by the nom de plume of gNAW decided to bring "Charlie Brown" into the 21st century and finally let every character age about ten years.

I think the artist did a good job of bringing the attitudes of the characters from Shultz's original work, and I think it's a testament to Shultz that he was able to imbue his characters with so much personality with only three panels a day.

Some other pics by the same artist (note that some of the banners and avatars on this site may be considered NWS): The girls at the mall, Sally & Linus, Freida with the Naturally Curly Hair, and Peppermint Patty showing Charlie Brown how to grip a baseball.

July 18, 2007

Technorati...Still High

I E-mailed Technorati after I noticed that spammers were using links to my blog to try to mask themselves. I'm sure it's the first time in history that they've ever gotten an E-mail complaining that their blog was rated too high.

I'm in the top 10,000...

Obviously, they still haven't figured out how to filter spam links to me.

The Myth Of Testing Tools In Games

I'm a fan of test automation. I keep up on all of the latest and greatest automated testing tips and techniques from people like The Braidy Tester. I try to tie as much automated testing as possible into the applications that I write on a regular basis. When it comes to application testing, you won't find many supporters as die-hard as I am. However, I do recognize that test automation has its limits. In games testing, automation testing is for the most part only useful for verification purposes.

What does that mean? It means that you can use automated testing tools in games to verify that content is formatted as described and to a lesser extent verify that the content is "well formed," but unless your regular testers find a repeatable type of content failure and are able to train a tool to identify that particular type of content failure, you won't be able to find what is wrong with your content.

You can use automated tools to automate game UI testing and level load testing, but very little can be done to automate gameplay testing for 99% of the games on the market. You can use automated QA to generate the massive amounts of combinations for combination testing, but you still need a human to evaluate the results in most cases.

You can automate harnesses against backend servers to ensure that the proper errors are thrown and that the proper data is passed back and forth, but you still need to be testing the game itself against the server caused by humans.

While most applications can gain a real benefit from test automation and can even reduce their test headcount needs via automation, video game testing is almost the last place where flesh and blood cannot be replaced effectively at this time.

Unfortunately, many people are under the impression that automation testing for games is a lot further along than it really is. Look at Dave Perry's take on it. (I've already called him a God-damned idiot, what else can I do?) Back in March, I dug in a bit deeper against his assertions.

Long story short, investing in testing tools in games will help release a better product, but it will not replace the need for an effective tester to wield the tool.