October 31, 2004

How To Clean-Install MCE 2005 on an HP

Last week, I decided that this weekend, I was going to wipe all of the preinstalled crap off of my MCE PC, and install Windows XP Media Center Edition 2005. I didn't want to wait for my copy from HP, so I decided to use my copy from MSDN while I waited.

Mine was an HP M495C, so your mileage may vary. However, the basic instructions should apply to any HP.

NOTE: These instructions involve potentially violating the license agreement that accompanies your MSDN subscription.


1) 11 blank CD's;
2) The C:\HP folder on your MCE backed up to a seperate DVD or a seperate computer;
3) The Windows XP Media Center Edition 2005 ISO images from your MSDN subscription;
4) About six hours to burn;
5) (optional) InterVideo WinDVD 6.

Step 1: Run the HP Recovery Disc Creator utility to create a set of recovery CD's in case everything goes to Hell. This will use 9 blank CD's.

Step 2: Using your favorite CD burning software, create CD's from the two MCE 2005 ISO images. That will use your two remaining CD's.

Step 3: Make sure you have backed up the C:\HP folder. If you do not see your C:\HP folder, do the following. Open Windows Explorer by hitting Windows-E. Go to Tools->Folder Options. On the View tab, pick "Show Hidden Files and Folders" and uncheck "Hide protected operating system files (Recommended)."

Step 4: Boot from MCE CD #1. Go through set up normally, but do not repair the existing install. I recommend deleting the C: partition and recreating the partition again. I left my recovery partition because I didn't want to mess up any other crap that HP had in the BIOS.

Step 5: When asked to insert "Windows XP Professional CD 2," insert MCE CD #2.

Step 6: When asked to insert "Windows XP Professional Service Pack 2 CD," insert MCE CD #1.

Step 7: Finish the standard post-install steps for Windows XP, then restore the C:\HP directory.

Step 8: Go into Device Manager (Windows-Break, Hardware->Device Manager) and look for all of the yellow warning signs. Right-click on each one and pick "Update driver..." Tell it to look in each subfolder of C:\HP\Drivers one-by-one for the drivers. When it finds one it likes and installs the drivers, wait. Several will have other "Unknown" devices be found afterwards. Have it look for those drivers in the same folder that you just pointed it to. Repeat step 8 until you no longer have any yellow warning signs in Device Manager.

Step 9 (optional): Install InterVideo WinDVD 6 if you want to be able to play back DVD's.

Step 10: Reboot and enjoy.

Now all I have to do is install TweakUI so that I can automatically login my TV user, and I'm done.

October 29, 2004

Auto-Updating .NET Apps In LUA Situations

At work, I wrote the auto-updater for our primary line-of-business application. I made several assumptions about my requirements based off of the requirements of other software that we needed installed. I was able to assume Administrator rights on our boxen because of our mail client. We were using GroupWise 5.5, which required Administrator rights on the box in order to run.

We finally finished migrating to GroupWise 6.5, and now I have to rethink my assumptions. The new GroupWise 6.5 client runs on a limited user account quite nicely. So now I have to come up with an auto-update system that will allow our users to update our LOB app without requiring admin rights.

Here's what I've come up with so far. I'm creating a new launcher application and integrating the auto-update functionality into it. Here is my flow.

The installer places the entire application in the Program Files folder. When the program is first run, it looks at a registry key to check to see if a new version has been download. If a new version has not been downloaded and a new version is not available, then it runs the version that comes with the installer.

If a new version is available, it creates a new folder in the Local Application Settings folder to hold the new version. It then downloads each file from our web server and verifies the embedded digital signature in each file. If the file does not match, it throws an exception, pops up an error message, and launches the old version instead. If all files match, the new version registry key is set, and the executable for the new version is launched.

Prior to any executable launch, the executable is verified against the embedded digital signature. If the signature doesn't match, it throws an exception and pops up an error message instructing the user to contact the support department for help.

Once a new version has been in use for two weeks, the old version is deleted to make space. This way, if we need to roll back quickly, we can do so without putting too much of a load on our server. Usually, when we need to roll back, we know within one day.

Downsides of doing things this way: With the old way, we were able to push out required updates along with our software (.NET Framework 1.1 SP1, Managed DirectX, etc.). We can't this way because we can't assume that the new user will know the Administrator password, and I don't want to have a global user/password with admin rights hardcoded into our updater. We will have to use other means to push out the updates. Also, for shared workstations, multiple copies of our application will be resident on the machine (the original install plus a minimum of one update installation per user). We're currently at 10.6Mb, so this isn't too big of a hit.

I know that I'm missing something here. Anyone have an idea as to what it is?

October 27, 2004

Nintendo's Lawyers Pull A Bonehead Move

I'm sure that you've all heard about Nintendo's lawyers sending a cease-and-desist letter (LINK NOT WORK SAFE) to the Suicide Girls website because a SG fanpage that was hosted there listed two Nintendo games as favorites. It's because of stuff like this that I believe that in any major company, the legal and marketing teams should work hand in hand.

I hear some of you out there screaming, "Why? Legal and marketing are like matter and antimatter. You combine the two, and you get a major explosion." Let me explain.

Whenever legal decides that legal action may be required, whether it be an automated action letter like this one seems to be or a full-blown pooch-screw lawsuit like Sun/Microsoft suit, legal should have to talk to marketing first to determine the level of fallout that would result from the lawsuit.

All lawsuits have some amount of negative value associated with them. Whether it be goodwill, sales or customers, when you decide to sue someone, you will lose something. Marketing's first job is not to determine how to spin the legal action. Marketing's first job should be to determine if the loss will exceed the estimated recovery.

In this case, Nintendo has lost goodwill, sales and customers. Not only that, but they lost them during the beginning of the critical holiday sales period. A quick call to a semi-intelligent PR/Marketing employee could have resulted in this never happening.

Now, to be clear, this wasn't like someone drawing Mario tying up Princess Peach in bondage gear and having nonconsensual hanky-panky while Toad, Bowser and Luigi have a 3-way "around-the-world" in the background. This was a fan, albeit a fan of both Nintendo and soft-core nudity, stating that he enjoyed two classic video game series. While negative publicity may be better than no publicity at all, you want negative as in, "You shouldn't play this because it's evil and will rot your brain," rather than, "You shouldn't play this because if you say you like it in the wrong place, you'll get your asses sued off."

Still going on the HP Media Center

All of the additional crap that Hewlett-Packard installs with their Media Center PC's is really getting to me. So, I've decided that as soon as possible, I'm going to wipe the computer clean and install a fresh copy of Windows XP Media Center Edition 2005.

I realize that I'm going to need some stuff from the recovery partition on this HP. However, I can't find some of the advertised software.

Here's what I've been able to find so far...

41NA1CHE WinModem
41WW1ASN Q828028
41WW1MON Monitor information
41WW1RPC Q828741
41WW1WSS Q828035
41WW2BOO HP's Full-screen setup stuff
41WW2BRD Conexant MPEG-2 Encoding Stuff
41XR1TVT TV Tuner Stuff

APP00041 .NET Framework Installer
APP01869 VALUEADD folder from Windows XP MCE Install CD
APP06334 Windows Movie Maker 2.0
APP18467 Windows Media Player 9.0
APP19912 Windows XP Support Tools
APP26500 Java 1.4.2

APP00153 Realtek Audio Drivers
APP00292 Realtek Networking Drivers
APP03902 7-in-1 Card Reader Drivers
APP04827 Monitor information
APP11538 HP Easy Internet Install Wizard
APP14604 ATI Video Card Drivers
APP14771 Microsoft Broadband Networking Drivers
APP16827 Intel Chipset Drivers
APP19718 Agere Cheetah Winmodem Drivers
APP19895 ASUS TV Tuner Drivers

Why can't I find the WinDVD SE that's installed? Why do companies do this overly complex recovery stuff when all I need is a set of install CD's or a secure download point where I can get installers or ISO's? It seems like companies can't make up their minds as to which market they want to cater to (geek or regular user), so they go half-assed towards both.

