Last weekend I finally finished Metroid Prime 3. Here are some quick thoughts I had on the game:

What I Liked

  • The "Morph Ball" mode is incredibly fun. In essence, you become a pinball and get to roll through a number of tracks. There were plenty of puzzles that used this gameplay, and it ended up being my favorite part of the game.
  • The Wii-mote and Nunchuck controls work surprisingly well. This is the first FPS experience I've had with the Wii, and I was quite pleased.
  • Backtracking is well used in the game. There are plenty of areas that are inaccessible until you get certain powerups, forcing you to really explore every nook and cranny of every map.

What I Didn't Like

  • Loading times aren't what they should be. Levels are loaded in an on-demand fashion, and there are some times when the delay gets in the way.
  • The game feels a little too easy. Firefights end up being "how fast can you pull the trigger." Weapon powerups are obtained in a few places, but they never feel more powerful.

All in all, I highly recommend this game; it's a strong A in my book.

Here's a super great tip I learned from an article at Lifehacker.

My laptop here at work, a Lenovo ThinkPad, has a tremendously loud beep (through headphones, it will nearly blow your ears out). This beep occurs every so often when I'm typing faster than the computer thinks I should, and I end up pressing several keys on the keyboard at once. Thankfully, there's now a way to disable this annoying sound!

To temporarily disable the beep: net stop beep To permanently disable the beep: sc config beep start= disabled

In the latter command, note the space between the equals and the word 'disabled.' I'm not sure if that's necessary or not, but including it worked for me. The space is indeed required (thanks Dustin). I had no idea that a Windows service was responsible for this annoyance!

The MinWin Concept

Jan 28, 2008

There's an interesting article at InformationWeek about the new Windows architecture that Microsoft is developing. Windows 7, which is slated to be the successor to Vista, will use a new "MinWin" architecture. Essentially, the Windows core will be stripped down to the bare essentials, and additional functionality will be supplied through modules. According to the article, Eric Traut, a Microsoft distinguished engineer, demoed a version of the Windows core running with only a 25 MB footprint (as opposed to the 4 GB footprint of Vista).

I think this is a step in the right direction. Hard drive size increases have made sloppy programming, resulting in software bloat, much more prevalent. It's time to step back, trim the fat, and work towards leaner software.

My mom and I are watching Larry King last night, and he's talking with Robert Kiyosaki, a businessman and motivational speaker. The subject of conversation is the tanking US economy. Mr. Kiyosaki is wearing a hideously ugly suit and tie. On the phone with Larry and Robert is Donald Trump. The following scene ensues:

KING: Real estate is a good deal, even if you don't have the money. Donald, what's your feelings about the Bush administration and their handling of the crisis? TRUMP: I think the first thing I'd do if I were the president is I'd ask Robert to go out and buy a new suit and tie. That would help the economy and it would help Robert.

Zing! Who knew The Donald had such a great sense of humor? :D

TF2 Update Sneak Peek

Jan 23, 2008

PC Gamer apparently got a sneak peek at the updates coming for Team Fortress 2. Not too long ago, Valve teased the community with a somewhat cryptic message, saying that a 'large scale modification' was planned for the game.

According to the article, this large scale modification includes unlockable weapons for each class, which will be selectable from a load out screen. These changes will be rolled out to the Medic class first. The first weapon described is a new medi-gun that will permanently boost your teammates' health to 200% their normal values (instead of the temporary 150% boost that the current medi-gun supplies). There are no details yet on the second weapon, but it will be another medi-gun that will alter the class in a different way. It sounds like the first gun will be unlockable by acquiring half of the 35 new achievements coming for the Medic class, while the second update will be unlocked after acquiring them all. It should be interesting to see how this new feature pans out.

Another announcement is the new game type being planned, in which the attacking team will have to accompany a mine cart from one end of a map to the other. The article linked above goes into more depth about this game type, and it sounds super fun. In short, I can't wait for these updates!

There are a few gripes I've got with iTunes, all of which revolve around my subscriptions to podcasts:

1. Large downloads freeze iTunes (and sometimes the entire system) upon completion.
When a large (~250 to 500 MB) video podcast file has completed downloading, iTunes will completely freeze up. It feels to me like this hang is related to copying the file from a temporary download location to the intended destination (which is undoubtedly what iTunes is doing). Seeing as iTunes is a multi-threaded application, this should not, under any circumstance, happen. It should spawn a child thread to do the copy operation in the background, so that I can still use the application. Every once in a while, I even see my entire system hang up during this operation, which is doubly bad.
2. Some video files cannot be recycled immediately after viewing them.
After completing a video podcast, I find that I cannot immediately recycle the corresponding file from within iTunes. If I try to do so, the entry in iTunes is removed, but the file does not get removed! To recycle the file properly, I have to shut down iTunes, start it back up, and delete the entry. Somewhere a handle isn't being released properly, and the file remains locked. Again, this is a bug that could easily be solved.
3. The Windows screen saver screws up video playback.
If you have iTunes installed on a Windows system, try this experiment. Get a video file through iTunes (a video podcast for example), and start it playing. Pause the video and walk away from your computer for a while. Allow the screen saver to turn on and, when it has, come back to your computer. When the screen saver is cleared, try to play the video again. What happens? No video! This particular bug has existed for years (I've seen forum references to this bug as far back as iTunes 5 and 6), and it's apparently a known bug at Apple. That they don't get around to fixing it is very intriguing to me.

Matt Cutts has posted three security tips for WordPress users. Here's a quick overview:

  1. Protect your wp-admin directory with an .htaccess file
  2. Protect your wp-content/plugins folder with either a blank index.html or an .htaccess file
  3. Keep your WordPress install up to date by keeping tabs on the WordPress development blog

I was already doing item 1, though I don't currently handle IP white-listing (that's an appealing idea). Item 2 was something I didn't even know to do. When I checked to see if my plugins were listed, they did indeed show up. I have since corrected this issue. Item 3 is a no-brainer.

Matt also suggests removing the WordPress meta tag from your theme's header.php file (which I have also done). This particular "bonus" tip doesn't add a whole lot, but it at leasts cuts down on your broadcasting what version of WordPress you have installed.

Sun Purchases MySQL

Jan 18, 2008

It seems as if Sun Microsystems has purchased MySQL. I don't fully understand the motivation behind this purchase, but Sun must have some plan; otherwise they wouldn't have paid one billion dollars for the company. In my opinion, Sun doesn't have the greatest track record in software, so it should be interesting to see what happens as a result of this change. According to the official MySQL post:

Will MySQL’s support for other programming languages and operating systems now be given less attention? Absolutely not. MySQL is still being managed by the same people, and the charter is still the same.

We can only hope.

I got an email this morning mentioning the following:

This is just a notice that your DreamHost Account #XXXXX has a balance of $71.34 (including any charges not due until 2009-01-23), with $71.34 due (since 2008-12-23).

What?!? I renewed my subscription about a year ago (if I remember correctly), and I got a 2 year renewal, meaning that I should still have about a year left. Furthermore, I completely used rewards money to pay my bill (since I had it available), so my credit card was never charged to begin with. Thankfully, the credit card they have on file for me had expired, but I've lost all of my referral rewards! Needless to say, I was pretty upset by this. Then I found this post over at their emergency status blog: "billing issues". It seems like something went wrong, they know about it, and are fixing it.

I have yet to get my money back, and I have no doubt they'll fix the problem, but it bothers me nonetheless. This problem, coupled with the DreamHost hack seen back in June, are starting to concern me. Not to mention the fact that the server this blog is hosted on has degraded in performance drastically over the past several months. It might be time for me to find another web host. I'll be sure to keep you posted.

Update: To their credit, DreamHost has corrected the issue.

Gizmodo has a Cliff's notes edition of some recent statements made by FCC chairman Kevin Martin. While the article (and the statements) have to be taken with a grain of salt, if any of what he says comes to pass, it will be good times for consumers. Particularly interesting to me are the facts that he thinks cable is too expensive (it is), and that the term "broadband" should indicate something higher than 200 Kbps (I had no idea our defined value for that was so low!). We can only hope that he keeps his word on at least a few of these items.

Death Blow to HD-DVD

Jan 8, 2008

Warner Brothers studios has officially defected to the Blu-ray format, and now Paramount seems poised to do the same. This is all but the end for the HD-DVD format, which is a real shame. Granted, there's no real difference between the two formats (none that are apparent to the common consumer, anyway). Blu-ray discs may end up being more expensive, due to the fact that they cost a little more to manufacture. They also continue the stupid "region coding," where certain discs will only play in the players purchased in a specific geographic location.

