Dear Nintendo: A Wii Storage Solution, Please!

We have a Wii. We’ve had it pretty much since they hit the market. We love it, yes Wii do. Except for one thing: the unbelievably small amount of internal storage the thing has. It only has 512M of storage that is used for game save data. For people who don’t have a lot of games, that’s probably plenty. It was plenty for us, too, until we started buying lots of games and downloading games from the Shop Channel. I can’t tell you how many times we’ve wanted to download something new from the Shop Channel, only to be told we don’t have enough free space. Some of the games, especially the old console games, are tiny. Most take up only a single “block.” But some, like the episodes of Strong Bad’s Cool Game For Attractive People, and the save file for Super Smash Bros. Brawl, are huge. As in hundreds of blocks, huge.

So, what can we do? Well, there’s an SD slot on the front, and we have a 2G SD card in there. But that’s considered completely separate from the internal storage, and none of the games that we have can run with their data file on the SD card. On a few occasions we’ve moved things temporarily to the SD card to free up space on the internal storage, but if we ever want to play that game again, we have to shuffle files around again. Guitar Hero World Tour will, apparently, let you keep downloaded songs on an SD card, but the kicker is that you can only download them to the internal storage and then copy them. But when you already don’t have enough space on the internal storage, you’re still screwed. And last night when I fired up Rock Band 2 for the first time, it told me that it could store “extras” and such on the SD card, and was that OK? I said it was, and it then told me that I didn’t have enough free space to install the bits that would allow me to keep stuff on the SD card. Grrrrr.

There are two USB ports on the back of our Wii. I have an external drive that’s something like 150G that I’m not using for anything. It’s not even plugged in. If Nintendo would allow it, I could plug that into the Wii, and our storage problems would be solved. But they don’t allow that. Well, it’s not that they disallow it, it’s just that plugging the drive in won’t do anything. They have to patch the OS to make it look in other places for data files. And they can do that; they’ve just chosen to ignore the pleas of their users. Much the way Apple has turned a deaf ear to our demands for cut & paste on the iPhone, Nintendo has gone far too long without giving us a reasonable storage solution. My cynical friend is convinced that the solution will be to buy a new “Nintendo Wii Version 2, Now With More Internal Storage!” I sure hope he’s wrong.

Come on, Nintendo, give us a workable storage solution. Soon!

Objective-C 2.0 Properties Are Needlessly Verbose

I’ve been working in Objective-C for a little while now; not quite two years, off and on. I was really excited when Apple announced that Objective-C 2.0 was going to have generated properties, but the syntax they gave us leaves me flat, as it is needlessly verbose.

For those who don’t know, in Objective-C 1.x, if you had an instance variable in a class that you wanted to expose, you had to provide getter and setter methods for it, just like you do in Java, C++ and several other OO languages. You would see something like this in MyClass.h:

@interface MyClass : NSObject {
    NSString *name;
}

- (void) setName: (NSString *) aName;
- (NSString *) name;
@end

and then in MyClass.m, you would see this:

#import "MyClass.h"

@implementation MyClass
- (void) setName: (NSString *) aName
{
    [aName retain];
    [name release];
    name = aName;
}

- (NSString *) name
{
    return name;
}
@end

Objective-C 2.0 promised to eliminate all that boilerplate code in your *.m files for getting and setting variables. But they did it in a strange way. Now, in MyClass.h, you would see this:

@interface MyClass : NSObject {
    NSString *name;
}

@property(nonatomic, retain) NSString *name;
@end

and then in MyClass.m, this

#import "MyClass.h"

@implementation MyClass

@synthesize name

@end

Now, it certainly cut out quite a bit of code for the getter and setter, but why do I have to declare the type of the property twice? You have to declare the instance variable as usual, but then you also have to specify the data type again when you add the @property declaration. There’s no reason I can think of that those two lines couldn’t have been combined into the variable declaration. Objective-C already has tokens that are ignored, such as IBOutlet, so it shouldn’t have been an issue with breaking the parser. And the @synthesize declaration in the *.m file is annoying, but I guess it was necessary to keep the properties from being auto-created in the wrong place.  In my opinion, this is what property declarations should look like

@interface MyClass : NSObject {
    @property(nonatomic, retain) NSString *name;
}

@end

That’s it. No duplication. Simple. Elegant.

Can anyone think of a good reason why they didn’t do it like that?

12/28/2008 15:13:23 Update: As Ahruman pointed out in his comment, I misspoke about IBOutlet. It is not actually ignored, but is used to tag an instance variable for use by Interface Builder. Sorry for the confusion. And be sure to read his comment below. It’s packed with good info that I didn’t know.

Christmas Kindness At Red Robin

Tonight Thomas and I needed to get some victuals, so we decided to go to Red Robin. You may remember the last time we went there and were less than impressed. But Thomas wanted to go there and I was in the mood for a mess o’ fries, so I agreed.

After we were seated, our waiter came over wearing a Santa hat with “Bah Humbug” embroidered on the front. Thomas complimented him on it and he said that it actually belonged to his manager. We placed our drink orders and he left. He came back a few minutes later with the drinks, and told us that he was leaving for the night, and would be turning us over to someone else. I can’t remember her name. 

