November 30, 2004
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) in /var/www/html/answer.php on line 19
Unable to connect to database server!
Microsoft discriminates against gays? I don't think so.
Is it possible that her manager, Tiffany Treacy, sexually discriminated against her? It's possible, I'll admit that. However, does Microsoft back discrimination against homosexuals? Definitely not.
Microsoft is one of the most open workplaces I've ever worked at. Even on the Exchange servers, there are "virtual support groups" for gay and lesbian employees.
Microsoft has very straightforward policies on how to handle sexual discrimination complaints. Had Ms. Campbell reported the discrimination to Human Resources prior to her resignation and had nothing happen, then she might have a chance at convincing people that this did in fact happen. However, given the timing and what I know about Microsoft, I can see this as nothing more than an attempt by a former employee who was being "managed out" (at least from the sounds of the article) to lash back at Big Bill.
November 29, 2004
Davis/Weber .NET Users Group First Meeting
The inaugural meeting of the Davis/Weber .NET Users Group will be held on December 8, 2004 at the Layton City Center buidling at 437 North Wasatch Drive.
Our premiere speaker will be Aaron Skonnard of Pluralsight fame. He'll be giving everyone the scoop on Web Services and Service-Oriented Architecture (or SOA for the acronym buffs).
Directions and details can be found here, and if all goes well, maybe I can even get the almighty Scoble to blast this out to the world on his newfangled full-text feed...assuming his bandwidth issues go away.
You know, the deeper I get into blogging, the more tech-heavy it seems to be getting. Just once, I'd love to see a tool like this set up in such a way that someone as tech-lite as my wife could do it.
Game UI Hall Of Shame
Haven't we all come across video game UI that left us scratching our heads, wondering what to do? How about UI that looked like it was supposed to work one way, but instead worked another?
Well, I've been encountering that WAAAY too often, and so I'm going to do something about it. I'm going to document it and publicize it and ensure that when someone else makes the same mistake that they can't claim ignorance.
Forgive the rant...long morning.
How To Ship Your Product On-Time
If you want to ship on-time, use a structured text file (like XML) for everything that makes sense until the last minute, and don't mix binary and text values in the same file. For games, that means save games, option files, map data, everything except for your image data. For utility software, anything you save out aside from images. I'm going to give you a few different examples of how following this advice would have saved us time and effort back at MGS, and one area where the change did help quite significantly.
First off, how many times during the development of your product has the file format changed? For "Links 2001," our binary file format changed over a dozen times. Each time, it was to either reorder the data or add an additional field. Each time, parts of the team were essentially down for anywhere from two to five days while we waited for the conversion to be handled.
All of the main data files for the "Links" series are zlib archives with encrypted directories. The archives for the courses contain textures unique to the course as well as the full geometry data for the course. All that was changing was the format for the geometry data. Had the geometry data been stored in XML format, it would have been excessively easy to make the conversion happen either at load time in the course designer or during the next save. When adding a new field, simply add a sensible default on load and save out the current value on save. When reordering, just change the order that you save the items. As long as your loading code can understand XML, your loading code will not change aside from adding support for the new fields.
The save game files for the "Links" series were all binary reads directly into a structure. However, this led to some cheats. For example, in "Links 2001" you could customize your club distances to match your real game. However, some people figured out that you could hex edit those values in the save game so they would be outside of the legitimate range, then take that player online. Had we used XML as a base (even if we encrypted it prior to saving), we could have imposed a range on the input values and refused to load a save game that did not validate. The same thing was happening with our clubs. You are limited to a maximum of 13 clubs in your bag, but I was able to give a golfer all of the clubs using the same technique. Same fix as well. Our lead developer spent two days adding the validation code for "Links 2003."
The "Amped" series used a highly customized version of the scripting language Lua internally. In fact, all of the save game files are Lua scripts. All Xbox save games are required to be digitally signed. This was a bit of a problem for the first "Amped." Text files are not a certain size, and memory was at a premium. The digital signatures were not the same size, and neither were the files, so how could you tell which was which?
For "Amped 2," the development team had several different Lua files. Their solution was to store the digital signatures in a seperate file. Each Lua script would be signed, and each signature would go to a dedicated space in the signature file. If the signature file was changed, the scripts wouldn't verify, and if the scripts were changed, the signature file wouldn't verify. All was good with the world. The signature code was added quite late in the cycle, but the save game code didn't change as a result of it. Because of that, we only lost a couple of hours due to a single bug in the validation code.
Now I can hear two objections to this: the first being load times will increase, the second that disk space requirements will increase. Well, given the number of security holes that I've seen in games in this industry, I see the tradeoff as acceptable. However, there are times where load time is of the essence.
The biggest speedup will come from compressing the file. While you may think that decompression is going to be slower, I've learned that disk access is slower by several orders of magnitudes, especially from CD or DVD. Plus, XML compresses quite nicely. So, squish the file before writing it to disk and decompress it on read.
November 28, 2004
We Have Met The Enemy...And He Is "L33T"
Right now, most of the titles in this industry are supported by the hard core gaming crowd. These guys are the equivalent of the film snobs who endlessly debate Hitchcock's camera angles and have no end of fun deriding the latest Bruckheimer flick. The hard core gamer demands every feature ever seen in the genre, a difficulty level that even Job would look at and cough, and a game that requires a commitment on the level of military service.
On the flipside, we've got the Everyman gamer. These guys are the people who go watch Bruckheimer flicks on day one and enjoy it, and think that "Hitchcock" means that they need to adjust their underwear. They want a game that can be picked up in minutes, can be played in brief intervals, and can be beaten without mastering a 17-step combo with split second timing.
Thanks to "The Sims," the industry has attracted many more Everyman gamers, and has shown the industry the profit potential contained therein. Very few companies have been able to cross over to both classifications. Blizzard has always succeeded in this area, with "Diablo" and "Diablo II" their biggest hits along those lines so far. Sony's "Everquest," Blizzard's "World of Warcraft," Turbine's "Asheron's Call," etc., have brought out the hard core gamer and the Everyman in a common world: the hard core gamer power levels, the Everyman chats a lot and loves learning how to craft and entertain.
I browse a lot of message boards, and I attempt to be friendly whenever possible. However, the scene I see most often is that of an Everyman gamer who is looking at a more hard core game asking for help, and the hard core gaming community essentially shuts them out with cries of "n00b." That gamer, forever branded with a scarlet "N" on their chest, is left with a bad impression of not only the hard core gaming community, but with a bad impression of the game itself.
While there are many hard core gamers (myself included), we are allowing the more vocal of our members to loudly berate and shut out the very community that we are going to need in order to keep hard core gaming profitable. Already, PC game developers are abandoning the platform in droves and heading for consoles, where "patch" is a four-letter word and "learn in 5 minutes" is the mantra.
"We have met the enemy, and he is us." Walt Kelly first used that statement on an Earth Day poster in 1970, but it is true nearly everywhere. Like it or not, if we don't start keeping our less desirable members in check, they'll "l33t sp34k" our games into niches that they'll never escape from.
November 27, 2004
Earnings and relocation
I have two floors: one based off of my income at the city, the other based off of my income at Microsoft. Even though the cost of living at this new location is 13% higher than where I currently live, I have some very specific cost-of-living factors that I have to factor in. Fortunately, because of my previous research, I've calculated that I will need to net approximately an additional $15,000. The flat number for extra living expenses and expenses that will remain here due to long-term commitments that I can't get out of makes the calculations a lot easier.
At the city, my annual gross is approximately $44,000, and my annual net is approximately $33,000. Assuming an equivalent tax rate, that means that I will have to add an extra $20,000 to my gross. In other words, it is pointless for me to move for anything less than $64,000. At that level, I'm essentially breaking even.
To be comfortable, I should be making about what I was back at Microsoft. At Microsoft, I was grossing about $53,000 not including bonuses. I was netting about $36,000. Assuming an equivalent tax rate, I'll have to add an extra $22,000 to my annual gross. So in order for me to be significantly enough ahead to make it truly worth my time and effort to relocate, I'll have to be earning $75,000.
Doing math like this sucks. There is nothing quite as humbling as distilling your life and experience down to a dollar value.
November 24, 2004
My final political blog of the year
After spending some quality time with my wife last night, I think I figured out why she voted for Bush. I also think I have figured out how the Democrats can get the White House back in two easy steps.
Step 1: Listen to country music. Not selectively listen to country music, either. Don't just listen to the Dixie Chicks...listen to all of it. You'll find a lot of stories about the South, about building yourself back up from nothing, about losing it all. You'll also find a lot of extremely patriotic music that really resonates with the core of America. ("Courtesy of the Red, White and Blue" by Toby Keith comes to mind.) Country music doesn't villify a person who sends someone off to do battle for the U.S.A. Country music honors the sacrifices made by our soldiers.
Any candidate that the Democrats pick for 2008 not only must resonate with those values, but have a past that also resonates with those values.
Step 2: Ignore Hollywood. Mainstream America sees two political factions in Hollywood. You have the leftist liberal Hollywood stars, who use their sandboxes to bring attention to their pet charities and demand donations and support. Mainstream America mostly sees the "I'm famous, so do as I say, not as I do" side of Hollywood. For every Ed Bagley, Jr. who actively drives an electric vehicle, there are fifty Streisands who sue photographers for exposing her hypocrisy. Then there are the moderate Republicans, who have Arnold Schwartzenegger as their poster child. Arnold was an immigrant child who went from having nothing to having a successful bodybuilding and acting career and finally worked his way up to being governor of California. He's not saying, "I'm famous, so you should do what I say." He's saying, "I did this by working hard for what I believe in. You can, too."
I'm not saying that the Democratic party should abandon their ethics, but if you let your ethics be decided by people who have no basis in reality, how can you realistically expect to win an election?
Real Stats for Real People
In the evaluated time period, we've served up 36,973 pages to 3,739 unique visitors. We've served up 1.86GB of data to visitors in that time. To be honest, this is about normal for us. Search engines slurped up another 1.41GB of data during the same period.
For OS statistics, Windows is the operating system of choice for ~95.6% of our visitors. "Unknown" slips into the number two spot with ~2.6%. Mac users are relishing the #3 spot with ~1.5%. Linux, FreeBSD and WebTV have less than 0.1% each.
For browser stats, Internet Explorer has a dominating lead with ~92.3%. Mozilla and Firefox are now neck and neck with ~1.9%, with Mozilla having a minor lead. Netscape is at ~1.4%. "Unknown" comes in at ~1.2%. Safari has ~0.6%. Opera and Wget have ~0.1% each. Camino, Firebird, Lynx, LibWWW, Konquerer, WebTV's browser and the Lotus Notes web client each have a single visitor.
So if you take a look at our stats, only 3% of Windows users who visit our site are using an alternative browser.
Visitors to my blog, on the other hand, are a more technical crowd. Windows XP accounts for ~72.9% of my visitors. Windows 2000: ~11.8%. Windows 98: ~3.8%. Mac: ~3.1%. "Unknown": ~2.6%. Windows NT: ~2.2%. Linux: ~1.8%. Windows Me: ~0.9%. Windows 95: ~0.2%. FreeBSD: ~0.1%. Windows CE: 1 visitor (0%).
For browsers to my blog: Internet Explorer: ~73%. Netscape: ~22.5%. "Unknown": ~2.9%. Opera: ~1.3%. Galeon: 1 visitor (0%).
So, any little dirty secrets in your server logs?
Media Center Crash/Video Playback Fix
When you watch some videos, do they play the video in fast-forward while the audio plays at a normal rate of speed?
When you navigate the UI while or after playing a video, does the Media Center UI crash on you, forcing you go get up off of your recliner, find the mouse and actually click on the "Send Error Report" button before you can sit back down and hit the green button again to soothe your need for MCE love?
Well, that has been happening for me A LOT. Turns out that the version of the DivX codec I had installed on my Media Center PC had compatibility issues with the Media Center app.
So, here's what to do:
1. Close the Media Center application, Media Player and any Explorer Windows.
2. Go into "Add/Remove Programs" and uninstall all of your old DivX codecs.
3. Go to http://www.divx.com and download DivX 5.21.
4. Install DivX 5.21.
5. Go into the Decoder Configuration Utility in the DivX program group, flip to the second tab and put a check next to "Disable logo."
6. Hit the green button and test the fix.
It worked quite nicely for me.
November 23, 2004
Kevin is no longer with my old studio. Instead, he's started his own business: Inspiripics.
Check it out, and wish Kevin the best of luck.
(Do I dare invoke the name of the almighty god of blogs, Robert Scoble, in a feeble attempt to drive traffic to my former manager's site? I guess I do.)
German Firefox Privacy Issues
The fact of the matter is that the moment money enters any equation, innocense is lost. You wanted to measure how your plugin was utilized so you could use those figures to negotiate profit-sharing deals? That's fine. Now explain to me why when you do it, it's an honest mistake, but when Microsoft does it, it's necessary to have congressional hearings on browser privacy.
Being a nonprofit entity that releases software does not make you inherently better than a for-profit entity that releases software. If you want to be better than Microsoft, prove it through your actions rather than through your rhetoric.
November 22, 2004
Top 10 Issues With "Half-Life 2"
10. Box-stacking. Just because you can do box-stacking puzzles where the boxes seem to be covered in Vaseline doesn't mean that you should.
9. Excessively narrow catwalks. Your character runs by default and when he stops, he slides for quite a bit. However, massive sections of the game require that you not only crouch and crawl along, but that you crawl along a beam or edge about the size of a 2x4. Several times, the beam you are to crawl along is lost in the background rubble. For example, near the end of the game, your teammates are screaming "Run to the horse, Gordon!" You can see the horse, but the way to get to the horse is obscured by what remains of a cement wall. The only way to see the beam you have to traverse is to go to your teammates, turn to your right and look down. Even then, it's a three-part beam. Why couldn't I just knock down a wall and go out? Don't even get me started on the bridge level...
8. Load times. When it takes longer to load a level than it does for me to boot Windows, you know it's bad. I probably spent 20% of my time loading. One time, the game crashed during a level load. I didn't even notice until five minutes later.
7. The "stutter." The audio/video stutters were insane. Even when I reduced my texture resolution and dropped my sound to two channel, I'd still have period of up to 30 seconds where the frame rate would drop down to .5fps and the sound would stutter. Inexcusable.
6. Requiring media for the retail product after Steam account association. Sure, after I associate my account, I can uninstall the game and download it again from your highly congested servers and spend 36 hours saturating my pipe for no good reason, but why would I want to?
5. Too many "guess what the designer had in mind" moments. Oh, the designer wanted me to stack a box so that I could jump up onto this ledge before getting crushed by this section of wall that I've never seen move before? Oh, the designer wanted me to use the hanging casket so I can go on a four-minute ride that is somehow less entertaining than the "It's a Small World" ride at Disneyland? Did these guys never play "Deus Ex?"
4. Incomplete and poorly implemented closed captioning. Don't get me wrong. I applaud the Valve guys for going through the effort to implement closed captioning for this title. However, there were several areas where the subtitles would not appear for dialog. There were also several areas where there was so much happening in a small section that massive chunks of dialog would scroll past before you could finish reading them. Great idea...hope they get it right for "Half-Life 3."
3. The flashlight. Let me see if I get this right...they've been improving Gordon's suit for years, integrating dash capabilities, improving the HUD, etc., etc., but running a cheap shoulder-mounted flashlight uses as much juice as doubling your run speed or generating additional oxygen for when you're swimming?
2. The rest of the NPC's. The care that went into the modelling of the primary NPC's simply throws the lack of work done on the rest into sharp relief. While Alyx and Barney look amazing, most of the rest of the NPC's just don't show the same amount of care.
1. The ending. They build you up for a Bruckheimer-style dash to safety, but end up dropping you into a black storage unit until you're needed again? The more I think about this ending, the more pissed I get.
November 21, 2004
2004: The Year Of Bad Endings
Whether it was due to internal quality bars and street dates colliding like "Halo 2," or hope for a sequel like "XIII," or whatever the Hell drove the "ending" that I got for "Half-Life 2," the vast majority of the video game titles I have played to completion over the last twelve months have made me regret spending the money, time and effort to do so.
I'm a relatively patient gentleman with games. I've been involved in their creation from inception through shipping through patching. I know that in the video game industry, there is a nearly universal drive to make the ending "worth it" for gamers. The designers, programmers, artists and testers really focus on making their endings amazing because they realize that if a person has a crappy final impression, they won't be as anxious to play another game from that studio again.
I'm more forgiving of the Bungie guys than I am of Valve. While both games essentially promised to be the second coming of the gaming Christ, while Bungie's title brought you to the brink of greatness and left you hanging, Valve's title brought you to the brink of greatness and let you down.
I'm sorry, Valve, I really am, but I just can't forgive this ending. Hell, by the end, I had almost forgiven you for the totally pathetic experience I had activating "Half-Life 2" and the heinous load times. But that ending...I know you want to make the series a franchise, but if you have learned anything, it should be that you must at least finish your story arc. Building up for a mad dash out of the building and leaving you trapped for eternity in a dark room isn't an ending. It's placing the player in storage until you drag the franchise out again.
Of course, your defenders are now going to jump in and use the "Lord of the Rings" movies as an example of recent entertainment releases where they didn't finish their arcs. The difference here? With "Lord of the Rings," we knew exactly how long we had to wait for each installment. How long will we have to wait for "Half-Life 3?" With "Lord of the Rings," we had a one-year maximum gap between installments. A lengthy bit of time, but doable. Given your track record, we're looking at five years for "Half-Life 3." I don't want to wait that long for a real ending.
Oh, well. I can only hope that the 2005 releases are better than the class of 2004.
November 19, 2004
The Gold Masters
The vast majority of our testing was done off of network shares/installs. However, once we hit Content Complete (which was supposed to be about twelve weeks before RTM, but usually ended up being four to six weeks), we'd switch to testing off of CD's. We'd burn one set of CD's at the fastest possible speed, then use our CD duplicating tower to crank out enough copies for all testers. Usually, it would take about 90 minutes to get enough copies out to everyone.
However, once we got to RC0, everything changed. (RC0 is the test for the release process. It's a dress rehearsal, essentially.)
We'd start by burning our gold master candidates to CD. We had one approved burner in the department for burning the masters. Once each CD was burned, we'd pass it to another machine to compare the bits burned to the CD to the bits approved for mastering. Once the bits compared correctly, we would pass the CD over to another person to get a CRC checksum for the entire CD.
We averaged four CD's per release, so you can imagine how much time this took. Once a second copy of each CD was done, we'd run that second copy over to the burn tower for duplication. This ended up taking about four hours, but the process was in place to stop us from compounding any errors.
Once we got to RC0, the network shares for install were locked down so that only a select few could read from them. Everyone else had to test off of CD's.
Anyway, the lessons to learn about mastering CD's?
- Burn on reliable media.
- Burn multiple copies and submit multiple copies.
- Use a tool like Microsoft's CRC tool (available to MSDN subscribers) and provide a copy of the tool to your mastering house as a double-check.
- Always verify that the bits burned to the CD are the same as the bits you wanted burned.
- Never expect to get it right your first time.
November 18, 2004
Mixed Feelings About The Press
I'm really torn about this one. On one side, his actions in reporting the story itself broke no laws. His on-air actions, as far as I can tell, were completely legal.
However, most of the reporters I know of will only protect a source that didn't break the law. From the looks of this case, the source had to be a person who was under orders from the court not to disseminate any information. They did anyway. The person who leaked the tape had to be directly involved in either the prosecution or defense of the individuals in question.
So I'm torn about this one. On one hand, I respect the journalist for sticking to his guns and protecting his source, no matter the cost to himself. On the other hand, this journalist potentially contaminated the jury pool and acted as a tool of someone involved in the case in exchange for an exclusive.
I wonder what will happen the first time that a blogger gets hauled in front of a judge and asked to spill his guts about the events that he reports.
Minor Template Change
Up With Hotmail, Down With My Neighborhood
Well, it finally happened today. My 25Mb was 66% full yesterday, and look at today!
I can handle that. What I can't handle is my neighborhood.
Last year, our neighborhood maintenance crew made some unauthorized modifications to our power box in our back yard. As a result of those modifications, I was without power for most of last night.
Because of that, I'm only about a quarter of the way done playing through Half-Loaded 2, I mean Half-Life 2. (Damn, that game loads a lot...)
November 17, 2004
Classifications of Testers II: The Sequel
STRESS TESTERS. These guys define abuse. If your program is expecting only one input per second, expect them to find a way to cram over a million inputs per second through your pipeline. If your program relies on a database server, these guys will find ways of stressing your database server that you would never believe. Frankly, the Steam guys could have used one or two of these guys. The great thing about a stress tester is that they'll be able to tell you at exactly what point your system fails. The downside is that they may not be able to tell you why.
PERFORMANCE TESTERS. These guys define grace. As testers, performance testers supplement the stress testers by helping you find the performance problems under normal usage. UI hangs for a second? It's a bug. Your frames-per-second drop below 30fps on the minimum system requirements? It's a bug. Occasionally, you have to make your performance testers upset in order to make your stress testers happy. Also, expect your developers to have to answer for any decrease in performance. If you lose even one frame or request a second, you'll have to account for it.
INTERNATIONALIZATION/GLOBALIZATION TESTERS. These guys help you sell overseas and keep you out of jail. Internationalization ensures that all of your UI screens and shortcuts lay out correctly, work with right-to-left scripts, handle IME inputs, etc. Globalization testers ensure that you aren't making any politically risky moves, like mishandling the border between Pakistan and India, or getting involved in this whole "Taiwan/Republic of China" deal, or popping up a "V" sign with your hand the wrong way. In some countries like India and China, making mistakes of this magnitude can not only get your product pulled from shelves, but if you have local representatives in those countries, it can get them arrested.
THE BUDDY. This is a fairly new type of tester, but an invaluable one. If you have a tester who is having problems finding bugs on his own, put him with a capable tester and have him watch the other tester test. The two of them together will find more bugs than they would seperately. On "Amped 2," we would all buddy-test for about an hour every week. The sheer amount of bugs that we would find during those periods was insane. We would have one tester "drive," and the other tester observe. By splitting the testing and observing duties, you allow one person to just be a user and you allow the other person to put 100% of their mental prowess into finding the bugs. It works.
THE CONFIG TESTER. These guys come in two different flavors: hardware and software. Generally, these guys help you track down OS-specific or hardware-specific issues. Want to see how your app works on Windows Me with Long File Names disabled? How about how your app works on an ASUS A7Pro motherboard? Need to reproduce a graphics glitch that only happens when you're running multimon with a Matrox DualHead card and an ATI Rage? This is your guy. However, for him to be effective, you need to give him a script that he can run on every configuration that exercises all of your core functionality. If you don't, he'll just be spinning his wheels.
THE NUMBERS MAN. This guy would be a nightmare to Las Vegas. He'll look at the bug counts for each area, place a bet as to where a bug will be, and be right 99% of the time. Only problem with him is that he's useless until someone else has done some testing first.
Anyone have more?
November 16, 2004
Steam, Half-Life 2, Whatever...
What's more frustrating than that? Spending $80 plus tax for the Collector's Edition, opening the box and seeing that the box is half-empty. The entire package consisted of a DVD in a CD jewel case with the CD key printed on the insert, a "reference card" for a manual, an abridged Prima guide, and a large men's T-Shirt. For some reason, the extra does not seem worth the extra $25.
Of course, I can actually use the T-shirt, which is more than I can say for the game.
November 15, 2004
Classifications of Testers
KEYBOARD MONKEY. One of the most derogatory testing terms is actually a good fit for our first classification. The Keyboard Monkey takes a list of test cases and goes through them one by one. The upside is that since the test cases are pre-created, development usually has a nice set of repro steps. The downside is that a Keyboard Monkey will never look past their defined test case suite.
SADIST. This is what a Keyboard Monkey turns into the moment they look past their test cases. You can tell that you're dealing with a sadist when you hear, "I wonder what would happen if I did this...BOOM! Ahahahahah!" No test department is complete without a few sadists. While most sadists are great at getting bugs to trigger, the repro steps are usually a little lacking.
FUGU CHEF. Fugu is the name of a poisonous blowfish that, if not prepared for cooking correctly, can kill you. Fugu chef testers take their feature area and gradually dissect them until they find the "poison." While extremely thorough in their area, fugu chef testers are usually oblivious to how their feature interconnects with other features.
CARPET BOMBER. These guys will indiscriminately bug EVERYTHING as a seperate bug, even if all of the bugs they enter are the same. If none of your menu items have keyboard shortcuts, they will bug each menu item seperately. If none of your images in your help file appear, they will bug each missing image seperately. Carpet bombers will inadvertently inflate the find, fix and resolve rates for entire projects by not realizing that the bugs are related. Example: On "Links 2003," we had a tester file over 60 bugs against images not appearing in the help file. A single character fix resolved all the bugs.
CSI. When the CSI tester finds a bug, all other work for that tester stops. The CSI examines the bug from all angles, and will not only report the bug, but why it happened, explicit repro steps, which check-in(s) led to the bug, and a psychological analysis of the developer who checked in the bug. While this type of tester is usually the least productive from a numbers standpoint, they are invaluable assets to a team. Also called the "Grissom."
L33T HAXX0R. The L33t Haxx0r tester wants it to be known that he can cause your program to crash whether you want it to or not. He'll modify your save files using a hex editor to bring out bugs in your load routines. He'll man-in-the-middle attack your network streams to bring out bugs in your network code. While these guys are valuable, they're also dangerous if you decide not to fix their bugs. Chances are that their exploit code will leak after release because if you don't find their input valid, they'll find someone who does.
EDITOR. These guys will bug any typo on any screen that they can find. They'll be so focused on entering a bug that you have four periods in an ellipsis instead of the standard three that they won't notice the major crash that occurs after you click any button on that screen.
OKIE. The Okie tester is so in-tune with the users that he finds all of the bugs that the average user would normally find. You can tell an Okie bug because it's a bug that no tester in his/her right mind would ever think of testing for, but as soon as you read it, you realize that every single user will encounter this bug. You don't find many Okie testers, so do whatever it takes to hold on to the Okie testers you find.
SAVANT. The savant tester doesn't test. He simply sits down at a testing station and bugs manifest themselves in places you never would have expected. The savant will find bugs, but unfortunately, that's all they're ever good at. Never let a savant interact with a person outside of the test department.
WINNER. The "winner" tester is a tester type exclusive to games testing. The winner doesn't care about the quality of the product. He only cares about winning. A brief anecdote: Microsoft Game Studios has a team of dedicated gamers that they hire called the Recon team. The Recon team had been helping out with playbalancing "Age of Empires II." However, for over a month, one of the testers had cheats enabled. As a result, the month's worth of playbalance data generated from the Recon team had to be thrown out.
If you can think of other classifications of testers, please post them in a reply. I may do a second set if I get enough follow-ups.
November 14, 2004
My least-favorite "Halo 2" feature
I have it even more when I'm in the middle of a boss battle and it happens.
November 12, 2004
Novell...you're a bunch of schmucks.
Whatever happened to building your business by building superior products rather than trying to sue the frontrunner? Novell doesn't even own the products that they're suing about anymore. Does this mean that if Novell wins, Corel will follow suit using the Novell victory to carve out a chunk of Bill for themselves?
I guess that Novell is trying to pull a SCO and have litigation be their only source of income. It's a shame, too. I thought that their investments in Mono were a positive step.
Long Hours in the Video Game Industry
One note here: At Microsoft, you have to be salaried for one year in order to be eligible for a bonus.
I started at Access Software back in 1998. When I started there, I was making $8.00 an hour, and was hourly. I averaged about 50 hours a week through the end of Links Extreme, and the worst bit of crunch was a single 78-hour straight push (Friday morning to Monday afternoon) for RTM. However, I was hourly, so I was being compensated.
Microsoft acquired us in April 1999, and I stayed at $8.00 an hour until August, when I went to ~$16 an hour and was salaried. Given the massive increase in wages, I didn't mind it at the time. However, I was placed at level 56, which is just above an entry level tester in Microsoft. We had several testers who were leveled "off the grid," i.e. one or two levels below entry level Microsoft. Most test leads are at least level 58.
Right after I finished work on "Microsoft Golf 2001 Edition," I was told that all level 56's who were salaried were being moved to hourly. I got my bonus, and a raise to $18.
The next year, because of my work on creating a source analysis tool for Xbox titles, I was raised to a level 57, and made salaried again. This time, I was up to $21 an hour. I remained at level 57 for the rest of my stay at Microsoft.
The next year, I went up to ~$23.50 an hour salaried. Usually during crunch, I'd work five 10-hour days and the occasional Saturday. We had a few dedicated testers who were still hourly who put in massive hours, but most of us worked in the 50-60 hour range during crunch.
My final adjustment occured when they said that all level 57's were now going to be hourly. This happened just before "Amped 2." I was moved to ~$24.50 an hour. I worked a few all-nighters, but I averaged 65 hours a week for the rest of my time at Microsoft. There were a few weeks that I worked 80 hours plus. A large part of the reason for my overtime was that I knew I was leaving, so I wanted a nice nest egg to help offset the massive cut in earnings I was about to undertake.
Now, at MGS, we didn't get comp time. We just got our regular vacation time, which we usually took when the product was over. However, our managers were usually pretty nice for at least a month after RTM. They'd let us work partial shifts, let us slack off at work, etc., for a few weeks after it was over.
While EA's public motto is "Challenge Everything," the feel I got when I spoke to EA representatives at E3 every year was "Win At Any Cost." Their disposable staffing solution (work 'em until they quit) can actually work in this industry. We have a wealth of programmers available for work as a result of the dot-com bubble crashing. Working on video games is a dream come true for my generation. EA can hire them, chew them up and spit them out and find a dozen more coders and artists begging for the chance for it to happen to them.
Don't get me wrong. I love the video game industry. Heck, I'm even considering going back someday. I know that extended hours are part of this industry, and accept that. However, I am a firm believer that one works to live, not that one lives to work. We must always remember that our employees have lives outside of their cubicles, and do everything in our power to ensure balance in both their personal and professional lives. Only then can we have employees at their peaks.
Dates and Decisions
I should make my decision by the end of next week.
Could I be any more vague? Possibly, but I'm under an NDA.
November 10, 2004
The Humbling Moment
While I'd like to blame the circumstances surrounding it, I can't. This humbling moment was my own fault, pure and simple.
What I did was I broke every single rule of interviewing known to man. I didn't get a good night's sleep, I sandwiched the interview between stressful meetings, I was stressed from trying to get caught up from taking yesterday off, etc. You name the rule, I broke it. So, it's my own fault.
I had an informational today, and about twenty minutes in, I started to space out. I couldn't remember simple things like "implementing an interface," or even the few FxCop rules I knew. Basically, I felt horrid when it was over. I felt like I had wasted his time and my own.
Things like this happen, and the important thing is to learn and grow from them.
November 9, 2004
"Halo 2" Mini-Review (Spoiler Free)
I believed in you. I waited until midnight, picked up my copy, went home and got a good night's sleep. I took the day off from work so that I could play your magnum opus.
I popped in the game at 11:00am. I enjoyed the depth of the storyline. I enjoyed the fact that my AI cohorts were good shots. I enjoyed seeing things through Covenant eyes. I even managed to handle the fact that I didn't land the killing shot on the end boss.
And then I got to the ending. I haven't felt so betrayed since the ending of "XIII." Not only did I not have the rush that I had from the last six minutes of the original "Halo," I didn't even have any real closure in my ending. Even waiting through your credit crawl for the after-credit bit didn't help any.
So now I have to wait for several more years before I can see the true ending for the "Halo" saga. While I appreciate that you needed to ship the title and that you wanted to make "Halo" a trilogy, you really lost me with your choice of a stopping spot.
At this point, my only hope of closure in the near future is if you release your third installment as an expansion pack.
That being said, it was the most mindbogglingly boring time I've ever had. Between security guards yelling at people to stay in a single file line for 3+ hours and Hot-Dog-On-A-Stick employees trying to talk people waiting in line into playing a game of Hot-Dog-Twister, it was horrid.
I'm not doing this for "Half-Life 2" next week...no way in Hell.
November 8, 2004
How To Kill TV Media
Well, first off, the steps I am going to talk you through may require that you be able to boot to a recovery console. To do that, you will need the original installation CD for Windows XP that came with your computer. If your computer manufacturer did not trust you enough to give you original install media, see if you can borrow a disk from a friend. I also recommend asking your local geek for assistance with this one.
First, try using the tool from here: http://support.microsoft.com/default.aspx?scid=kb;en-us;886590
That should work. If that doesn't work (it didn't work here), download and run this fix: http://support.microsoft.com/default.aspx?scid=kb;en-us;885523
Shut down and boot from the Windows XP CD. When asked what to do, hit "R" to go into the Recovery Console.
Select your Windows partition. (For 99% of you, it will be the line that says, "#: C:\WINDOWS".
Enter your Administrator password. (For 99% of you, it will be blank, so just hit ENTER.)
Type "CD SYSTEM32" without the quotes and hit ENTER.
Type "DEL MAD.DLL" without the quotes and hit ENTER.
Reboot and go into Safe Mode with Command Prompt. Once you login, a command prompt will appear.
Type in the following: CD "\Program Files\TV Media"
...and hit ENTER.
If you did not get an error message, type the following: DEL *.*
...and hit ENTER.
Hit CTRL-SHIFT-ESC to bring up the Task Manager, and tell Windows to restart.
Finally, run Ad-Aware to clean up the last remaining traces of TV Media.
And remember, kids, spyware is bad, mmm-kay?
"Halo 2" Midnight Madness
I'm looking at it two ways. First off, she'll be able to see that on the geek scale, I'm nowhere near as bad as a lot of the geeks out there. Second, when they start the sale, she can run down to the Sam Goody in the mall to pick up my copy of "Ai Yori Aoshi: Enishi" volume 3 so that neither of us have to leave the house tomorrow.
The only downside to tonight? She's making chili for dinner. So apologies in advance to anyone waiting at the Layton Hills Mall Babbage's tonight.
Davis/Weber .NET Users Group is a go!
The first meeting will be Wednesday, December 8, 2004 at the Layton City Main Offices.
If you live on the Wasatch Front, spread the word. We've got a large capacity room scheduled, and I'd like to see if we can fill it for the first meeting.
November 6, 2004
"The Incredibles" Mini-Review
The animation and voice acting are top-notch as always. John Ratzenberger has a nice cameo at the end. A pleasant 60's superhero vibe plays through the entire movie. Jason Lee plays a perfect villian., although I kept getting "Freakazoid" flashbacks whenever he was on screen.
The movie is rated PG, and I'm assuming it's because this movie contains more death and destruction than all previous Pixar flicks and director Brad Bird's previous magnum opus ("The Iron Giant") combined. (By the way, I stayed through the credits, and there wasn't anything extra...sorry.)
If you're a geek, this is already on your must-see list, but I have to get in this one little jab at Steve Jobs. For all of the power that Apple claims to have, I found it rather funny that at during the end credits, a little credit went up saying that all final rendering was done using Intel chips.
Patent #4,734,690 Prior Art
The patent was applied for April 6, 1987 and was granted March 29, 1988.
What was really funny about all of this is that large chunks of the algorithm are identical to the algorithm used to do the exact same thing printed on pages 296-398 of "The Art of Graphics for the IBM PC" by Jim McGregor and Alan Watt, which was first printed in 1986 by Addison-Wesley Publishers Limited.
Because of frivolous suits like this, lots of people believe that the patent system is broken and should be overhauled. Personally, I believe that the patent system as a whole works with some minor issues, so any changes should be minor and specifically tailored to fix the problem at hand.
The biggest problem nowadays is patent houses buying up patents from other companies and using this newfound intellectual property to sue other people who had been using the patent for years. Easiest solution to this problem? Don't allow patents to be sold or assigned in full, only licensed or cross-licensed. The reasoning behind this is quite simple. Patents exist to protect the rights of the original inventor for a brief period of time.
Software patents are broken as well, but it's going to take some time to decide what the smallest change necessary to fix them will be.
November 5, 2004
One downside to VoIP
However, the moment that the server touches the network, we're lucky to get 50rps. So, what is causing this massive drop in performance? Cisco QOS.
We recently went to a VoIP phone system. It's a lot cheaper to maintain than a POTS or PBX system, and it makes it easier for our public safety guys to record all of the lines that they are legally required to, as well as to retrieve those records.
Cisco's QOS has seven levels for the QOS, with the higher the level, the more important the packet. Voice packets are higher priority than data packets, so anything VoIP-related takes higher precedence than data requests.
For us, we made the decision to share the same network for VoIP and data. Due to the QOS stuff, the more phone traffic we have, the slower our system goes.
Our calls outside of the offices use up about 32Kbps, but calls inside the offices use 160Kbps. Each phone also uses a chunk of bandwidth every 30 seconds that there is no call. If you are planning on migrating to VoIP and want to share the same fiber, do some load testing on your network and ensure that any necessary business services will not be affected by the addition of several high-load devices.
Government and .NET
Internally at the city, we run Windows. We have a massive amount of software that needs to be written. We also have a very small development staff. Because of that, we picked the .NET Framework for our development needs. Because we look in the Framework before reinventing the wheel, our average development cycle on a tool is about eight weeks.
However, we've been preparing to release some software to the public, namely a real-time mapper component for our town. I developed the core component in five days in my own time as a lark, but it worked well enough that we've integrated the component into almost every project here in the city. And we're releasing it for Windows only.
I can hear the open-source zealots screaming, "Why are you ignoring your Linux users? Why are you ignoring your Macintosh users? Why are you ignoring your FreeBSD users? Why are you telling people that in order to use your service, they have to pay money to a monopolist, etc., etc." I can explain quite easily.
First, our stats. We use AWStats to gather statistics on the visitors to our website. While not an ideal way to gather operating system usage statistics, given that we are a local government entity, it is safe to assume that we will be getting an accurate cross-section of our computer-using citizens.
As of 8:09am this morning, Windows was at 95.9%. Macintosh held 1.1%, and Linux and FreeBSD were both on the list with 0.0%. (Update: This means that Linux and FreeBSD each had only 1 visitor. Due to the level of traffic on our site, the single visitors were not enough to be statistically meaningful.) The remaining 2.8% are search engines and tools that we use internally.
Now the zealots are going to yell, "What about Mono? Why couldn't you write the tool in Mono? That way, you'd also be supporting a Utah company (Novell)." We code in Visual Basic .NET here at the city, and until Mono has their Basic compiler functioning, the ROI isn't there for us to port it to Mono/C#.
Now the zealots are going to yell, "This is a vicious cycle. By only releasing software for Microsoft products, you are reducing our ability to compete, because when people see you release software for Microsoft products, they'll buy more Microsoft products, etc." Let's say I did release a Linux version. The Mac guys could make the same argument about me utilizing the x86 architecture. "It's not fair that I don't also support the PPC..."
As much as we would like to believe that government exists to ensure the rights of all citizens, occasionally governments have to not serve a portion of their community. We have a portion of our citizens who do not want flouridated tap water. We have a majority who do. In this case, we are serving the majority. The minority who do not want flouride can go buy bottled water if they want to.
It's the same with our software. We are serving the needs of the majority. Those in the minority can buy other mapping packages if they want to, or use a free service like MapQuest.
Government is like the original Ford. You can have any color car you want, as long as it's black. Once every election cycle, the people as a whole make their choice. Our role is to fulfill that choice. As for software, people make their choice with their pocketbooks. When 95.9% of your customers are telling you something, you listen.
November 4, 2004
Ashcroft wants to quit...
John Ashcroft, the man who lost an election to a dead guy, wants to quit. Good.
Ashcroft and the Justice Department have done more to erode the rights of everyday citizens over the last four years than anyone else. Whether they were following instructions from 1600 Pennsylvania Avenue or just following Ashcroft's drive to make a name for himselve besides "least likely to succeed in an election against an inanimate object," we may never know.
All I can hope for is that the replacement has more respect for our Constitutional values.
At least in Utah, the "Yes on 3" campaign was a self-righteous facade of half-truths. As a result of this ruling, I expect several Utah companies that offer domestic partners benefits to retract their offer, using Amendment 3 as their legal backing.
Isn't it funny how discriminating against someone because of their color is illegal, discriminating against someone because of their religion is illegal, discriminating against someone because of their gender is illegal, etc., but you can now legally discriminate against someone because of the gender they choose to sleep with?
I'm not gay, but I have friends who are, and stuff like this makes me want to leave the state.
November 3, 2004
Blogging is kind of weird. For some bloggers, blogging is a conversation. It's a way to quickly get feedback on ideas from the blogosphere. It's a way to get your ideas heard. It's a means to make yourself more than the sum of your posts.
For others, like myself, blogging is more of a cooling salve than anything else. It's mental pain killer. By recalling the events of the past and placing them here in a public forum, I remove the pain associated with them. I feel more alive and vibrant as a result.
I've gotten some links, gotten fewer comments, and gotten into a few massive arguments as a result of my blog, but you know what? I wouldn't have it any other way.
Thanks for reading. We'll see what this is blog is like at post #200.
Why didn't I think of this? I would have loved to do this to some of the programs I've worked on.
The worst was thanks to a compiler transition. We kept getting really weird errors that we traced to a function that was, shall we say, prematurely optimized.
It had lots of code like this in it...
f++ = g(++f,++f,--f, f++);
Since the order that pre-increments and post-increments are handled is not stated in the C++ specification, each vendor, and on occasion, different products from the same vendor, handle them in different orders. In the first compiler, they were handled from right to left. In the second compiler, they were handled from left to right. We ended up not changing compilers for the project.
Code like that makes me grateful that VB.NET does not have pre/post-increment operators. And if you ever find yourself writing code like this, please do all of us a favor and stop. I'd rather deal with some temporary variables and have code that I can easily trace and understand, thank you very much.
November 2, 2004
Valve == Cheap
I'm spending $80+tax for the Half-Life 2 Collector's Edition, and I'm not getting a manual?
It's one thing when I spend $30 on a game like LSL and don't get a printed manual, but for $80, I better get all the bells and whistles.
In my entire professional career, I've only worked on one title that only had an electronic manual...and that one retailed for $20.
Certified Ethical Hacker (CEH)
I've actually got some real hope for this training. New Horizons has some excellent instructors, but they're usually hamstrung by the curriculum. (The ADO.NET training is the best training I've had there...but that really isn't saying much.)
What really kills me is that there is an actual certification you can get to be a Certified Ethical Hacker. Prometric handles the test online. Oh, yeah, like THAT isn't a hack attempt waiting to happen.
So, if you were interviewing someone and they had a CEH suffix after their name (like Bob Jones, CEH) would you consider that a good thing or a bad thing?
For example, yesterday, my site was visited from someone at Halliburton.com. I'm not the most political blogger, and my government affiliation is city government only, so sorry, no multi-billion dollar reconstruction contracts here. I was also visited by a crawler from Marketscore.com. I can't find out what they do because my spyware blocker keeps me from going to the site. That alone tells me enough.
Back in October, my weirdest visits were from Google's proxy server (meaning someone inside Google was checking out my site) and Northgrum.com (evidently, I have a lot of information on electronic sensors and related systems hidden here without my knowledge).
So, what's the weirdest site you've ever seen in your host logs?
Token "Go Vote" Entry
As for me, normally I vote straight party-line Republican. I almost did this time. I voted for Bush because he scares me less than Kerry. I voted for Scott Matheson for Utah governor because he hates Amendment 3. I voted against Amendment 3, and voted for everything else Republican.
Don't like my vote? That's fine. Go vote against me.
November 1, 2004
The "Slashdot Weenie" Effect
If you are a geek, you have probably heard of Slashdot.
Slashdot is primarily visited by three classifications of people. (Forgive the generalizations.)
The first are knowledgable tech support and programmer types who want to keep abreast of the latest news that affects their industry. You can tell which people these are due to their straightforward and measured speech, stories of real-world experiences, and the fact that their spelling and grammar are usually at or above a 6th-grade level.
The second are the religious zealots who believe that Stallman is God, source yearns to be free, a few Berkeley hippies designed the epitome of computer nirvana about thirty years ago, and that Torvalds is the Second Coming of Christ (or the first coming for the Jewish zealots.) You can usually tell which ones these are through their constant bickering about which text editor is better, how they've built a Beowulf cluster of EPIA motherboards in their mother's basement, their belief that "rm -r *" is the most user-friendly interface ever made, and their derision of any anti-Linux/*BSD article as "FUD."
The third are the sheep, those that will be led by the zealots to make their point, even if a few IP addresses are lost in the process. If you read more than three misspellings of common words, three grammar mistakes or the oh-so-intelligent "M$" in their post, you've got a sheep. These are the script kiddies, the "l33t haX0r d00dz," the unwashed masses waiting to get a clue.
I bring this up because I've found the biggest problem with Slashdot is what I'm going to call the "Slashdot Weenie" effect: an issue only matters as long as it is on the front page. The moment that the issue is not on the front page, the zealots cannot drive the sheep with any sort of urgency.
To further expand on this, let me tell you about what I did. On Tuesday of last week, I posted a reply to a post about Firefox's goal to get 10% of the browser market. I posted the a URL and the browser stats for that URL.
During the next day, we received over 300 visitors linked from Slashdot, trying to skew our browser stats towards Firefox or Opera or Konquerer or Lynx or whatever alternative browser was out there. (Firefox never did make 10%.) Which means that for this post, about 300 people who read the comments decided to follow the link, either to find out what the site was, or to skew the results. Regardless, that was it.
However, a funny thing happened the moment that the story went off of the front page. Our referrals from Slashdot ceased. We did not get a single referral at all from Wednesday noon to today. Even a follow-up post on the same thread did not result in extra referrals.
When we compare our browser stats prior to Slashdot and our browser stats from after the post left the front page, the stats are within 0.1% for each browser. Nothing changed.
So, let's say that you're an IT decision maker, and someone in your company talks to you about switching to Linux. How can you find out which category you're dealing with? Here's a few simple tests.
1) Tell them that a recent consultant recommended redoing the website using C# and ASP.NET.
If the person says something like, "That's okay. We can use a Mono stack to run the code just as easily without platform lockin," they're probably knowledgable.
If the person says something like, "Well, PHP is more secure and integrates more easily with Apache," they're a zealot.
If the person says something like, "C# is just Microsoft stealing Java, Bill Gates suXX0rs," they're a sheep.
2) Tell them that unless the VP's computer can run "Links 2000" flawlessly, he won't get behind the decision.
If the person says something like, "Well, we can install VMWare/Linux...," or "Well, we can install this stuff from Transgaming," etc., they're knowledgable.
If the person says something like, "Has he ever tried 'Tux Racer'?," he's a zealot.
If the person says something like, "I used to like 'Links,' but then Micro$oft bought them," he's a sheep.
3) Tell them that you require the ability to use Microsoft Office.
If the person says something about Crossover Office or Lycorix, they're knowledgable.
If the person says something about OpenOffice.org, they're a zealot.
If the person says something about vi versus emacs, not only are they a sheep, but they should be shot where they stand.By the way, please forgive me if I messed up one or more Linux product names. While I try to be knowledgable, I don't want to dedicate my grey matter to remembering the "Linux Flavor of the Minute."
Quick Impressions of MCE 2005
Things That Are Nicer
1) Video playback. Even when watching a live TV stream with MCE 2003/2004, I saw a lot of banding, etc., on the TV. Not anymore. The default display settings greatly reduce the amount of banding. Even the blue background has significantly less banding than before. With the old version, my wife could tell if we were watching the cable box or the MCE. Now, neither of us can tell.
2) Smaller info panes. The volume control is no longer a massive eyesore on the right side of the screen. Instead, it's a small box in the upper right corner. Likewise, the program info pane no longer dominates the bottom of the screen. Excellent UI revamp.
3) The app detects if I'm trying to switch to a channel that has no signal and silently stops me from going there. While not ideal, a step in the right direction.
4) UI shortcuts. If I was watching a video and have to leave for some reason, I can hit my green button, go to My Videos, and hit Right to have a small MRU list.
Things That Are Not Nicer
1) MCE 2005 is less stable than the previous revs. It's already crashed on me three times in one day...and that's with all the updates. The Watson dialog can't be controlled from the remote, and "Automatically Restart" is not one of the options.
2) The User Experience designers really like their "$5 words." I'm evaluating this application as an "Average Joe." I'll sum up my advice in five words: Use smaller and fewer words.
3) MCE 2005 should have included drivers for all of the common MCE hardware that was in use prior to its release. The fact that I had to install sound drivers and TV tuner drivers on a machine that was first released in January 2004 is horrid, especially as the hardware in question has been available for longer.
4) Setup constantly refers to Windows XP Professional instead of Windows XP Media Center Edition. I realize that since MCE 2005 is primarily an OEM product, setup was one of the lowest priorities, but it does make MCE seem second-class to a geek.
5) No option during setup to force a login.
6) I rip my DVD's to my hard drive. I have shares on my main PC that correspond to the category the DVD is in. Most of my DVD's are not in a series, but my anime DVD's are, so I put my anime in subfolders under the share. So, why does "Add Videos" detect every share but my Anime share...while "Add Music" does detect that share? Also, why can't I key in a share?
7) No obvious way to clear MRU lists. You know, in case you don't want the wife to see that you've been watching a clip from "Pauline Pounds Pennsylvania" or something similar.
8) Skip forward and back in the Program Guide will occasionally affect the program being viewed rather than the Guide.
9) No integrated DVD playback.
10) No high-contrast backgrounds for use with a television set.
11) Windows Firewall should allow access to Windows File Sharing on the local subnet by default.
12) No way to get a digital cable decoder/tuner for my MCE.