June 30, 2007

The One Way To Save By Testing Late

Most of you know my views on when you should be testing. You might say I've experienced a bit of grief over my views, but they're fairly well founded and backed by documented evidence. However, there is an exception to the rule...there is in fact one case where a company can save money by not testing from day one. For most companies it won't be a significant savings, and the savings are beginning to vanish, but it does exist.

The one circumstance where you save money by testing late is if you cancel it during the prototype phase. If your company is smart enough to spend some time and money by letting a small team prototype out their game or application prior to doing any real development, and if your company does the right thing by not allowing any code or assets from the prototype to make it into the production tree, then you can save a lot of money not just on testing, but on an entire team. Once the prototype is "green lit," that's when you enter pre-production and should add at least the test lead.

Sadly, many companies have scaled back on prototyping. They're going straight from licensing to full production with little to no time spent making sure that the game is fun first, and as a result we're getting nothing but carbon copies of franchises built on the buggy codebases of yesteryear.

In the past, many game publishers would cancel nine out of every ten titles they worked on before the first whiff of them ever got out to the public, and that's the way it should have been. It's cheaper to spend $100,000 and cancel it once you know it's not fun than it is to spend $2,000,000 on the game and another $13,000,000 on production and marketing just to find out the same thing.

Now some of you may have noticed the caveat of not allowing anything from the prototype into the production tree. That was intentional. A prototype is essentially a house of cards...a facade showing the potential of the final product. Most are built as such. Memory bounds checking is never to be found, no consideration is made as far as making it run on multiple machines or platforms, the restrictions of the platform aren't taken into consideration, etc. It's not a very stable foundation to build a winning product on top of. The point of prototyping is to find what works and take the lessons learned while making the prototype to heart while making the final product, not to short circuit the preproduction process.

So the question you need to ask yourself now is this: Does your company cancel enough products to make it cost-effective not to test from the beginning?

June 28, 2007

Another .NET Job Opening

Total Immersion Software has openings for .NET tools deveopers.

It's tools only for now, but it's still getting .NET closer to mainstream game development, and every step forward in that respect is a good thing as far as I'm concerned.

They're Heeeere....

My copies of "PC Gamer UK" with the article I wrote arrived today.
I'll post a link as soon as they put it on their site.

The Hermitage

The biggest downside of crunch time is that if you want to stay focused so you can minimize your crunch, you have to isolate yourself in large part from the rest of the world.

I'm usually on MSN Messenger, but for the past while it's been shut off so that it won't distract me. Outlook pop-ups? Disabled. BlackBerry is on silent but checked every once in a great while. I check my external E-mail during lunch and that's about it.

For someone who is used to interacting with others, the self-imposed walls can be stifling.

On the upside, the end of the hermitage is in sight. I should be able to do an "end-to-end" system integration test tonight, then a dash to migrate older code to use the new system.

My granddaughter will be down here in two weeks, and I want to make sure that she's able to see her grandfather during the three weeks that she's here. Schedules can be extended, but a childhood cannot.

June 27, 2007

.NET Game Dev Opening

If I lived in the United Kingdom, I'd be all over this Senior .NET Game Developer position like a teenage celebrity on anything that would make rehab a viable option for the next six to eight weeks.

June 25, 2007

Yippie-Ki-Yay, Viral Marketing

If you're going to do some viral marketing, this is a good way to do it. (Slightly NWS for language and a half-second blurry clip of a topless female in the background from the first "Die Hard" movie.)

It's always kind of a giveaway when some of the video clips of the new movie weren't used in any of the publicly released trailers to date and are in high-enough quality to seem like direct feeds, eh?

June 23, 2007

Bug: WPF Scaling

After reading through "Windows Presentation Foundation Unleashed," I was pretty much ready to start working in WPF, but there's one thing stopping me.

Font scaling horked in WPF

The games that ship with Vista were redone to use WPF. However, all of the text included in them is horizontally stretched.

