Metroid Prime Trilogy on the Wii – What a fun game!

I don’t know if you ever played any of the Metroid games on the classic Nintendo.  I did and loved them. image

I just picked up the new Metroid Prime Trilogy for the Wii.   It’s actually the first two trilogy games that came out on the Nintendo GameCube and the final chapter that came out on the Wii.  The GameCube versions were revamped to use the Wii controllers.

I have to say, this is one of the most fun games I’ve played in a long time.  I’ve played a few first person shooters on the XBOX or PS2 but the controls just haven’t been nearly as comfortable as my keyboard and mouse that I’m used to.  I still haven’t tried The Force Unleashed on the Wii but with Metroid I feel like this is the first time that they have gotten it right.  You use the nunchuck for the movement and use the Wii remote as your targeting and viewing.  Buttons on both controllers facilitate the myriad of actions you can perform.  Honestly, this setup is more natural and fun than any I have ever used on a console or computer.

The storyline game play are really a lot of fun.  If you’re a fan from the older series then seeing familiar characters and hearing the music will bring back a lot of fond memories.  Sometimes when 2D games get brought into 3D it’s done in a very kiddie or cheesy way, or sometimes just doesn’t translate well at all.  However, seeing my old 2D side-scrolling nemeses in full blown 3D moving around in live space is just awesome.  They aren’t bloated cartoony characters (like many of the Nintendo games turn out to be) but are realistic representations of what you would expect to see.  The scenery is great and the worlds are really well designed.  Between the game play, world design, storyline, attention to detail and music this is really a top-notch game you can get totally engrossed in.  I’ll start playing at 9pm and Eva finally calls me to bed at 11pm without me even realizing what time it is. 

I’m still only at the beginning of the first game.  For $50 it’s a pretty standard price for a Wii game but since there are three in the pack I really feel like I got my money’s worth.  Like I said, I’m still on the first chapter, which is really a GameCube game but it’s still pretty awesome.  I can’t wait to make it to the final third chapter that was developed for the Wii from the ground up. 

What’s the deal with widescreen monitors?

I understand that everything is going widescreen these days for media.  That’s great when I want to watch HD movies or the super bowl in HD.  However, I still have no idea why this is the current trend for computer monitors.

Maybe if I was a college kid living in a dorm room and my laptop/desktop was my main display for watching tv/movies, but it’s not.  It’s my main display for actually doing office work and development.  I have two 20” Dell monitors (non-widescreen) that have a maximum resolution of 1200×1600.  I love working on them. I can display full page Word documents with ease and developing is wonderful.  Having ample pixels to work with in height is just as important to me as a high performance machine.

Our department just ordered a new set of laptops for our users.  I’m not in IT so we have them give us their recommendations and order from that.  It turns out that they don’t have the time to nitpick every order so Dell has set up a new service where they have their current business model machines set to go and our IT department just clicks the order button. 

What kind of monitor did we get with our new business class laptop and docking station?  A widescreen Dell 19” E1910H.  It has a maximum resolution of 1280 by 720.  720 pixels in height?  Ouch.  That’s less than a standard 15” monitor with a resolution of 1024 x 768.  Today’s standard (in my opinion) for office machines would be 1280 x 1024 or more.

Here is a picture of the monitor with a Word document at 100%.  You can barely see half the page:

clip_image002

Here is a picture of the monitor with a Word document at full screen.  It’s hard to tell in the picture but you can’t read the text.  this might be nice for an Excel user but for documents it’s terrible.

clip_image002[4]

Oh, notice the stand too.  Do you like the cardboard box underneath?  The stand only allows a slight tilt up or down.  It has no height adjustment or rotation.  In my opinion the Dell P190S is a much better office class monitor.  It has a maximum resolution of 1280×1024 and a stand that tilts, pivots and has height adjustment along with the usual extras like multiple inputs and USB ports. 

In the end I can say it was my fault for not verifying the details on every single line item (there are like 40 on a Dell order) but isn’t that the point of having Dell offer their recommended office equipment, so that my IT department or I doesn’t have to spend the time to do this?

epiphan VGA2USB is a no go on Windows 7

I’ve been attempting to record our presentations at the Inland Empire .Net Users Group for a while now.  epiphan graciously donated one of their VGA2USB products to help us capture the presenter’s live screen without having to install any software.  It’s been really helpful. 

I just upgraded to an HP dv7t 3000 core i7 laptop running Windows 7 Ultimate 64-bit.  Apparently epiphan’s 64-bit driver doesn’t seem to work on Windows 7 Ultimate 64.  While their bundled video recording software captures the input just fine I have not been able to capture anything other than a one second black video using Windows Media Encoder 9 64-bit, Microsoft Expression Encoder 3, Camtasia Studio 6.0.3, VirtualDub 32-bit or VirtualDub 64-bit.  Ugh.

