March 31, 2005

Good job, Microsoft.

Last night, Microsoft released Windows Server 2003 Service Pack 1. I think they were planning on releasing it on Friday, but some people probably pointed out that releasing software on April Fool's Day is a bad idea.

As a result of the bump back, we have some things like the April 2005 DirectX SDK released in March, but I'm okay with that.

Congratulations on the service pack release, and on taking the human factor into account with your release schedule.

March 30, 2005

Holy Shit!

I'll say that Microsoft is shutting up...Robert Scoble went 24 hours without posting to his blog.

The blogosphere is falling! The blogosphere is falling!

Nah, I know that he's a busy man. I just think it's funny that the most vocal Microsoft bloggers have really clamped down on their output during this week.

March 29, 2005

VS6 vs VS.NET vs VS2005

Microsoft has been trying to say that because they're giving us so much more with Team System, that's why they're charging so much.

Okay, let's say I buy that. So riddle me this, Batman...why didn't you drop the price for Visual Studio .NET 2002 Enterprise Architect, then? After all, you did remove several features from Visual Studio.

Most people right now are looking at the above sentence and saying, "Wha?" Allow me to demonstrate.

I have installed Windows 2000 Workstation in a virtual machine, and I've got my 1999 copy of Visual Studio 6.0 Enterprise Edition right here.

Picture of Visual Studio 6.0 Enterprise installation dialog

Right here, we can see that we've already lost all the tools for Mort. Visual Interdev 6.0 was Mort's and Elvis's web designer. It was a step up from FrontPage, a step down from Visual Basic 6.0. We've lost Visual FoxPro 6.0. Now FoxPro is a seperate product line and never again will they meet. Because of the emphasis on needing to know OOP and proper programming form, the Visual Studio product line in 2002, 2003 and now 2005 are now essentially Mort-less. Trust me, a streamlined UI doesn't make a language for Mort. A streamlined *language* is a Mort language.

My copy of Visual Studio 6.0 comes with Visual J++ 6.0, but the removal of that can't be blamed on Microsoft. We'll blame Sun Microsystems for that one.

SourceSafe comes with VS 6.0 Enterprise. It comes on a seperate CD in VS.NET 2002 and 2003. Heck, SourceSafe comes with Team System. Of course, all other VS SKU's have to pay for SourceSafe, but isn't SourceSafe worth the extra $8,000? I ask because unless you spend an extra $2,700 for Team Foundation Server, you can't use the test case management, project management or source control features of Team System.

Visual Studio 6.0 comes with a wonderfully archaic icon and graphic set that bring back memories of Windows 3.1 and Windows 95. That same icon and graphic set came in VS.NET 2002 and 2003, although it's finally getting an upgrade in VS 2005. So, are you upgrading all 919 files, or are you shipping icons in addition to the 919 that are already there?

Visual Studio 6.0 came with a supported Help File creation utility. HCW was no longer supported in VS.NET 2002 and 2003. In fact, a seperate download was required to make the HTML Help files. What Help utility will be included in VS 2005?

Visual Studio 6.0 came with InstallShield Express for Visual C++, a decent installation utility that didn't require an extra runtime to be present on the end user's machine in order for an installation to occur. It also came with the Package and Deployment Wizard for Visual Basic, which installed the necessary Visual Basic runtimes when needed. The installer that came with Visual Studio .NET 2002 on did not meet either of those requirements.

Picture of Visual C++ 6.0 'Enable Profile' checkbox

Will you look at that? Visual Studio 6.0 came with a code profiler for C++. Is it just me, or was there no profiler in VS.NET 2002/2003?

Visual C++ 6.0 also included the functionality to export a makefile for those command-line builds that were just too complex for the IDE to handle. Funny, didn't get that one in VS.NET 2002/2003 either.

Look, I'm not saying that the Team System feature set isn't impressive, but are we truly to believe that new icons, the return of a profiler, static analysis tools that have been in use inside Microsoft for years and have already paid for themselves time and time again, a slight enhancement of a test case management system that has been in-use inside Microsoft for several years, code coverage which looks like C-Cover in disguise, what are essentially enhanced enterprise templates and tons of extra features that are useless without spending an extra $2,700 on a server are worth an extra $8k?

One other thing is missing from the Team System lineup (besides logical pricing and feature separation): a bug tracking/source control only SKU. At those prices, there is no way on Earth that I'm going to be able to affort $5k+ for year 1 per tester just so they can file and regress bugs. Same with content creators, help file makers, document editors, localization script writers, etc. The ROI just isn't there.

March 28, 2005

The Message vs. The Mouth

The Microsoft Visual Studio team has been oddly quiet today. Right now, I think that the managers and whatnot are in meetings right now trying to figure out what changes, if any, they should make to the message that they're trying to express to the developer community.

The pricing decisions on MSDN have effectively pissed off everyone. Small ISV's are upset that the features that have been so attractively previewed for them over the last year are now priced outside of their reach. People like myself who purchase retail versions of the Visual Studio products are pissed off because the Team System stuff is only available via overpriced subscriptions unless we purchase 5 copies or more. Larger development houses who already architecture investments are upset because to get the productivity enhancements they were expecting from Visual Studio, they're going to have to pop for the Team Editions. And everyone who does not do software development like Microsoft does is upset that they're being forced into the Microsoft "Division of Responsibilities."

Well, I wish the Developer Tools Division luck in refining their message. Just remember that the development community is now very close-knit due to your efforts with Channel 9, INETA, blogs and the like. Because we're more close-knit, we are more likely to take on the cause of our more vocal members, because if you slight one of us, you slight all of us.

So while you work on your message, ask yourself this. Is your message that you are all about the developer or not? Because the message we got was that you're all about the long as you can get to the developer's bank account.

Ritual is hiring!

Are you, or have you been a producer/product manager? Have you shipped at least two products? Do you have at least 3 years of experience in the games industry? Want to work and live in Dallas? Can you work in an environment where complete freedom of personal expression is not only tolerated, but encouraged? Are you able to remain calm when you are told, "We ship in five months, but we have seven months of work left to do?" Do you smack publisher representatives on the ass and scream, "Who's your daddy? Who's your daddy?" and have them coming back for more? (Okay, bad example...)

Well, you are in luck. Ritual is looking for a Producer.

We've got multiple projects in the pipeline right now, and we're hiring for more than the Producer position, so if you're going to apply, apply now.

