Tuesday, November 14, 2006

Marine Christmas Poem

The embers glowed softly, and in their dim light,

I gazed round the room and I cherished the sight.

My wife was asleep, her head on my chest,

My daughter beside me, angelic in rest.

Outside the snow fell, a blanket of white,

Transforming the yard to a winter delight.

The sparkling lights in the tree I believe,

Completed the magic that was Christmas Eve.

My eyelids were heavy, my breathing was deep,

Secure and surrounded by love I would sleep.

In perfect contentment, or so it would seem,

So I slumbered, perhaps I started to dream.

The sound wasn't loud, and it wasn't too near,

But I opened my eyes when it tickled my ear.

Perhaps just a cough, I didn't quite know,

Then the sure sound of footsteps outside in the snow.

My soul gave a tremble, I struggled to hear,

And I crept to the door just to see who was near.

Standing out in the cold and the dark of the night,

A lone figure stood, his face weary and tight.

A soldier, I puzzled, some twenty years old,

Perhaps a Marine, huddled here in the cold.

Alone in the dark, he looked up and smiled,

Standing watch over me, and my wife and my child.

"What are you doing?" I asked without fear,

"Come in this moment, it's freezing out here!

Put down your pack, brush the snow from your sleeve,

You should be at home on a cold Christmas Eve!"

For barely a moment I saw his eyes shift,

Away from the cold and the snow blown in drifts..

To the window that danced with a warm fire's light

Then he sighed and he said "Its really all right,

I'm out here by choice. I'm here every night."

"It's my duty to stand at the front of the line,

That separates you from the darkest of times.

No one had to ask or beg or implore me,

I'm proud to stand here like my fathers before me.

My Gramps died at ' Pearl on a day in December,"

Then he sighed, "That's a Christmas 'Gram always remembers."

My dad stood his watch in the jungles of ' Nam ',

And now it is my turn and so, here I am.


I've not seen my own son in more than a while,

But my wife sends me pictures, he's sure got her smile.

Then he bent and he carefully pulled from his bag,

The red, white, and blue... an American flag.

I can live through the cold and the being alone,

Away from my family, my house and my home.

I can stand at my post through the rain and the sleet,

I can sleep in a foxhole with little to eat.

I can carry the weight of killing another,

Or lay down my life with my sister and brother,

Who stand at the front against any and all,

To ensure for all time that this flag will not fall."

"So go back inside," he said, "harbor no fright,

Your family is waiting and I'll be all right."

"But isn't there something I can do, at the least,

"Give you money," I asked, "or prepare you a feast?

It seems all too little for all that you've done,

For being away from your wife and your son."

Then his eye welled a tear that held no regret,

"Just tell us you love us, and never forget.

To fight for our rights back at home while we're gone,

To stand your own watch, no matter how long.

For when we come home, either standing or dead,

To know you remember we fought and we bled.

Is payment enough, and with that we will trust,

That we mattered to you as you mattered to us."