epiphan has a stable version of their 32-bit driver along with a beta version that reportedly works with Windows 7.  Neither were able to correctly install on my laptop.  Their 64-bit driver was able to install and recognize the device just fine but I can’t capture video with anything other than their built-in program.  Unfortunately their built-in program does not capture audio.  When you capture just video, most of the codecs have a variable framerate which causes the audio and video to go out of sync throughout the entire presentation.  Recording them together on Windows XP using Windows Media Encoder worked like a champ.

Oh well.  While their website offers little in the way of support they have usually responded to me within about 24-48 hours when I email them.  Hopefully we can get this resolved before the next user group meeting.

This is just scary. T-SQL with “shapes”

I was reading one quick article on SQL and code formatting.  Now that SQL (2005+ I believe) allows for international characters they gave a pretty scary example of what can be done:

CREATE TABLE "╚╦╩╗" ( "└┬┴┐" nvarchar(10))

DECLARE @ nvarchar(10) set @=‘═’

INSERT INTO "╚╦╩╗"

    ( "└┬┴┐" )

SELECT replicate(@,5)

SELECT *

FROM"╚╦╩╗"

DROP TABLE "╚╦╩╗"

This is no joke.  I just did it and it worked great.  :-0

MVC Bug with Default DropDownList or ListBox HTML Helpers

There are a lot of examples out there on how to pass a SelectList or MultiSelectList object to an Html.DropDownList or Html.ListBox helper.  However, I couldn’t find anything that was explaining the problem I was having.

In my app we have a Show object that represents a podcast.  Each show may have multiple Guest objects, which are accessed by the Show.Guests member.

In the Admin controller I have the following Action method:

public ActionResult EditShow(int id)
{
var show = _repository.Get<Show>(id);
show.Guests.Load();
var guestList = new MultiSelectList(_repository.List<Guest>().OrderBy(g => g.Name), "Id", "Name", show.Guests.Select(g => g.Id));
ViewData["GuestsSelectList"] = guestList;
return View(show);
}

In the Edit View I display the fields for the Show and a ListBox for the Guests.  You can select multiple Guests for a show.  Ideally, when you edit a Show the Guests that are already associated with the Show are pre-selected.  Makes sense, right?

Here is the code called in the View:

<%= Html.ListBox(" GuestListBox ", (MultiSelectList)ViewData[" GuestsSelectList "])%>

If you follow this you’ll notice that I am adding to the ViewData a MultiSelectList object, which contains an IEnumerable collection of all the Guests, that “Id” is the value field, “Name” is the text field, and an IEnumerable collection of the guest.Id values that are already associated with the show.  However, this never caused the ListBox to select the values upon rendering the page.

I used the debugger and, sure enough, my MultiSelectList object was successfully populated with the properly selected items.  What was the deal?  The breakdown must be happening with the Html.ListBox helper.  I spent a couple of hours scouring this myself and scouring the Internet.  I went home determined to re-write the Html.ListBox helper myself and just be done with it. 

However, the next morning I decided to download the MVC source.  Here’s a great and simple article from Steve Sanderson on how to attach it to your project so that you can step through it with the Visual Studio debugger.

One nice thing about Html.ListBox and Html.DropDownList helpers is that you don’t have to provide a collection of SelectItems explicitly.  If you have an item in the Model or ViewData that has the same name as the ListBox or DropDownList then it will find it automatically.  If you do explicitly provide the SelectItem collection you can opt to not provide the default values explicitly.  Again, as long as you have a object (or member of an object) that has the same name as the ListBox or DropDownList it will find it and use it.

Here’s the rub though.  If you explicitly define the SelectList collection and the default values (as I did in my code) the Html helper looks to the Model and ViewData first before your default items.  This normally never causes a problem, until you name your ListBox or DropDownBox the same name as one of your objects or members.

Notice that I called my DropDownList “Guests”? Notice how the Model is a Show object, which has a Guests member variable?  It turns out that the Html helper was grabbing this collection, rather than my values.  Technically these are the guests I want to default to, however, the Html helper was getting a collection of Guest objects not a collection of Guest Id values.  When it compared each guest Id in the full list with the actual Guest objects in the default list it never found a match.  Thus, nothing was ever selected.

What’s the fix?  Simply change the name of your ListBox or DropDownList.  When I changed the name value to “GuestListBox” all worked well, because, as you would expect there is no object or member in the Model or ViewData called “GuestListBox”.  Once it couldn’t find one it dropped through that code and used the default values I provided.

To find exactly where MVC is doing this check out the SelectInternal member in the SelectExtensions.cs file.  This is the internal method that both ListBox and DropDownList eventually call.  You can see commented code that states:

// If we haven’t already used ViewData to get the entire list of items then we need to
// use the ViewData-supplied value before using the parameter-supplied value.

In my opinion this is a bug.  It shouldn’t even check the ViewData or Model if you have already explicitely provided the default values.

So, I added my vote to the bug that was already submitted for this on CodePlex.  I haven’t check to see if this has been resolved in MVC v2.