If WPF isn't even working right in the built-in apps, do I really want to use WPF for my business applications right now?

June 21, 2007

H1-B Scammers

Back when I was laid off, I felt lucky that I had three jobs to choose from at the end of a two week period.

After seeing this video, I feel even luckier.

Salt Lake Games Roundup

If you ever worked for Microsoft Game Studios in Salt Lake City, Access Software or Indie Built Studios, post a link to your website or blog here and I'll update the post.

Here are a couple to get you started:

Les Oswald
Kevin Carter
Chris Okelberry

I'd like for this to be a living post. After all, what good is the Internet if it can't keep you in contact with the people who are important to you?

Ill-Gotten Gains

I watch Technorati to keep up on who is linking to my blog. It also inclues a handy meter and summary page which I rather like.

Over the last couple of weeks, my rank has skyrocketed from around 190,000 to around 50,000...but there's one problem with that. It's not going up because of me.

Back in January, I was one of Blogger's "Blogs of Note." Recently, some hardcore blog spammers have started including links to "Blogs of Note" in with their spam to not only make it harder to automatically detect the spam, but to make it look like their posts are linking to other appropriate places.

So in this case, I'm getting something I don't deserve. My previous legitimate peak was around 80,000. So if I've passed you because of these schmucks actions, I apologize. I'm not trying to...I'm just getting dragged along for the ride.

June 20, 2007

Asked and Answered

I wish stuff like this worked more often, but it's been documented to fail more times than it's been documented to succeed.

The main problem is that there are four different motivations for piracy, and the "ask them to stop" approach only works for one of them and does nothing to stop the distribution of the copies that are already out.

The first (and the one this works for) is the altruistic pirate. These guys believe that the reason software doesn't make any money is that it doesn't have enough exposure, so their goal is to drive adoption of the software. Unfortunately, the closest actual market you can look at to compare this to is the shareware market which has average conversion rates under 0.1%. The number of sales generated really won't offset the loss from units downloaded from people who don't share your motivation.

The second is the "Robin Hood" pirate. They steal from the (perceived) rich, give to the (perceived) poor. If they can make some extra money to help them survive in pricey neighborhoods, all the better.

The third is the angry pirate. The company in question made some sort of perceived slight towards them, so they're just going to crack and distribute the product to "punish" the company. The product could have been priced too high, the game may not have been long enough, the game may have not supported one of their video card features, the boxart may have been entirely the wrong color of blue, it doesn't matter. He's upset, so the company is going to pay because their customers won't have to.

Finally, it's the challenge pirate. These are the guys who crack the new protection methods, or find new ways to crack the previously uncrackable.

Unfortunately, "asking them to stop" won't stop the last three groups, and they're significantly more plentiful.

(Update: Fixed the typo. Thanks Sarkie.)

June 19, 2007


There was a link recently on MSNBC to a SomethingAwful article about wikigroaning. "Wikigroaning" is when you compare the Wikipedia coverage of a useful popular entry with the depth of coverage of a nerdy obscure entry, according to the article.

Here's my donation: Buffalo x 1 vs. Buffalo x 8.

Do you have any you want to add?

June 18, 2007

Bound By Decisions

Ozymandias has a fairly interesting post up about Sony's Playstation Network attempting to compete with Microsoft's Xbox Live and how the lack of planning is going to hurt Sony. If he only knew the half of it.

Now first off, I'm going to be talking about some fairly straightforward numbers here and everything I talk about is currently out there on the net if you feel the urge to do any searching.

Let's start with the base memory layouts of the PS3 and Xbox 360.
Xbox 360
Unified Memory
Playstation 3
System Memory
Video Memory
No big deal, right? Both basically have the same amount of memory. The 10Mb of EDRAM is only really used for render targets, depth/stencil buffers, and so on. (If you are interested in some additional information, look in the XNA Game Studio Express Edition documentation under "Predicated Tiling.")