If for no other reason, I wanted HD-DVD to win the "format war" because Blu-ray is backed by Sony. Any day that Sony fails is a good day in my opinion, and it's a shame that the movie studios decided to take the low-road. Time will tell how well this format takes off.

I missed one highlight from CES in yesterday's post. Namely, the 150-inch television from Panasonic. With televisions like this on the horizon, I predict a weakening in movie theater ticket sales.

CES Highlights

Jan 7, 2008

I've only been casually following the events at this year's CES, but a few things I've seen have been pretty impressive:

Hacking the Wii

Dec 31, 2007

A couple of guys have figured out a way to hack the Nintendo Wii, opening the door for better home-brew software for the platform. The way they figured this stuff out is pretty cool, and it should be interesting to see what kind of new software is developed now that the "Keys to the Kingdom" are available.

My dad and I both agree that it seems to be in Nintendo's best interest to open up their hardware. Why they don't do it, however, is beyond what we can figure. Maybe they're scared of the game publishers having to compete against "open source" (i.e. free) games? It seems to me that having lots of great third-party, home-brewed software could only help your platform in the long run. Not to mention that it would open up the hardware to great uses as assistive devices (which would be great for kids with disabilities).

Digg on the Way Down?

Dec 30, 2007

Is Digg.com on the way down? I personally find myself visiting the site less and less, turning instead to Slashdot and Gizmodo for my news and entertainment. When I do visit Digg, there's little that I find appealing enough to digg. In fact, looking at my profile, I find that the last story I dugg was on December 12, quite some time ago. The majority of stories seem to be very uninteresting, or (more likely) stories that are already covered on other websites.

Even the Diggnation podcast seems to be degrading in quality. The show used to be solidly funny, but I find myself laughing only a few times per episode these days. I'd much rather have the higher grade content as found in The Totally Rad Show. Neither Alex nor Kevin seem to put as much effort into Diggnation as they once did, which isn't too surprising. Like the saying goes, 'All good things must come to an end.'

One of the things I got for Christmas this year was The Legend of Zelda: Phantom Hourglass for the Nintendo DS. I've played the game for several hours now, and I wanted to discuss Nintendo's usage of the DS hardware in the game. Never before have I seen a video game make such good use of the hardware it has access to. Link is controlled entirely through the use of the touch screen (the D-pad and buttons are hardly, if ever, used), which isn't entirely a new idea; see Kirby: Canvas Curse for a previous touch-screen-only title.

What really blew me away (almost literally) was the usage of the microphone in the game. There are a number of places where the player has to take some action: call out to a character trapped behind a steel door, blow out a few candles, etc. The neat thing is that all of these actions require you to physically do something. When you are told to cry out, you have to literally cry out. When you are asked to blow out the candles, you have to literally blow onto your DS! Is this a genius idea or what? I know that Donkey Konga for the Gamecube used a microphone (where the player clapped their hands), but this is the first game I've personally played that makes use of this kind of hardware.

