August 2008 Blog Posts

Downtown Portland Team Building Scavenger Hunt

The Red Team: Jeff, Derek, Me (Travis), and DevinYesterday the entire Voyager User Solutions and Infrastructure teams went downtown Portland to do a photo scavenger hunt. We were broken up into three teams - Red, Yellow, and Blue, and ran around taking pictures of ourselves with various landmarks.

Jeff, Derek, I, and Devin were on the Red Team.

We started out at Pioneer Place around noon for lunch, then at 1:00p met up in Pioneer Courthouse Square to get our clue packets and get moving. From then until about 3:30p we went everywhere from Powell's Books to Skidmore Fountain to the Portland Art Museum and the Oregon Historical Society getting pictures.

After an extremely exhausting day, all of the teams reconvened at the Pinocchio Bar and Restaurant for happy hour and dinner.

A great time was had by all. We learned a few things about Portland that we didn't know (and I've lived here my entire life!) and came out all the better for it.

Maybe next time we'll go skydiving.... nah.

GTA4 100%

Finally completed Grand Theft Auto 4 100% this morning!

Key To The City: You completed GTA IV to 100%

Pretty stoked about that. Turns out the last bits I had to do, as I suspected, was to take my friends out to do all the activities.

I also got the "Walk Free" achievement this morning - escaping a four-star wanted level alive. Secret to that one is to land a helicopter in the embassy and get out (instant four-star wanted level), then fly the helicopter to a secluded beach in the north where there's a boat. Get in the boat and just avoid the other boats, which isn't too hard. Might try for some of the others, like "One Man Army" (survive five minutes with six-star wanted level), but generally, after 80 hours, I'm pretty much done. I love the game, had a great time with it, definitely got my money's worth, but there are other games I have - games I got for Christmas last year - that I need to get to.

Windows Home Server First Impressions

HP EX475 MediaSmart ServerAfter pondering various options for media center related storage, Jenn and I happened to be walking through Fry's this weekend and saw they had dropped prices on HP MediaSmart Servers quite a bit so we bit the bullet and got the 1TB model.

So far, I like it quite a bit.

The form factor really surprised me. It's small. Like, so small we walked right past it in the store and didn't even notice it. We ended up asking where they were and when we saw it we were surprised by the size. I expected a mini-tower; it's really only about nine inches tall and five inches wide. The whole package is fairly aesthetically pleasing so if you don't have a desk to put it under, it's not going to look bad sitting in plain sight.

Setup went surprisingly smoothly, which is far better than I can say about most of the electronics purchases I make. I always find there's something "special" about my environment, even though I try not to do anything too out of the ordinary, and it makes things that are supposed to be simple very difficult. The only hitch I ran into during the setup was something they warn you about several times in the guide: your firewall/antivirus software may cause the server not to be found from your network, so you may have to adjust accordingly. I shut it down long enough to connect to the home server and everything is peachy keen. (Of course, the Home Server detected I had the firewall shut down, so for a few minutes I couldn't figure out why it kept telling me my "network health was critical." Eventually I got things set up enough that it was able to tell me very clearly that the firewall was down. Putting it back up restored network health to normal.)

The server is headless, so you control it entirely through the "Windows Home Server Console," a remote desktop style application. It's very easy to use, not giving you so many thousands of configuration options that you don't know what to click - it's clear and concise, which is a huge relief. It removes the burden of finding the checkbox hidden 15 levels deep and "just works."

Actually, the level of configuration reminded me of a game console. Like when you set up your Xbox 360 or Playstation 3 on the network and configure one or two things - you don't have to deal with verifying the drivers are set up right, or tweaking the registry to get it to perform, or running command-line programs to register or configure things... it just works. It will even configure your router for you through UPnP if you want to expose your server on the internet so you can get to your media remotely. I'd never seen that before and I wonder why it's not available in things like the Xbox 360, which requires certain ports to be open to connect to Xbox Live.