The limbs come off, the limbs go back on?

In a change from the recent spate of Microsoft price-gouging psycho-analysis...

According to the article, this kid lost both hands and one foot to a freak basketball accident. The brick wall that was supporting the backboard collapsed, and the weight and sharp edges lopped them off.

Doctor's reattached all of his limbs, and it currently looks like they work. They aren't sure about the extent of the nerve damage, but he's moving some fingers, which is a start.

And from the article (emphasis mine):
Professor Wayne Morrison, head of plastic and hand surgery at Melbourne's St Vincent's Hospital, said he believed the simultaneous reattachment operation was a world first.

Just how specialized are physicians nowadays? I wasn't even aware that hand surgery was a specialty, let alone a common-enough occurance to mandate a head hand surgeon.

Oh well. Back to our regularly scheduled program of upsetting the status quo...

March 25, 2005

The Microsoft Mindset, and what brought on the VSTS Fiasco

Well, the blogosphere has taken a breather from discussing the Visual Studio Team System pricing fiasco, but this whole experience reminds me of one of the most frustrating parts of Microsoft's development and marketing system.

You see, Microsoft doesn't create their non-entertainment products for market segments. They create them for fictional individuals. (A fixed link for the link is here.)

Now, it's one thing to target your features towards the personas. It's another thing to market your product towards the personas, and that's exactly what the Visual Studio marketing team has done here.

Microsoft has targeted Visual Studio 2005 Express and Visual Studio 2005 Standard to "Mort," the opportunistic developer. "Mort" doesn't like to think before coding, he just wants to write his little program and get it done.

Microsoft then targeted Visual Studio 2005 Professional to "Elvis," the pragmatic programmer. He makes "real" programs, not "Mort's" toy "Hello World" applications. He may not know everything, but he knows where to look to get the information.

Finally, Microsoft targeted Visual Studio 2005 Team Edition to "Einstein," the paranoid programmer. "Einstein" unit tests everything, load tests everything, essentially tries to ensure that his application will never break...ever.

These are decent personas to develop for, but horrid to try to market to. Why? Because if you market to these personas, you essentially fragment your development base.

Most of the people who have been complaining, myself included, are "Elvis" developers. "Elvis" developers have another goal that isn't included in the persona, however. The average "Elvis" developer wants to eventually be an "Einstein." Few "Mort's" aspire to become an "Elvis," but you won't find many "Elvis" devs who don't want to be an "Einstein."

The nice thing about MSDN Universal subscriptions is that they gave the "Elvis" developers the "Einstein" toolset. They may not always use everything available to them, but when they needed it, it was there. They learned how to use it when it was needed, and came one step closer to being an "Einstein."

Now, the "Elvis" developers won't be getting the "Einstein" features without spending a metric shit-ton more money. The goodwill that Microsoft's developer tools division with the "Elvis" developer has been replaced with a mental image of Steve Ballmer fucking "Elvis" up the ass while chanting "Developers! Developers! Developers!"

In this case, the personas worked against Microsoft. Will Microsoft learn its lesson? History says "No." Microsoft does a lot of things...but the one thing it never does it admit it made a mistake.

March 24, 2005

A Reasoned Dissection of the VSTS Debate

Frans Bouma, a Microsoft MVP for C#, has a very reasoned dissection of why the small ISV community is upset about the Visual Studio Team System (VSTS) pricing. While I was pissed at the pricing, he explains the motivations underlying the price debate.

I'm looking at what's happening here and all I can think of is that given how bad the flareup is now, how do you think that the game development community is going to react when the insanely high prices for XNA Studio are announced?

People use Windows because Windows is where the games are at. Game developers (not the publishers, mind you, but the developers) are generally living milestone-to-milestone. Price us out of the water, and two things will happen. First, the number of game developers programming for Windows will decrease, due to either studios closing or studios migrating to other competing platforms. Second, innovation will cease as far as Windows games. Innovation comes out of the smaller studios and indie games. When those are coming out on Linux, what is going to drive people to Windows?

I understand that the Visual Studio team is trying to make themselves a profit's the Microsoft way. However, I'm going to argue that the job of the Visual Studio team is not to make money from Visual Studio, but to keep developers coding for Windows. That is the goal of your products, right? Make developing Windows solutions a productive and profitable business? That means making the best development tools possible for a price that people will want to spend.

Note the "want" in that last sentence. I wanted Visual Studio .NET 2002 Enterprise Architect, and I was able to save up and get it in about three months. You made Visual Studio .NET 2003 Enterprise Architect available as a cheap upgrade ($29). I want Visual Studio Team System because to make quality software, I need several of the features that are contained within. Currently, I get those features from free alternatives, but I want the integration. However, while I want the product, the price suppresses my want. I want my mortgage paid off more than I want your development tool. I want my wife debt-free more than I want your development tool.

Visual Studio 2005 Professional? I can afford that. Take me about a month to save the money for the "upgrade" from Enterprise Architect. I can't see me spending 20 months saving up for the VSTS Suite "subscription."

How to Lose Friends and Influence

In no particular order:

Be a district attorney and call the jurors that didn't see your way stupid.

Stop doing the main reason that people visit your site.

Suspend a student for showing the Internet that you broke a state law.

Target the weakest platform as your only platform after doing a strong multi-platform release of the previous game in the series.

Cancel a patch for a product after promising the patch for several months.

Show your students about "this one time, at band camp..."

Price-gouge your customers.

Alienate every single non-Mormon Internet user in your state while at the same time reducing the ability of hosting companies in your state borders to accept business. Of course, he could have just been trying to shut down Maddox...who knows?

March 22, 2005

VSTS...Hell, no... [Updated]

I've worried publicly about the pricing of XNA Studio in the past. When I first heard about the pricing for Visual Studio Team System, I was publicly pissed. Now, I'm extremely pissed.

I received the following comments on my second blog entry:
I think the VS2005 Professional + MSDN Premium subscription gets you more or less everything MSDN Universal does today, sans any of the Team Edition stuff, and runs around the same price as MSDN Universal today. I'm recommending that my company stick with that option. We can continue to use 3rd-party unit test, SCC, and build tools, no big huhu. Hopefully they don't yank FXCop, the Free Version, though ;O.
# posted by Anonymous : 3:54 PM
That is correct. "VS05 Professional Edition + MSDN Premium Subscription" is intended to be a superset of what you have today. And, it's lower priced than what you have today in MSDN/U.