A regular user for MCE is going to want the antivirus preinstalled, the Easy Internet Access stuff, etc., etc., but isn't going to want a difficult setup process on a TV. A geek is going to want the bare minimum installed (Windows XP MCE, drivers, necessary support software like WinDVD SE), and have the ability to select which extra features should be installed. HP gave us neither. The setup process is atrocious on a TV, we have no choice what should be installed, and evidently, the recovery partition doesn't even include half of what comes installed, so if we do have to recover, we still don't get everything.

This is the first prebuilt computer I have purchased in nearly a decade, but my experiences with it so far are coming very close to ensuring that it will be my last.

Anti-Slashdot-Weenie Warning

If you go to Slashdot at all, you have probably noticed that the Slashdot software automatically puts the domain of a link after the link, for example:

blah blah blah at my home page [www.romsteady.net] blah blah blah

Well, today, I noticed a few posts that are using redirect scripts used by popular domains, such as msn.com and penny-arcade.com to make it seem like the links are going one place, when in actuality, they're going another.

If you are a Slashdot visitor, remember to look in your status bar to see where the link really goes. You can practice using this Slashdot weenie's post.

October 25, 2004

Slight Blog Update

I've added my MobyGames profile to the "Profiles" section on my sidebar. I'll add it to my homepage when I get home tonight.

HP Media Center First Impressions

My Hewlett-Packard Media Center PC arrived late Friday via UPS, was unpacked by the time the second episode of "CSI" on SpikeTV was over, and after a quick run on Saturday to Wal-Mart to pick up some additional batteries and cabling, was completely set up around 3:00pm on Saturday.