Now, the memory difference between the two actually doesn't amount to much on the surface. While the Xbox 360 is able to decide how much memory is going to be used for the frame buffer, textures, models, etc., the PS3 has a very set memory footprint for those items and it works quite well for developers to know what their footprint can be.

The catch comes with the operating system. While GameSpy was recently mocking Microsoft for having a 100 friend limit on Xbox Live, there was a good reason for it. Microsoft is operating under a bit of a memory crunch on Live. The entirety of memory set aside for the Xbox operating system is a paltry 32Mb. All of the Xbox OS, including Live, the associated textures, the buffers necessary for holding the data from the Live service, the hypervisor that the games run on, etc....everything fits into 32Mb of memory.

On the PlayStation 3, it's a bit worse. Their OS takes up 64Mb of memory. That's the XMB, OS, kernel, everything. That's 25% of their system memory, compared to just over 6% for the Xbox operating system.

Even that isn't that big of a deal. The Core processor architecture lends itself to smaller applications running in parallel, so the system is more focused on keeping the smaller cores active, plus being able to rely on the presence of a hard drive has led to some virtual memory systems being created so that for the most part, the memory headache isn't being felt.

But that isn't the part that is going to hurt Sony. The part that will hurt Sony is what they allowed early developers to do. Xbox Live worked on the 360 because it was seamless, but on the Xbox, games had to give up memory to have the Live feature set. Because of this, it wasn't as seamless, it didn't work on all titles, etc. (Sounding familiar?) On the PS3, you'd think with 64Mb of memory reserved for the kernel, they wouldn't have to sacrifice memory for the sake of the PlayStation Network.

Well, the catch is that because of some allowances, Sony can't rely on the kernel being loaded. Sony allowed developers to swap out the kernel and use that memory for their games. Most kernel functionality is inside static libraries that apps can swap in and out, and games that take advantage of this allowance simply swap in the kernel in the rare instances when they need it.

So this generation, the best Sony can hope for is an Xbox 1 experience where some games are network-aware. As part of the next generation, I expect the two systems to have network systems that are on par with each other, but for this system, Microsoft wins the network.

That said, Sony doesn't have to win the network to win the war. They just have to win the games and the gamers. With the limited penetration of broadband in the United States, coupled with what appears to be more reliable hardware and the PlayStation brand name recognition, Sony still has some advantages. As long as their PR strategy doesn't further alienate gamers and developers, they could stay in the game.

Only time will tell.

(Update: Typo corrected thanks to GameQABlog.)

Shack Songs (Say So Much)

I went to the Shack today to see the new layout unveiled.

One of the bugs associated with the rollout was several older posts showing up as dated in December 1969. So, I threw together a quick parody song to the tune of Bryan Adams' "Summer of '69."

Evidently, Google likes it.
My song as the description for Shacknews on Google.

June 17, 2007

I Would Walk (50 Miles)

As many of you know, I don't drive for a variety of reasons. I actually like the relaxing commute that I have now using the train and bus, and I've managed to get my one-way commute down to 65 minutes from end to end. It's still enough time for me to get a lot of reading done and some coding (although it's difficult to get myself into a C++ mindset and code for any significant portion of that trip, so it's usually C#/XNA work to tide me over).

But even so, there is still a significant amount of walking that is done on a daily basis. For the Hell of it, I've started tracking my distance over the last few weeks using a pedometer. Even though my average stride length when I'm walking my normal speed is about 36 inches, I've been using a 30 inch stride when doing my distance calculations to account for slower walking at times and "false steps."

Turns out that I walk approximately fifty miles a week. During the week I average about six miles a day, and about ten miles a day on the weekends.

The last time I did this experiment was back in Utah and at the time I was only walking about forty miles a week. That was partly because I didn't have as far to walk to board my mass transit options, partly because I had much more sedentary jobs, and partly because Layton was a significantly smaller city so I didn't have as far to walk when I needed to get to places.