Also, don't forget that if you have an active MSDN/U subscription when we ship the product, we will automatically transition you to a no-cost upgrade to your choice of one of the VSTS role-based SKUs (Architect, Developer, or Tester). We'll also give you pretty good upgrade pricing to the Suite.

In addition, if you are NOT an MSDN/U subscriber right now, we've begun a promotional period where you can purchase, renew, or upgrade to MSDN/U right now at an even bigger cost savings.

The bottom line for us was that we wanted to reward those customers who bet on us early.
# posted by Prashant Sridharan - Microsoft : 10:14 PM
Also forgot to add that each of the client SKUs includes a CAL.
# posted by Prashant Sridharan - Microsoft : 10:16 PM

Well, let's examine these claims, shall we? This page has the estimated retail pricing for VSTS, and this page has the feature breakdown.

With MSDN Universal, you got everything that Microsoft had to offer developers. With Visual Studio 2005 Professional + MSDN Premium, you aren't giving them the Team System Foundation Server and you're not giving them two of the three Team System SKU's. If they don't sign up early, they're not getting any of the Team System SKU's in that bundle.

Plus, if you're a developer who wants to own his software instead of rent it via an MSDN subscription, you get screwed, because Team System is only available through an MSDN subscription.

Now for the insanity. You've done a wonderful job of concealing this one. I've shown the breakdown (Developer, Architect and Tester) to several developers, and all have said that you essentially need all 3 to effectively do your job as a developer. Of course, charging them $10,939 retail ($8,079 volume license) for that functionality for one year is completely insane. Dropping the price to $4,598 retail for renewing is like using lube the second time you screw someone up the ass. Yeah, it hurts less, but they still painfully remember the first time.

Well, I'm going to use that $10,939 per seat as a baseline and see what I can get for that price.

Visual Studio 2005 Professional: $799
Perforce (Software+CAL): $800 (covers source control requirements of TS)
FogBUGZ 4.0: $99 (covers bug tracking requirement of TS)
NUnit: Free (covers unit testing requirement of TS)
Compuware Devpartner Studio Professional Edition: $2,300 (covers static code analysis, code coverage, profiling requirements)
Rational Rose: $2,495 (covers most of TS-Architect)
TestLog Test Case Management Software: $99

That's $6,592 right now, and I've already covered quite a bit, but guess what? After I spend that $6,600, I own that software. I don't have to pay yearly to keep using it. Most come with a year of upgrades included. Oh, and they're not v1 products.

I know that Microsoft wants to move to a subscription model for software, and I understand exactly how tempting that is, but these are the tools we use to build software for YOUR platform. A construction worker doesn't lease his hammer.

UPDATE 3/23/2005: Here is a summary of the costs from an MSDN blog. The Team Foundation Server is $2,799, and you can get the Team Edition SKU's sans MSDN subscription if you buy 5 or more copies through Open Licensing.

And as for the comment made about "you don’t get license to deploy any server w/ MSDN today, only for dev/test/evaluation use," that is true. However, your MSDN copies of the development tools and the Office products were licensed for production use.

The whole purpose of MSDN was to provide developers with the products and information that they needed to effectively do their jobs. Now it looks like a profit center, not a developer resource.

I just can't believe that Microsoft is making it this much harder for smaller ISV's to develop on their products, especially since we now have Apple and Linux growing as viable alternatives to develop for. Personally, I don't want to develop for Linux or Apple. I like programming on Windows for Windows. What I don't like is that subscribing to MSDN to get the Team Suite costs twice as much as my mortgage for my home in Utah does for the first year, and almost as much for each year after the first.

Yes, that's home mortgage payment for my old home in Utah (that I'm still paying on because my wife wants to keep it) is $400 a month. If you want something more contemporary, my rent with utilities down here is about $700 a month. Well, what do you know...Team Suite still costs more than my apartment. Team Suite for year 1 costs as much as my apartment, my utilities, my transportation to and from work, my magazine subscriptions, my Coca-Cola and what I spend on lunch FOR ONE YEAR! Team Suite costs more than 20% of my current annual gross income.

Anyone else remember back during the "Windows/OS/2" wars when Microsoft was giving away their stuff to developers so that they'd develop for Windows?

Useless IE Dialog

I've actively been working on reducing my attack surface, so now I have it so that I'm prompted before running any ActiveX controls. Unfortunately, this is the dialog that I get.

IE Dialog: 'A script is accessing some software (an ActiveX control) on this page which has been marked safe for scripting.  Do you want to allow this?  [Yes/No]'

Now, while I'm glad I'm getting prompted, I've got some complaints.

1) What ActiveX control is being initialized? How am I to make an informed decision without having that information? In this case, it would be nice to know that it is the Messenger ActiveX control that is being activated, wouldn't it?

2) Where is the "Always Allow" and "Never Allow" selection for this particular ActiveX control? After I've made my informed decision about the ActiveX control, it would be nice to ensure that my option can persist.

3) The verbage is a bit off. The software in question (the ActiveX control) is not on the's on my computer. The correct verbage should be something like "A script on this page wants to access some software on your computer (an ActiveX control) that has been marked safe for scripting."

4) It's a modal dialog, but even if IE is the top-most window, IE can make this modal dialog lose focus so that I can't just hit "N" on my keyboard. Usually, it happens when multiple ActiveX controls are on a single page and the dialogs queue up.

Regardless, please rewrite this dialog for IE7.

March 21, 2005

Managed DirectX Inconsistencies

Explain this to me if you can.

The following code will take a screenshot of whatever is in the backbuffer at the time it is called:

Public Sub SaveScreenshot(ByVal filename As String, Optional ByVal fileformat As ImageFileFormat = ImageFileFormat.Bmp)
Dim backbuffer As Surface = VideoDevice.GetBackBuffer(0, 0, BackBufferType.Mono)
SurfaceLoader.Save(filename, fileformat, backbuffer)
End Sub

...which means that Managed DirectX is extracting the back buffer to system memory, converting the surface to a GDI+ image, and exporting the image to a file.

I'm fine with that, and I support the functionality. So, if Managed DirectX can handle that, why won't it let me extract out the back buffer to system memory so that I can do some intense back buffer effects?

How Is This Better Value For Developers?

The estimated pricing for new MSDN Subscriptions and "Team Foundation" CAL's were released today, and I'm sorry, but you've made development more expensive.