So, here is my quick pro/con review of my HP Media Center PC. (NOTE: My HP Media Center PC arrived running Windows Media Center Edition 2003, and after upgrading to SP2, I was running MCE 2004. This review does not include MCE 2005, which I won't be ordering until tonight.)


1. The interface. Everything moved smoothly and looked like it belonged. The fonts were large enough to be legible on my 27" TV in my living room. The transition effects were subtle.

2. The remote control. This goes hand-in-hand with the interface. While not the most comfortable remote I've ever held, HP's version of the remote was intuitive. The extra blank space around the d-pad will be welcome to anyone who has large thumbs.

3. The machine. Not only is this the quietest Pentium IV I've ever heard, the design of the machine is extremely nice. The blue LED indicators on the front of the machine make it easy to tell what feature you're in, and also make it easy to switch between areas without the remote. (However, you cannot navigate the UI further than that from the front of the machine.) Additional inputs on the front for S-Video, composite, USB and Firewire were also a wonderful touch.

4. The "TiVO" functionality. Being able to pause live TV is wonderful. Telling MCE to record a series and have it work is also wonderful. Also, the data provider giving information on the TV listings is more accurate than my cable provider.


1a. The out-of-box experience. I set this up on my TV. I wanted to set it up the way a normal everyday joe would set it up. That was my first mistake. The text on the desktop and during the initial setup were nearly illegible. The keyboard only gave a reliable signal within 6 feet of the receiver, and the mouse within 3 feet. Since I was hoping I could set everything up from my recliner, that was not very good. If Microsoft is expecting MCE to be set up on a television, Microsoft should use default font sizes that are going to look good on a television.

1b. Hewlett-Packard. This goes hand-in-hand with 1a, and is an unfortunate side effect of the agreement that Microsoft made that let OEM's have control over the desktop. My HP came loaded with so much junk, it isn't even funny. It came with BackWeb installed, which is a wonderful (heh) little spyware application. It came with an expired version of Norton Antivirus installed. (Yes, you read that correctly, an EXPIRED copy. I couldn't download a single update.) It came with a good seven gigabytes of crap installed that I'll never use on that machine. I'd wipe it out and start over, but HP decided that they didn't want to include install media. Instead, they're going to use a restore partition. I can't even create install media if I want to. It almost makes me want to use my MSDN subscription copy in a way that isn't licensed.

2. Analog-to-digital-to-analog. This one is going to get a little technical.
Broadcast television is sent as three concurrent signals. The first is luminance. That is the brightness of every pixel on your screen. This is the part of the signal that black and white televisions can see. The second and third are chroma. This is the part that tells the TV what color every other pixel is on your TV. NTSC televisions use a 2:1 color clock, meaning that your television reuses the color for every other pixel. This extended color clock is a large part of the reason that you get bleeding on certain colors on older televisions. The shorthand for this is YCrCb. Y is the luminance portion, Cr is Chroma-red (the offset along the red spectrum), Cb is Chroma-blue (the offset along the blue/indigo spectrum).

When you read an analog signal into a digital device, that signal goes through a process called ADC (analog-digital conversion). For a TV signal, there are two places where precision is lost. The first is in the signal conversion. When that signal is analog, let's assume that it's two floating point numbers between 0 and 1. They can be any decimal value between those two. When those two values are read into the computer, they are converted into a single 32-bit value: 8 bits for Y and 12 bits each for Cr and Cb.

The second area of data loss is in the conversion from YCrCb to RGB. The formulas to handle this conversion are pretty standard, so you don't lose much, but you do lose some precision here. You end up with about 12 bits of overall precision.

Now, let's go one step farther and convert this signal back to an analog signal. We lose a little more precision going back to analog. We also have to re-color-clock everything, so we lose additonal color clarity on every pixel.

Essentially, you end up with a lot of banding on flesh tones, foggy areas and gradient backgrounds. Even the blue background for the Media Center has a lot of banding.

3. dvr-ms. The format that MCE saves everything in is called DVR-MS. It's essentially a Windows Media Format wrapper around an MPEG-2 stream. It provides additional error-checking and metadata information, as well as helps get around some file-size limits of other video formats. It's also massive. I was hoping to use my Media Center as a media server, but when an hour-long show takes up 2 gigabytes of space on the lowest quality setting (fair), it makes me think twice about storing a lot of things on my Media Center.

4. Small, niggling bugs. On Sunday, I was recording "Mythbusters" while I went to go see "Team America: World Police." When I got back, "Mythbusters" was halfway done broadcasting, so I decided to rewind the show to the beginning while it was recording and watch it. When MCE was done recording the show, rather than let me finish what I was watching, it immediately time-shifted me to the present. It was a pain in the ass to have to go back to "Recorded TV," pick my program and fast-forward to where I was.

Also, MCE assumes that I have every single channel that my cable provider has. There is no way for me go to in and mask channels from appearing in the Guide, or to globally exclude series recording from channels that I do not have. For example, I have digital cable, but I set up my MCE on a signal splitter so that things wouldn't change for my technologically-challenged wife. Plus, this way I could record something on one channel while she watches "Lifetime: Television Where Men Suck." Because I don't have a second digital cable box, I am unable to record anything on my MCE above channel 99. I have "Big!" set up as a series record, but an error message popped up overnight when the MCE tried to record big on channel 663.
Anyway, I'll keep posting my impressions as I go along. I'm having fun.

October 22, 2004

Weird Web Browser Stats

Usually, we hear about web stats from technology-specific companies. I thought I'd share some web stats from my personal site as well as from my work website, because they're quite different than what I expected.

First off, work. 95.8% of our visitors are running a version of
Windows. 0.9% of our visitors are running a Macintosh. 3.1% are
running "Unknown."

Of our Windows visitors (percentages are of total visitors), 64.9% are
running Windows XP. 11.2% are running Windows 2000. 7.3% are running
Windows Server 2003. 5.8% are running Windows 98. 4.6% are running
Windows Me. And finally, 1.7% are running Windows NT.

For browsers, 90.1% are running Internet Explorer. 6.1% are running
Netscape, and 3.2% are running Mozilla. The rest look like bots or

For IE versions, we get 86.5% running 6.0, 1.7% running 5.01, 0.9% running
5.23 and 0.8% running 5.5. For Netscape versions, 4.5% running 7.1, 0.7%
running both 7.0 and 7.2, and 2 (people, not stragglers) running 5.0.

Aside from the fact that we have a large percentage of our visitors running Windows Server 2003, this seemed like a pretty standard pattern. Things change a bit for my personal site.

For operating systems, 95.2% of my visitors are running Windows. 1%
are running Linux. The rest are "unknown."

Within Windows, 38.5% are running Windows XP, 54.5% are running Windows
2000 and 1% is running Windows NT.

For browsers, 88.6% are running Internet Explorer, 5.4% are running
Netscape, 0.6% are Galeon, 0.4% are running Opera, and 0.2% are running

Within IE, 56.2% are running 5.01, 43.4% are running 6.0 and 1 straggler is
running 5.5. Within Netscape, 84.6% are running 5.0 and the rest are
running 6.2.1.

One thing that really surprised me was the sheer number of people running IE 5. This isn't exactly the safest browser on the face of the planet to run. That surprised me almost as much as the number of people who are visiting the city site who are running Windows Server 2003.

On the Windows side, I'll have to see if I can get AWStats to spit out information on what version of the .NET Framework is installed.

October 21, 2004


I actually had an E-mail about this, so I thought I'd state it loud and clear. I'll also be modifying my template to include this information as well.

I hereby grant permission to redistribute posts that I make in my web log on the following conditions:
  1. That what I write is not taken out of context;
  2. That you do not link directly to any images or files located on the romsteady.net servers that are linked to from my web log;
  3. That you include a textual link or hyperlink to the original post in close proximity to the quote; and
  4. That you do not claim that you wrote anything that I write.

It always sucks to have to codify things this way, eh?

Utah Politics: "No" On Amendment 3 [Updated]

Update: Changed "Initiative 3" to "Amendment 3" in the interest of accuracy.

Election day is coming up, and most Utahns are still trying to figure out which gubernatorial candidate to vote for. In addition, we have a very odd constitutional amendment on the ballot this year...Amendment 3.

The summary for Amendment 3 is as follows:
Shall the Utah Constitution be amended to provide that:
(1) marriage consists only of the legal union between a man and a woman; and
(2) no other domestic union may be recognized as a marriage or given the same or
substantially equal legal effect?
I can't back this constitutional amendment at all. Frankly, I think that it's bad law to single out a single classification of people for preferential treatment in the eyes of the law. I also think it's horrible for our state to try to amend our constitution to take a political stand on something that is currently working its way through the court system.

The United States Constitution really has three roles. It defines the duties of the government, the limits of government power, and establishes guaranteed rights to the citizens of the United States. The last time that the Constitution was amended in an effort to prohibit behavior, it failed miserably.

Besides, I believe a simple truth. "Be careful what you ask for...you just might get it." If gay and lesbian couples want to get married, go ahead and give them the right to marry. Then, as the years go by and more and more of these couples start filing for divorce and have to give away half of what they own, pay alimony and child support, and frankly have a miserable afterperiod to their relationship, simply remind them that they got exactly what they wanted. While they got the right to marry, they also got all of the responsibilities that went along with it.

October 20, 2004

Climbing the rankings...

About once a month, I start doing some ego surfing just to see what's going on. I keep hoping that eventually, entering "Michael Russell" into Google will bring up one of my pages or one of my posts within the first ten results.

Right now, I'm outranked by an artist, a marine biologist, a reverend, a teacher, a fallen Army PFC, a British researcher, a playwright, a furry artist, a list of articles, and a research programmer.

But that's okay. I also search for what I write about, and I'm gaining ground in the areas that count. Because of my quick tip on how to fix the Windows Media Player 10 8004022A problem, I'm up to numbers 3 and 7 on a search for that error. I'm even beating out the Media Player MVP on Google. Odd...

I'm properly listed on MobyGames for two of the titles I worked on, but completely skipped over for the others. They also say that I worked on "Diablo II," and while I would have enjoyed that job, it wasn't me.

Oh, well, enough ego surfing. Back to work...

Electronic Commerce Demonstration Results

Today, I demonstrated our Electronic Commerce system, and regretted it. Not because of my code, mind you. My code worked the way that it was supposed to. I had been testing against PayPal's Developer Sandbox for months in preparation.

However, something always goes wrong. The demonstration was supposed to go against the Live server. It did. However, the gentleman in Finance responsible for properly configuring our PayPal account settings...did not.

As a result, a lot of my own money is currently floating in limbo until next week. I don't mind, though. My code is solid enough that it will come through without any problems. I just hate it when I can't double-check the work of others because they happen to be out of the office during the demonstration period.

October 19, 2004

"Amped 2" Cheat Codes and Online

"Amped 2" was a pretty worthy successor to the original "Amped." It had better controls, Xbox Live play, a more varied soundtrack (including my favorite song from the soundtrack, "Harsh Light" by Helicopter Helicopter), and vastly improved graphics. However, one question gets asked a lot: Why lock out all of the cheat codes online?

This was one the most debated features in the game. There were three deciding factors. To start, the biggest draw of playing online was that you were playing as yourself. If your boarder was 0-point, you'd be playing as a 0-point online. If you had max spin, your boarder online would have max spin.

Second, the team was extremely anti-cheat. The team believed in reserving legend status for those who really busted their humps to beat the game, and wanted those people who dedicated a chunk of their life to have celebrity within the game itself.

Third, there were two seperate sets of character models. One set was high-detail, and was the model set that your character was rendered on the screen as. The second set was low-detail, and was what all other characters were rendered as.

There are cheat characters in the game. I'm doing this from memory, so please forgive me if I'm a little off. In order to see them, you have to log out of Xbox Live completely, then go into the Cheats menu option and enter their codes. My personal favorite is "MetalMaam" (case sensitive), although I know many others who like "FrostByte" (case sensitive). Then, select "Ride As Pro." The characters will appear in the list.

Now, there were some people at MGS SLC who were of the school of thought that these characters should be playable online. After all, they don't have weird physics associated with them. The cheat code merely unlocks them, it does not give that player any advantages. There were others who believed that since we were already locking people out of online play if they were using the physics cheat codes, like "MaxSkills" or "NoCollisions," then we should lock out ALL cheat codes.

The second team won, but not because of their argument. The art assets for "Amped 2" was running behind (a common occurance), and creating low-detail models of the cheat characters would have required additional art and test time that simply wasn't there.

By the way, just so you can see how rabidly anti-cheat the team was, enter the "ShowRewards" (case sensitive) cheat code, then look at the reward videos. You'll notice that there is still one video locked...the video for those who beat the Legend challenges. Good luck to those who want to try them. You'll need it.

October 18, 2004

Sick Development

There is nothing quite as horrific has developing when you are sick.

Development, by its very nature, is an act of creation. Your ability to focus on the task at hand directly corrolates to the quality of the end product. Most people get the same result when they code sick as they do when they code drunk, hungry or stoned.

Normally, I make a conscious effort to avoid developing when I'm sick. My focus gets completely out of whack, and I can't really concentrate on anything for a lengthy period of time. However, that can be a good period of time to do testing, provided you have a good means of recording what you were doing. When I was testing, I'd always be tape recording my test sessions, so when I'd find a bug that was the result of my being zoned out, I'd just rewind the tape and see what I was doing.

Unfortunately, I've got a hard development deadline of Tuesday at 5:00pm for my current project to be completely finished, and on top of having my development time slashed due to having to assist in rebuilding the servers, my wife gave me some weird illness that she picked up on Saturday when she went to my granddaughter's kenpo tournament at Salt Lake Community College.

So, to make a long story short (too late), meh.

ISV Buddy Bye-Bye...

On a highly regrettable note, my Microsoft ISV Buddy was laid off from Microsoft on Friday, October 15. Due to a mail transition going on here at work, I didn't get the message until about ten minutes ago.

The message was pretty short and to the point.
I got laid off today. So sorry you are going to have to find a new buddy.
Take care Mike,
[name withheld]
It's rather regrettable, to be honest with you. I don't know what kind of performer he was in his group, but I do know that he helped me through several sticky development problems even while he was on his six-week internal job hunt.

If anyone in the Redmond, Washington area is looking for an excellent tester, please let me know. I'll forward the information to this gentleman in hopes that he can continue on in this industry.

October 17, 2004

What a weekend...

First, I found out that our GIS database is completely corrupted after our failure-resistant RAID 5 configuration had multiple drives simultaneously fail...Now, I find out that we have an odd performance glitch with our PIX box.

We have a pretty secure setup at work. We have the state network firewall first. Any traffic that gets through that is forwarded to our PIX box. We have a DMZ set up with the web server inside of it.

If I do performance tests on static pages on the server over a LAN connection, I get about 1,100 requests per second (rps) from the web server. However, that same test into the DMZ drops over a hundred fold to under 10 rps. On dynamic pages, our 600 rps max drops to about 7 rps.

It's even worse outside. We drop to nearly 3 rps to the outside world.

Hopefully, I can get this fixed this week.

Pointless Personality Quiz of the Week

You are .html You are versatile and improving, but you do have your limits.  When you work with amateurs it can get quite ugly.
Which File Extension are You?

You can thank Ars Technica for this one...

Downside to Microsoft's New Openness

I, for one, am extremely happy that Microsoft is now being more open with their customers. Through blogging, Microsoft employees are letting people see and participate in the decision making process. Through Ladybug, customers can request features and bug fixes that matter to them. Through the ISV Buddy program, customers get one-on-one contact with a Microsoft employee who works on the same technologies that affect them.

However, there is one downside to Microsoft's new openness. Information that Microsoft did its best to keep hidden regarding product and staffing changes now has an avenue to get out.

For example, layoffs are one item that Microsoft does a wonderful job of hiding. For example, the layoffs in Salt Lake City were never publicly announced. The only public notice about those layoffs was a leak to Penny Arcade.

But these personal channels into Microsoft expose the inner truths of Microsoft. Things like my old studio getting sold off about a month ago, but since everyone down there is still under NDA, they can't say anything. Things like layoffs on the the WMI team. Things like the multitudes of seperate test departments in Microsoft Game Studios getting eliminated later this year to create a central test organization with a publisher-model focus. Things like this occur on a regular basis within Microsoft, but normally there are no external indicators of this happening.

Fact of the matter is that this information getting out isn't a bad thing, but the risk is there that having this information more transparent to the people who pay attention may result in people second-guessing Microsoft due to internal business moves rather than the quality of their products. While there have been several downsides to having all information get scrubbed by the marketing side of Microsoft, at least there was a consistent message coming from all of Microsoft...that Microsoft internally is one healthy company, not thousands of small companies vying for market share.

October 16, 2004

Taking the Media Center PC Plunge

I finally ordered my HP Media Center PC today from ECost.

I took the plunge for a few reasons. First off, it's been nearly two years since I upgraded my home machine. Given that I used to upgrade every three to six months, that's a lifetime to me.

Second, I'm supposed to be finding out very shortly if I will be re-entering the video game industry. If I am, I'm going to be moving ahead of my wife. Having a Media Center PC will reduce what I have to bring along with me. Instead of having to bring a PC, TV, VCR, DVD player, radio and seperate sound system, I'll just have to bring my Media Center PC and the 5.1 speaker set I have for my computer.

Third, the Media Center PC I ordered is one of the ones included in HP's limited time upgrade offer to MCE 2005.

Finally, I don't currently TiVO, and I never get home in time to watch "CSI" on SpikeTV, and "Mythbusters" is on too late for me. Since both are on non-digital cable channels, I *should* be able to use MCE to record them.

October 15, 2004

"Halo 2" Leak

First off, I want to pass my sympathies on to the crew at Bungie on having their magnum opus, "Halo 2," leaked to the Internet.

On the upside, I don't think that it's going to affect your sales at all. First off, it's in French with English subtitles. Second, it requires a lot of extra hardware installed on the Xbox for it to work. Finally, they won't be able to play on Live with it.

One thing I really admired about "Halo" was the storyline. Back when the crew in Salt Lake was working on "Amped," we got the occasional builds of "Halo" into the Salt Lake office.

I beat the game three times before it was released, but never got to see the ending. The reason: external builds had the cutscene that was supposed to occur as you start up the ramp to the shuttle removed. Crossing the trigger plane caused the game to freeze.

When I got my limited edition green Xbox two days before the Xbox's release date, the first thing I did was pop in "Halo." I played it non-stop and loved every minute of it. Finally, I got to the end. Hearing the explosions all around me over my home surround sound system made the ending feel more vibrant and alive to me. Finally, with 21 seconds to spare, I crossed the trigger plane...and found an ending that I had no complaints about.

So I'm with Bungie on this one. Don't tell people anything about the leaked version. I want to be just as surprised as I was by the first one.

October 13, 2004

Davis/Weber .NET Users Group?

(Before I start, I just wanted to let you know that I can't believe what I'm about to do...hell, I left Microsoft of my own volition just over a year ago, but I figure this is a good place to start.)

I'm still rather connected to the .NET developer community. I write articles on occasion, post bug reports, attend the user group meetings, etc.; in other words, even in my post-MS life, I'm still a Microsoft geek.

The Utah .NET User's Group used to meet out at the International Center, and while that was a bit out of the way, it was about an equal distance between Davis and Utah counties, so it was a decent middle ground.

Now, the .NET User's Group is meeting in Sandy at Northface University, and the doors are locking at 6pm. Now, I'm working as a developer now, and I know how hard it is to get out of work by 6pm, let alone go from Layton to Sandy AFTER work by 6pm.

I've been in discussions with a few people about creating a "Northern Wasatch Front" splinter user group that would meet in the Layton/Clearfield area. We'd take the developers north of Salt Lake City; the regular group would take the users to the south.

The catches:

  1. We would need a regular place to meet. I'm pretty certain I can make arrangements for that.
  2. We would need people to run it.
  3. We would need people to attend.

So, if you are a .NET guy/gal in the Davis/Weber area or if you know of a .NET guy/gal who would be interested in running a group or just attending a group, please let me know so I can forward the information to the right person.

Also, to accommodate those people who would like to attend both, we'd have to come up with a meeting date/time that wouldn't conflict with the Sandy meeting.

So, any thoughts?

October 12, 2004

Last Comic Pre-Empted

UPDATE: Evidently, it wasn't KSL's fault. However, since KSL-TV has pulled this kind of pre-censorship in the past, I'm leaving this up.

Over the summer and the last few weeks, my family has come to know the joy that is "Last Comic Standing." Tonight at 7 o'clock Mountain is the third season finale, when we find out which comedian will get the $250,000 prize. Actually, we won't, because KSL-TV (Channel 5) has determined that this TV-14 program is too mature for Utah audiences, and therefore will not show it. Instead, we will be shown a KSL-produced special on the history of Yellowstone.

KSL-TV is unique in the broadcasting business, as the Church of Jesus Christ of Latter-Day Saints is a majority owner of the station. As such, it gets preferential treatment when it comes to LDS Church interviews and broadcasts (for example, General Conference), and the Church's point of view pervades the entire broadcast lineup.

KSL is also an NBC affiliate, but they seem to believe that Utahns are so developmentally impaired that they cannot view a stand-up comedy program without bursting out in a heathen orgy of carnal delight.

At this time, I would like to quote from the "KSL 5 Statement Of Programming."

We believe that it is inappropriate for self-appointed organizations to dictate what programs KSL 5—or any other broadcaster—should provide.
Likewise, I believe that it is inappropriate for a local broadcaster to think to little of its viewers as to preemptively censor a broadcast without providing solid reasons for doing so, or at least rescheduling the broadcast to a later time when viewers with I.Q.'s higher than their shoe size can determine for themselves whether or not that broadcaster made the correct choice.

So, if you are reading this blog entry and live outside of the Utah Soviet Socialist Republic, please feel free to post who won as a reply, because it's quite obvious that whoever won, Utah's viewers lost.

Non-Disclosure Suckage

There is an extremely negative side effect to the extreme length of non-disclosure agreements in the software industry. What happens if you are let go due to a layoff, but the layoff itself is covered under the NDA?

I know of a layoff that occurred less than a month ago. The people who were affected by this layoff aren't allowed to talk about the layoff for another 11 months.

Needless to say, this can be a bit of a pain in the ass for those who are now hunting for jobs. "So, where did you work?" "[Company X]." "What did you do there?" "I'm not allowed to say due to my NDA." "Why did you leave?" "I'm not allowed to say under my NDA."

About five years ago, I did some development contract work on the side for the psychology department of a local university. My NDA with them said that not only was I not allowed to discuss my project with anyone other than my contact person, but I'm not allowed to acknowledge that I even worked on the project. At least my contract with Utah State University for similar contract work was less stringent on my NDA.

To those that were affected, I feel for you. I missed out on several job opportunities because in my final interview, I had to spend three minutes explaining what I could not do under my NDA/non-compete. All I can say is there are many creative ways of getting around an NDA/non-compete agreement, and if all else fails, move to Texas, where they wouldn't hold up anyway.

October 11, 2004

More on Permatemps

There is an interesting article at MSNBC on permatemp conditions outside of the tech industry.

"Amped 2" Tree Optimizations

If you've ever played "Amped" or "Amped 2," one thing you will notice is that there are a lot of trees around. They have a lot of detail, and since you can see almost the entire mountain from the top, there has to be some optimization going on here, right? Right you are. Some pretty interesting decisions were made in the interest of shaving memory and processing requirements.

Several things needed to be taken into account when working with the trees. First, we have visibility. Second, we have collision detection. Third, we have level-of-detail. Finally, we have memory minimization. All of these were solved using the same solution, but there were side effects.

Now normally, visibility and collision detection on a surface that is essentially 2D can be easily handled through use of a quadtree.

For the visibility, you check the top-level node to see if any part of that axis-aligned bounding box (AABB) is within the view frustrum. If it is, you continue to traverse the quadtree until you find an AABB that is not in the frustrum. Finally, you render what was in the frustrum.

For collision detection, you normally traverse the quadtree until you end up in the smallest node that contains your character, then detect collisions with objects inside your quadtree node.

Level of detail is not as easy, however, due to you having to check distance to each object in all visible frustrum nodes. Plus, quadtrees, while small, are not extremely memory efficient if you end up subdividing too many times.

The solution ended up being very simple. Trees on real-life ski trails are usually grouped into clusters. Why not group the trees in the engine? Trees were grouped into cylinders. Each cylinder contained between 5 and 20 trees. Plus, there was a maximum size for the cylinders. So, for visibility, simply clip the center point of each cylinder to an extended frustrum.

For collision detection, do an approximate distance calculation to each cylinder's center point on a 2D plane. (I'm not sure if they ended up doing a quadtree for the center points or not to reduce the work.) If you're close or within the cylinder, then check to see if you are below the top boundary for the cylinder. (That way, if you're flying over the trees, you won't be colliding with them.) If you are within the cylinder, then test against the collision mesh for each tree.

For level of detail, check the distance from the camera to the center point of the cylinder. Use that distance to calculate the LOD for the entire cluster.

Finally, memory optimization. The trees are instanced geometry, so only one copy of the mesh is in memory at any one time. The tree coordinates are essentially a list in memory. Your cylinders can end up taking about twenty bytes each:

(Assuming Z=Up)
4 bytes: X Coordinate, Center of Cylinder
4 bytes: Y Coordinate, Center of Cylinder
4 bytes: Z max, Top of Cylinder
4 bytes: Number of trees in cluster
4 bytes: Offset in trees list for first tree

Now for the side effects. Occasionally, we'd get a tree that wasn't contained within a cylinder. We'd get varied side effects. Occasionally, we'd see the tree, but not be able to collide with it. Other times, we would not be able to see the tree, but we'd keep running into it. What finally ended up happening if I remember right is than an extra post-processing step was taken in the level creation tools that would check each tree to ensure it was in a cylinder, and if it wasn't, a special 1-tree cylinder was created just for it.

October 10, 2004

Windows Media Player 10 Error 8004022A

I like DirectShow because of how flexible it is, but that flexibility comes with a lot of downsides. One downside about the way that DirectShow works is that the amount of information available for troubleshooting is slim to nil.

DirectShow is based off of what are called "pins." Let's say I want to play a video file. To me, it looks like I just double-click on the icon. To the computer, the file is a stream of data. That stream goes to what's called an AVI splitter, which takes the AVI file and turns it into two seperate streams: a video stream and an audio stream. The splitter directs the stream to the "pin" that is supposed to handle it.

For example, once I installed Windows Media Player 10, I started getting this error #8004022A all the time when trying to play .AVI files. I would get video, but no audio.

After a lot of research, I found that the biggest problem seems to be a small application named FFDSHOW. FFDSHOW is a DirectShow filter. A filter is essentially another type of pin. FFDSHOW is telling DirectShow that certain types of audio files should go to it first, and that it will forward the information to the proper pin.

However, WMP10 doesn't like to talk to FFDSHOW in some circumstances. To be dead honest with you, most of us don't even need FFDSHOW.

So, how do I get rid of FFDSHOW and this stupid error, you may ask? Easy.
  • Open your Control Panel, and select Add/Remove Programs.
  • Scroll down until you see ffdshow (remove only).
  • Click on that item, then hit the Remove button when it comes up.
  • Wait a few seconds for the uninstall to complete and follow the instructions on the screen.

Now, I don't know why FFDSHOW was messing up, but I do know that it was my problem, because once it went away, my problem went away.

Now if I could just figure out why the WMP10 UI becomes unresponsive for 20-30 seconds after a video file is launched, I'd be happy.

Leisure Suit Larry: Magna Cum Laude

Mini-Review: three stars out of five. Classic Larry humor, dialog, and babes brought down by repetitive and occasionally unpredictable mini-games.

Save Game: For those people who want to skip the bull and get to the ending, here is a save game for the game show at the end. Just to talk to Uma at the "Swingers" set to start the end game.

Personally, I kind of liked the "Morgan" ending.

October 7, 2004

I want to thank INETA for sending Rob Howard (no relation to Ron Howard) to the Utah .NET User Group meeting tonight. His presentation on killer ASP.NET performance tips (available on his web site [Blackbelt ASP.NET slides/code]) was amazing...

..although I can't believe that he forgot about disabling ViewState where it wasn't needed. I pointed that small oversight out, and once he made the change, it got an extra 120rps out of his demo.

Other than that slight issue, I give his presentation five stars. While Microsoft may be scaling back in all the wrong places, helping presenters like Rob go around energizes the development community and makes it easier for us to make compelling solutions.

Now if Microsoft would just invest enough funds in testing so that canonicalization issues would stop slipping into their products...

Browser Bugs

We get a lot of questions at the city about why our website isn't flashier. The simplest explanation is that it is extremely difficult to come up with a dynamic website that looks great, is accessible, and is bug free regardless of the type of browser you are using.

For example, I visit http://www.codeproject.com on a regular basis. I get a lot of great code from them. But, their forum dropdown has a bug in IE 6.0 SP1.

Drop down conflict

As you can see, the dropdown for the number of posts to show is overwriting the dropdown to select the forum. As a result, you can't even tell which forum that is supposed to be. (It's supposed to be SQL/ADO/ADO.NET.)