The only real complaint I have, if you could call it that, is that it's so high-level that it doesn't really reveal what some of the functionality is doing behind the scenes. For example, there's an iTunes sharing function on it that I'd love to use instead of my multi-user iTunes hack, but I'm not sure how it works so I'm reluctant to start moving things around onto the server before I understand what it's doing... but there's nothing in the docs to explain what's going on beyond explaining how to configure it.

Regardless, this solves my media storage problem, so at the very least I can start ripping DVDs in VIDEO_TS format and saving them here. My laptop has Vista Ultimate on it, and I have another license for it that I can put on my Windows XP desktop (once I've migrated the shared data off there - it's my "file server" right now), so I can try out My Movies on one of those and see how it goes.

GTA4 95%; Tropic Thunder

Two things happened this weekend from an entertainment perspective.

First, I finished getting all of the "hidden packages" and stunt jumps in Grand Theft Auto 4, taking me to 95% completion. It was a bit confusing why I hadn't hit the 100% mark, having completed everything else, but then I found this 100% completion checklist and realized I haven't taken all of my "friends" to do every possible activity. Guess I'll be doing that this week. (Admittedly, that seems pretty freaking tedious to contribute towards 100%. Come on, Rockstar.)

Second, Jenn and I went with my parents to see Tropic Thunder. It was funny, to be sure, but I'm not sure which was funnier: the movie, or watching my dad nearly fall out of his seat laughing at the movie. There was definitely a lot of random stuff going on in there, and I went in not really knowing anything about it or what to expect, but it was worth the watch. Far and away, Tom Cruise was the greatest thing in that movie, though - so over the top.

I still want to see Death Race, though. I was totally in the mood for mindless action but we ended up hitting Tropic Thunder instead. My craving for destruction has not yet been sated.

posted @ Monday, August 25, 2008 8:08 AM | Feedback (0) | Filed Under [ Media ]

Storage Option - Drobo

A potential storage alternative to Windows Home Server for my media center: Drobo. Looks like a cool, affordable device that has the ability to make several disks appear as one (which is the feature I was really looking for in WHS). They even have an add-on that can turn the whole thing into NAS. Slick.

UPDATE 8/25/08: I ended up getting a Windows Home Server.

posted @ Friday, August 22, 2008 7:32 AM | Feedback (0) | Filed Under [ Media ]

More Media Server Options

I still haven't solved my media server problem, mostly because I know it's going to be a time-suck to set it all up and rip all the DVDs and get it to meet the minimum Wife Acceptance Factor. I can imagine eating up a full weekend on it. It'll be nice when it's done - if it gets done - but the investment is sort of a hurdle.

Anyway, following various Twitter links and surfing around, I've found a couple more interesting articles to contribute to the thought pool.

That "death of DVD" article comes closest to what I'm looking for. It even points to Windows Home Server for storage, which is definitely something I'm considering. The only real problem is the number of PCs and the form factor of each that I currently have. I have a desktop and a really under-powered mini-tower that I can use for the HTPC and the file server. The problem is that neither are really suited to sit in my living room. The desktop is too large, and the mini-tower, which is a better size, isn't nearly powerful enough to be anything but a simple file server. Of course, it's not powerful enough to run Windows Home Server, either, so if I wanted to go that route, I'd have to allocate the desktop to it and punt entirely on that mini tower.

And there's the rub.