It used to be that the premiere MSDN offering was MSDN Universal. With that, you got limited use licenses for everything that Microsoft made, and Visual Studio .NET Enterprise Architect, the creme of the crop of development tools. You got all that for $2,799 a year to start, and $2,299 a year to renew.

The "replacement" MSDN plan that comes out when Visual Studio 2005 ships is MSDN Premium. You get Visual Studio 2005 Professional with that, and one of three Team Edition versions: Developers, which includes code analysis, coverage, profiling and unit testing tools; Architects, which includes modeling tools; or Testers which includes load testing tools. You also get one Team Foundation CAL for the subscription. Not one per All that for the svelte price of $5,469 a year.

Yes, you heard me, nearly $5,500 a year for what you currently get for $2,800. If you just want the CAL's, well, they're $499 each. That's just to access the Team Foundation Server, which has not had pricing announced yet. Of course, if you're large enough for volume licensing, that drops to a svelte $3,191 a year (including Software Assurance).

Plus, their roles are a bit muddled. Testing does code coverage testing as well, so does that mean that test will need the Team Edition for Developers to do that part of their job?

Why limit the code analysis, coverage, profiling and unit testing to Team Edition? You've already got the Express SKU's stripped down to nothing. Now you're telling developers who use the Professional SKU that they're not good enough to profile their code? Are you telling them that they're not good enough to unit test?

Are the Team Editions plugins for Visual Studio 2005 Professional, or are they completely seperate products? I'd feel very silly if my testers couldn't bring up code and do builds. I've had several instances at previous jobs where as a tester, I had to step through checkins to find when a bug first manifested itself.

Well, the Team Foundation CAL's are a decent deal at $499 each. That's cheaper than the $800 for a Perforce CAL plus the $99 for a FogBugz 4.0 CAL. But remember, Microsoft...those CAL's come with the server software AND the client software and they're proven products, not the standard Microsoft v1 releases. How much extra is the software to use those CAL's going to be?

I can see the packaging now for the 3 SKU's...the Express SKU's will be a picture of a "special needs" child riding a bicycle with massive training wheels. The Professional SKU will be a mountain bike ("Now you're able to get around without those limits we put on you.") Finally, the Team System SKU's will be pictures of gold-plated Ferrari's ("Leave those other 'Professional's' in the dust...")

March 17, 2005

What Enterprise Devs Can Learn From Games

Enterprise development and games...the two are completely different, right? Wrong.

In both games and enterprise development, you are processing a set of data and attempting to present the information to the user in a usable format so that the user is able to promptly act on that information.

To be honest, game developers are actually very good at doing application development, mostly because they understand that a game to be successful, the game must have an intuitive interface, present information in an expected and useful form, and be immediately responsive to the input of the user. That user-centric attitude means that while a game developer may not be as quick to develop something as someone with a code-centric view of things, users will generally be more satisfied with what the game developer gives them.

In a pre-existing records management application back at the City, if you wanted to look up information on a person, you had to navigate through five menus to the "Find" option, type in the information you knew, press F2, key through the records to the one that you wanted, then hit F2 again and finally hit F2 one more time to bring up the menu that would allow to view or print the record.

For an application we were writing, I had to create a search interface, so I decided to implement a real-time search system. I had a flag on my search form called Dirty. All of the fields on the screen shared a common Changed event, and all they did was set Dirty to true. I had a timer event that fired on a regular basis that, if Dirty was true, would search through the database and populate a list box with any records that matched. Each line of the listbox contained the 2-3 most commonly needed pieces of information, so sometimes, the full record didn't even need to be pulled up.

Right now, I can hear tons of enterprise developers out there screaming, "Hey, that's not scalable! It's creating extra work for the systems! Our servers aren't fast enough to handle that workload! Anyone should be able to remember F2 is 'Search'..." To them, I have one question: do you ever debugged using the Visual Studio .NET IDE?

You're debugging your application and you hit a breakpoint. You look at the bottom of the screen, and there is a list of all of your locals and variables that are touched by the function you are in. The last one to change is highlighted in red. You hover over a variable name and you see the value pop up in a tooltip. All of the information that you need to diagnose your problems are at your fingertips, and the most common ones are all right there for you without you having to do anything else. If you don't remember that F5 is "Start While Debugging," you can still use the menus to do the same thing.

You expect that kind of automatic response from your development tools. Why shouldn't your users demand that kind of automatic response from your applications? We've got people out there using 3Ghz machines to check their E-mails. If the queries are too expensive, cache the data to their local machine and query it locally. Put that desktop to good use!

You may think that you're saving cycles by not searching until the user tells you to search, but whose cycles are you saving? Your cycles, the computer's cycles, or the user's cycles? Computer cycles are cheap. Moore's Law helps them get cheaper. Your cycles cost a finite amount. Once the program is complete, only maintenance costs are factored in. However, there is no limit to the cost of your user's cycles. You may make $100,000 a year, but your program could be used by several hundred or several thousand people. Even if your time savings for your users only amount to a few dollars per year, that savings has more than paid for your salary. Remember: the more money you save your company, the more money you can ask for. [grin]

If you want a good example of how to do real-time search, take a look at Windows XP Media Center Edition's music interface. As you enter the name of the album or artist, the display scrolls to the first record that matches what you have entered. Sure, the dialog takes a second or two to populate before you can use it, but the overall time savings in search makes up for it. It takes me over a minute to scroll down to the end of my music library, but only a couple of key presses to scroll down to my Weird Al and Yanni, and a couple more presses to scroll back to my Anything Box. Those minutes add up. How long until Windows Media Player just does the search instead of waiting for me to click the "Search" button?

March 15, 2005

Damn truncated posts...

For some reason, Blogger seems to be randomly truncating posts in my full-text feed, so if you are reading using an RSS reader, and the post is cut off, please go to the page to read the full post.

March 14, 2005

Least User Privledge Dev Questions

I've got a few questions regarding developing with Least User Privledge that may determine whether or not we allow limited users to run at least one title currently in development...

Are there any security constraints regarding loading a .DLL from the user's temporary directory? If there aren't now, are there plans to implement restrictions on native code loaded from the user's temporary directory?

I looked on MSDN, but I couldn't find the answer.

Media Center Wish List

According to PC World's CeBIT coverage, there won't be a Windows XP Media Center Edition 2006, but instead there will be an update to MCE 2005 this winter instead.