Until simple things like this can be done easily and relatively bug-free, we'll be sticking with a simple website.

Financial Transactions

I've been working on an electronic commerce site for work now for the better part of a year. You would be amazed at the amount of complexity that goes on under the covers.

Let's take two features and dissect them: discount rates and convenience fees. These two features are intertwined in the most interesting ways.

To each transaction (meaning group of line items paid for at once), we add a convenience fee. So, you may register five kids for soccer and pay your water bill all at the same time, but we only charge a single convenience fee for all of this.

When we send the charge to the payment gateway, a percentage of that is removed from the total you receive. So, if you had a discount rate of 1%, you would get $99 of a $100 purchase.

First thought: Remove the entire discount from the convenience fee. That's the easiest way to handle this, right? It's the easiest. It's also illegal. It is against the law to charge extra to someone who wants to use a credit or debit card to purchase something. You can give people who pay cash a discount, but you cannot charge others extra. By using the convenience fee as the sole buffer, you're essentially creating a fee just for them.

Second thought: Figure out what percentage the discount is, and remove that percentage from each line item. That's legal and mathematically sound, but for accounting purposes, each line item must not have a fractional penny. How should you deposit $1.113? Does that $0.003 vanish or what? The rules of government accounting actually do account for this in an effort to stop "Superman 3" or "Office Space" style skimming.