[Edit: I got a comment, supposedly from the author of this poem, asking for attribution. I obviously don't have any way to verify his identity, but I also don't want to steal anyone's limelight. So, here it is.]

The poem is actually entitled "A Soldier's Christmas" and was written by Michael Marks on December 7th, 2000. The works of Mr. Marks have been featured in the Washington Times, hang in the Titan Missile Museum, and are featured on the International War Veteran's Poetry Archive at http://www.iwvpa.net/marksmI know, because I am Michael Marks. LCDR Giles simply forwarded my poem long ago and had his email signature appended at the bottom, later misinterpreted as an authorship attribution.Could you PLEASE edit this post to include "Michael Marks, copyright Dec 7, 2000" before the kind comments by LCDR Giles, as the error gets copied and sent along. Thanks for helping me clear this up!Warmest regards,Michael Marks

[End Edit]

PLEASE, would you do me the kind favor of sending this to as many

people as you can? Christmas will be coming soon and some credit is due to our U.S. Service men and women for our being able to celebrate these festivities. Let's try in this small way to pay a tiny bit of what we

owe. Make people stop and think of our heroes, living and dead, who

sacrificed themselves for us.

LCDR Jeff Giles, SC, USN

30th Naval Construction Regiment OIC,

Logistics Cell One

Al Taqqadum, Iraq

Great training class

For the last day and a half, I've been attending a class on threading in C#.  The class is taught by Jeffrey Richter, one of the partners at Wintellect.

This is an amazing class.  I feel much more prepared to write asynchronous code now.  I've been taking a lot of notes, and will be posting a few new posts on how to do multi-threaded programming.

Stay tuned!

Monday, November 06, 2006

Are you a code mercenary?

Last week, there was some discussion on blogs about what motivates developers to work.

Rob Walling presented the argument that there are things he values more than money.

Today, Dennis Forbes presents his argument that he's definitely in it for the money, and so are most of us.

I proclaim that I am a mixture of both points of view. Money is important to me, obviously, or I wouldn't ask about salary when I get new jobs.

I would say that money is not the only thing that is important to me, or even the number one priority, though. I've got data to prove it, too.

I can't share the data with you, however. Give me a call if you're curious.

Sunday, November 05, 2006

The funny thing about lists

In my family, we have gotten tired of having no idea what to buy each other. All of us, spearheaded by my beautiful wife, signed up at this cool site, TheThingsIWant.com, and created gift lists.

This way, everone else knows a bunch of things that we want, and can basically pick something at random off the list, and be assured that we will enjoy the gift.

I don't know about other people, but I don't put anything on my list, unless I really want it. So, literally, anyone who knows me can pick an item completely at random from my list, and I will like it. Even if they think the present is boring, I will enjoy it.

It's funny, though. No one seems to want to use my list. Luckily, they contact my wife, who always has great gift ideas. Certainly makes me wonder why I spend the time putting things I want on my TheThingsIWant list, though.

Friday, November 03, 2006

My sentiments exactly

WO Fay, who is a combat artist in Iraq, generally posts some good stuff on his blog.  Sometimes, I disagree with the strength of his position. I think that's just a factor of my being out for several years, and him being at war.

Wednesday, though, he posted something that perfectly matches my own opinion.  Go read it.  Then and Now

Wednesday, November 01, 2006

My mind has been blown today

I'm sitting in a performance engineering class today.  There was a guy who came in right before the class started, and was on the waitlist.  He managed to get a seat, because some people didn't show up.

This guy, of course, chose to sit right next to me.

45 minutes later, this guy has not once moved his hand away from his nose.  He has been snorting every 10-15 seconds since he sat down, and for the past two minutes, has been digging around in his nose.

To be fair, I don't think he's picking his nose; it appears that his nose is bleeding.  But still, get a damn tissue, dude.

Monday, October 23, 2006

Some more remote desktop subtlety

If you are remote desktop'ed into a machine, then your clipboard is synced between your local machine and the remote machine. So, if you copy some data from a text file on the remote machine, you can paste that data into the local machine, and vice-versa.

This is not true, however, if you daisy chain your remote connections, as in the previous post.  Your local machine and machine A will be synced, and machines A and B will be synced, but you can't copy from machine B directly to your local machine.

What I do to get around this is to copy from B, then create a new text file on A. Paste the data from B into the text file, then copy the text from A, and paste it onto your local machine.

Or, you could save the data to a text file from B, directly onto your local machine's C drive, using the technique in the previous post.

Going a bit further with Remote Desktop

Phil Haack pointed us all to a blog entry by Steven Harman, which shows how to automagically map your remote drives to your remote desktop connected computer.  I'll go one step further.

Let's say you're remote desktopped into Machine A.  You are all super cool, now that you've read Steven's blog post, so you have easy access to your local computer's hard drive.

But, let's say you need to remote desktop into machine B, which you can only do from machine A (due to network limitations).

How do you map your local machine's hard drives all the way through to machine B?

It's simple, actually.  On machine A, in your remote desktop window, map a network drive to \\tsclient\c (if the c drive is the one you want mapped).

That drive should show up with a letter now, probably close to 'Z', unless you changed it during the mapping.

Now, if you remote into machine B, after following Steven's advice, you'll see a drive similar to 'Z on TSClient'.  That drive is actually the hard drive of your local machine, visible to both machines A and B.

Take note, however, that file operations to your local drive through a daisy-chained Remote Desktop connection will be noticeably slower than usual.

Thursday, October 19, 2006

2005 Yamaha R6(Raven) for sale

As much as it pains me, I have to say good bye to my baby. The wife and new daughter aren't too happy with the idea of me joyriding around on two wheels anymore, so it's got to go.

Here are the stats:

2005 Yamaha YZF-R6
Raven (black)
~3500 miles


Modifications:
semi-flush front turn signals (the lights protrude about 1" from the side of the fairings, but are the flush style of lights, not the stockers)
integrated rear turn signals
silver to black Micron slip-on exhaust
removed rear fender
flush license plate lights (bright white led)
hard wired garage door opener (currently wired for Genie doors, easily changed for other doors)

I am the only owner of the bike, I bought it new in Daytona, Florida, from Jim Walker Suzuki-Yamaha. I have all of the original paperwork, as well as all maintenance records.

All scheduled maintenance has been performed by certified Yamaha mechanics, on time per the schedule. Additionally, I did an extra oil change at 200 miles, just to be safe.

The bike is a lot of fun to ride, and really in great shape. It's been garaged since the first day I bought it. Currently, the bike is garaged at my house in Redmond, just 10 minutes or so from Main campus. I'm available any time to show the bike to interested parties.

I'm asking $7199 OBO.

I have a HJC helmet which matches the bike, XL, included with the bike, if it fits.

I also have a size 46 Alpine Stars TZ1 leather jacket for sale, $200. It's the black and grey color scheme. http://www.alpinestars.com/moto/jackets_tz1jacket.html

I'd appreciate it if you would share this information with anyone you know that is looking for a bike.

Tuesday, October 17, 2006

VSTT: Service Background

I just realized that I've been talking about OfficeLive, but I haven't given you any idea of the user load I'm testing for, or what our performance goals are.

The most used part of our system is a user registration database.  This database is used by OfficeLive, Office Online, and Office 2007 online registration.

The user estimates for all of these services combined is approximately 70 million users over a 1 year period, which equates to 5,833,334 per month. This equates to ~2 users added every second. This number is just an average, though. We have to test to our system to our peak load, not the average load.

Our stress tests have tested our system to 2500 concurrent users.  We estimate that we will be able to support triple that number in production, based on the resource utilization we see with 2500 users.

Building a system to support 70 million entries in a database system comes with a huge set of challenges. I'll continue to share the problems we face, and the solutions we find, as we conquer them.

Monday, October 16, 2006

VSTT: Working with a test rig

In VSTT, you will quickly find the need to generate large numbers of concurrent users.  Generating this level of load will be impossible with a single machine.

VSTT enables this through the use of a "test rig".  You can read the MSDN documentation, on MSDNWiki, here. You might even notice a community comment by yours truly on the wiki site.

Basically, the way it works is that you have one boss machine, called a controller.  The controller works with zero or more worker machines, called agents.  These machines are associated together during installation of the Team Test Controller and Team Test Agent. Both are available on your distribution media for VSTT or VSTS.

Once you have the agent and controller software installed in your test rig, you're ready to generate massive amounts of load.

Now we get to the interesting part.  How do you know how many users you should simulate? It is best to start with a clearly defined goal for the number of concurrent users your software or service should support. My suggestion is to start a load test with half that number of users. Then, you can use a step based load pattern to gradually increase that number of users, until you reach your goal level.  I believe it's a good idea to make your steps as large as you can.

For instance, if you are going to supoprt 1000 users, and you're running a 10 hour test, start with 500 users. Use goal based load pattern, and set your step amount to 100, and the step duration to 90 minutes. This will cause you to reach your target of 1000 users at 7.5 hours into the test.  That allows you to test each step long enough to see if there are problems with the new load level. You will also get to test at your target load level for 2.5 hours, which will provide you with a good baseline for future testing.

If your test fails at any step, you can start a new test, and test at that user level, or slightly below it, and begin to narrow down the reason for your test failing.

The only caveat is if your test fails because you run out of resources on your agents.

In one part of the OfficeLive service, we started testing at 500 users.  We gradually increased the number of users from 500 up to 2500. Once we started to get closer to the maximum number of users we thought we could support, we started changing to a goal-based load pattern. We set the goal based pattern to monitor one of our SQL backend machines, and to adjust load until the processors were at 90% utilization. Every time, however, our test would fail shortly after passing 2500 users.  The test failed because we were running out of memory on one of our agents.

You have two options if this happens. If there is a particular agent that is causing you problems, you can adjust the load weighting for that agent, so that it gets fewer users assigned to it.  If however, all of your machines are low on resources, you have reached the limit on the number of users you can simulate, and, consequently, the amount of load you can place on your system.

In our case, all of our agents run out of memory, so we have found that running with more than 2500 users, on our particular hardware, is not possible.

Hopefully, I've shed some light on how to determine the maximum load you can generate, given your specific hardware assets.

VSTT: Custom counter sets

When you are building a load test in VSTT, you can specify sets of counters to be collected as a group. VSTS provides a bunch of default counter sets, like ADO.NET, and IIS, and SQL.  Those counter sets are great for default programs and installations.

If your service or application, like mine, creates and publishes custom counters, you may find a need to create your own counter sets. Once you've done so, you will almost certainly want to share those counter sets among your colleagues.

If you look in Program Files\Microsoft Visual Studio 8\Common7\IDE\Templates\LoadTest\CounterSets, you will see several .CounterSet files.  They are XML files (with a really easy schema), which define what counters and instances should be collected.

If you edit a custom counter set through the UI, you should find a new file in that directory. 

If you don't want to deal with the UI (it can be slow), then you can create the xml file directly.  This will enable you to build the custom counter sets as part of your build process, or part of the development process.  Manipulating the XML is shockingly easy, due to the simple schema.

You can then check that file into your source control (you are using source control, right?), and all your buddies can copy it to the correct directory on their computer.

The next time they start VSTT, they will see the counter set in the UI, in the list of available counter sets, and can map those counters to computers that you will be monitoring in your load test.

Announcing a new series

The next post will be the start of a new series.  I'll be writing about some of the lessons I have learned while working for Microsoft, helping to build and test Office Live (www.OfficeLive.com).

I will be focusing on stress testing web applications and services, using the tools included with Visual Studio Team Edition for Testers.

First some terms and acronyms. I will abbreviate VS Team Edition for Testers as VSTT. You can also use Visual Studio Team Suite(VSTS). The load  and web testing framework included with VSTS and VSTT is called Ocracoke internally to Microsoft.

Ocracoke is the name of an island in North Carolina, where VSTS was built.

So, stay tuned, and hopefully you'll find some use from these posts.

Monday, October 09, 2006

Upside-down respect

I noticed something at the MSFT company meeting a couple weeks ago that totally shocked me.

During the company meeting, most of the really high-level executives gave a speech.

I was sitting surrounded by a bunch of people who have been MSFTies much longer than I have (most of the company has been there longer than I have). When the executives started speaking, and the demos were over, most of the employees around me kind of tuned the execs out. They speak corporatespeak, like all executives, and most peons I know don't care about corporatespeak.

There were two exceptions. The one that didn't surprise me,and shouldn't surprise you, was Steve Ballmer. SteveB is a madman, and he single-handedly raised the energy level in the entire baseball stadium.

The second one really surprised me. In every other company I have ever worked for, the HR chief was the least listened to person in the company. HR types generally speak a language that not only do peons not care about, but which irritates them.

Lisa Brummel, on the other hand, is different.  When Lisa came out on stage, the entire stadium quieted, and you could sense the interest that people had in her words. Most of the guys around me leaned forwards in their chairs, as if to hear her better.

One of the more senior guys around me made an interesting comment, and one that I have never heard applied to any HR rep at any other company I've worked at. He said something to the effect of "I respect Lisa Brummel more than any other executive at this company". That is a shocking statement, applied to an HR chief.  More shocking (at least to me), is that I agreed with him.

Today, there is an article in the Seattle Times about Lisa Brummel, and some of the changes she is driving. The changes she has introduced have been met with some confusion, as us peons learned how they affected us. However, once we had some meetings about the new changes, everyone I've spoken to was extremely happy about the changes, and basically all said something like "about time".

Thank you, Lisa Brummel, from all of us peons.

Wednesday, October 04, 2006

More Vista happiness

The screenshots I include with this post don't exactly match the story, but you'll be able to figure it out.

I was messing around with XNA on Vista the other day, and realized something.  I created a new folder, and the icon for that folder was the generic, "I'm a folder" icon.

Then, I put a picture in that folder.  I half expected the folder's icon to change, such that it showed that there was a picture in the folder.

However, what I didn't expect, and was pleasantly surprised to learn, is that the icon was changed in a way that matched the actual picture in the folder.  The picture is a blueprint of a porsche 550. You can see, in the icon for that folder, the outline of the blueprint image, and can definitely see that the icon reflects what is in the folder.

In another folder, I added a couple of items. The icon for that folder showed that there were two items in the folder. It gets even cooler when you have subfolders.

This is going to be a huge timesaver, once we can get our heads wrapped around all the extra information that is in the icon.  Looking for a picture, but you don't remember where you put it?  Just breeze through the folder icons, and you've got a chance to find it.  Can't remember which folder you put that distinct word doc in? Check out the folder icons to find it.

The more I use Vista, the more I like it.

Taking a tradition too far

Traditions are fun.  I'm a big fan of traditions, especially ones that are humorous in some way.

Here at Microsoft, on your anniversary, employees traditionally put one pound of chocolate goodness (M&Ms are very common) outside their door for every year they have worked in the borg.

We have a guy on our team, Mikky, who has been at Microsoft 15 years. Today, there are 12 pounds of M&Ms outside his door (the last three pounds are in his office; they wouldn't fit in the bowl).

This is definitely a funny example of a tradition that has been taken too far.  Personally, I would have tried to find denser chocolate, so the 15 lbs wouldn't be so large.

Congratulations, Mikky.  We sure are glad you've stuck around so long.

Several updates

The guy who writes one of the blogs I read on a regular basis, the Daily WTF, is starting a new business.  He's going to create a type of job board, but with a new (at least as far as I know) twist.  He's going to advertise the jobs on blogs, using a format similar to google adwords and such. Phil Haack is jumping on board, too.

I am totally interested in this, and want to get on board (the bloggers who do the advertising get paid).  To that end, I'm going to start posting more frequently, and more of my posts are going to focus on technical issues and challenges, especially using .NET.

For the meantime, I'll be focusing on stress/perf testing, and also on game development using XNA.  Since XNA is finally in beta, I can post some code samples and such, and start gettting the word out about it.  I've started an XNA game, so expect to see more about that.

Also, I've been contacted by the Coding4Fun guys about writing a series of articles or two about XNA and game devlopment.  I'm going to partner with another Microsoftie, Jason Cahill, to build a game over a series of articles.  We just started talking about it yesterday, so I don't have a lot of details, but I do know that we're going to build a tic-tac-toe game. We wanted to choose a game that nearly everyone would already know how to play, so we could focus on the development challenges, and not defining or explaining a lot of rules.

I'll keep you posted on our progress there, and I'll probably put up some entries dealing with the issues we face getting that to work.

Saturday, September 23, 2006

Some super cool Vista features

I've been using Vista for a while now on my laptop and second desktop at work.  I don't actually use those machines very often, which is why I haven't mentioned my experiences with Vista up to now.

At the company meeting Thursday, they highlighted some features that I think are absolutely amazing.

When you click the Vista Ball to pick a program, you can just start typing the name of your program. So, for instance, to open Live Writer (which I'm using to write this post), I hit the little button, then typed 'writer'. When the Windows Live Writer shortcut was highlighted, I hit enter. Live Writer opened up, and I started typing. This doesn't seem important until you get a bajillion items in your start menu (Mike). You can do a full 'contains' search on your entire program menu.

The second feature that amazes me is the Reliability Monitor. This is an amazing feature for network admins. I am shocked that MSFT hasn't pushed this feature more in the news and in marketing messages. We are getting beat up in the press all the time, but we don't talk about these little features that our customers are going to love. The reliability monitor keeps track of all types of system failures and such.  That's not too amazing, the great part is that it also keeps track of all installations. So, when your mom (or father-in-law) calls you and tells you that her computer suddenly got slow for no reason, and started crashing, you can go back and see exactly what she installed that caused the problem. I think this feature is going to blow the socks off of all the network admins in the smaller companies around the world; I certainly could have used it while I was doing that job.

Exceedingly good movie

Courtney and I just finished watching Running Scared. I expected this movie to be the standard Paul Walker action flick; light on acting ability, heavy on fun and explosions.

The movie was shockingly good. There were twists and turns right until the end.  The kid from Ultraviolet was in the movie, and he had the worst possible 24 hours. The movie was really well done, and Courtney and I highly recommend it.

Wednesday, September 20, 2006

Some amazing artwork

I got a link sent to me at work today.  There's a Marine Warrant Officer who has done some amazing artwork, which will be featured in the new Marine Corps Museum.

Check it out.  It's really poignant.  http://mdfay.blogspot.com/

Pilgrimage

On November 10th, 2007, I will be making a pilgrimage.  Where, you ask?  Here: http://www.faircount.com/web04/usmc/index.htm.

If any of you other prior service Marines want to join me and my family, drop me a line, and we'll organize bit of a reunion.

Tuesday, September 12, 2006

Send a message of thanks

Courtney found a super-cool site on the net. Xerox is sponsoring a program to send a free postcard to our troops overseas. All you have to do is pick the postcard you want (all were originally drawn by kids), put in your name and hometown, and pick a message. Let's all do this.

http://www.letssaythanks.com/Home1280.html

Friday, September 08, 2006

Well, duh

This post is in the spirit of Courtney's series of posted IM conversations.


 

Courtney says:

I'm brining Shawn home

will you please tell him?

Cullen says:

are you bringing me home?

Courtney says:

no, you rode the motorcycle

Cullen says:

oh yeah. forgot that


 

Sometimes, I shock myself with my own stupidity.

Tuesday, September 05, 2006

Gulping the drink

Ever since Courtney's post on Gulping the Drink, I've realized something.

When I drink water, I always gulp the drink. Good thing I rarely pour Mike a drink, huh?

Thursday, August 24, 2006

How much is enough?

Recently, there has been a lot of talk among tech bloggers about open source projects, and contributing to them. Phil Haack has sounded off about this subject a lot lately, as have most of the bloggers around, including me.

So, I decided to give back a bit. I've started my own open source project, with one of the guys at work. And, I've decided to help with integrating Wix into Visual Studio more. And, I've decided to help with a game that an acquaintance recently made open source. I've found and filed a couple of bugs with SubText, and made a couple of feature requests.

Both Wix and the game have a model where the guys that are running the project don't allow you direct access to the source control system until you have proven that you are committed, and that you know your stuff.

Here's the question: How many bugs do you have to find & fix before you're cool enough?

I've submitted a couple of help fixes/updates to Wix, and submitted several bug fixes to the game (4 bug fixes and 1 feature addition, actually). Currently, I have to submit my changes to someone on the team that has commit rights to the source control system, and let them actually do the submitting.

For Wix, I definitely feel like I'm not at the point yet where I need to be given commit access.

Yesterday, while working on HA!, I found several times that I was being hampered by not having access to the TFS database. For example, I'd like to refactor some of the code, to make it easier to navigate and make the design more OO. Ultimately, I'd like to shelve a changeset that has all the refactorings complete, and let Chris look over the changes, and approve or not. Right now, that would entail manually uploading each file that changed to CodePlex, through a not-great interface, including a comment with each file upload. Poopy.

How many more bug fixes do I need before I get checkin rights? We'll see what Chris has to say, since he reads this blog. Btw, Chris, I don't have your email address, or I'd have just emailed you today, and asked for access; plus, I think this is an interesting question to ask the coordinators of open source projects. What is the barrier to entry as a contributor?

Saturday, August 19, 2006

Irritating Malware - Family should read this

Courtney's computer recently got infected with a really irritating virus.

Every time she opened IE, she got a warning that her computer might be infected, and she should run a "system integrity scan wizard".

This is ironic, because the infection she had was the program that was offering to scan her computer, and remove the infection.

Here's how you get rid of it. Be really careful if you do this.

Start-Run
Type regedit, and hit enter
Go to HKEY_CURRENT_USER/Software/Microsoft/Windows/Current Version/Run
Look for a program on the right side that is just random letters stuck together, ending with .exe. In Courtney's case, the path (value) for this program was under c:\documents and settings\local settings
Write down the full path to the file, and pay particular attention to the filename.
Hit Ctrl-F
Type in the file name, hit enter
Every place you find the name, hit the delete button, to remove the reference.

Then, go to the folder that you wrote down, and delete the .exe file that you just removed from your registry. A restart, and everything should be fine.

Tuesday, August 15, 2006

Final SpaceRocks! update

Yesterday, I decided to stop development on SpaceRocks. I have learned pretty much everything that I can learn from that project, and am at the point of diminishing returns. I implemented nearly every 1.0 feature, and some of the 1.5 features.

The game has definitely been a success for me. I spent less than the target 80 hours in development, and have a playable game (albeit with crappy graphics).

Why is development stopped you ask? I'll tell you.

  1. I really feel like I've learned nearly everything that I can from the game. I'm ready to start on a 3d project, so I can learn the hard stuff.
  2. With the release of the XNA beta, I'm going to start work on a new game, that will be built via XNA, allowing it to run on XBox and PC.
  3. There is no way to monetize SpaceRocks. In addition to being one of hundreds of clones, I'm pretty sure there would be licensing problems if I tried to sell it.
  4. My dad made a request for a game several years ago. Back then, I couldn't conceive of how to build what he was asking for. Yesterday, during the keynote at GameFest, I thought of a game concept that mostly provides what he was asking for, while also having the potential to be a money-maker. At least, a money-maker if you consider that my dev costs should be near zero.

If those aren't enough reasons for you, try to convince me otherwise. As far as I can tell, no one ever actually played the game. I'd be totally willing to open source the project, if any developers are interested in contributing to the game, and building it further.

If you are a developer, and would like to see the source code to the game, just let me know. I'd be happy to provide it to you.

GameFest Report

First off, let me tell you, MSFT knows how to throw a conference. They provided breakfast, lunch, drinks, snacks, and even free ice cream! The lunch food was amazing, and who doesn't like free ice cream?

There are a lot of cool-looking games coming out from MSFT Game Studios. I am particularly happy about seeing Shadowrun come out. They also advertised Forza2, Call of Duty 3, and Gears of War, as well as several others that I'm not as excited about.

There is at least one really disturbing game coming out. Dead or Alive Extreme 2. I am convinced, after seeing their trailer, that they have more than one programmer working full time on physics simulation for boobs. Theoretically, this is a beach volleyball game. Most of the 4 minute trailer focused on boob shots, and slow-mo running and jumping. These guys were clearly inspired by Baywatch. It's shocking how many of the 'volleyball' players in this game have DD boobs. All of them move in very realistic ways when the girls jump and wrestle and giggle. This game is clearly targeted at the 14 year old boys who need spank material, and dirty old men.

Most of the sessions at the conference were good. I attended a couple of boring ones, and one that was worthless. I went to a hands-on lab(HOL) that used PhysX (a physics modeling package). The HOL didn't have any directed activities. They showed us three demos, and then said "ok, go ahead and play with it". Guess what, if we don't have this product, we don't have any idea how to use the product. Dumb ass.

We got some decent swag; a cool laptop bag, and a 1GB USB key that contains all of the slides from the conference pre-loaded.

MSFT announced XNA studio, which will be in beta in Sept. The full version will be available holiday 2006.

In addition, Garage Games has ported their Torque game engine to C#/XNA, and will be releasing TorqueX along with the XNA release. I am super excited about this; TorqueX will be the first commercial .NET game engine (that I'm aware of), and if it's as good as Torque is supposed to be, then I'll be a happy developer.

MSFT is also working on Live Anywhere, which brings the XBox Live experience to pc games, and allows for cross-platform multiplayer gaming. Shadowrun will be the first game that supports cross-platform gaming. They also talked about a version for smart phones. The use case they gave was modifying your Forza2 car from your phone, and playing on your XBox/PC later. That is certainly exciting.

There has been a ton of good information about developing for Vista. I learned all about how to get your game to show up in the game explorer, and capitalize on the rich user experience that Vista provides.

Garage Games gave a talk about how to be successful selling downloadable games for the PC and the XBox. They should know; they wrote Marble Blast Ultra, which is the highest revenue-producing game on XBox Live Arcade. I talked to them about getting a beta of the TorqueX engine. They were all super nice guys, and very easy to talk with. It seems like they brought their whole company to the conference. I know they have several devs, two co-founders, and the CEO here.

I got to meet Rico Mariani today! He's a MSFT architect that is responsible for CLR performance. He has an incredibly interesting and useful blog, Rico Mariani's Performance Tidbits. I highly recommend it, if you are writing managed code and want performance.

Apparently, GameFest is a good draw for getting a diverse crowd. I sat down for lunch today with 5 or 6 guys from Garage Games, and one Microsoftie. About 20 minutes later, they all left the table. I was prepared to sit and stare at the looping game ads for the next 45 minutes, when a young woman asked if she could sit next to me. Turns out that she is one of the like 5 female game developers in the world. As many of you already know, most developers are younger men, with limited social skills, and sometimes interesting odors.

In addition to being a female game developer, whose husband is a Bungie game developer (meaning he works on Halo), Heidi also worked on a game that I totally loved; MechCommander 2. I mentioned that I really liked the interface of MC2 a lot more than the original, and she casually mentioned that she wrote that. How cool is that? I met someone who actually worked on a shipping, commercial game, which I totally enjoyed playing. I think I'll have to reinstall MC2, and play some more, in honor of Heidi.

She also mentioned that they might be looking for a tools dev in the future. Remember that, Matt; if you're mean to me, I'll get a job at a game company, and manage to avoid the high pressure game development at the same time.

I'm waiting now for the hands on lab for Direct3D10 shaders to start. This particular lab is going to be useful for me, since my next game will have to use shaders for lighting and such. XNA is not, as far as I know, going to support the fixed function pipeline, so I have to figure out how to implement lighting and particles and a bunch of other stuff in shaders.

Tuesday, August 01, 2006

Too much?

You people know me. Is this t-shirt too much? It's the ultimate inequality.

Monday, July 31, 2006

Using a ContextMenuStrip with a TreeView, my approach

Mike Hillyer posted an entry on his blog that was very useful to me.

I've implemented the same basic thing, but I think I did it in a way that is a little cleaner, and saves some cycles. There are two catches with Mike's implementation: 1) is that the TreeView MouseClick event is fired anytime you click anywhere in the TreeView; not just on a node. 2) is that you can't cancel the action. Users expect to be able to cancel a mouse event by holding down the mouse button, and moving the mouse off of the control. (you can experiment with this yourself. Open any MSFT program, and click-hold on an ok button. Then drag off the button, and let go of the mouse. The ok will not happen).

Rather than catch the MouseDown event, I am catching the NodeMouseClick event. That only fires when a node gets clicked, and the event args include a reference to the node that was clicked. Since it's a mouse click event, it honors the drag off the control to cancel idea.

Here's the code:


private void tvMachines_NodeMouseClick(object sender,
TreeNodeMouseClickEventArgs e)
{
tvMachines.SelectedNode = e.Node;
}

Totally funny

Do you ever get the feeling that people are stealing your wireless? I did, once. More likely, have you been stealing wireless? Read this article. Some guy was having his wireless stolen; rather than lock down his network, he decided to screw with the folks stealing it. You can skip most of the text; to see the results, check out the pictures at the bottom.

Upside-down-ternet

Thursday, July 27, 2006

A Hero Passes

One of the most inspiring military men I've ever heard of died yesterday. Carl Brashear, who was immortalized in the movie Men of Honor, died in the Portsmouth Naval Hospital. Chief Brashear was the first black Navy Diver, and the first black Master Diver. His story has always touched me; it's sad to think that he won't be here anymore, to inspire young servicepeople.

Email

Are you frustrated by not having a desktop client (like Outlook) to use with your free hotmail account?

Are you tired of dealing with Outlook Express 6, which was released three eons ago?

Do you wish you had a current, flashy little mail client, which integrated with your hotmail account, and your messenger account?

I've got the solution!

Check out this post, where the Windows Live Mail team announces the beta release of Windows Live Mail Desktop (it's basically the next version of Outlook Express).

Monday, July 24, 2006

Vystar Credit Union – The worst bank ever

No matter what you might be thinking of doing, don't do business with the worst bank ever. I have many reasons for saying that they are the worst bank ever.

I had accounts with the worst bank ever for 7 years, from 1999-2006. I cannot tell you how many times I was embarrassed or irritated by them. Here's a list of the worst offenses:

  • If you deposit money in your checking account, and then try to use your checkcard, be careful. The check card balance is about 2 days behind your checking account balance. Several times, I was in line at a store (like the Borders on Southside), and the visa wouldn't work. I can remember at least two times when I just walked out into the parking lot of the store, and used an atm to withdraw the money from my checking account, and paid with cash
  • You can only get some money out of an ATM. There's a daily limit of $570 on atm withdrawals from your account. So, if you are on vacation, and want to splurge a bit, but need cash, tough tittie. When we were trying to pay our deposit, we ran into this problem. There aren't any branches of the worst bank ever anywhere in the world except Jacksonville, FL. So, we couldn't go to the bank to get our money, and had to visit the ATM every day for several days, and take out the max each time.
  • In the move, and switching bank accounts, two withdrawals came out of my worst bank ever checking account, causing my overdraft protection to kick in. We sent them a check (to the tune of $200+). Today, I tried to close my account. They told me I couldn't because of an outstanding balance on the overdraft account. The balance was $2.29. Two dollars! I'm certain that I paid Vystar more than $2,000 in interest over the years I had a car loan through them, and I'm sure they've made thousands off of interest from my deposits. Keep in mind, I was a loyal customer for 7 years, despite the irritations.
  • When we went to buy a new car the last time, I contacted Vystar, since I had a car loan through them already. I had never been late on my loan payment, or any other payment to Vystar, in 4 years. They told me they couldn't finance me. No big deal, I'll get financing through the dealership. The dealership got me financed with a local credit union. Vystar (the worst bank ever). So, when I came to them as a loyal, long-term customer, they couldn't help me. When I came as an anonymous car buyer, they were all ready to give me a loan.
  • They let our information be stolen! I received a ton of phishing attacks in email, from people impersonating the worst bank ever. Here's my question: how did the phishers know I was a customer of the worst bank ever? The worst bank ever let some hacker steal a couple thousand customer emails. God knows what else was stolen.

I realize there are a lot of the same links in this post (worst bank ever). I'm trying to see what I can do to get Vystar as the #1 search result if you search for worst bank ever. If you'd like to help me with this project, just link to the worst bank ever, with worst bank ever as the words in the link.

Dumb bastards.

Sunday, July 23, 2006

High Scores

I completed the backend of a SpaceRocks! feature tonight. I created a high score system that will work for any and all of my games. I haven't done the UI yet, but I added another task item to the project plan for UI work at the end.

Here's a link to the project plan, in case you don't have it bookmarked.
http://cullenwaters.blogspot.com/2006/04/revisiting-spacerocks-plan.html

Wednesday, July 19, 2006

Giving back

I feel like the software development industry has provided a lot of opportunity for my family to be happy and successful. In general, I try to live by the idea that if a group helps you out, you should do something to help that group out in turn.

The way that works in the software industry is generally to get on an open source project. For those who don't know (and don't want to read the linked entry), open source software is software that is developed by volunteers, and provided for free to the community (meaning anyone in the world who is interested in the problem the software addresses).

The ideal (at least for me) is to find an open source project that deals with a pain point that you experience. For me, that pain point is software installation. The setup builder that comes with Visual Studio is nearly useless, and the commercial applications that address the problem are all really expensive for cheapos like me.

I'm not the only person who feels this way. There's a group at Microsoft, started by a single guy, who build a tool that makes good setup authoring available to the masses, for free.

I've decided to start helping with this community effort. I contacted Justin Rockwood yesterday, and asked how I could contribute to making Wix work better within Visual Studio. He sent me a long email that detailed his ideas for where the Wix VS integration is headed. Today, he posted nearly the same thing on his blog.

I'm going to try to contribute to a hierarchal designer that shows the features, components, and files/registry keys and their relationship to each other, and the Richer IntelliSense support. This post serves as my dibs on those projects, at least for getting them started. So there, I beat you to it.

This is the thing that is going to consume some of my Tuesday evenings. See honey, there's an altruistic, nice, well-thought-out reason for me to contribute. You thought I was only doing it because I think it's cool.

Too many links?

Apparently, I've been putting too many links in my recent
blog
posts. Sorry about that.

Excellent Excel 2007 resources

I have been reading a blog about Excel 2007 for about a year now. There was a bunch of really good stuff in the blog, but very little of it was useful on a daily basis; it was mostly stuff that I am interested in because I totally dig the new UI.

Yesterday, the author started a new series of posts about how to use Excel 2007 on a daily basis. Those of you that have the beta should check it out. Those that don't, go download the beta, and then check it out. Or, I guess you could check out the blog first, and see why you should go download the beta.

It's the Excel 2007 blog.

Adventures with Subtext

As you know, last week, we set Courtney up with her own blog (http://Courtney.CSquaredComputing.com).

When Courtney came to be asking about setting up her own blog, the first thing I thought was "Hey, cool, now I get to play with SubText". I have considered moving my blog to SubText for some time, but I don't want to break my permalinks. I still think about it at least weekly, but haven't yet decided to do it. There are a couple of people who link to my blog, so moving would cause them problems.

Anyway, back on track (I'm digressing, here).

I went out and downloaded SubText, and ran through the web-based installer. Pretty painless process, actually. There were two manual steps, which isn't ideal, but is pretty close, and damn good for an open source fork of an open source project.

The first post was a breeze. I threw one up, to make sure everything worked. There's a pretty good out-of-the box experience with SubText.

Yesterday, we ran into our first real problem.

Courtney was trying to post an entry about her old job working with a collection agency. She's had longer posts than this one, and has posted several since she tried to post this one. This one post, though, just wouldn't work through the web interface. I finally downloaded and installed w.bloggar (which I don't particularly like), and got the post up there. The only problem was that the post lost all formatting. I told Courtney she would just have to edit the post through the web interface, to fix the formatting. No big deal.

Today, she contacted me because the editing wouldn't work either. Damn it. Now, I'm a bit frustrated. When I get frustrated, I try to talk to the boss. I emailed Phil Haack, and told him the problem. Literally, in 10 minutes, he had responded with the fix. 10 minutes. For a response from an open source software project. That is crazy unheard-of. No other open source project that I have encountered has that kind of response time.

So, here's the email Phil sent me:

I think I know the problem. It's been fixed in the next version. Here's the fix for you.

I believe this is an issue with a ReverseDOS.config (in the webroot) setting. I added the isRegex attribute like so:



<trustedAddresses>
<directory pattern="/admin/"
isRegex="true" />
</trustedAddresses>


Works for me now.


Let me know if this fixes the problem.

Now, Courtney can totally edit the post, and has done so, happily.

I'm really impressed with the SubText project, and with the responsiveness of Philhimself. Thanks, Phil, for both a great product, and a great user support experience.

I do have a couple of nit-picky little things I'd like to see in the next version, though. Phil, if you're listening, I created feature requests for both on your sourceforge site. Feel free to bump the priority up to 10 on my two requests.

  1. Ability to subscribe to posts. Particularly, I'd like to be able to check a box somewhere so that any time someone posted a comment to the blog, I (as the owner) was sent an email. It'd be nice if users could also choose to subscribe to particular posts, and get email notifications when they were commented on.
  2. Preview for the skins. Right now, if I'm not sure what skin I want to use, I have to edit the skin choice in the admin section, then go back to the blog page, and refresh to see the changes. And, anyone who is reading the blog while I'm doing this gets a confusing experience, since the template might change several times before I settle on one. My wife likes to redecorate a lot, so I see her blog template changing weekly. It's already changed once, and she's only had the blog a week.

Thanks again, Phil, for your help today.

Sunday, July 16, 2006

I may have contributed to the birth of a monster

My wife (a wonderful woman), had been a contributor to my blog for quite a while now. Most of you probably don’t know this, since she rarely posts here.

Well, last week, she asked me about setting up her own blog. I had some misgivings, since she hadn’t really posted here very often.

Now, I have different misgivings. That girl posts like 5 times a day.

Check it out, Courtney.CSquaredComputing.com.

Friday, July 14, 2006

FMS – Drunken Master

First, I’ve decided not to try to keep track of the numbers of these posts. From now on, they’ll just start with FMS, and then a title for the story.

While I was stationed on Okinawa, my duties took me on deployment to the mainland many times. Most of the time, I would fly into Yokota Air Base, and then travel by bus or truck to Camp Fuji, nestled at the base of Mount Fuji. Actually, it was about 8000 feet up the mountain. That 8000 feet is just a SWAG (Silly Wild-Ass Guess), so don’t quote me on it.

On a serious note, before the funniness, Camp Fuji was the most beautiful and dramatic place I have been. Seeing this mountain just raise up out of the middle of a plain, with no other terrain in site, is amazing. When I got up in the morning one day, I looked away from the mountain, and realized that I was looking down on the clouds.

Back to the funny. In my first 8 trips to Fuji, I got exactly one (1) evening off. And that one barely counted, because I had to be up at 7 the next morning, to take care of the details of flying my artillery battery back to Oki. Since I had been to Fuji so many times, I knew just about all of the permanent personnel that were close to my rank. Since Fuji was such a small base, there were only like 200 permanent personnel there. There were, I think, 7 females on the whole base.

Since I had my one night out, after spending about 20 nights at Fuji, my friends in the Motor T group decided to take me out for a night on the town, in Numazu.

Numazu was about an hour’s drive from Fuji; at least, the bar we were visiting was. One of my buddies had heard about this bar from his Japanese girlfriend. She was meeting us there.

The bar was crap. We were the only people in there, except for a fat chick from New Zealand, and my friends’ girlfriend and her friends. I was the DD for the night. That didn’t last long, actually. At that time, I was big into drinking Tequila. One of the guys that came with us starting drinking it, and I decided to join him. I purchased 8 drinks, each of which cost 500¥ (~$5.00), and was equivalent to ~3 shots of tequila (they came in tumblers). Well, I drank 8 drinks that I know about. After the 8 drinks, I still had 1500¥ in my pocket. I’m not sure what happened to that money.

I know that I passed out on a couch in the back of the bar, after feeling up the New Zealand chick’s ass. I know that I needed a lot of help walking the mile or so back to where we parked the car.

When we got back to the car, I sat down on the gravel, and leaned against the right rear wheel. Then I started to puke. I made a puddle, then asked for help getting on my feet. One of the Jarheads I was with asked for the keys to the car, to get me in it.

The guy with the girlfriend was the one who drove. When we started yelling for the keys, he responded that he was coming, and then that he was almost there. What I didn’t realize until a couple of years later was that he was in his girlfriend’s car, having relations. He was serious when he said coming.

A few minutes later, he opened the car door, and I stumbled into the backseat.

I remember being in the back of the car, and feeling like I was going to puke. Then I remember puking. A lot. I was drunk enough that I thought I could catch the puke in my hands, and was trying to catch it and throw it out the window. It didn’t work so well.

When they got me back to my barracks, I collapsed into bed, after taking my pants and shirt off (inside out), and throwing them away. I got undressed in the laundry room, which was shared by everyone on that floor of the barracks.

At 6:30 or so, my boss, Sgt Scali, came to wake me up for the day. He told me to get showered, and that we would go to breakfast. Later, he told me that he came back around 7, to tell me that he was going to breakfast, and to meet him at the HQ building in half an hour.

The next thing I remember, it’s right about 8am, and Sgt Scali (who was a body builder) was pounding open my door, and screaming at me to get out of bed. I literally jumped from a prone position on the bed, and landed at attention about three feet from the edge of the bed. I was very confused, and didn’t understand what he was so mad about. I was only a couple of minutes late, after all.

That day, I couldn’t keep anything down, not even water. Finally, at about 1 pm, I managed to keep a pear down. One of my “friends” came over and asked me how I was feeling, and jiggled my head around. I told him it was my stomach, and not my head, so he jiggled my stomach. I threw up in the hallway, about 5 feet from the bathroom door, at a run.

Later that day, I finally managed to keep some Gatorade down. Do you remember the old Gatorade commercials, where the athlete drinks it, and you can see the fluid hit his stomach, and spread outward from there? I felt that. The first sip didn’t even make it to my throat; my mouth absorbed it completely.

Of course, since I was in trouble, Sgt Scali had been riding me all day long. He made me weigh every one of the 26 or so vehicles that we had to move that day, by myself. That consisted of dragging four 50 lb scales (they weigh 50 pounds, not read 50 pounds) in front of, say, a humvee. Then, I drive the hummvee onto the scales, get out, read the scales, pull the humvee off the scales, move the scales, and then park the humvee. After that, I get the next truck, and do it all again. 26 times. While incredibly hung over, and puking every few minutes.

Later that day, I talked to a friend in my unit, and he asked about me getting all drunk. I didn’t understand how he knew, since no one from my unit had been with us. Apparently, he ended up in the same bar, somehow, and had come to talk to me while I was passed out. When he woke me up to say hi, I apparently tried to deck him.

Luckily, I missed, and our friendship continued.

That night is why I don’t drink Tequila anymore, even after 9 years.

Thursday, July 13, 2006

Taking a collection

Alright folks, as many of you know, Courtney and I have had to cut out all frivolous expenses recently.

This sucks for many reasons, but right now, I want to tell you about one particular tragedy. I had planned to attend the Microsoft GameFest game development conference here in Seattle next month. The normal cost for this event is $450, but I am an elite, so my cost is only going to be $150.

As you all should know, it is my ultimate aspiration to support my family by creating and selling games to the unwashed masses. There are a few really huge announcements coming during this conference, and there are like 25 sessions I’d like to attend. Unfortunately, even if I go, it’s only a 2 day event, so I can attend max 16 sessions.

This is where you all come in. I’m putting a hand out in need. Dire need. I don’t know if I will be able to face another year with no game dev conference. The only other conference for game devs that I want to attend costs like $3000, so I’m giving you all a deal.

Now, if everyone that reads this blog donates some money, then I only need $80 from each reader.

That was a joke. Seriously, though, I’m hoping that you will all find it in your hearts to send me some little bit of money, so I can go and check out this conference. You can consider it charity, and you can claim it on your taxes (Note that I said you can claim it, not that it is legal to do so).

The easiest way for you to contribute is to send some dollars to my paypal account (Cullen_waters AT hotmail DOT com). For those that aren’t familiar, you have to replace the ‘AT’ with ‘@’, and the ‘DOT’ with ‘.’ when you send the money, or some other guy will get to go to GameFest in my place. And that would be a whole nother tragedy.

Wednesday, July 12, 2006

Take that, Mac boy

I have been waiting for this for a while now. Someone finally rewrote the Mac vs PC commercials. I think the new versions are a bit closer to the truth, and definitely funnier.


 

http://www.youtube.com/watch?v=UA3NyRr4Eng

Monday, July 10, 2006

Keep in Mind

We live in the Pacific time zone now. That means that it is 5am in Seattle when it is 8am in Florida. I’ve gotten several calls this week at 5am. Luckily, I’ve had the phone’s ringer turned off. Luckily for whoever called, that is. Mikayla is not a happy girl if she gets woken up early.

Neither is her mommy, and her daddy doesn’t like it too much, either.

Sunday, July 09, 2006

Funny Marine Stories #3

Every night, we had to post a guard in the barracks. Since there were over 100 M16s in the barracks, and they didn’t want anyone going nuts, we had a nightly guard. The way that worked, is 16 guys would get picked each night (it rotated pretty fairly). Each one of us would have one hour of guard duty (called fire watch), either in the head (bathroom), or in the squad bay. We basically had to walk around, and check that everyone’s rifle was locked up, and make sure no one went crazy.

You learn a lot about the human body’s reaction to sleep in that kind of situation. Every time I had guard duty, at least one guy would scream in his sleep, or sit bolt upright in bed, or start reciting some of the facts that we were absorbing every day. I’m pretty sure that boot camp magnified my talking in my sleep (ask Courtney about the snow man sometime).

Well, having people suddenly sit up or scream at you is no big deal, compared to what one guy did.

One morning, the drill instructor told me to gather up about 4 guys’ cammies, and wash them. When we went to sleep at night, we would roll up our uniforms, and put them behind our racks, where the floor met the wall (by the way, rolling your clothes is remarkably effective at keeping wrinkles out of them).

As I went to grab the cammies, of the other recruits stopped me, and told me to grab a towel, and not to touch the cammies with my hands. Naturally, as I was grabbing a towel, I asked why. Apparently, while one of the guys was on fire watch, someone from the lower end of the alphabet (our racks were arranged alphabetically) got out of bed, and walked back to the wall behind his rack. He proceeded to pull out his pecker, and take a leak all over about four guys’ cammies, including his own. The fire watch asked him what the hell he was doing. The pee-er just ignored him, and got back into bed. Turns out, the guy wasn’t even awake. He slept through the whole thing!

Why is it that I always end up with the nasty, clean up the piss jobs? Why am I cursed?

Funny Marine Stories #2

How about something a little lighter?

Writing the last post reminded me of a story that is funny, in a sad sorta way.

There was this guy in our platoon, named Annis. Now, I don’t know about all of you, but to us, there was only one nickname for this guy.

Anus was a geeky white guy from somewhere up north. Quiet, steady, not a tough guy. Anus’ bunkmate was this huge black guy, Albright. Apparently, Albright was a bit unhappy/stressed out about boot camp. He got pretty frustrated every day; until he found a way to relieve that anger.

Every night, for about two months, before he went to bed, Albright would punch Anus. He would wait till the lights were out, and most of us were asleep. He’d get out of his rack, and hit Anus in the side a time or two.

Anus didn’t mention this to anyone. He didn’t tell a drill instructor, and he didn’t tell any of us. Well, not until the night before graduation. He just took it, and was Albright’s punching bag (literally) for a couple of months.

Anus wasn’t the smartest cookie in our platoon, although he was a pretty cool cat. He was a really stoic guy, just took whatever was thrown at him. He managed to get cellulitis (an infection that eats your skin), and just took that, too. He didn’t mention it to anyone for like a week. By the time he did mention it, there was a hole in the side of his cheek, that went all the way through. Dude could breathe with his mouth closed and his nose plugged.

Can you say dumbass?

Longing

Over the past 5 years, I have tried several times to put a feeling into words. Until recently, I didn’t feel like I was adequately describing what I was feeling. Then, earlier this week, it struck me. Longing. I feel a strong sense of longing, almost a yearning.

Of course, your response is going to be: What do you long for? I’ll tell you (that’s basically the reason I’m writing this post, after all).

For Father’s Day, in addition to my Xbox360, my wonderful wife got me a couple of military history books. Those of you that know me will immediately realize that this means books about World War II. This period in our history is by far my favorite; I am fascinated by the war, and its effects on our homeland, and the entire world.

While I was in the Marine Corps, there was a series of books being published, called The Corps. These books were written by a man named W.E.B. Griffin (Any of his books are great gifts, by the way). These books were nearly required reading for Jarheads, and definitely shaped my view of what it meant to be a Marine. I closely identify with all of the characters in the book. I think my dad would probably say the same thing about the Badge of Honor series that Griffin wrote.

Anyway, reading these two really good military history books brought back a welter of emotions, and with the emotions came a word. Longing. It was like something in my brain clicked into place. I can finally explain how I feel when I read a book about the Corps, or see news articles about Marines in war. I long for the brotherhood that I experienced as a Devil Dog. I yearn for the closeness, the camaraderie, the friendship. There isn’t anything else that I have ever yearned for. In general, I have a wonderful life. A great, loving, amazing wife, to go along with my beautiful, fun, interesting daughter. My dream job, and work that stimulates and excites me. I’ve got some good friends (even if they are all 3000 miles away now).

But, since I left the Marines, I haven’t made friends like I did when I was in. I haven’t met anyone (except Courtney) who I can stand next to in an open shower, and have a normal conversation while we are bathing. I’ve never met anyone else who I would trust to refill my shower bag while I was washing. I haven’t been close enough to anyone else to be able to tell them that they can’t go out with us unless they take a shower and brush their teeth, and have that person just accept that I am coming from a good place with that requirement.

Question: Is it possible for normal people to be this close? My hypothesis: no. Unless they are in extreme circumstances, people cannot bond this closely (with the exception of your significant other).

I think some examples are in order.

I went to boot camp with a guy named Dent. This guy was a scrawny, skinny black guy, with a heart of gold. We didn’t see each other after boot camp, for a couple of years. When I was in Australia, I went to the laundry to drop off some cammies, and Dent is running the machines. Dent and I weren’t particularly close in boot camp, but we immediately started chatting and complaining like we had known each other since birth, and had just seen each other the day before.

There was another guy in our platoon that stood out. Not in such a good way, though. One of our platoon mates got struck by lightning while we were on the rifle range. Actually, 19 guys got struck. One guy died. I feel horrible, because I can’t remember his name. What I do remember, however, is that all 100+ of us were destroyed by his death. We had a kid die in high school, and the whole school wept, even people that didn’t know him. I didn’t. Lots of people I don’t know die every day, and I can’t mourn them all. This one kid’s death, though I probably only spoke 10 words to him, completely wrecked me. I still miss him, to this day. At least once a month, I think about going back to Parris Island, and going to the Starlite range, and looking at the hole in the concrete between the 200 and 300 yard lines. That hole is there from the electricity passing through our buddy’s foot, into the ground.

Now, when I see or hear about Marines fighting and dying over in Iraq or in Afghanistan, I want to join back up, and go get in the fight. Not because I am a killer, or because I necessarily believe that we should be over there anymore, but because my brothers are dying, and my being there might keep even one guy from getting wounded or killed.

I wonder if I will ever again experience the depth of friendship that I experienced in the Corps. It’s almost worth dealing with the chickenshit to be able to have those kinds of friends again. I wonder if it would be the same as an officer. Do they get as close? I kind of doubt it. Most of the officers I knew when I was in (and those retirees I’ve met since) were very career-oriented. The enlisted guys I knew weren’t out to advance themselves, they were there to do their duty, and hopefully get some enjoyment out of it.

God I miss those guys.

Wednesday, June 28, 2006

Cruise Control.net update

I have decided to disable cc.net. There isn’t anything wrong with cc.net, and I still think it’s a great tool for teams larger than one person.

The usefulness, however, for a single dev shop is limited, at best. I have spent over 10 hours working on cc.net, to get it all set up and running. All this so that I can know what I already did know: whether or not the build is broken. Since I don’t check in unless the build is working, there’s very little value added by cc.net.

Add to that the complexity inherent in keeping two machines configured with all of the tools and such that I use during the build process, and the costs greatly outweigh the benefits.

My plan is to leave the server installed, and the config files intact, so it should be an easy matter to re-enable it in the future, if I want to. If I do get involved in any multi-dev projects, I will certainly push to use cc.net. I will probably try to write a better application to monitor the build, though. The cc.net tray application takes like 60 seconds to start up.

Great Customer Service Experience

Today, a single employee at a huge corporation retained my business by great customer service. Any of you that have been near me during or after a retail experience in the last few years have heard my opinion of the general state of the customer service industry.

Courtney and I decided to go with Washington Mutual for our bank here. I opened us an account over a month ago. As of this morning, I still didn’t have a working ATM card or checks. I ordered both in mid May. Needless to say, I was very frustrated.

Today, I went to a branch, to get the ATM card straightened out, and see what was going on with the checks I ordered. If I heard “no” or “we can’t do that”, I was going to close my account, and walk across the street to First Technical Credit Union.

The teller, Ashley, did such a good job of addressing my concerns, and taking care of my needs, that before I left I grabbed the branch manager, and told him how I felt walking in, and that Ashley had singly-handedly saved my business. Ashley seemed to be a youngun, and was somewhat embarrassed when I grabbed her manager, and sang her praises in front of her. Sorry for that, Ashley.

If there is anyone who works for Washington Mutual that reads this blog, Ashley at the Overlake Financial Center in Bellevue, WA is the kind of employee that you should want to stick around in your company, and promote into a position where she can positively affect more customers’ views of the bank. If anyone else is in the financial industry, you might want to drop by and see if you can steal her away from WaMu.

Courtney can tell you how big of a deal it is that I even remember this girl’s name. I am horrible with names, so the fact that I can still remember it hours later should be an indicator of what a good job she did.

Tuesday, June 20, 2006

Live Messenger

The new version of Live Messenger is out. If you guys are still using an old version of MSN Messenger, or using the beta of Windows Live Messenger, I’d recommend upgrading. I love the new features in the Live version.

Here’s the link: http://get.live.com/messenger/overview

SpaceRocks! update (finally)

Tonight, I finally had the energy to work on my computer some at home. And, since the beta build of Flight Simulator X kept dying on me before I could take off, I decided to do some code work.

A while back, I finally got around to converting the SpaceRocks! code to use a high performance timer (the one included with the DirectX SDK, slightly modified), instead of just using a simple frame counter.

This is a Good Thing™. And a difficult thing. In game programming (at least my game programming), I have found the need for several constants. I originally tweaked these constants to get decent playability (like in version 0.0.8). After switching to the high perf timer, I had to re-tweak nearly every constant. So, that’s what I’ve been doing for the last few coding sessions.

In addition to tweaking the game settings, to achieve some measure of playability, I also tweaked the particle code. Finally, I am fairly happy with the particles, and how they behave. That was much more of a frustration than I thought it would. Over time, I will continue to play with the particles. Specifically, I plan to change them so they attenuate over time, and I am going to randomize the colors somewhat. I’m planning on specifying a base color, and creating particles whose colors are close to that base, but not exact, with probably a few white ones thrown in for fun.

Lots of good stuff, for a couple of hours worth of work.

Oh yeah, cruisecontrol.net is working just fine. I was having more source control issues, but they seem to have cleared up (magically). Actually, now that I think about it, the computer was rebooted due to a power outage. I bet that cleared some cache somewhere. I had been making changes to the config file, and relying on the service being restarted to apply the changes. I wonder if the hard reboot forced some changes to be applied that were being cached before.

It’s actually building right now, as I type this. Beautiful, isn’t it?

Question for Eric Sink: Do I need to purchase a seperate Vault license for the cc.net service?

Wednesday, June 14, 2006

More Microsoft goodies

In addition to my work on Flight Sim, and my start at helping on Wix, I answered a survey targeted at independent/hobbyist game developers. Once the survey master found out I was coming to MS, she got me all set up.

I attended a round table about the new XNA Framework that MS is going to release. I had heard of XNA before, but the marketing blurbs I had read didn’t really explain how XNA was going to help small shops like me. Well, I know better now. I can’t say much since it’s all MS Confidential for now, but there’s going to be a big announcement soon.

After the round table, I was contacted by one of the SDEs on the team, to get my input on starter kits for the project. How cool is that? I’m helping shape future indie game dev tools; not to mention making great contacts on the team, in case I need any special help down the road.

There’s going to be a game conference here in Seattle, Microsoft GameFest. The XNA team is trying to hook us(those that are participating in the discussions about XNA) up with regards to the conference fee. I’ll be going, and if any of you are going to be in the Seattle area, I’d suggest you go as well. There are going to be some big announcements coming.

Here’s the list of study tracks from the site:

  • Graphics
  • Audio
  • Systems – Windows and Xbox
  • Visual Arts
  • Cross-Platform Xbox Live
  • XNA, Visual Studio & Developer Tools
  • Casual Games
  • Middleware
  • Publisher and Business
  • QA and Certification
  • Hands-on Workshops

Quite a list, eh?

Immortalized

I have been immortalized.

The number of perks that come with working for Microsoft are amazing. I found out that we are currently building the next Flight Simulator, and that employees are encouraged to become play testers.

Being a huge Flight Sim fan, I signed up right away. One of the guys on the team (an audio engineer) sent out an email request for people to come in and be recorded for the game. They are trying to get some diversity in the in-game voices.

I volunteered immediately, and was chosen. Somehow, somewhere in the next version of Flight Sim, you will be able to hear my voice. The audio engineer working on the project is going to send us all an email telling us exactly what has to happen to be able to hear ourselves in the game. Once I get that email, I’ll post it, so you can all hear me in the game, too. I’m also going to try to get permission to post the .wav files once they are all edited and such.

Coolest job ever.

Happy Father’s Day to me

It’s not even Father’s Day yet, and I’ve already had a great day.

As most of you know, Courtney’s parents were in town for the last week. Today, they wanted to go to the company store, and get some software using my allowance. They got a ton of stuff. The coolest part is that they bought me the Bluetooth keyboard and mouse set that I have wanted for a couple of years now.

It took a bit of doing (meaning reading the directions) to get the keyboard and mouse hooked up, but they’re ready to go now.

While at the company store, Mike & Mindy also got some accessories for the Xbox 360 that Mindy was planning to buy Mike. We can’t get the systems at the store, but we can get MS games and controllers and other accessories way cheap. They got three games, and three controllers.

Then, Courtney did it again. She totally surprised me. I was upstairs, messing with my new keyboard and mouse, and she calls up to ask me to bring her down a quilt. I go in the closet, and grab the quilt for her, and notice this cool, white box, with green stripes. At first, I was like “oh crap. I did it again. I ruined another surprise”. Then it hit me that she sent me into the closet, and I realized that Xbox was probably for me!

Turns out, all the stuff Mike & Mindy bought was just to throw me off the scent, so I wouldn’t figure out that Re was getting me the 360. I had no clue, as always.

My wife is truly amazing. Every time I think she’s done everything cool that a wife can do, she goes and surprises me again. I certainly don’t have to worry about being bored when she is around. Sometimes I feel like I ought to be checking the closets every day, to see if there are any gifts laying around.

I sure hope she never decides to cheat on me (which she wouldn’t, of course). If she ever started sneaking around on me, I’d have absolutely no clue. That girl is sneaky, I tell you.

Thank you honey. Once again, you have made a good holiday great!

Tuesday, June 13, 2006

The best software feature ever

I just read an article about the best software feature that has ever been created. Now, the author didn’t put it in those terms, but I am. This feature has been a long time coming.

Do you know someone who thinks that there blog is all about what goes on over their? Don’t you hate those kind of errors? The ones that people never fix, because Office doesn’t flag the word as misspelled, and they are too illiterate to learn the rules around when to use there or their?

Office 2007 to the rescue! Read this entry: http://blogs.msdn.com/jensenh/archive/2006/06/13/629124.aspx

Friday, June 09, 2006

Who’s a punk now?

A few days ago, one of my ‘friends’ put a comment on this blog calling me a punk. I’d like to respond.

First, some background on the perpetrator.

  1. He’s old. Really old. Over 30 old. He tries to hang out with younger guys, to look hip and cool, and it’s just sad.
  2. He blow-dries his hair. How much more of a woman can you be?
  3. He rides a bike. It’s a sissy blue bike, but it’s still a bike. If you can’t ride a raven R6, then an older, not as fast, no inverted fork blue R6 is probably the next best thing.

What’s the purpose of this post? Just a little rubbing in. You see, I’m way cooler than he is. Here’s why:

  1. My bike is black, and has inverted forks, and is faster. At least .1 seconds faster in the ¼ mile.
  2. I don’t blow dry my hair. I never have. Ever.
  3. There are mountains all around me. There is a crazy steep, twisty road right near our temporary housing, and a whole range of mountain roads about an hour away.
  4. There is a motorcycle road racing track
    35 miles from my house.
  5. On July 15th, I am going to a free
    track day at the aforementioned track. I don’t have to buy any new gear, and I don’t have to do anything to my bike except fold back the mirrors. I get two 20 minute lap sessions in the morning, to see how much I love riding on a track.

Eat that, sucker.

Wednesday, June 07, 2006

One other thing

I spent some time today unpacking boxes in the office. I got all of them unpacked, except for books and games. We’re going to go through our books again, and sell/donate a bunch more of them. We have like 10 boxes of books, still. That’s after purging a whole bunch of books, and selling them at a second hand book store. We sold so many books, we made over $250 (at about $0.75 each). That’s a lot of books.

I’ve decided that I am going to get rid of almost all of my non-technical books. I’ve found that the books I kept last time are such favorites that I don’t read them anymore. There are about 20 books that I can read in just 3 or 4 hours, since I know the stories so well. I find that I’m basically skimming them, and relying on my memory to fill in the storyline. Seems kind of pointless to keep moving them around the country, when I could just think about them for a couple of hours, and get the same result.

I will, of course, be keeping the Corps series by W.E.B. Griffin, though. That is a requirement for all jarheads. Actually, I’m a big fan of all of his books.

Cruise Control .Net working

I got cc.net up and working. After fixing the way the service logs on, the vault task was failing again. This was caused by my installation path containing spaces (like “Program Files”). I fixed it rather easily; the fix came from dealing with the same type of issues using command line applications. I surrounded the path to the vault executable with quotes. That took care of the failing source control tasks.

After that, I had to install NUnit on my server, to build the test project. Because I haven’t developed on that box since the last rebuild, I was missing some required components (NUnit, DirectX SDK, etc). Those are all installed now, and my cc tray utility shows green (meaning the projects are building properly). Next up is to integrate NUnit into the cc.net build, so it automatically runs the NUnit tests, and then NCover, so I get a code coverage report with every build. This stuff is way cool.

Who needs it?

Tonight, rather than sleep, I have been working on getting continuous integration set up in my personal development environment.

What is continuous integration, you ask? I’ll tell you. Basically, CI is the process by which every time code is changed in the repository, a build is kicked off, and the results of the build are displayed for all to see. A repository is the place where good developers(Eric’s thoughts, Joel’s thoughts) store their source code, and provides many benefits. Check out Eric Sink’s articles on source control for more information.

This task was not as simple as I thought it would be. I’m monitoring two projects (SpaceRocks! and my ‘engine’) with my CI server. I chose CruiseControl.NET for my CI server. Download the really small installer, and it’s ready to go in minutes. Of course, then you have to configure the projects.

I ran into a couple of gotchas, mostly around using cc.net and Vault (still the best source control system for smaller shops ever built). The biggest one is that the cc.net service has to run as a user account (not the system account), in order for the Vault tasks to work. I had to look for a long time to find the problem. The looking time was compounded by the fact that the cc.net error message was less than informative.

Second, I ran into a couple of minor issues using cc.net and MSBuild. Recently, I converted SpaceRocks! and the supporting projects into C# 2.0, so I could use the new features of the language, and of VS 2005.

Once I got those two things worked out, I was ready to roll. Of course, the build was still failing, since I hadn’t ever built the project on the server machine before (I do all my dev work on laptops and on my main desktop). I need the DirectX SDK before I can build successfully (which I’m downloading now).

Next, I’m going to spend some time in the code getting the unit tests working again, and I’m going to start working towards increasing my code coverage. I had let my tests slack off, since I was on such a roll with the game. I’m ahead of schedule, and feeling guilty about not having more tests in the code.

Monday, June 05, 2006

Quiet

Courtney and I moved into our semi-permanent housing Friday. This caused an outage of internet proportions, so we can't post from home. Thus, the lack of any updates for the last few days. We'll be posting again after tomorrow, when the internet gets hooked up.

Tuesday, May 23, 2006

How we got to Microsoft, Vol 3

Well, the hard stuff wasn't really over. We had an 8:40 flight to SeaTac. With an 18 month old daughter, and three firearms in our bags. We got to the airport later than planned (of course), at about 7:45. My plan had been to have our stuff all checked, and be meeting Courtney’s family at 7:45, so we could spend a half hour or so with them.

Courtney had spent some time the before we packed, researching the topic of traveling with firearms in your checked baggage. She discovered that we were supposed to put our weapons in their original case, unloaded, and lock the suitcase (not the weapon or case). We had this all set up a couple of days before we were flying.

When we got to the airport, I told the lady at the counter (in very hushed tones) that we had firearms in our bags. She reacted by shouting (at the top of her lungs) “Well then, you’ll have to put this bright orange firearms declaration paper in your bag”. All of the nearby passengers started squirming, and eyeing us. Not the most comfortable of moments. So here I am, already running late, digging through our carryon crap to find the keys to the bags, so I can open the bags and put the forms inside them. Then the lady tells us (again at a volume where the pilot could probably hear from inside the plane) that we had to put the forms inside the gun cases, not just inside the bags. This requirement made no sense to me, since any reasonably intelligent person would have deduced that there were firearms in the bag after seeing the black Glock pistol case, and before opening it, to read the firearms declaration form. The Day-Glo orange declarations form. That chick made me really uncomfortable.

Finally, though, we are all checked in to the flight. We start hustling to Starbucks, where we are going to pick up our kid, and meet Courtney’s family. By the time we get done checking in, and get down there, we only have like 5 minutes to visit, since the security line is getting backed up. We said our goodbyes, and grabbed our squirmy worm. She woke up early, so she was already grumpy (This was my decision; I thought the tired baby would be more likely to sleep on the plane). On to security.

Surprisingly, security was pretty much a breeze. One side note: When I was in Okinawa, one of my roommates worked for this guy, Chief Warrant Officer III Lahey. Gunner Lahey was in charge of the Battalion Motor Pool. All of the mechanics and ‘professional’ drivers in the battalion answered to him. Turns out, he’s now working for the TSA, at the Jacksonville airport. I believe he is a supervisor, since every time I saw him; he was supervising, not checking people.

Once through security, we thought we were home free. Silly parents. In the past year, I have been on about 10 flights. None of them has been delayed more than 15 minutes. Not our Detroit flight. There was some weather over the Antarctic Ocean or somewhere, the night before, and the flight attendants for our flight were delayed. They didn’t get the federally mandated 8 hours of rest, so we couldn’t fly out on time. We were delayed for about an hour, while they rounded up another flight crew (from North Carolina). That was a hellish hour. The airport was packed, and Mik was bored and tired. Not a good combination. We chased her around the airport for over an hour before we got to get on the plane. Now, she’s wide awake, having fun, bored, and tired.

Needless to say, the flights were not enjoyable. But, we made it, and we got to SeaTac on time. The rental car and luggage went as smoothly as those things ever go, and we were on our way (to temporary housing, that is).