About ten minutes later, he came back over and put the Santa hat on Thomas’ head. He said that he had talked to his manager, and he said to give him the hat. It was quite a nice hat, actually. Anyway, Thomas thanked him and then asked who the manager was, so he could thank him, too. The manager, Kyle, came over and chatted with Thomas for about five minutes about topics including our plans for Christmas, his plans for Christmas, our new puppy, his dog called Leroy Brown (I asked if the dog was “bad, bad” and he smiled at my recognition of the reference), and the puppy he’s bought for his brother. Thomas thanked him for the hat again, and then he left.

I was really surprised at this gesture. Thomas didn’t compliment the hat in such a way that he was trying to get it; he just said that he liked it. It was very nice of both Kyle and the server to give it to him. We’ll definitely go back and eat there again. And Thomas has already told me he wants to ask if Kyle is in, so they can chat again.

Hollywood Release Windows Suck

A couple of weeks ago I extolled the virtues of my new Netflix Player. I’m still thrilled with it, but the other day I happened to be looking at my instant queue from a web browser, and I noticed several lines in the queue that looked like this

Netflix Instant Queue

Notice anything about that? Yeah, it’s the “Available Until Dec 31, 2008.” WTF? Out of 53 entries in my instant queue, 9 of them will no longer be available after January 1, 2009. That really, really sucks. According to this article and this one, the reason for this is something called “release windows.” These are time periods that the movie studios allow their movies and shows to appear in a given format. Basically, after a certain amount of time, the studios yank content from one medium, such as downloads, and make it available on another, such as broadcast TV. According to the articles, that’s what the studios think will rake in the most money. It seems to me that the best way to maximize profit for a movie or show is to maximize exposure. This means making it available in as many formats as consumers are willing to pay for, for as long as possible. This would give consumers the most flexibility in how they watch the content. And maybe, just maybe, if it were super easy to legally watch the content that people want to watch, piracy would decline. I’m just speculating on that one, of course.

I understand that businesses have to make money to stay in business, but I’m really not happy that 17% of my queue will evaporate on January 2.

Thanks, Hollywood.

Three Days With the Roku Netflix Player

My Netflix Player arrived on Wednesday. It was supposed to be a family Christmas present, but you know how those things go. When something this cool arrives this early, there’s no way it’s going to stay boxed up for three more weeks.

The box is very small, maybe 4.5 inches on a side, and about 2 inches think, and it will fit easily next to our DVD player. Installation was absurdly easy. I attached it to the A/V input jacks on our DVD/VCR and plugged it in. I was planning on connecting to the Internet using my WiFi router, and as the player was coming on, I told the family to pray that it supported WPA2, and not just WEP, because if it didn’t, I’d have to reconfigure the router. Fortunately, it did support WPA2, and within about 30 seconds of connecting the A/V wires, it was online.

After it phoned home, it gave me a code that I had to enter at netflix.com to tie the box to my account. I did this on my laptop and almost before I could pick up the remote again, the screen had changed and was telling me that everything was now set up.

The first screen you see is your “Instant Queue.” This is a CoverFlow-like page which shows you the covers of all the videos in your Instant Queue. This is the one thing that I don’t like about the player: you can’t search for things to watch using the player itself. You have to go to the website using a computer, find what you want and stuff it into your Instant Queue. Once you do that, it shows up on the player within seconds. This is a bit hokey, and they really should have come up with a better solution. However, this is my only real complaint about the thing.

We did get off to a slightly bad start, though. The first thing we decided to watch was an episode of Doctor Who from 1974, featuring the One True Doctor™, Tom Baker. (Nothing against the current fellow, whom I like quite a bit.) I clicked the Play button and it started buffering. And buffering. And buffering. After about three minutes, it started playing, but within 30 seconds, it was buffering again. This was discouraging, but we decided to try something else, and the problem seems to be with this particular episode, as everything else has worked flawlessly.

The way it works is after hitting the Play button, the player buffers for about 30 seconds, then it starts playing. That’s it. You can pause and restart. You can rewind and fast-forward, though this is a bit klunky. What I really like is that if you stop watching a show and come back later, it remembers where you left off. I don’t know how many shows it will remember, but it’s at least one.

So, what did we watch? First, I watched the wonderful concert movie by Talking Heads called Stop Making Sense (it never gets old). Then we watched the first episode of the original (and best) Battlestar Galactica series. We then moved on to season 1 of The A-Team. Those things Thomas and I watched together. After he went to bed, I watched the first episode of season 2 of 30 Rock. We’ve also got season 1 of the original Knight Rider, Buck Rogers and Airwolf in the queue. Lots of great, old shows.

We were slightly disappointed that several of the shows Thomas was hoping for are not available for instant viewing. These include Fraggle Rock, Invader Zim and The Muppet Show. Perhaps these will be added later. Netflix currently has 100,000+ DVDs, but only 12,000ish of these are available for instant viewing. I have to believe this number will increase.

(I should note that they do seem to remove the ability to stream some DVDs occasionally. When they first announced support for OSX, I watched part of Purple Rain, just to test it out. Purple Rain is no longer available for streaming. I don’t know why, but it isn’t.)

So, after three days, we all love the Netflix Player. For us, it was certainly worth the $100 it cost.