Third thought: Take the discounted amount and put it into a temporary variable. Figure out the percentage that the discount rate is of the gross, and put that into a temporary variable. Take that percentage of each line item except the last one, and use a Math.Floor(amount*100)/100 to get the line net. Subtract the line net from the temp variable storing the discounted amount. On the last line item, take away the remainder. That works, but has problems if you try to reverse the process.

Final thought, and what we have implemented: Store the sign of the base amount. Run the above on Math.Abs(amount). Restore the sign. All done.

I realize that this seems like it's being overanalyzed, but government financial transactions have very specific requirements. If I don't follow those requirements to a T, at the very least I'm putting the city at risk. At the very most, I'm violating city, county and state laws.

All I'm saying is that you should be very careful about shortcuts you would normally take when you are dealing with money. I've had to write our own in-house because all of the electronic commerce suites that we tested wouldn't pass our audit tests. Would yours?

Probation Over

Today is the first day that I am officially off probation at work.

It's been weird being on probation for the last year. Every other place I've ever worked had a probationary period ranging from two weeks to ninety days. But, on the upside, it would essentially take an act of God to fire me now. Either that, or me acting in flagrant violation of city policy.

Of course, the likelihood of me doing that is slim to nil.

October 6, 2004

Don't have VS.NET 2003? Try this one...