So now the current plan is (I think), based on budget and time...

  1. Get a 1TB drive from Costco that I can use to start the ripping of the movies.
  2. Get the mini-tower formatted with some sort of OS on it that can work as a file server. Maybe a Linux variant with Samba or something. Jury's out.
  3. Hook up the 1TB drive to the file server.
  4. Hook up my existing media/archive drive to that, too. (I have iTunes on my laptop running off of that so I can just switch where the network drive gets mapped to and I'm good.)
  5. Rip a couple of movies so I can test it out.
  6. Get Vista Ultimate (I have a license for it just hanging out) on the desktop and get My Movies installed.
  7. Point the desktop to the file share on the mini-tower with the movies and see if the media server will play it reasonably.
  8. Start making decisions:
    • Does the mini tower work reasonably as a file share? Is it fast enough?
    • Can the desktop go out in the living room or is it too big and loud? If it's too big and loud...
      • Should it be the file server instead so there's some more power behind it?
      • Do I need a Mac Mini or the like for the living room?
    • When do I get my 1080p TV? (I have 720p now.) Do I want the TV more than the media center? (Probably.)

What my ultimate plan would be to save me time and frustration...

  1. Get a 1TB Windows Home Server ($730).
  2. Get a Mac Mini ($600).
  3. Get a Media Center remote control and receiver for the Mac Mini ($30).
  4. Install my copy of Vista Ultimate on the Mac Mini using Boot Camp.
  5. Install My Movies on the Mac Mini.
  6. Rip DVDs to the Windows Home Server.
  7. Play through Mac Mini/Vista/My Movies.

That sounds simple and doesn't require any stressful decision making... but it does run $1360 (plus, in some cases, shipping). Is it worth the extra cost for reduced hassle? (It might be.)

UPDATE 8/25/08: I ended up getting a Windows Home Server.

Lutz Roeder Hands Off Reflector to Red Gate

Looks like Lutz is looking to do soemthing different. He's handed off the development of Reflector to Red Gate.

Red Gate's .NET Reflector

Wow. This is huge. I'm interested to see what his next move is. (This is particularly interesting to me since I started CR_Documentor based on his original Documentor project.)

Typemock Isolator 5.0 Released; Open Source Licensing Available

Typemock Isolator 5.0 has been released and there are a lot of cool things that come with it. The two big ones:

  • Arrange/Act/Assert syntax: A more fluent syntax style for setting up your mocks. You can still use the old API, but the new one offers a nice alternative to the classic record/playback metaphor.
  • Open Source licensing: I blogged about this before, but it's finally in effect. You can get the goodness of Isolator for use in your open source project. I'll totally be hooking this up in CR_Documentor.

This is huge. I'm totally excited. Check it out.

posted @ Monday, August 18, 2008 10:41 AM | Feedback (0) | Filed Under [ .NET ]

Slimming Down Your Subtext Database

While I was attempting my upgrade, I figured I'd also look and see where my database space was going since I've had to have a size increase a couple of times now and I'm not generating tens-of-megabytes worth of content. The culprits: the subtext_URLs and subtext_Referrals tables. Which is to say, my list of referral sites and the links to the associated blog entries. The URLs table was in the 40MB range, which is pretty out of hand.

I did a quick search to see if this was common and found this entry on Phil Haack's site from a couple of years back, talking about how to clear the cruft out of these tables. Ran those SQL commands and I'm back into the 5MB size for the URLs table.

Anyway, this serves as a little reminder to give your database a little love and attention. Hopefully we'll offer more in the way of an admin interface for these sorts of things in Subtext 3.

Failed to Upgrade to Subtext 2.0

Well, I gave it the old college try, but I ended up pretty well trashing my site in the course of my attempt to upgrade to Subtext 2.0, so I had to get restored from backup. Yow!

There seemed to be something odd to begin with when the upgrade process wouldn't run - it sort of locked me out of the site. I got around that only to see it say I needed to "install," not "upgrade." Ummm... well, OK. So I did that. The database got upgraded, but then I hit the final wall: I'm in a medium trust environment and the build won't run in medium trust.

Looks like I'm not the only one having a problem.

I guess I'll have to see if I can help rectify some of this.

Drum Rocker

Drum Rocker drum set from IonI love playing Rock Band, and when I get the chance to play, I usually play drums.

I've seen this kit from Ion in some of the game magazines and on web sites, but I finally found the official site for it: the Drum Rocker kit from Ion.

It's an actual drum kit from a real drum manufacturer that has a controller box you can swap for either control by Xbox 360 or an Alesis DM5 module, making it useful in an actual drum kit capacity. Not just for gaming anymore!

Admittedly, I play on medium difficulty. I'm no expert by any means. But the noise the standard drums generate plus the sometimes questionable accuracy plus the fact that I've always wanted a drum kit... sort of sounds like it adds up to this.

I damn near clicked that pre-order button just now. Just the $300 price tag stopped me. It may not stop me for long.

Creating Resource-Only Assemblies

Working on some localization stuff, I've come across the need for resource assemblies to be created from .resx files in a post-build step - I have the .resx files, but I don't want them at all to be attached to my application. I just want them built into a tiny hierarchy of resource-only assemblies so I can get a ResourceManager on them and have string lookup behave as expected.

I also find that sometimes I need to recompile .resx without recompiling the whole app and I forget the command-lines to do all that.

The overall process:

  1. Convert your .resx files to .resources files using resgen.exe.
  2. Link your .resources files into assembly format using al.exe.

Again, what I'm showing here assumes that the assemblies you're compiling are resource-only - which is to say, there is no code to compile and you're not linking resources into existing assemblies.

For a culture-neutral (default) resource-only assembly, you'll use:

resgen.exe "Path\To\Culture\Neutral\Strings.resx" "Path\To\Output\Folder\Strings.resources"
al.exe /embed:"Path\To\Output\Folder\Strings.resources" /out:"Path\To\Bin\Strings.dll"

The first command line generates the .resources file from .resx and puts it in an output folder. It doesn't really matter where the output folder is; it's a temporary place to store the .resources file before it gets compiled into an assembly. The second line links the .resource file into assembly format and puts it in your application's "bin" folder, where you can start to consume it.

For a culture-specific resource-only assembly, you add culture-specific parameters and output locations into the mix:

resgen.exe "Path\To\Culture\Specific\" "Path\To\Output\Folder\"
al.exe /c:es /embed:"Path\To\Output\Folder\" /out:"Path\To\Bin\es\Strings.resources.dll"

In the above example, we're compiling general Spanish resources, as noted by the "es" in there. If we wanted Spanish specific to Mexico, we'd use "es-MX" as the culture. The key differences to note:

  • In the .resx and .resources files, we specify the culture before the extension. While this isn't mandatory, it is standard convention and helps you keep your source .resx and output .resources files organized.
  • In the al.exe command line, we add the /c: parameter to specify what culture we're linking for and we put the output assembly in a folder under "bin" that is named after the culture we're linking for. We also add "resources" just before the .dll extension so the ResourceManager knows it's a resource assembly. (You don't do that for culture-neutral resources, so you didn't see that before.)

This is pretty easy to do in a Visual Studio project post-build step, too:

"$(VS80COMNTOOLS)..\..\SDK\v2.0\Bin\resgen.exe" "$(ProjectDir)\Strings.resx" "$(TargetDir)Strings.resources"
"$(WINDIR)\Microsoft.NET\Framework\v2.0.50727\al.exe" /embed:"$(TargetDir)Strings.resources" /out:"$(TargetDir)Strings.dll"
"$(VS80COMNTOOLS)..\..\SDK\v2.0\Bin\resgen.exe" "$(ProjectDir)\" "$(TargetDir)"
"$(WINDIR)\Microsoft.NET\Framework\v2.0.50727\al.exe" /c:es /embed:"$(TargetDir)" /out:"$(TargetDir)es\Strings.resources.dll"

Note we had to specify some paths to resgen.exe and al.exe because the post-build step isn't run as part of a Visual Studio 2008 command prompt environment.

Obviously, change your paths and parameters as needed, but the above compiles and links a neutral and a generic Spanish "Strings" assembly in a post-build step.

Learning to Think in the Abstract

Something I've noticed as I work with developers of varying skill levels is that one of the key differentiating factors between the junior folks and the senior folks is the ability to think in the abstract - that is, patterns and concepts, not concrete implementations.

How many times have you been one of the people in this conversation?

Senior Developer: OK, so the task at hand is to create a Doorman that works in a hotel or apartment building. We know he's going to hail taxi cabs, handle the door for people, make small talk, and do a few other things. Today we're just looking at the door handling part.

Junior Developer: What kind of door is it?

SD: It really doesn't matter, and we won't really know until the Doorman gets placed somewhere, so we need to be flexible. What we probably should do is have an interface like "IOpenDoor" with an "OpenDoor" method. Then we can provide any number of implementations to that to handle different door types. (This is the strategy pattern.) The question on the table is, "Does the doorman need to do anything else with the door besides open it?"

JD: What if the door is heavy?

SD: It doesn't matter - that's an implementation detail. What we're looking at here is the pattern. Like, we know the Doorman needs to open the door, but does he need to close it, too? Should it be "IDoorController" with "Open" and "Close" methods? Or do we consider all doors to be self-closing?

JD: If the door is glass and the Doorman kicks it closed, he might break the door.

SD: Um... OK... right... but really we need to look at the pattern here. Is it the right way to go? Are we missing something around the Doorman's interaction with the door that we should know about?

Another Senior Developer: The door might be open due to some other action, but the Doorman might be requested to hold the door, so we might need a "HoldOpen" method on that interface.

SD: Good point. That's a door state we didn't consider.

JD: What if the door has a knob instead of a handle?

SD: Step into my office.

Now, I'm not saying that all junior developers are unable to think in the abstract, and I'm definitely not saying that all senior developers (or at least people with a "senior" title) can. What I'm saying is that the ability to think in the abstract is key to being able to step beyond simple coding and into the world of development.

PS3: Echochrome and Soul Calibur IV

Had a bit of a PS3 weekend this weekend. Realized I had the PS3 but really hadn't played any games on it, using it primarily as a Blu-ray player, so thought it might be time to see how it went.

The first game I picked up was Echochrome. It's sort of like "MC Escher: The Game." The idea is that you've got this little mannequin that walks around on a sort of wireframe-looking level that obeys certain "laws of perspective" like "perspective existence" - if you can't see an obstacle, it doesn't exist. It's sort of hard to explain - watch the video.

What I like about it is that it makes you think in a different way. A level that looks impossible to traverse is actually pretty simple if you think in perspective. It's definitely worth the $10 I paid for it.

Darth Vader in Soul Calibur IVThe second game I got was Soul Calibur IV. I debated whether I should get this on Xbox 360, where the "special character" included is Yoda, but decided that the PS3's special character, Darth Vader, would just be cooler to fight with. Yoda's neat and all, but I don't really think "bad ass" when I see Yoda. It's more... novelty value. Darth Vader, though, I'm thinkin' that boy's gonna put the beat down on someone.

Jenn and I put a few rounds in here and, while I was pretty decent at Soul Calibur III, Jenn kicked my ass like nine out of ten rounds just by button mashing. (She's really good at button mashing.) I'll have to bust out the guide and practice up again. It's been a couple of years since I played SC3 so I've gotta get back in the groove. Still, tons of fun, and totally great graphics and sound. A total step up from SC3 and a good way to get myself into the PS3 game world.

One thing Jenn and I noticed while playing SC4: On PS3, when you turn it on, you can "sign in" to the Playstation Network with an account you create, which then associates purchases, etc., with your "profile." This seems very similar to the Xbox Live account sort of thing, where you sign in and then play games and achievements get associated with your profile. On Xbox, though, when you play two people at the same time, both of you are signed in - I get signed in on my control, Jenn gets signed in on hers, and when we play, each of us can unlock achievements.  PS3 doesn't have achievements (there's a notion of "trophies" that's still pretty new) and it turns out you can't sign multiple people in at the same time, so we ended up playing with only me signed in even though Jenn has her own account. We both thought that was sort of weird. Hopefully they'll fix that in the future.

posted @ Monday, August 04, 2008 8:13 AM | Feedback (1) | Filed Under [ Gaming ]