I'm actually glad about this, but I can only think of two requests for the Media Center team to have in this coming update.

My first request is that I want to be able to use other computers on my network as Media Center Extenders. I want to be able to sit down at my computer in the computer room and watch a live TV show while my wife watches a recorded show on the large TV. I want to be able to schedule a recording while my wife zones out to the Media Center Visualizations.

My second request is that I want a 10' web browsing interface. You guys have MSN TV. I know that it's not managed code, but that's what the "It Just Works" switch is for. Bring that browser over to MCE. I want to be able to browse the web using my remote control while what's on TV shows in a window in the corner. It'd be great to pop over to IMDB to pull up movie trivia during a commercial break, for example.

March 12, 2005

RSEngine: Cvars

My renderer was being a pain in the ass, so I decided to finish up work on my Cvar handling routines.

Cvars, for those who don't know, are variables that can be accessed by the console and the game. These variables may be updated by either source at any time. They're usually used for global settings mnagement.

Cvars are a bit of a challenge to do efficiently. They need to be able to be declared by the code as well as by the user. Some can be strings or numbers. Others can only be numbers. Of those that are numbers, they can be either integers or floating-point numbers. They need to be extremely efficient to retrieve their values. If it's a numeric Cvar and a string value is placed in there, the string value need to be rejected and the Cvar needs to go to a neutral value, usually 0. Finally, the values need to be live, so if they're changed, they're immediately changed for everyone who has access to the Cvar object.

Well, here is my implementation (source, VB.NET 2003, 1.68Kb ZIP). Cvar.vb is an all-in-one class, including Cvar management, storage and lookup.

Instantiation of your cvar's is fairly easy. Let's say you want a Quake-style cvar, r_fullscreen. In your VB.NET code, you'd do the following:

Dim r_fullscreen As New Cvar("r_fullscreen", 0)

That creates the cvar, sets the starting value (which is 0 in this example), and because a numeric argument has been passed, this cvar will now only accept numeric arguments.

For something like a player name, you can put in:

Dim player_name As New Cvar("player_name", "Player")

This cvar can now accept anything as a value (except lines that contain carriage returns or newline characters, more on that in a second.)

Saving and loading your cvar's is also easy. The shared methods Cvar.Save(filename) and Cvar.Load(filename) take care of that. These save and load Quake-style cvar lists, with the variable name and value on the same line, hence the reason for denying some characters in the set values. While I could have used XML, I was aiming for lightweight, and this type of setting file is currently accepted by gamers. The code uses a tilde (~) to prefix saved strings. If the cvar is declared in code, the tilde isn't necessary for it to be loaded as a string.

You have multiple ways to write to the value of a cvar, and regardless of your choice, the change will affect all instances of that cvar globally.

You can set the value in code, by saying r_fullscreen.Value = 1.

You can get an instance of the cvar by calling Cvar.GetCvar("r_fullscreen"), and then set the value in that instance.

You can set the value by name, with Cvar.SetValue("r_fullscreen", 1).

For retrieving the values, you have similar choices. You can query the object directly, get an instance and query it, or you can query it by name and ask for the result as either a string, integer, or single-precision floating point value.

Check it out, and let me know if you see any bugs. Thanks.

March 11, 2005

My response to "VB Classic"

Right now, there is a huge uproar about Microsoft ending support for Visual Basic 6, which was released back in 1998. There's even a petition out for Microsoft to update VB6. has a very insightful response regarding this whole debate, and I felt compelled to reply to his post.

Here is my reply in full.

I've been a VB dude since VB 2.0. While I loved the language, I occasionally felt limited by what it could not do without major "tweakage." My copies of "Pure Visual Basic" and "Hardcore Visual Basic" are dogeared beyond recognition.

I was working at Microsoft when Beta 1 of Visual Studio .NET was first released. I installed it, and I ported over a source-code analysis tool that I had written in VB6. My first thoughts were that VB.NET was never going to replace my beloved VB6. The performance wasn't there, and some of the language constructs just seemed odd.

However, I kept working with VB.NET. I filed bugs against the Framework as I found them, but I kept hitting my head against the wall as my old VB6 coding habits were in direct opposition to how VB.NET wanted me to code.

Then, one day, I had an epiphany. The transition from VB6 to VB.NET requires a mental shift, the same mental shift that moving from DOS coding to Windows coding required.

I decided to try to learn VB.NET as its own language; not as a syntax-changed VB6, but as a revolution in how Windows programs were to be developed.

I used by old source code analysis program as my test bed. I learned how to properly handle Strings in a quick, efficient manner. I relished in how easy it was make custom controls. Calling into DLL's was significantly easier because I didn't have to make the mental shift from int to Long, short to Integer, etc. By the time VB.NET was released, my VB.NET version of the analysis program was running at triple the speed of the old version.

Now with Visual Basic 2005 getting unsigned types and operator overloading, I have all that I could possible want out of Visual Basic. I've got a first-class language on a first-class platform.

Paradigm shifts are difficult to handle. Not everyone was able to handle the shift from DOS to Win16. Not everyone was able to handle the shift from Win16 to Win32. You're hearing the dying wheezes of those who can't (or won't) handle the shift from Win32 to WinFX.

Evolution is difficult to watch, but those who cannot adapt to change become extinct. It is the way of the world.

Logic Has Prevailed!

You may recall Peer Larson, spoiled honor student and all-around schmuck. He sued the school district for assigning homework to be done over the summer.

Well, Milwaukee County Circuit Judge Richard Sankovitz on Tuesday called 17-year-old Peer Larson's suit frivolous and said his complaint should be directed at the school board. Evidently, he didn't talk to them first. He just got the homework, was upset, and sued. Here's the article.

Well, boo hoo for Peer. I hope this is a good sign that our court systems are returning to a more "common sense" frame of reference.

Weekend Goals

I'm a little under-the-weather, so I've scaled back my weekend goals. I wanted to get a lot more finished and working on RSEngine, my 3D engine written using Visual Basic .NET and DirectX 9, but I think the following is achievable.

My current goals are that by the end of this weekend, I'll:

1) Have maps rendering as well as characters.
2) Have noclip navigation through the map working.
3) Have local client/server messaging working.
4) Have screenshots working.
5) Have the project page created and uploaded to

I'll probably have the maps rendering by end of day Saturday, and the rest done on Sunday.

March 9, 2005

Scoble == Mini-Slashdot