I bought Visual Studio .NET 2002 Enterprise Architect when it first came out through the Microsoft Company Store for a decent price. I also upgraded it using the $39 limited time offer to Visual Studio .NET 2003 Enterprise Architect.

However, I know that many of you still may not have VS.NET 2003. Some of you may even be running VS.NET 2002 or Visual Studio 6.

Well, Rory Blyth, recent Microsoft new-hire, MSDN Events personage, co-host of DotNetRocks, and one of the worst-dressed people in recent history, is running a contest next week with the winner receiving a free copy of Visual Studio .NET 2003 Special Edition.

If you decide you want to enter to get your hands on it, full details can be found here.

I'd use Rory's stupid banner, but I'm not entering.

Never mind...

Aside from the free T-shirt and the free .NET Compact Framework Pocket Guide, the only thing I would have used from the Mobility Road Show was the Mobile Application Development Toolkit that they gave out.

Now, even THAT is out of date. Download the Mobile Application Development Toolkit 2004 (released yesterday).

October 5, 2004

"Halo 2" Hockey

As of right now, "Halo 2" is the most pre-ordered title in video game history. The Babbage's next to where I live has over 1,100 pre-orders for this title.

They also never get in any products on time.

Let me share a small tale of my night. Normally, I go to pick up my pre-orders at lunch, but since I was in Salt Lake City today wasting my time listening to a high-level overview of the .NET Compact Framework, I decided to go tonight at 7pm. I had two pre-orders to pick up. One was for "Tenchi Muyo! GXP" Volume 6. The other was for "Leisure Suit Larry: Magna Cum Laude."

My wife got a call from Babbage's before I left saying that "Leisure Suit Larry" was in. Since I had pre-paid for the title in it's entirety a few weeks ago, I thought thay maybe, just maybe, they got it in. After all, they were calling to say that they had it in. It just seemed logical.

So, I head over to Layton Hills Mall. My plan was to go to Sam Goody and pick up "Tenchi," then go to Babbage's. (If I did things the other way, I'd get a bit of hassle at Sam Goody, as Babbage's does not deactivate the anti-theft tags.)

I went to Sam Goody, picked up my pre-order, and headed to Babbage's. The head dude working tonight then lectured me. He said that it wasn't in, and wouldn't be in until tomorrow. He wasn't sure if it would arrive in the 10am shipment or the 3pm shipment, so I should call before coming over. I was lectured for coming in to pick up a title...after I was called and told to come pick it up.

This makes me want to scream out at the top of my lungs, "BULLSHIT!!!"

(One other nice thing about leaving Microsoft...I can say words like "bullshit" in my blog.)

So, I've made a plan. I like the manager at that Babbage's, so I'm not going to pull any malicious bull. Instead, I'm going to go buy a full set of gear for a hockey goalie and a lawn chair.

Then, I'm going to take November 9 off, get suited up, and head over to the mall. I'll set up about two hours before they open their doors, and wait to see what happens when 1,100+ obsessed Halo fans show up demanding their copy of "Halo 2" and, for whatever reason, they don't have it in on street date.

I think I may be the only survivor.

.NET To Go Road Show

Unless you are completely clueless about the .NET Compact Framework, or are very desperate to get out of work, attending the .NET To Go Mobility Road Show will be a waste of your time.

That being said, at my session, I received a copy of the .NET Compact Framework Pocket Reference, a MapPoint Web Services trial CD, VS.NET Pro 60-day trial, and a disk full of actually useful Compact Framework material. Oh, and the obligatory Microsoft Windows Mobile T-Shirt.

The first 45 minutes was a manager pitch, the next two hours were an overview, and the last 20 minutes were, "If VS2005 was actually working, I could show you this."

Not impressed.

October 4, 2004

Training Take #2, or "I'm in, let's boog-ay!"

Okay, our department got off to a shaky start, but Kevin H. made a really good decision. He decided that several of us should go to Redmond to train. Then, we would come back and train the rest of the department.

Michael B. needed to stick around and take care of patch duties on LS 2000, so Kevin picked two test leads and one tester to send up. Myself and Nick would represent the test leads, and Seth B. would represent the tester contingent. Kevin also joined us in Redmond.

We were sent up for six weeks. We were able to come back every other weekend, but for the most part, we were Redmond-bound for the six weeks.

When we got up there, we were introduced to the test team, and then we were each assigned to our products for training. Nick was assigned to "Crimson Skies." I don't remember what Kevin was assigned to. Seth went to learn about multiplayer testing, and was assigned to the multiplayer lab. I was assigned to "Mechwarrior 3: Pirate's Moon."

"Wait a second," some of you may cry. "'Mechwarrior 3: Pirate's Moon' was a Microprose product. You worked for Microsoft. Why would you be testing a Microprose product? You're full of shit."

About a month before we found out that Access had been purchased, Microsoft bought FASA Interactive, and along with it, the rights to interactive products based off of the FASA properties. Hasbro and Microprose had licensed the MechWarrior license prior to the acquisition, though, so this was a contractually necessary product.

I was assigned to the product as a regular tester, working under James M., an experienced test lead. The product was supposed to be released to manufacturing two weeks after I got there. The only way we could stop the product on our end is if the product, as released, would damage the value of the MechWarrior license.

Now to explain how our communication system with Microprose worked. The product manager at Microprose would send a copy of their bug database (stored in an Excel spreadsheet) to us. We would test, and enter our bugs into RAID, Microsoft's internal bug database software. Each night, James M. would send our bugs (full text and everything) to the product manager at Microprose. Then, the product manager would take the bugs and forward them to Zipper Interactive, the studio developing the software. Zipper was just a couple of miles away from Redwest-E, where we were stationed. So, while inefficient, especially since Crimson Skies was also in development at Zipper, it was what was requested by Microprose, so we capitulated.

Over the two weeks, we received a new build every other night. It was getting slowly better, but most of the major showstopping bugs were not being fixed. At the end of the two weeks, we received a gold master candidate. To say I was underwhelmed was an understatement. We were not able to complete a single multiplayer game, and could only connect less than 10% of the time. We could not complete a single level of the single player game. And most of the sound effects were placeholder sounds...literally, someone saying, "Placeholder A-23," or something similar.

I shared my results with James, and he agreed with me that the game should not ship as is, but unlike most Microsoft products where test can stop the product from shipping, this was not a Microsoft product. James took it to his manager, who took it up higher and higher, until it was decided that the product should not ship as it was.