As a quick side note, my blood sugar is (finally) close to under control. My morning blood sugar is still a little high (I'm averaging about 135 mg/dL) but my pre-meal glucose is around 100 mg/dL and my after-meal is between 130-140 mg/dL. That's even with a reduction in my glipizide from 7.5mg to 5mg. Next step will be to reduce my dose to 2.5mg and see if I can keep the sugar in check. If I can, there's a very good possibility that after my surgery at the end of August, my diabetes could go into remission and I may even be able to get off of the glipizide altogether. Here's hoping.

June 16, 2007

Post #900, Relevance Rising

A lot has happened in less than six months.

Since post #800 back in January, my issues getting paid have been solved, I was brought on full-time, I've had a column published in "PC Gamer UK" (although I still haven't received my copies and I'm not sure when the column will be posted on their site), I've been interviewed on Shacknews related to used media legislation and been contacted by lobbyists looking for more information to stop laws like this, I've started, stalled out on and am slowly resuming progress on a certain Source mod, I was diagnosed with Type II Diabetes and found that the cause in my case may be something stupid like having a desk whack my nose and crack my septum back in September, and more.

I still haven't finished my Automated Games QA series of posts. You're allowed to call me a slacker bitch for it. In some ways, I deserve it.

A few interesting events over the last week...I had three different game development companies contact me about possibly rejoining the industry. One is looking at me as a QA Manager, one is looking at me as an XNA/MDX/C# programmer and one is looking at me as a Producer. I guess there are benefits to being multitalented as well as sticking it out in an industry for over seven years.

Well, here's to hitting post #1,000 before the end of the year.

June 15, 2007

Fate Conspires...

Sorry about the lack of delays this week. I'm being slightly more selective now that I know that I have people in the same building that are reading this...

My wife has been in discussions to bring my granddaughter down from Utah for the last three months like we have for the last two summers. Yesterday, she finally had the dates locked down, but we had to order the tickets before midnight to lock in the cheapest rates. So, I spent last night ordering airline tickets for her and my granddaughter.

This morning, everything went to shit. My wife called me in hysterics at work. She looks forward to Kait's visits more than just about anything, and they were just pulled out from under her.

I called Expedia within 24 hours to try to cancel the tickets (to take advantage of their one-time-only courtesy cancel), but found out that since they were paper tickets and the tickets had already been sent, they would have to charge me over $500 to cancel the round-trip tickets.

In short, we would get back absolutely nothing. Needless to say, I'm not thrilled right now.

On the upside, the next post will be number 900. Whee.

June 13, 2007

Rebus and Culture Gaps

I've noticed that the rebus seems to have gone the way of the dodo for the most part, having been replaced with the emoticon. :(

I guess part of it is that many symbols that we use no longer have common names.

I was helping another coder here debug code earlier, and I told him to insert a "bang" at the beginning of a clause. He looked at me quizically and said, "Bang? What's that?" He's had the same reaction to me calling an asterisk a "splat."

Most people get ones like:

I ♠ your cat.

I can see some causing issues, like:

I ♣ baby seals.

...doesn't mean the same if you read it as "I shamrock baby seals."

Others depend on your pronunciation in order to get them, like:

I ♦ your arms tonight.
(Hint: Think 80's popular rock.)

What other types of jokes or means of communication that were popular in your youth have gone the way of the telegraph?

June 11, 2007

Day 06: Productivity Strikes

Today was probably my most productive day in awhile.

By 10am, I finished up the discount system.

By 10:30am, I found a contractor who could do what we needed him to do at a reasonable price. He starts tomorrow.

By 11:30am, I finished initial coding on four new web services for an external partner.

By 1:30pm, I finished the cart page and the cart portion of the checkout page.

By 3:00pm, I fixed a goofy bug with an older web service where members who had status changes weren't having that information propogated out to external partners.

By 4:00pm, I finished the web services and their unit tests.

At 4:45pm, I published a build to our development environment so our external parters could work with the new web services prior to them going live.

In the middle of all that, I managed to fix seven bugs, and I bookended it by reading 160 pages of "Windows Presentation Foundation Unleashed" during my commute. It starts out damn slow because it has to establish a lot of new ways to do things, but I'm glad it did because things are now beginning to "click."

June 10, 2007

IE6 Issues

I've had reports of some issues with the site and IE6, specifically the background and sidebar never appearing so that the site is next to unreadable.

I've seen it happen on occasion in IE7 if the CSS is unable to download for whatever reason.

Personally, I think it's kind of funny that it's happening given that the template is almost a stock template from Microsoft Expression Web.

If this does happen to you, try holding the shift key and clicking the refresh button, or clear your cache and try again.

If you have any idea why it would be happening, or have a suggested fix, please let me know.

(Update: Seven E-mails and a comment later, yes, it's horked. I'll work on getting a new template up this week. Thanks to everyone who checked.)

(Update Update: I've made some changes to the style sheet. Seems that having really long words in my titles can cause the CSS to whack out in IE6...so I just changed the sizes of a few elements in the CSS to prevent it from happening. I need to make a few more updates to handle some older oversized graphics in old posts, but that's it. If it still looks horked in IE6, please let me know.)

It's the Platform, Stupid!

I've continued to read up on this TestDriven.net controversy. I've read Dan's slightly incorrect analysis, a tech writer's take on the matter, another analogy that doesn't quite cut it (think more asking in English for an interpreter [through the Property grid] and then talking in French to the back end)...but it seems to me that everyone involved is missing the overall point...in the long run, the integrity of Visual Studio doesn't matter. It's all about the platform.

Microsoft's development tools as a whole amount for a fraction of a percentage of the income for whatever division that they've been in. In short, the income derived from them is the financial equivalent of line noise. What Visual Studio does do is indirectly drive sales of other Microsoft platforms: Windows, SQL Server, Exchange Server, etc.

Over the last while, I've grown to see what the Express SKU's have been doing...generate a new community for Microsoft. To be fair, the hobbyist community that has surrounded Microsoft's products hasn't always been using legal products, but these SKU's have helped grow the community in a legal manner. This larger community has helped slow defections over to F/OSS technologies.

Other teams have started to build on that popularity. The XNA team has partly succeeded in their aim of bringing game development to the masses. They've even started to build a market around add-ons that go along with XNA Game Studio Express Edition. Yes, that's right...a market in add-ons for a SKU that isn't supposed to have add-ons.

The biggest difference between the XNA team and the Visual Studio team here is their goal. The XNA team doesn't care about the Express SKU...they're using it as a gateway to build their platform. The Visual Studio team is under the mistaken impression that their SKU's are the platform.

Microsoft makes money by making it possible for ISV's to make money building solutions that use Microsoft products. Technologies like .NET, DirectX, XNA, managed code SQL Server stored procedures, all of which either work solely or best with Microsoft technologies. The primary tool that enables ISV's to build solutions is Visual Studio.

My advice to the Visual Studio team would be to stop trying to make themselves more than they are. Quit trying to figure out how to trickle down features to try to get upsells and spend more time trying to figure out how to prevent some of the most common complaints about the platforms. Moves like the one against Jamie only make people wonder if they're going to need a lawyer on retainer to develop against Microsoft technologies.

June 8, 2007

Day 05: Bad Case of the Fridays

Spent the morning catching up on E-mail. After going through all of the automated error E-mails from the time I left yesterday to when I got in, found and reproduced eleven unique issues and got them entered into the bug database. Then proceeded to fix nine of them.

During lunchtime, ran over to Barnes & Noble and picked up a copy of "Windows Presentation Foundation Unleashed" so I can start coming to terms with the replacement for GDI. I chose this book because of a recommendation from that filty pirate, er, fine upstanding digital citizen over at "Coding Horror."

Finally, I spent most of the afternoon staring at the same block of code with a bit of a brain fog. I guess I had a bad case of the Fridays.

While I had lots of starts and stops during the week, I ended up about a half day ahead of schedule on the multicurrency project.

On Monday, I've got interviews with two potential contractors, one major integration meeting, and some use cases to finish.

Search Oddities

I use AWStats to keep on top of my traffic here. It's kind of funny...even though I'm not in games anymore, I'm still pushing out tons of traffic (about 1Gb/month on average). About 80% of my traffic is to older posts, though, so I thought it would be funny to do a quick analysis of what has been bringing people here up through the end of May.

- The top 5 keywords that bring people here are "xna", "sin", "vista", "episodes" and "vacation".

- My top 20 keyphrases are "castaways vacation club", "romsteady", "hotmail", "xna engine", "michael russell", "xna content pipeline", "katamari rom", "d3dx_24.dll", "openal vista", "beachcomber vacation club", "xna camera", "pyramid head", "beachcombers vacation club", "d3dx_", "vista openal", "quake 4 font", "beachcombers vacations", "sharpziplib add file", "romsteady blog" and "pc gamer issue 175".

- Last month, the number of search queries looking for answers about what happened to "SiN Episodes" finally reached parity with the number of queries looking for pirated copies of "SiN Episodes." The number of people who are looking for fixes for the U4 Labs bug in the pirated copy still outnumber both queries by a factor of 2:1.

- The most viewed archived page on the site in May was about my left toe.

- Wikipedia still drives tons of traffic back to my commentary on "Hot Coffee."

- Most linked visits to my site come from Shacknews, the Steampowered Forums, Ritualistic and CSMania.ru.

- There has been a sharp increase in referral spam over the last few months. Referral spam is when people blast sites with fake referral URL's to try to get people who read their logs to go look at resumes or casinos or hosting companies.

- There is one page on my site which has more pageviews than any other over the lifetime of the site...the Top 10 Signs That You're Dating A Tester.

- After this, only seven more posts until I hit #900.

Real-Life Bugs: Ad Typos

People wonder how bugs slip into games involving gigabytes of assets and millions of lines of code, but people never stop to wonder how typos can slip into three or four lines of written text in a television ad...

June 7, 2007

Day 04: Sick

I'm afraid that I may have a small head cold, so I'm leaving work a little early.

Last night's build dramatically reduced the number of server errors we were seeing, so I'm happy about that.

I finished up the base cart, the glue code between the cart and checkout pages, and got a lot of the discount system in place.

I also managed to fix two bugs (some of the code associated with one of those fixes was posted earlier today), but I have one more issue involving our comment system that I need to fix tomorrow.

Tonight, I just want to get some sleep.

How To Catch HttpRequestValidationException

If you've worked with ASP.NET for any length of time, you have worried about how to handle the Yellow Screen of Death. You know, the one that says:
HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client...
or something similar.

The common refrain is turn off request validation, but there are times when you want to use the built-in validation functions. You just want a friendlier error for your user.

Most people try to catch the exception in their Global.asax Application_Error handler, but it acts like it can't catch it. The reason? Your request must be completed before the Application_Error block finishes, or the Yellow Screen of Death will appear again.

Here is some code that will generate a slightly more user-friendly error page. Feel free to extend it or use it as you will.

void Application_Error(object sender, EventArgs e)
Exception ex = Server.GetLastError();

if (ex is HttpRequestValidationException)
Response.StatusCode = 200;
<html><head><title>HTML Not Allowed</title>
<script language='JavaScript'><!--
function back() { history.go(-1); } //--></script></head>
<body style='font-family: Arial, Sans-serif;'>
<p>I'm sorry, but HTML entry is not allowed on that page.</p>
<p>Please make sure that your entries do not contain
any angle brackets like &lt; or &gt;.</p>
<p><a href='javascript:back()'>Go back</a></p>

(Update: Fixed an HTML entity issue; also fixed layout for people using IE6.)

June 6, 2007

Day 03: Caught Up (Mostly)

This morning was spent getting a production build ready to push out tonight and getting it into testing. Because of how long clean builds take, I managed to keep up on my personal E-mails and blog for a bit.

I took my fifteen-minute break to walk over to Whataburger, grabbed my lunch, brought it back to my desk, and coded while I ate. As a result, I managed to finish the cart module and started updating the use cases for the stored procedures I'd need for the data tier. I would have finished them, but two bugs made their way into the build and I had to spend my last hour finding them, fixing them and verifying the fix.

That wouldn't have been so bad, but the recruiters we have been working with sent over a tray of cookies. Fresh, soft cookies. Unfortunately, my blood sugar has been a bit out of whack lately due to a mild cold...so even though normally I could work my carbs to the point where I could have one, I couldn't risk it today.

I managed to dash out and barely make my bus home, and you always know you're in for an interesting trip when from outside the bus you hear the shrill, loud voice of someone who may or may not be...um...lit.

Tonight, I'll be trying to finish my use cases to hand them over to the DBA, finish refactoring the cart/checkout screen interactions to match up with the minor changes made to the design, propping the build, and overall just trying to relax.

As a side note, I'm beginning to question the usefulness of compiled workflows for Windows Workflow Foundation. Long story short, trying to find a decent way to handle upgrading workflows without affecting existing workflows is the equivalent of trying to find your favorite grain of sand on a beach...possible, but time-consuming. I'm considering moving to a XOML-only system and reading in the workflows at the time I create the workflow.

All I Ever Need To Know About Testing...

A former manager of mine sent me a link to an article over at StickyMinds.com about the relationship between lessons learned in kindergarten and testing.

There is one exception to this list that I can see, though.

Mr. Copeland says:
If you find a defect in someone's work, first tell him informally, personally, and discreetly.
It's a great sentiment, but if it's in the code, document it before you do so to make sure that you don't forget.

Update: Fixed link. Thanks, Andy.

Useless Science: How Much Does The 'Net Weigh?

Discover Magazine posted an article where they briefly estimate how much the originating packets for all internet traffic for one day weighs.

The answer was a little surprising, and the article was humorous.

Now to get back to writing my two ten-thousandths of a quadrillionth of an ounce of code for the day...

Show Me The EULA

After reading about the TestDriven.NET controversy this morning, I opened up my recently installed copy of Visual C# 2005 Express Edition and read through the EULA again to see if I could see a place in the EULA where we agree not to extend the Express Edition.

I couldn't find it. Can you?

I haven't had a chance to check the EULA in the Visual Studio 2005 SDK itself...could it be in there?

Update: It looks like it's section 9 of the EULA.
You may not
• work around any technical limitations in the software;
Now, I understand where Microsoft is coming from. The Express SKU is a freebie, and is intended to help create a new pool of developers who will hopefully purchase their full products. But they made many blunders leading up to this...

1. They didn't compile out the functionality for Express to consume add-ins. Obviously, they did that so that they could create Express add-ins themselves, but still...

2. They restricted unit testing to their highest-level SKU's. Given the emphasis that most developers are placing on unit testing nowadays (myself included), it would make more sense to breed a unit-testing mentality into developers from the beginning. Even Benjamin Nitchke's "Professional XNA Game Programming" preaches the importance of unit testing from almost chapter 1.

3. They kept requesting that their legal demands be kept secret while at the same time being vague until the last minue about which clauses were being violated. If I have an agreement with you that you are violating, and I call you on the violation, you have every right to ask me what part of the agreement I'm violating. You even have the right to ask others for legal advice as to whether or not what you are doing is truly a violation. Unless the initial agreement itself is sealed with secrecy clauses (which the Express EULA is not), you even have the right to go public.

4. The law may not be on their side. There have been numerous documented attempts to stop people from reenabling features of hardware that had been crippled (such as Bluetooth in cellphones, enhanced features in digital cameras and even extra features on CPU's), but to date not a single effort at suppression has been successful that I'm aware of in the United Kingdom. If the reintroduction of a removed wire trace on the underside of a processor isn't seen under British law as a "technical limitation," why would the reintroduction of a registry key be seen any differently, especially in a country where corrolaries between hardware and software seem to be drawn regularly in software-related court cases?

Regardless of the outcome, this is fascinating to watch. If you want to keep up to date, here's Jamie's blog.

June 5, 2007

Day 02: The Leash

I spent the morning interviewing more potential contractors. I find it astonishing how many people that contracting firms are trying to push out at over $70 an hour who can't do even the most basic tasks associated with their advertised platform (in this case, C#/ASP.NET). My prescreening questions are culled from the first 150 pages of "ASP.NET for Dummies." Really.

One guy told me, "I enable ViewState on my web services so that they won't crash." What the Hell?

Inbetween interviews, I refactored the pricing module for the new multicurrency system so that it would not only allow per-currency fixed pricing, but also allow staff to purchase on behalf of someone else without changing their own currency settings.

At lunchtime, I finally received my leash...er, my BlackBerry.

Spent most of the afternoon refactoring the cart code to match up better with the design for the workflow server, and did most of the pre-work for the new build that has to go up tomorrow evening.

June 4, 2007

Project Day 01: Mostly Wasted

This morning, a contractor was supposed to start to take some of the load off of me so I could really focus on the multicurrency work. The contractor took a full-time job late Friday, which left me in a bit of a lurch. As a result, I spent most of the day outside the multicurrency project.

On Friday, a last-minute requirement change left me scrambling to redesign parts of the application. The original design was to have everything be U.S. dollars under the hood, and convert the price to Canadian dollars or Euros on the fly based on exchange data that we'd query from an external web service once every 4-6 hours. We were doing this so that we could easily switch from one currency to another on the fly. However, a requirement was added to allow static prices for other currencies on a case-by-case basis. So instead of using U.S. dollars for everything, we've made a bit of a shift. All items require a U.S. dollar price, and if a dedicated price doesn't exist, we use the older codepath. Otherwise, we flip to the dedicated price.

Currently, I'd say I'm about a half a day behind.

June 2, 2007

Real-Life Bugs: 3-in-1 Recycling

Up in Plano, they are fairly proud of their recycling program. They even have bins set up around their downtown shopping area where people can sort and recycle the items that they're carrying.

Only problem... (Mouse-over for the answer)
All three slots lead into the same bag, so the recycling slots serve no real purpose whatsoever.
A make-busy job created for the sake of recycling isn't a high-quality job by any stretch of the imagination. A cheap harness hooked up to allow multiple bags and let the recyclables be truly pre-sorted would cost very little to make and pay for itself fairly quickly.

For more information, check out the "Recycling" episode of "Penn & Teller: B.S.", and in the interest of equal time, here is a rebuttal of that episode, and another partial rebuttal.

(Update 6/3: Added additional tag to the image to allow mouse-over text in other browsers...in other words, to fix a bug in my "real-life bug" post. Also added some explanation.)

June 1, 2007

Under the Knife and Under the Gun

On August 30 at 6:30am, I'm scheduled to have surgery to correct my nose problems. They'll be doing a septoplasty and turbinate surgery.

I could have had it scheduled for earlier, but the next six weeks are a period of major development at work. We're shifting from a "one-and-a-half" tier architecture (not quite as bad as this, though) to a pure three-tier architecture, adding in multicurrency support, shifting to using Windows Workflow Foundation for our extended duration workflows, and all in all rearchitecting a lot of the cruft that has built up over the last few years.

Now, I know I've been neglecting this blog over the last two months, so I'm going to try to make it up over the next six weeks. I'm going to try to do one post per workday talking about the progress that has (or has not been made), talking about the lessons learned working with this technology, and possibly sharing code snippets as well.

I'm also working on some code samples at the moment to post related to XNA. One that I'm putting the finishing touches on right now are how to load your assets on a seperate thread, as well as run your game logic on a seperate thread. Where possible, the code samples will be posted in both VB.NET and C# versions.

Thank you for your patience with me, and stay tuned.