Robert Scoble is the Microsoft-equivalent of Slashdot, in that people follow his links, but don't stick around for the follow-up.

On his main blog, he linked to a question I asked about the affordability of XNA Studio. In 24 hours, that blog entry received 537 hits.

I wrote a follow-up as soon as I found out that I had been linked. In the same 24 hour period, my reply received 29 hits.

Admittedly, this does not include people who read my feed, but it's still rather interesting.

March 8, 2005

Federal Usability

Please try to explain this to me:

Do not use spaces or periods.

This is from the National Do-Not-Call Registry website.

How much do you want to bet that determining the verbage telling people what characters not to use took longer than it would have taken for the coders involved to write code to correctly handle periods and spaces?


I've been having to deal with salesmen a lot more recently for a few reasons.

First off, we've moved and our new phone number hasn't filtered through the "Do-Not-Call" registry yet. You never realize how peaceful you have it, not having telemarketing calls for several months, until you lose that coverage.

Second, my wife went to a local "women's health fair." Now, she's got a salesperson coming by this evening. Why? We don't know. And when I say, "we," I don't mean the royal "we." I mean that my wife doesn't know why this person is showing up tonight either.

So I have to leave a little early tonight so I can be home and tell this person that we have no money because we just moved. My wife believes that no salespeople will take her seriously, and that I have to be the "heavy" for her. Unfortunately, I agree. I don't know what it is about my wife, but salespeople and the like listen to her and peg her as an easy mark. Even when she's calling customer service numbers, they won't help her at all. They'll just brush her off until I call on her behalf.

For example, she had a recurring charge on her Direct Merchant's Bank card being made by DMB. She was getting close to her limit, so she called and requested that it stop. They didn't stop it. She sent letters. They didn't stop it. I wish she had told me about this sooner, as she is now nearly $500 over her limit due to Direct Merchant's Bank continuing to charge her overlimit fees as well as the damn recurring charge! Of course, by this point, it's too escalated for me to do anything about it.


GCD 2005 Keynote Transcript


Ralh Koster had some interesting things to say. Too bad I couldn't be there to hear them. I love this quote, though...

We humans are also very good at seeing past the dressing. Games are dismissive of the ethical implications: the argument that games are teaching our kids to kill, for instance. The people arguing this are earnest people. I imagine philosophically people here don't necessarily agree with them but we have serious social concerns, yes? Here's the thing: ask a gamer about Grand Theft Auto's hooker moment, they see this: pac-man eating a cherry. They've grokked it: it's a power up.

Does that mean that when I run over pedestrians in Grand Theft Auto and Carmageddon, I need to start making "wokka-wokka-wokka" sounds? [grin]

The Hornet's Nest

Boy, I've really stirred up a hornet's nest with this one, based off of the E-mail's I have received... let's see if I can settle it down slightly.

Some people have commented that the tools are deductible, and that they're essentially "noise" compared to the total price ($5-10mil) of making a video game. True, they are noise, but they're upfront noise. For 99% of game developers, this is money that they have to lay out before they sign their contract. It's one thing for an enterprise developer to drop $2,000 for his toolset per seat to get started. It's quite another for a game developer to drop 5-15x that up front per seat. There's a reason that it's getting harder and harder for smaller studios to get into this industry, and you're seeing it here.

Some have said that the expenses are tax-deductible. True, but that's no reason to go spending everything you can. It's pointless to spend a dollar just so you can save 30 cents on taxes.

Some have said that Microsoft has no obligation to make it easier for developers to afford their development tools, and that is also correct. However, it is in their best interest to keep developers on their platform. Back in the Win32 vs. OS/2 heyday, Microsoft was giving away copies of the Win32 SDK because IBM was trying to make their OS/2 development kit a profit center.

Some have said that Microsoft is using the Express SKU to target the bedroom developer. True, but the interview made it sound like Microsoft was targeting XNA Studio at the bedroom developer, not their Express SKU.

Okay, waiting on the next set of comments...