While that discussion was going on, I was sharing an office with Nick, who was testing "Crimson Skies." He also had placeholder sound effects, and he was intensely amused by them. His were not ID codes. His were placeholder dialog recorded by the developer. His favorite line occured during a mission where he had to fly his plane next to a train to pick someone up. The little man would climb up into the plane, and he'd hear this disco-Stu'ish voice state, "I'm in, let's boog-ay!" For the rest of my time at Microsoft, I would hear Nick say that at the most inappropriate times. I loved it. So did he.

James came and told me that the decision was made to halt the product. Suddenly, the tone from Microprose changed. They wanted us to work with Zipper to get the product shipped. Turns out that Zipper hadn't been getting all of our bug reports. So, we had Seth working on the product in the multiplayer lab, me focusing primarily on the single player, and James handling coordination duties, communication and testing. "M3:PM" was supposed to be on store shelves by Thanksgiving weekend, or else one of the major Christmas sales windows would be missed.

It took and additional three weeks of twelve and sixteen hour days to stabilize the product and get the product to the stability bar we had set for it. As a result, the game shipped to stores one week after Thanksgiving 1999, arriving between November 30 and December 3.

As an indirect result of the slipped ship date, Microprose closed the office that we were working with that Christmas. Every once in awhile, I still feel guilty about it, knowing that I had a part in people losing their jobs in a competitive industry like this. But then I remember that the delay helped turn "M3:PM" from something that was rivalling "Extreme Paintbrawl" for lameness to something that got an average 78% rating according to GameRankings. The customer won in this case. It was the proper decision.

We all came away from Redmond with a new appreciation for what video game test departments go through. We also all felt invigorated by what we felt was the power that Microsoft gives testers. While our department got off to a shaky start, this trip and the peer-training we did when we got back helped solidify our department's foundation, and give our department an excellent second chance.

However, while we went to Redmond for training, none of the developers did. Empowered testers vs. a culture where testing didn't matter? It was the groundwork for war during a critical period at MGS SLC, but that's a story for another time.

What good did the Microsoft Permatemp suit do?

Absolutely none for anybody except for the temporary agencies that handle the hiring.

Let me give you an idea of what would happen for us as a result of the Permatemp suit. We would advertise the positions, interview the applicants, and tell the temp agency to hire them for us for a nine-month stint.

Then, even though we selected them, we would pay a $10,000 finder's fee per employee to the temporary agency. We would pay the $10,000 finder's fee even if it was a rehire.

What did Microsoft get in exchange? Microsoft wouldn't have to pay for medical benefits, group activities or for stock benefits. Microsoft would still pay for floor space, hardware, free drinks, meals, etc.

Now, we kept bringing the exact same people back every single year. After five years, the cost of their benefits would have been significantly less than the finder's fee.

So why did Microsoft keep paying the extra money? The only answer that I can think of is public perception. Dropping 700 a-/v- (aka temp) employees is a business move. Dropping 700 FTE's is a layoff. Nobody wants to hear Microsoft use the "L" word. It's not good for the stock.

.NET Mobility Roadshow

I'll be going to the .NET Mobility Roadshow tomorrow in Salt Lake City.

Since I have absolutely no idea how many readers I have, or if a subset of those subscribers happens to live in Salt Lake City, I may or may not see some of you (should you exist) there.


I may seem like a disgruntled ex-Microsoft employee, but this guy is the disgruntled current Microsoft employee.



I was just wondering...Scoble syndicates every other computing-related RSS feed in the known universe, so how long will it be until he starts syndicating me? [grin]

What's in a name? Everything.

A little over one year ago, I left Microsoft to join the public sector. Do you know what took the longest time getting used to? It was going by my real name again.

Some of you may be wondering what the hell I'm talking about. "Surely," you think, "Microsoft is a professional place. Going by monikers or aliases surely isn't tolerated." Sure...tell that to Wedgemaster, Madhatterguy, Banzai, Drogo, JinxSOJO, Goose, Mr. Happy Pants, Null, Remoh and others.

"Lunchtime fun," our sacred gameplaying when we should have been eating, was a tradition at Access that carried over to Microsoft. We would usually send someone out to get the food at Der Wienerschnitzel while we played, then we would eat while testing. Oh, yeah, Wienerschnitzel...my wife would love me at night... In order to keep everyone straight, we just ended up going by our game aliases. Mine was Rom, or RomSteady.

(Background: ROM Steady was an alias that was given to me back when I was a member of the Clearfield-based Eight-Bit-Only Network, or EON for short. The meaning: I was reliable, always there, and once I got something into my head, it took an act of God to get me to change my mind. Seems pretty dead on even to this day.)

While the practice of using our aliases was common in the test department, and there were some in the development department who did it as well, management was usually out of the loop.