The game also uses one other hardware feature that helps to advance the storyline (I'll do my best to avoid any spoilers here). At one point, you are asked to perform a specific task to help locate a hidden item in the game world. In order to do this, you literally have to close the lid of the DS, and open it back up. What?!? Unfortunately, the game didn't give me enough hints to figure this out on my own (or I was too dense to make sense of the clues it was giving me). As a result, I got stuck at this particular point and ended up reading about how to advance forward (and I hate having to do that kind of thing). But this hardware hack really impressed me! It will be interesting to see if any other games make use of this technology; here's hoping that they will!

The End is Truly Near

Dec 27, 2007

If there has ever been proof that we are living in the end times, it's this: Internet Explorer 8 has passed the Acid2 test. This is the scariest thing I've heard all year.

Interestingly enough, IE8 only passes this test in 'Standards Mode.' From what I've gathered through brief searching around the web, this appears to be an IE8-only feature that requires some 'magic meta-tag' to enable, though I'm only getting the sketchiest details. The comments in this post shed a little light, but not as much as I might have hoped for.

It's time once again for a programming tips grab bag. As with the previous grab bag, I'll focus on Perl tips since I've been doing some Perl coding recently. Next time, I'll present some tips for PHP.

1. Always use the 'strict' and 'warning' pragmas for production code

This tip is pretty much a no-brainer. Whenever you write production level code, you must make use of the 'strict' pragma (enabled with 'use strict;'). Not only will it save you from a lot of pain in the long run, but it also forces you to write cleaner code. You should also enable warnings, just for good measure. And don't do this at the end of your development cycle; do it right from the beginning. Always start scripts that you think will be used by others with the following two lines:

#!/usr/bin/perl
use strict;
use warnings;

I can't tell you how many times turning on strict checking has saved me from some goofy problems (such as using square brackets instead of curly braces for a hash reference).

2. Use 'our' to fake global variables

Global variables are generally considered to be bad practice in the world of programming, and rightfully so. They can cause untold amounts of trouble and can be quite dangerous in the hands of novice programmers. Out of the box, Perl only uses global variables, which is both a blessing and a curse. For quick and dirty scripts, globals are fine (and encouraged). But for production level code (which uses the 'strict' pragma mentioned above), globals aren't an option.

But sometimes, you can't avoid having a global variable (and they even make more sense than locals in some instances). I recently made use of the File::Find module in one of my scripts, calling it like this:

#!/usr/bin/perl
use strict;
use warnings;
use File::Find;

my $inSomeState;
find(\&mySearchFunction, $somePathVariable);

sub mySearchFunction {
    if ($inSomeState) {
        # Do something
    }
}

The find() call will execute the mySearchFunction subroutine, operating in the $somePathVariable folder. I cannot pass any parameters to the mySearchFunction subroutine, but it needs to be able to check the value of the variable $inSomeState. We previously created this variable using the 'my' construct, but since this subroutine is out of that variable's scope, Perl will complain. We can fix this by forcing the $inSomeState variable to be global, using the our call instead of 'my':

#!/usr/bin/perl
use strict;
use warnings;
use File::Find;

our $inSomeState;
find(\&mySearchFunction, $somePathVariable);

sub mySearchFunction {
    if ($inSomeState) {
        # Do something
    }
}

By declaring the variable with 'our,' we essentially force the variable into a global state (for the current scope, which happens to be the script itself in this case). Very handy!

3. Capture matched regex expressions inline

The parenthesis capturing functionality in regular expressions is extremely useful. However, I found that I always wrote my capture statements as a part of an if block:

if(m/(\w+)-(\d+)/)
{
    my $word = $1;
    my $number = $2;
}

I recently learned that this same code can be shortened into a one liner:

my ($word, $number) = (m/(\w+)-(\d+)/);

Of course, the match may not occur, so you'd have to test that the values of $word and $number aren't null, but it's a cleaner way of capturing stuff from a regular expression.

4. Make sure to shift by 8 for return codes

If you're trying to automate something (which I have been doing a lot of recently), the return codes from external processes are generally of great interest. The system call makes executing a process very easy, but getting the return code is (to me at least) a little non-intuitive. Here's how to do it:

system ("some_process.exe");

my $retval = ($? >> 8);

The return code from the some_process.exe program will be stored in the $? variable, but you have to remember to shift the value right by 8 to get the actual return value.

Valve recently released some statistics on Team Fortress 2. Like their recent hardware survey, some interesting items come to light:

  • Scout, Engineer, and Soldier are the three most popular classes by far (with a combined 49% of the total time played)
  • Medic is by far the least favorite class (only 5% play time)
  • Several melee weapons (the Medic's bonesaw, the Demoman's bottle, etc.) get surprisingly high critical damage percentages
  • The two most popular maps are cp_gravelpit and ctf_2fort
  • The least popular map is cp_granary
  • Red team wins 70% of the matches on cp_dustbowl

Lots of other interesting data is available for those interested. Some of the items I point out above are nearly opposite my own experiences. My least favorite class is the Scout, and one of my favorites is the Medic (I guess that makes me a more defensive player than most). I never use the melee weapons, and I really like cp_granary.

I'm hoping that Valve will rebalance the cp_dustbowl map, because I have noticed that the attacking team (blue) rarely makes it through all 3 stages. Seeing that red team wins 70% of the time is a clear indication that something needs to be done. As I've said before, this kind of statistics tracking is really great for solving these kinds of problems.

There's an interesting op-ed article that contrasts Call of Duty 4 and Crysis. The author argues that emergent gaming (player-oriented, as in Crysis) is the future. Scripted gaming (like CoD4) is the current norm, but it limits the player in a number of ways. Unscripted gaming opens up a world of additional possibilities, at the cost of a much more challenging development paradigm. I certainly hope that games become more unscripted over time; I had a lot of fun with the Crysis demo, and the unscripted work going into the Half-Life 2 world seems to really be paying off.