(Update: To the gentleman who E-mailed me and said, "Just warez it," four words: piss off and die. If it's worth using, it's worth acquiring legally. I'm all for cheap alternatives if they can do the job right, but using warez is a bad way to start your company.)

Scoble, do the math...

Robert Scoble thinks that 5 discounted licenses with restrictions will solve the affordability problem for XNA Studio. Unfortunately, game development is a bit stranger than application development.

To break this down, let's look at the startup costs for a new developer who wants to make a cross-platform (Xbox/PS2) game.

Each developer is going to require an Xbox Development Kit, which runs approximately $10,000. Microsoft is nice enough to include a full licensed version of Visual Studio .NET 2003 with the purchase of your development kit. Each developer will also require a Playstation 2 Development Kit, which can run about $10,000-$25,000 each, depending on how you get it. That's just for the kit. The compilers and tools that you need to use are extra, and end up running about an extra $5,000 per seat.

Your art staff and quality assurance staff will each require both a PS2 and Xbox test kit. These run about $1,500 a piece.

Your artists will require the tools of their trade. Maya Unlimited was $16,000 a seat, but it's now just under $7,500. 3D Studio MAX costs about $4,000 a seat.

So, let's do the math for a small development team. Let's assume 4 developers, 10 artists (with Maya) and 1 excessively effective tester. That's $160,000 for the developers, $75,000 for Maya, and an extra $16,500 for the test kits.

That's $251,500. That's just for the necessary hardware and software to do their jobs. We haven't even gotten to the cost of their computer systems yet, or the server architecture necessary to support the massive quantities of assets involved in game development, or rent, or wages. (At a recent game jam, we created over 700Mb of assets in two days for a 2D shooter!)

Now, we've got 15 people who need XNA Studio. We'll be nice and assume that Microsoft will provide XNA Studio for the Xbox Development Kits. That leaves 11 copies left to acquire, with 10 of them only using it for asset management. That's another $16,500, assuming $1,500 a license.

Perforce is currently a standard for source control in this industry. Even Source Depot, which was in use internally at Microsoft for many a year, was based off of Perforce. Perforce runs $800 a user starting June 2005, meaning I can outfit all 15 employees with Perforce for $12,000. The more people that get added, the larger my savings and I get a proven source-control system instead of a Microsoft v1 Product. The proper licenses for Alienbrain would run just shy of $18,000.

Bug tracking? FogBugz 4.0 is only $99 a user. Bugzilla, which isn't exactly the most friendly piece of software on the planet, but still works, is free.

Things are even bleaker for the bedroom developer. The bedroom developer is limited to PC only, and generally is developing either game mods, freeware games, or portfolio pieces. He generally can't afford to go the licensing route, so he's going to buy a 1-year MSDN subscription to get the tools and let it lapse, or he's going to buy a boxed copy of Visual Studio. He's going to get the cheapest one he can, so he'll either buy Visual Studio 2005 Professional for about $1,500 and use Visual SourceSafe 2005, or pay for Visual Studio Express, use CVS or Subversion and have a substandard experience across the board.

I understand why Microsoft is targeting game developers, but remember that only 15% of games make money for the publishers, and less than half of those make money for the developers. While there is value in having Visual Studio installed on every one of the 15 machines in our fictional developer scenario above, we're already dropping a cool $250,000+ just to get started. Right now, I don't see the value-add we'd get for the extra cash per seat.

The real world is not like Microsoft where I could just pop up to the Products server and install what I need. Thanks to the BSA, we have to make damn sure that we pay for everything we use, or fines could be higher than our per-seat expenditure. To reduce our expenses, we need to cut where we can without affecting the quality of the end product. So sorry, Scoble, there's nothing I see about XNA Studio right now that makes me need to afford it.

(UPDATE 9:00am: That's what I get for posting before my shower...I missed an extra $16,500 for test kits. Test kits cost $1,500 per kit per platform, so that's a total of $33,000 for the test kits.)

March 7, 2005

Who I Am Not

I ego-surf on a regular basis in order to keep on top of how I am perceived by the Internet public-at-large. Unfortunately, "Michael Russell" is a fairly common name. If you don't believe me, ask Google or MSN.

So, as a public service to all of the other Michael Russell's out there, here is a brief list of the Michael Russell's that I am not.

I am not...
...a furry artist.
...a Sam's Club employee.
...a noted writer/illustrator.
...a research programmer. auctioneer.
...a marine biologist.
...CEO of an Australian radio station.
..."a uniquely skilled, versatile e-business and new media technology professional.". Um, that's not exactly descriptive.
...a 12-year-old boxer.
...a reverend.

So, which 10 people are you not?

Microsoft XNA Studio

Link: WorthPlaying, GamaSutra Interview

Let me see if I'm reading this correctly. XNA Studio will be Visual Studio 2005 Team System, plus the DirectX SDK, plus tools like PIX and some extra libraries and support for a "universal" asset file format called XIF. XNA Studio is meant to be a one-size-all tool for all members of a development team.

So here are my questions:

1) What kind of financial hit are we going to be seeing? Visual Studio isn't exactly cheap. Most studios barely have enough licenses for their developers. Given that the art tools generally run a good $5000+ per desktop, can you really see cash-strapped developers spending an additional $1500 per desktop just so that their artists can handle asset management? I can't.

2) Are we going to be forced to use XIF, or can we write our own view plugins to natively support our own file formats? So far, Microsoft does not have a winning track record with 3D file formats. What's the last retail game you can mention that shipped using the .X file format? Hell, at home, I just wrote a .MD2 loader in VB. In games, you quickly find that for your content people to do their best work, it's best just to work with their native format and convert where necessary.

3) Are you going to keep Visual Basic 2005 and C# 2005 in XNA Studio?

4) You say that you're targeting the "bedroom developer" as well. Just remember that bedroom developers are running on sub-4-digit budgets, not 4+-digit budgets.

Clean Windows

In the world of technology, nothing feels better than a fresh install of your operating system. Everything is so pristine and runs so smoothly.

Until you do a fresh install, you never realize exactly how much "cruft" is actually hanging around on your system. Everything ranging from copy-protection drivers that are hanging around even after the product they were protecting was uninstalled, to stray DLL's after spyware uninstalls, to temp files dropped in inappropriate folders, to system tray applications that don't want to leave.

It's a shame that it's so difficult to do a clean install nowadays. After backing up your necessary files, you format your C: drive and install Windows XP. Then, if it's been less than 120 days since your last install, you have to call Microsoft and verbally promise your first-born son to activate. Then you have to install the latest drivers and security updates for your software. Order on the drivers can make a difference as well. I know that on my home system, if I don't install the Hyperion 4-in-1 drivers before I install the latest Catalyst drivers, my video card runs dog-slow.

Then it's a matter of reinstalling the necessary applications. Office 2003 has the same "wonderful" activation requirements as Windows. Visual Studio .NET 2003 doesn't have the activation (thank god), but takes the better part of a day to install due to the slow-ass installer. (I started the install before I left for work today in hopes that it would be finished by the time I got home.)

There is one thing that Microsoft could do to make this process easier, but I don't think that they're going to do it. In Longhorn, give us the option of making a "driver recovery CD." We run the application, and copies of all of our current drivers are placed on the CD. Then, the next time we install Longhorn, it asks us if we have one of those CD's. That way, our SATA drivers, video drivers, etc., all of the drivers we need that don't ship with Windows...all will be installed for us automatically.

Nah...idea's too simple. Never happen.

March 6, 2005

Default Build Actions

Is there any way in Visual Studio .NET to change the default build action for an unrecognized file extension to "Content?"

I've been throwing together installers lately, and it's a bitch to have to traverse through my tree and look for the files in the tree that are not marked as "Content" so that they'll actually be included in the installer.

March 5, 2005

Small Update

I've just done a fairly large, if cosmetic update to the Comic Links page at I should be renewing my domain and webspace in about a month.

March 4, 2005

Microsoft MN-700 Router Issues

I've got a Microsoft MN-700 wireless router hooked up to broadband, and I've got a bit of an issue with it. Around the 6-8 hour mark of uptime, the damn thing locks up. Absolutely no traffic goes through it. No traffic to the cable modem. No traffic to the other computers on the network. Nothing.

To fix the problem, I have to unplug the router and let it sit for at least 15 minutes. If I plug it back in too soon, the modem light blinks, but the power light and wireless light stay off. If I leave it off long enough then turn it on, the power light turns orange for about 10 seconds, then goes green and all is good until the next time the damn thing stops responding.

Any ideas on a) what is causing the issue, and b) how to fix it?

To Kill A Mockingbird

This was sent around the office this morning, and I'm still sitting here thinking, "What the fuck?!?"

It's safe for work, but not your sanity.

I get to corrupt the young again, this time with unit tests!