Now, I told you that story to tell you this one. (God, I'm beginning to sound like Ron White...)

Dave C. was Bruce Carver's right-hand man, and once Bruce was out of the picture, Dave C. began a purge of everyone who he saw as only employed because Bruce was there. During the purge, he had several one-on-one meetings with employees who may be affected.

I was one of the ones who had the occasional one-on-one with him. He'd ask me about what was going on in the test department, ask about work, etc. At the end of each meeting, he'd ask me about a bad thing he had heard about that he believed I did. The catch: every single bad thing was done by someone else.

At MGS SLC, we had a LOT of people named Michael, and a LOT of people named Russell. So I would have to correct him as to who this event was related to. Finally, I said, "Look, you keep mixing me up with other people, so from now on, just call me 'Rom.'" He did.

And it stuck. For my final three years at Microsoft, aside from Daryl Welsh (who is a subject of an entire week of blogs in his own right,) nobody at Microsoft called me Michael again...ever. It even got to the point where my wife would call me by name, and I'd be wondering who she was speaking to for a brief second.

Just to give you an idea of how pervasive it was...one of my friends who was laid off from MGS SLC in November of last year was applying for a PC Technician position here at the city. He got to the final round of interviews. He was asked to tell a story about something he had done, and he decided to relate a story about something we had done together. However, he kept referring to me as "Rom" during the interview. It led to some definite confusion to say the least.

So needless to say, it took quite some doing to get used to being called by my name again. I just celebrated my one-year anniversary here on Friday. Who knows? Will I start being called Rom again here in another year?

October 3, 2004

Training Take #1 and Links LS 2000

Back at Access, we learned about the impending purchase by Microsoft in February 1999, just as we were finishing Links Extreme. We had to hurry and make the appropriate changes to Extreme: getting rid of MPlayer support, tighter integration with the MSN Gaming Zone, the Microsoft cloud logo replacing the Access Software intro video, etc. The acquisition was finally announced on April 19, 1999. We were to be one of Microsoft's first remote studios, and as such, we were an experiment.

Now, for this next story to make sense, here is the history behind it. I was hired as a test lead by Bill Biggs. He hired another tester, Michael B., a couple of weeks before me. He was hired as a tester. When the Microsoft announcement was made, Bill Biggs switched to the Art department. Kevin H. was a developer, who switched to being the Test Manager at that time.

Russ J. was the test lead on Links LS 1999, and as such carried over to Links LS 2000 in the same capacity. However, he was having issues with attendance due to a medical problem. Kevin H. recognized that something needed to be done. He was also constantly being nagged by Michael B. about the fact that even though I had been there less time, I was higher up than he was. So, as one of Kevin's first acts as test manager, he promoted Michael B. to test lead, and assigned him to lead on Links LS 2000 while Russ J. dealt with his medical issues.

Now for the story. We needed to learn how to develop and test "The Microsoft Way." We were going to be dealing with our counterparts in Redmond on a regular basis, so having a common frame of reference was crucial.

Our test lead training was handled by a Thomas Z. from Redmond, who at the time was a test lead. He came down and spoke to us like the proverbial "pro from Dover." Unfortunately, 75% of what he taught us was how to kiss ass and get ahead. Most of us who were in the training were able to see past this and realize that for us to succeed, we would have to combine the best of what we were doing with the best of what we were able to glean from him. One piece of information that Thomas kept insisting on was that a test lead's primary purpose was paperwork. While every other test lead disregarded this factoid, Michael B. latched onto it like it was gospel truth. As Kevin H. came from a development background, he had no reason to think that small nugget odd. This was a recipe for disaster.

Once Links Extreme shipped, I was assigned to Links LS 2000. I also helped on occasion with a LithTech-engine adventure game that was in pre-production. (I'll tell that story another time, as it requires several paragraphs to even get started, and it dovetails into another epic story about the studio.)

The average day for the test team: 9am to noon, testing. Noon to 1pm was our sacred communal gaming time. The entire test team would play whatever was in vogue. We started with the original Age of Empires. We moved on to Rainbow Six, then to alphas of Age of Empires II. Then, from 1pm to 5pm or 6pm, we'd test. The test lead's day, however, involved everything but testing. He'd spend a couple of hours working on reports, play the game for a couple of hours, and spend the rest of his time playing lots of different games. In the end, his bugs accounted for less than 1% of the total bugs on the project.

Needless to say, the rest of the test team was getting extremely perturbed by this. As a test department, we were extremely upset at the test lead. We each spoke with him, and when we did, we usually ended up with even more work. Once he started assigning his test lead duties out to give him more time to play other games, we had completely had it.

Test Rule #3: If a test lead needs help, it's OK to ask for it. However, if a test lead is seen testing and there is an obvious effort to help improve the quality of the product from the test lead, testers are more likely to follow the test lead's instruction and give their all...not for the product, but for the test lead. At that point, a test lead will no longer need to ask for help, it will be freely offered.

We were all talking about going and talking to Kevin H. about Michael B., but that's all it was...talk. I finally had it and went to talk to Kevin in mid-summer. However, I made a bit of a mistake. I spoke with Kevin as I would talk to Bill, as an equal. I also came across as extremely cocky. After all, I was hired at a higher level than the normal tester. I had an accelerated probationary period, which was a rarity at Access. I had just shipped a product. So yeah, I guess I was pretty cocky. I wasn't after that meeting. Kevin picked up on my cockiness and used the meeting to knock me back into place. I actually left his office in tears. After that, it was several months before any tester would go to Kevin H. about anything.

Test Rule #4: A tester has the unfortunately job of being the bearer of bad news. If I learned anything from this interaction, it was that how you bring the news up is as important as what you bring up.

We continued to test our asses off because we believed in the product. We picked up the slack left by our test lead because we wanted our first major product to be a success. However, because our motivations were off, the quality of our work was not up to the previous standards we had set on Links LS 1999 Edition. One of the St. Andrew's courses was missing objects on a massive section of the course less than 10 weeks from ship, and we got reamed for it. Bruce Carver actually said that he had "no confidence in the testing done on that course." It doesn't help any that that was a fairly barren course to begin with, but that was a hell of a letdown for the department.

When we finally shipped the product, we were all grateful, but our test department was set up on a very shaky foundation for the next several years.

To be honest with you, I was pretty hesitant to start telling some of these old stories. There are a lot of emotions behind some of these, but I spoke with several of the people involved, and the general impression I got was that I should tell the stories, but I had to tell the good and the bad. As long as I turned the same harsh light on myself, they had no problems. Over the next few stories, I intend to do just that.

There is something cathartic about going over your past, looking at the mistakes you have made, and looking at them in a critical light. I've spent the last six years pounding my head against the wall over some of these. By bringing the past into the light, hopefully the bad feelings can dissipate into the ether, while the lessons learned can help others who may be in the same boat.

October 2, 2004

Microsoft Mistakes

I made a lot of mistakes when I was at Microsoft. I'm going to tell you about one that turned into two, which also became a CLM.

CLM: Acronym. Short for "Career Limiting Move." Refers to a total bonehead move that ensures that you will never advance beyond where you are.

I was assigned to be the test lead on Microsoft Golf 2001 Edition. This was literally the smallest team that Microsoft Game Studios had ever assigned to a single product. We had a program manager, one developer, one artist and me.

The product was supposed to be a repackaging of Links LS 2000 without Arnold Palmer, with some golfers from Links Extreme, a different collection of courses, and it was supposed to be crippled so that no extra courses could be played with it. We were also to add an easy play mode and lessons. This was part of a "cover-the-price-point" strategy against Electronic Arts and their onslaught of Tiger Woods. We were going to be the low-end, Links LS Classic would be the mid-end, and Links 2001 would be the high-end.

So, we were short staffed. We had a really short development cycle (seven months). We ended up borrowing an artist for sixty days to help out with the artwork for the lessons. We didn't get a manual guy until the last sixty days. We were rushed...completely rushed.

I ended up doing some work on the lessons in order to get them done in time for usability, and I was making constant tweaks during the usability sessions. That earned me my second credit on the game...for lessons.

Finally, we were getting down to the last three months. There was a lot of work to be done still. There were still several features that absolutely had to be done. They were simple changes for the most part, but Bruce Ward (the developer) told me that if I wanted them done, "the code was in SourceSafe." Here is where I made my mistake: I coded the features.

Yes, that's right. I was the test lead. My job was to ensure the quality of the product, not to complete it. It was bad enough that I was working on content. I was actually writing code and checking it in. This was CLM #1. Due to my changes, I had to split my time for the rest of the product between finding bugs and fixing bugs. Not a good idea.

Test Rule #1: Testers should not write anything for the production system. It is OK for a tester to create placeholder content, but no code or content from a tester should enter the final product. It makes the tester a party to the product he/she is testing, and makes it so the tester cannot be objective.

So, what did I do next? I went and spoke to my manager about the code I was working on. One of the features I was implementing was changes to the scoreboard code. I told him about the code that was there, how it was a spaghetti mess from Hell. I told him that I essentially gutted it and rewrote it. After I was done describing what I had done, he told me that he had written that code. CLM #2.

Test Rule #2: Never badmouth someone's code verbally. It will come back and haunt you in the end.

Finally, we got the product out the door. It even got out on our first release candidate. According to Product Support Services (PSS), customers only found a single crash bug that we missed, and it couldn't be consistently reproduced.

Now for more trivia. At that time, PSS charged the costs for support back to the games division at a flat rate per call of about $45. Given that profit margins were about $5 per unit, that meant that a single PSS call would wipe out the profits of nine sales.

Microsoft Golf 2001 Edition had an extremely low amount of support calls, due to our legacy codebase. Links LS Classic was in the same boat. Links 2001 was a brand new product from the ground up. PSS calls were inevitable.

As a result, Golf 2001 ended up making more money than the flagship product over the following 12 months. CLM #3. There was severe pressure over the next few years from the higher-ups in the group to terminate everyone who was on Golf 2001 fulltime.

Longevity Rule #1 (aka the WordStar rule): Don't show up your flagship product on the bottom line.

Neil Galloway, the artist, was the first to go. According to his review, the artist who was brought on for two months to help out with the lesson artwork did all of the work on the product. While I appreciate all of the work that Adam did, Neil busted his butt on that product, and I was sad to see him go.

James Alger, the program manager, was next. He was given a choice of termination or medical leave. I think he made the right choice.

Bruce Ward was gone next. While his E-mail to the group made it seem like he was moving on to greener pastures, he told me privately that he had been terminated.

I held on for a long time thanks to some work I was doing for our Xbox products. I wrote a source code analysis program that helped out with some of our Xbox titles. I wrote some usability tools to help out with some of the Xbox TCR's. I basically made myself as useful as I could. I raised my visibility outside of Salt Lake. As a result, I outlasted several of the people who held the grudges.

I made one more major mistake in March 2003, but that's a story for another time.

So, in short, I set a MGS record by getting three credits on a single title: Test Lead, Developer and "Lessons." But by doing so, I really hurt my chances for future advancement, and unnecessarily put the product at risk.

Baby steps...

I learned a long time ago that when working on a major project, baby steps are important. Biting off too much at one time is a recipe for failure.

So, I've started the baby steps of work on my new domain. It's slow going, but when I'm done, I hope that there will be plenty of useful tools and information on my site.