In 2003, I got to speak to the SIGDA chapter at the University of Utah about quality assurance. On March 18th, I'll be speaking (along with my co-worker Chris Stark) to the SGDA chapter at UTD about unit testing.

I know that unit testing is not the most glamourous of subjects, but it is one of the basics that never gets taught in schools.

For those who don't know, a unit test is a programmatic test against a specific piece of code used to ensure correct functionality. A simple example would be testing the constructor to a piece of code to ensure that member variables are set correctly and returning the proper values. A more specific example would be testing loads and saves. The test would create a document (model, game state, etc.), save it, reload it, and compare the initial document (model, game state, etc.)to ensure they are identical.

Unit tests are vital to programming, especially when refactoring, doing integration work, updates and patches, essentially any coding work beyond the trivial.

Anyway, it looks like the meeting may be open to the public, so we hope to see at least some of you least, if you're going to be in the area.

March 3, 2005

Setting up a development tree

A decent (if occasionally cryptic and abbreviated) article on setting up a .NET Development Tree can be found here.

March 2, 2005

How To Improve MSDN Search

The MSDN team has been touting their new search engine, but I don't think a new search engine is going to help people find the stuff that they're looking for.

I'm probably going to be lambasted for this, but I'm going to say that the best way to improve MSDN search is to make the site a bit more "crawler-frieldly", have MSN Search add in a "preferredsite:" tag to filter MSDN search results to the top of the list, and point their search to MSN Search.

Why do I think that? As developers, we're already accustomed to using Google to try to find these answers, but the reason we stick with those tools is not because they make searching MSDN easier, but because our searches will often lead us to other people who either have the same problem, or more commonly, have solved the same problem.

By allowing us to see the work of others like that, Google has essentially become a communal memory for developers. When we can't find our answers through Google, we go to the newsgroups or the forums and ask our questions. Once an answer has been found, it's posted and our communal memory is updated on the next crawl.

The other nice thing about Google is that the answer I need is usually right at the top. The MSDN searches don't seem to have any logical ordering. I was asked recently if there was a way to tell in Windows if a requested memory allocation was made in system memory or virtual memory. I wasn't sure, so I decided to try MSDN's search. I typed in "did allocation come from virtual memory" in the search window.

My first three search results were from the Windows CE network driver development kit. Next up was how to make a stock allocation system using Visual Studio Tools for Office. Next were two copies of the same article on finding leaks and bottlenecks using Windows NT PerfMon. Finally, I got an article on analyzing logs from Exception Monitor to troubleshoot IIS. That's it. Seven results, none of which were what I needed.

I then tried the search through the new MSDN Search Beta. No results found.

I then did the same search through, using as an add-on to the query. BAM! 26 results, but none of them were what I needed.

So I do the exact same page into Google, and I get 98 results. The first hit was about the Virtual Memory Manager in Windows NT. It told me that it does not discuss the Win32 memory management API, but that did give me something else to look for. I did a site search via Google for "Win32 memory management API," and hit #5 was one of a three-article series on the internals of Win32 memory management.

I stopped searching at that point because I had a meeting, but the fact of the matter is that I have no motivation to use your search, and from the looks of it, I won't for some time, so quit your seperate search initiatives and work on bringing MSN Search up to snuff.

The Role of QA

There has been a lot of talk lately about the role of Quality Assurance in the software development process. Slashdot's headline goes so far as to say that QA does not equal testing.

Well, here is what I believe. QA consists of three seperate components: Observation, Reporting, Advocacy.

Observation is where you are looking at a component of the application. You could be observing the code, the requirements documents, the behavior of the binaries, even the users themselves. During your observations, you are recording what you see with as little bias as possible. At this point, you are merely collecting the data. This is where any testing is done, as you must often exercise the program in order to observe new behavior.

Reporting is where you analyze the data and give your results to those who can act on them. You could be saying that the requirements documents are not detailed enough, or you could be saying that pressing the "P" key causes the application to crash and the floppy drive to start leaking blood, or you could be saying that the user can't find the "New Document" command. QA also reports on trends. More people were able to use the feature this time compared to last, there were fewer bugs entered this week than last due to increased stability, we're running significantly slower for some reason.

Finally, Advocacy is where you stand in for the final user of your code. QA is the only department that has the user's best interests in heart. You must stand up for your end users, and in order to do that, you must understand your end users. Bring them in. Talk to them. Listen to them. Watch them interact with your product and with competitor's products. Then and only then can you be an effective consumer advocate.

As far as QA testing, I feel that QA is testing to find bugs that developers miss. Note: that is not, "QA is testing to find bugs." If your developers are not making an effort to debug their code prior to releasing it to test, no amount of QA will save you. If your developers are saying, "We don't have time to test," then they are either overworked and should have their task load reduced, or they're just incompetent developers. It's left as an exercise to the reader to determine which.

March 1, 2005

One Trillion Dollar Development Pyramid


I'm glad that I don't have the delusions of grandeur that are spoken about in this article. I know full-well that I'm firmly in tier 4 of the development pyramid. Usually, when I find myself reinventing the wheel, I take a moment and browse through the frameworks I use, and find several wheels in various shapes, sizes, colors, treads and scents.

In game development, however, you've got to have a pretty decent mix of tier 2's, tier 3's and tier 4's. Your tier 4's end up doing the grunt work of getting things to work right, and your tier 3's end up writing the helper code to make their work go quickly. Your tier 2's are your engine gods.

Let's take 3D pathfinding, for example. It's not exactly the easiest thing in the world to make happen. Getting a character from point A to point B on a 3D mesh is like trying to get a blind drunk man to walk from New York to California using only, "You're getting warmer," and "You're getting colder," as commands. It's not exactly easy. If you've got a tier 2 guy working on it, you're in heaven. If you've got a tier 3 guy working on it, it's going to work. If you've got a tier 4 guy working on it, you'll be lucky if you ship within the next seven years.

Let's take level scripting as another example, specifically making it so that a door opens when a button is pressed. Your tier 2's would be making the engine properly handle vis cases when the doors are open vs. closed, stream in the geometry as needed, etc. Your tier 3's would be making the open/close functionality exposed to your scripters. Your tier 4's would be writing "open door" commands in script, or making it happen automatically in the level editor.

Point is that all coders have their "tier," but the best coders are the ones who have the drive and desire to move up a tier. I'd love to move up to tier 3 eventually, but right now my drives and desires are sending me down a different path.