To continue the theme from my last posting, allow me to say that I am really having fun with Team Fortress 2. I never played the original Team Fortress, so I didn't know quite what to expect going into this game. Thankfully, I have been pleasantly surprised. The cartoon visuals are incredibly unique, so much so that I hope other games use this look and feel at some point. Likewise, gameplay is so well balanced, that the game is fun even when you are consistently on the losing team (as was the case for me tonight). In other multiplayer games (such as Unreal Tournament 2004), it was often that case that I would get frustrated when my team continually failed to gain the upper hand. With Team Fortress 2, I never have that feeling; I'm having so much fun that the thought of becoming frustrated never even crosses my mind.

One small feature that helps in this regard, and one that I have really come to enjoy, is the sophisticated stats tracking. Every time you die, you get a snapshot of who killed you. Occasionally, during this freeze frame, you'll get a little box that says "On the Brighter Side..." and then presents you with a record that you've just broken. For example, after dying once tonight, I got an encouraging statistic that said "On the Brighter Side ... You did more damage than your previous best!" It also told me the new record value (2186, if I remember correctly), so as to give me something to work towards beating. This kind of encouragement is really great, and helps you see that you're actually getting a little bit better each time. I hope other multiplayer games take note of this feature and implement something similar.

It's a little disappointing that there are only 6 maps, but again, the gameplay is so fun that this minor point becomes a non-issue. Valve has mentioned that they will be releasing more maps in the future, so I'll patiently await the arrival of some new content. My current favorite classes are the Soldier, Medic, and Pyro (these are the 3 classes I've had the most success with). Be sure to check out Team Fortress 2 if you get the chance. So far, I'm having a blast!

I'm not sure if any of you have seen Pushing Daisies (Wednesdays at 8:00 PM EST on ABC), but I am thoroughly enjoying the show. It's a comedy-drama (described in some places as an 'forensic fairy-tale') and is, in my opinion, the most creative thing to come to television in a long time. The story revolves around Ned, a pie-maker, who has the uncanny ability to bring dead things back to life. There are, however, several rules he must adhere to:

  1. If Ned touches something that he has previously brought back to life, it dies permanently.
  2. If the thing that Ned brings back to life is alive for more than one minute, something else nearby dies to take its place.

Emerson Cod, a detective friend who discovers Ned's secret ability, gets Ned to partner up with him to solve unsolved murders. The general plot is that Ned brings back the murder victim, asks them how they died, and they collect the reward money (if any). But there are further complications to the story.

In his childhood, Ned was good friends with a girl who lived across the street, one Charlotte "Chuck" Charles. Ned's mother dies unexpectedly, so he brings her back to life, at the time not knowing about his power's two constraints. As a result, Charlotte's father dies unexpectedly (from rule 2 above). After touching his mother a second time, she too dies (from rule 1 above). Ned is sent to a boarding school, and never sees Chuck again. Later in life, however, he sees that Chuck has been mysteriously murdered. He brings her back to life and, unable to bring himself to killing her again, keeps her alive (a nearby undertaker dies to take her place). Chuck and Ned are instantly smitten with one another, but their relationship becomes somewhat difficult as a result of Ned being unable to touch Chuck.

The show ultimately revolves around the unsolved murders (a new one each week), and around Ned and Chuck's relationship and the complications therein: namely that they cannot touch one another (though they find a few workarounds), and that Olive Snook, a waitress at the Pie shop where Ned works, falls in love with Ned. It has been a long, long time since something this unique and engaging has been on television, so I heartily recommend it. The direction of this show is very similar to the works of Tim Burton, so if you like his movies, you'll like this show.

Update: You can catch full episodes of the show at ABC.com if you want to get caught up on the storyline. You have to install a custom player (yuck), but Dustin tried it out and it says it works OK.

So a guy goes into a Best Buy, purchases a Western Digital hard drive, and finds out later that the box is filled with bathroom tiles. He tries to return the hard drive (since it wasn't what he thought it was), and the manager says that they can't do that. Instead, he should take up the complaint with the manufacturer. How is this even legal?

I'll just add this story to the ever-growing list of reasons why I don't shop at Best Buy. Amazon.com FTW.

I recently downloaded the demo for Unreal Tournament 3. Being a big fan of Unreal Tournament 2004, this demo particularly interested me. I've given the game a thorough testing, and here's what I think.

The Good

Gorgeous Graphics
As is to be expected, the game is incredibly nice to look at. And it runs really well on my rig, which I'm pleased about. I have a feeling that this game engine will be the defacto standard for a few years to come.
Really Fun Gameplay
Epic has retained all of the fun gameplay from UT 2004. The maps feel well balanced, the vehicles are a blast to drive (though I wish they had included the Leviathan), and the action seems a little more frantic than in past UT games.
Hoverboards
This is a really fun addition to the game, and makes getting around on the larger CTF map a lot easier. I can't wait to see what mods are released that utilize this gameplay a little more.

The Bad

Poorly Designed Menu System
The game's menu system is very difficult to navigate, and needs to be cleaned up considerably. What happened to the clean and concise menus of yesteryear? The in-game server browser is in a similarly rough state, making joining online servers more difficult than necessary.
Noticeable Lag
I noted that in every online match I played, server lag was very noticeable. Being on a cable modem connection, I expected a relatively lag-free performance, but that wasn't the case.
Unable to Bind Tab Key
For some reason, I was unable to bind the Tab key to show the score (my usual setup). I've had to stick with the default F1 key, which is hard to reach with one hand during a game.
No Score Results After a Match
In UT 2004, when a match was over, the scoreboard from the game was conveniently shown. That's not the case here (or at least I couldn't find it, short of bringing it up myself with the F1 key).
Only 3 Maps
The demo only includes 3 maps, which is a shame. There are 2 deathmatch maps, and 1 vehicular capture the flag map. I hope they haven't dropped the Onslaught game type, as that was my favorite one.

The Ugly

No In-Game Chat?
I saw that certain keys were bound to chat to other players in the game, but I never saw this used. Was this feature disabled in the demo?
I'm Out of Practice
It's been some time since I've played an online shooter like this (since UT 2004, as a matter of fact). As such, I am horribly out of practice. I used to be a fairly good online gamer (I was once globally ranked in Starsiege Tribes), but these days that isn't the case. I've found that the Skilled bot difficulty is about as much as I can take. I gave the Adept difficulty a go, but failed, finishing last against 7 bots. I usually finish in the middle of the standings when I play online, which is slightly encouraging.

Overall I've enjoyed this experience, but there are a number of rough areas that need improving before I will purchase the game (last I knew, it was slated for a November 9 release).

I've tweaked this site to use an improved means of search engine indexing. WordPress ships with a less than perfect SEO setup. As such, many incoming search queries were hitting pages that no longer included the requested terms: stuff like archive pages, category pages, etc. This duplicate content problem was easily solved by using the following snippet of code in my header.php file:

if(is_home() || is_single() || is_page())
    echo "\t<meta name=\"robots\" content=\"index,follow\" />\n";
else
    echo "\t<meta name=\"robots\" content=\"noindex,follow\" />\n";

I now ask search engines to only index those pages that are either a single post, page, or the home page itself (my photo album also gets indexed, but that's handled by the photo album software itself). Nothing else gets indexed, but all page links are followed, so that the target pages can be indexed as necessary. This should lead to improved search engine hits, leading people directly to the content they were looking for. Win-win for the user and for me.

For those who don't already know, I absolutely adore the Half-Life universe, and I believe whole-heartedly that Half-Life 2 is the best game I've ever played (though titles like The Legend of Zelda, The Elder Scrolls IV: Oblivion, and System Shock 2 are close runners up). You may recall that I also really liked Half-Life 2: Episode One (looking back on my review of that particular title, I can say that two of my three bad points, "Too Expensive?" and "Stuttering," are no longer valid in my book; my judgment was clouded on the former and updates have corrected the latter). So what is it that draws me so closely to this gaming franchise? In a word: storytelling. I'll be posting more on this particular topic soon, but suffice it to say that few games (if any) have affected me as deeply as the Half-Life series.

Episode Two is most definitely the Empire Strikes Back of this series. In my review of Episode One, I speculated that this might be the case, and it turns out that that theory was right. Be warned that this episode is very dark. It has been known since the release of Episode One that a primary character is killed through the course of events, and that is indeed the case. I'll say no more except that the particular moment is the heaviest blow I've ever experienced in a game. My upcoming post on the use of storytelling will delve a little deeper into this (without spoilers, of course).

I have played through Episode Two twice, and I'm nearly halfway through my third play-through, this time with the always entertaining developer's commentary turned on. As such, I feel like I have a pretty good grasp of the game, and so I present to you the following thoughts.

What's New

Allow me to first highlight what's new (or changed) in Episode Two:

Particle System
One of the first graphical changes you'll notice is the new particle system. This new feature adds some interesting effects, which get used in a number of places. Keep your eye out for the tweaked blood and gore when shooting an enemy (especially the ant-lions).
Cinematic Physics System
Used in several places throughout the game, the new cinematic physics system is really great. There are a few really dramatic sequences where large structures crumble quite realistically. You'll find a high-level description of how they implemented this system in the developer commentary, which I found very interesting.
Dynamic (and Decoupled) Flashlight
A new lighting system has been implemented, which allows Gordon's flashlight to cast realistic, dynamic shadows in the game world. This small tweak adds a lot of depth to the rendering engine. One oddity is that the flashlight no longer drains the HEV suit's main power source. Instead, the flashlight now has its own dedicated battery. While this is a welcome change (and one that should have been implemented all along), it breaks the continuity in the game's universe. The developer commentary mentions this break in continuity, and their justification for the change is understandable.
Hunters
The Hunter, a brand new enemy which we caught a glimpse of in Episode One, is fully introduced in Episode Two. I won't spoil any of their encounters, but allow me to say that these guys are very tough (a welcome change). They play a large part in the last climactic battle, and are a potential source of frustration due to their difficulty.
Combine Advisors
We briefly met the Combine Advisors in both Half-Life 2 (where we saw them on several computer screens) and in Episode One (where we see them in strange pods). They are more fully fleshed out in Episode Two and are horrific creatures. As you might expect, they play a pivotal role in the story.
Enemy Variants
There are a few variations of enemies that we've seen before. The fast zombies now appear in a new "upper torso-only" form, where they pull themselves along the ground using their arms. Three brand new ant-lion variants are present: ant-lion grubs, an ant-lion worker (which spits a nasty acid ball that causes a surprising amount of damage), and the powerful ant-lion guardian. I also noted that a few of the Combine soldiers have updated uniforms, though they are otherwise identical to the existing soldiers.
The Magnusson Device
Gordon doesn't get access to this new device until the very end of the game. I'll only state that it's very handy in taking down those nasty Striders.
Other Small Changes
A host of other tweaks can be found scattered through the game. Fire effects have been updated (though I'm not sure they look any better). The quick-info reticle is now enabled by default and cannot be disabled. Subtitles now match up a little better with the actual speech rate. And I'm sure there are others I've forgotten to mention.

The Good

So what did I like in Episode Two?

Story
As I've already stated, the storyline in the Half-Life series is what makes each game so enjoyable, and Episode Two does not disappoint. Some answers to questions raised in Episode One are supplied, but new mysteries are also introduced. The G-Man makes a very formidable appearance which really creeped me out. If there's only one scene that's worth watching though, it's the final one. Never before have I been so moved. This is by far the best running storyline in any game to date.
Non-Stop Action
In another similarity to Empire Strikes Back, there is no rest for our heroes in this episode. Tension is held high from the first moment you enter the game all the way through to the powerful ending sequence. This "only one-step-ahead" kind of gameplay is genius, pure and simple.
Graphics
The Source engine is still, in my opinion, one of the best looking game engines around. Eye candy has been improved in this release, along with lots of very subtle changes that you're not likely to see at first, though the developer commentary sheds some light on these seemingly hidden items. Although it doesn't run as smoothly as Episode One, the visuals are as good as ever.
New Locales
Episode Two takes place in a number of brand new locales, which have never before been seen in previous Half-Life titles. This refreshing change is very welcome, after having spent so much time in City 17. On the whole, these new locales are much more expansive than we have seen in previous titles. However, the new driving levels feel a little claustrophobic when compared to the "Highway 17" chapter of Half-Life 2.
New Vehicle
A brand new vehicle is added in this episode, and it's a blast to drive. The controls feel a little too sensitive to me (as compared to the buggy from Half-Life 2), but I really had a fun time driving through the countryside with Alyx riding shotgun.
Ties to Portal
Though it's not crystal clear at this point, I'm willing to bet that the events in Portal (which I recently reviewed) will affect what happens in Episode Three. There are some very interesting ties between the two games, as is alluded to in the transmission sent by Judith Mossman. I'm excited to see what will develop here.
Achievements
Episode Two includes a number of achievements, just as most XBox 360 games do. This is an interesting concept, and adds a little replayability.

The Bad

There are a few minor things that I disliked about Episode Two, none of which really impacted my overall impression.

Relatively Short
As with Episode One, this outing is a short affair. I completed the game in about six hours, short of the eight to ten that Valve mentioned earlier in the development life-cycle. The fact that I can't get enough of this universe doesn't help matters. Had it been 12 or 15 hours long, I might have still complained. :P
Surprisingly Easy
I was a little disappointed with how easy the game felt. That's not to say that there aren't a few difficult moments; being chased by the ant-lion guardian is particularly nerve-wracking, as is the final battle. According to the developer commentary, it sounds like a number of areas and puzzles were simplified due to playtesters being unable to make forward progress. I don't know where they found their playtesters, but they must not play games very often. One piece of commentary mentioned that a particular tester unknowingly walked in a small loop in one level for literally 30 minutes, trying to figure out where to go. That kind of idiocy indicates to me that Valve isn't putting much effort into finding good people to test their products. I'll gladly volunteer for a test position, and I'll do a much better job! :-D
Flawed Collision Detection
I'm not sure what changed in this arena, but the collision detection in Episode Two seems much weaker than in Episode One. There are a few places where I saw objects clip through world geometry, breaking the realism. Maybe a future update will fix this.
Decreased Gravity Gun Accuracy
The gravity gun doesn't feel as accurate as it was previously. During the course of Episode Two, I often found myself picking up a piece of debris instead of the item my crosshair was pointing at. Again, hopefully an update will correct this.

The Verdict

Wow. Episode Two is by far the best episode in this trilogy. It's going to take Valve a lot of work to surpass the level of excellence they've set here, but if anyone can do it, I know they can. I'm guessing that it will be some time before Episode Three sees the light of day, but I can already assure you that I will be preordering the minute it becomes available. If you haven't picked up Episode Two as a part of The Orange Box, make sure you do so; you will not be disappointed.

Portal Review

Oct 18, 2007

I've played through Portal a couple of times now, and I thought I'd post my thoughts on the game. Along with Half-Life 2: Episode 2, this was one of the two items I was most looking forward to in The Orange Box. My review of Episode 2 will come later this week, as I have only played through it once, and I'd like to give it at least one more going-over (I can't wait to write about it though; there's so much I want to talk about). For now, let's talk Portal.

The Good

Hilarious Dialogue
The dialogue in the game is well written and very funny. The writer's should be very proud of themselves; few games are of this caliber. One downside to this is the fact that GLaDOS's voice can be a little difficult to understand at times. I highly recommend turning on subtitles when you play through the game the first time; it will make understanding her much easier.
Innovative Gameplay
Portal is such a unique concept. Although Prey used the portal concept, it wasn't nearly as well executed as in this game. Being able to shoot entry and exit portals nearly anywhere you want is a really great touch. I can't wait to see where Valve will choose to use this technology again.
Ties to the Half-Life Universe
The storyline in Portal is loosely related to the Half-Life universe. In fact, having played through both this game and Episode 2, I am beginning to wonder if we won't be seeing Portal technology in Episode 3. The ties between these two games may be stronger than is now apparent, and only time will tell how closely they are related.
Achievements
Interestingly enough, the PC version of Portal includes Achievements (as most X-Box 360 games do). This is a nice addition to the gameplay, and it will be interesting to see if Valve continues to include this idea in future titles.
End Credits
Best end credits sequence ever! And an accompanying song by Jonathan Coulton seals the deal.

The Bad

Short Gameplay
Portal is only about two to three hours long, which is a bit of a disappointment. The advanced levels and level challenges (shortest time, fewest portals, fewest steps) add a little replayability, as does the developer commentary (which is highly entertaining). But the main storyline is short (though the twist in the storyline is highly entertaining). Once you've solved the main puzzles, and you make it past the storyline twist, there's little reason to play through again.
Easy Difficulty
The majority of the puzzles seemed quite easy. I didn't truly feel challenged until test 15 out of 19, and though the last few levels were a challenge, I never found myself hopelessly stumped. The advanced levels are much more challenging (and stumped me for a while), but there are only 6 of them. Hopefully more will appear over time.

Bad points aside, I can't recommend this game highly enough. As a part of The Orange Box, it's an even greater deal. This is definitely a title you should pick up this year. You won't regret it.

This past Sunday afternoon, I made the decision to purchase The Orange Box on Steam, forgoing the traditional media route. You might recall that I did the same thing with Half-Life 2: Episode 1, swearing to never do it again. I have since changed my mind on the matter. It occurred to me that Valve is a company I truly want to support. Unlike any other game developer, I actually look forward to their game releases. Much like supporting local farmers through a local farmer's market, I decided I would buy this package right from the source, cutting out the middle man.

The only downside to electronic distribution is the fact that you have to actually download the content. Half-Life 2: Episode 2 is approximately 6 GB in size (according to Steam), so it took a while to get, even on our cable connection. Having the physical media to install with would have been much quicker, but I feel that my direct support of Valve outweighs that minor quibble.

I have since downloaded both Episode 2 and Portal, and have played through both once (I was up very late last night). There is so much I want to write about each, that I will separate my thoughts for both into two posts. Stay tuned.

On Monday, Slashdot carried a story about two key developers leaving the Thunderbird project. Is this a sign of troubled times ahead? Mozilla is attempting to spin off the product into its own company, which seems rife with failure to me. As a user of Thunderbird, I certainly hope that this isn't the end of such a great product.

The third service pack for the Windows XP operating system has now officially entered the beta testing phase. According to an article at neosmart.net (link points to a network mirror, since the site is down), there are 1,073 patches in this service pack, a testament to how long it's been since SP2 was released. What I find most interesting, however, is that Microsoft is back-porting features from Vista into this service pack. A few specific features have been mentioned:

  • New Windows Product Activation model
  • Network Access Protection modules and policies
  • New Microsoft Kernel Mode Cryptographic Module
  • New "Black Hole Router" detection

Could these back-ported features be a sign that Microsoft is getting ready to drop Vista? Take up on the new operating system has reportedly been very slow, with the large vendors (HP, Dell, etc.) requesting XP preloads instead of Vista, due to customer demand. Microsoft has always been its own biggest competitor, and this could be a sign of a power struggle within the corporation (XP teams vs. Vista teams). If they do indeed pull the plug, I predict a collective sigh of relief from around the globe. Only time will tell what happens.

I recently ran into a problem on my system where all the HTML document icons had been reset to the generic default icon: Default Windows Icon

Apparently, the Minefield build of Firefox had at some point corrupted this icon. I found that I was unable to change or reset the icon through the Folder Options » File Types dialog in Windows Explorer. No matter what I tried, I couldn't restore the icon, and it drove me nuts. Then I figured out what to do, thanks to this forum post at MozillaZine:

  1. Open RegEdit.
  2. Browse to the HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FirefoxHTML registry branch.
  3. Delete the ShellEx\IconHandler registry key entry.
  4. Close RegEdit.
  5. In Windows Explorer, browse to the Documents and Settings\{username}\Local Settings\Application Data folder.
  6. Delete the iconcache.db file. It's hidden, so you may need to tweak your Windows Explorer settings to see it.
  7. Reboot.

Problem solved!

I bought a Linksys WRT54GL today, to replace our aging DLink DI-624 (it had been acting pretty flaky as of late). The Linksys router supports open-source firmware, and our first course of action was to flash the highly recommended DD-WRT distribution. I have to say that I am very impressed with this firmware. There are lots of options available and it reports lots of interesting information.

Setting up the router wasn't difficult, but my dad and I ran into problems getting our IBM laptops connected wirelessly. All of our other machines were able to connect without any problems, so it was clearly a problem with either the ThinkVantage Access Connections application or the IBM wireless adapter. We spent quite a while trying to get things working, and finally found the issue. We had originally set the Wireless Network Mode option in the router basic setup to "G-Only" mode since we intended to use 802.11g only around our house. But for whatever reason, the IBM laptops didn't like that. Switching the option back to "Mixed Mode" cleared up the problem immediately, much to our delight. Hopefully this little tidbit will help out someone else facing the same problem.

4Q Gaming Outlook

Oct 4, 2007

My birthday was earlier this week, and I got The Legend of Zelda: Twilight Princess for our Nintendo Wii. So far it's been a great game, and I've only just started the story line (even though I'm only over 4 hours in). There are lots of great games coming in the fourth quarter of this year, and I'm so excited! Here's what I'm looking forward to:

  • Metroid Prime: Corruption (Nintendo Wii, Available Now!)
  • The Legend of Zelda: The Phantom Hourglass (Nintendo DS, Available Now!)
  • Half-Life 2: Episode 2 (PC, October 9)
  • Portal (PC, October 9)
  • Guitar Hero III: Legends of Rock (Nintendo Wii, October 28)
  • Call of Duty 4: Modern Warfare (PC, November 5)
  • Gears of War (PC, November 6)
  • Unreal Tournament 3 (PC, November 9)
  • Super Mario Galaxy (Nintendo Wii, November 12)
  • Geometry Wars: Galaxies (Nintendo DS & Wii, November 13)
  • Crysis (PC, November 16)

So many games, so little time! What games are you looking forward to?

P.S. - This is post #400 at Year of the Code Monkey. Pretty cool!

Firefox 3 will include several heavy-hitting changes to extension development, some of which will cause existing extensions to break. Let's take a look at what's changing, to get an idea of what to expect from a development point of view:

New APIs One big change that will likely break some existing extensions are the new Firefox APIs being introduced in 3.0. All of the bookmark and history APIs are changing radically, with the introduction of the new Places architecture. As such, any extensions that make use of these will need substantial work to run properly in Firefox 3. Similarly, any extensions that use the Password storage functionality in Firefox will need changes (a new login manager will be used to handle stored passwords). It remains to be seen how one will develop an extension that will be compatible across all versions of Firefox. I haven't seen any mention of simply deprecating the existing API calls, though I would hope that's what the developers would do.

Secure Updates Firefox 3 will require that all extension updates be provided over a secure channel, to avoid man-in-the-middle attacks. This means that if you are not using the official addons.mozilla.org website to host your extensions, you must provide your own secure method of distributing updates. One has several options for doing this:

1. The updateURL must either use https or not be provided at all.
This method assumes that you either host with the official site (thereby not using an updateURL value at all), or you are willing to host your extensions from a secure location using https. The latter option will likely cost you money, while the former forces you to use a website beyond your personal control.
2. The updateURL uses http and the updateKey entry is specified.
This second option seems a little easier to swallow, though it will involve a little extra effort on the behalf of extension developers. First, an updateKey value must be provided in your extension's install.rdf file. Second, a digital signature must also be included in the update manifest; otherwise, the update will be rejected. Your updateLink value can either use https, or it can use http while providing an updateHash value. The updateHash value can be generated using either a sha1, sha256, sha384, or sha512 hash algorithm. But take note: you should not use sha384 or sha512 as of this writing. This forum thread mentions bug 383390, in which both sha384 and sha512 values are incorrectly truncated by Firefox 2.x (making backwards compatibility a problem).

Some further information about this new signing process can be found here.

Other Changes The two items above aren't the only changes coming down the pipeline for extension development, but they are the largest changes that I can see. A document detailing the new items is available, and should (hopefully) be updated as 3.0 nears an actual release date. It looks like extension developers will have a fair amount of work coming up, but I think these changes will be beneficial in the long run. How well the community accepts these changes remains to be seen.

Thoughts on iTunes 7

Sep 26, 2007

As I mentioned briefly yesterday, I recently bought my first iPod (the 80 GB, generation 6 model). I haven't gotten much time to play with it due to constant interruptions at work (which really sucks), so I'll be coming back to it later this week. For now, I'd like to share some thoughts on iTunes 7.

I've been using iTunes on my laptop for a while now, for the sole purpose of subscribing to podcasts that I enjoy (Diggnation, The Totally Rad Show, They Might Be Giants, etc.). In that regard, it does a great job. But until now, I hadn't used any of the the music library features.

Ripping a CD in iTunes

Ripping music from a CD is very easy. You simply put in the CD and iTunes prompts you to import it (after loading CDDB information about the CD). I like the fact that I can cancel the prompt, unselect the tracks that I don't want to import (or fix incorrect track names), and continue. I'm a accuracy freak, so the CDDB information is always important to me. Thankfully, the iTunes database is way more accurate than the database used by Windows Media Player. To my best recollection, I haven't needed to make any corrections so far; simple tweaks to remove stuff like "[Live]" or "(alternate take)" are all that I've done. Editing track information is incredibly easy, and you can batch edit multiple tracks at once (very handy).

In order to get album art, you must have an Apple store account. And in order to get an account, you have to provide a credit card number (which sucks). Thankfully, there's a way around this. Simply buy a prepaid iTunes card (I bought one for $15), and use that to create the account. Easy and a little more secure! Downloading the album art is quick and painless, but iTunes sometimes gets it wrong. Thankfully, it's easy to use your own album art image files. But where does one get these images? Surprisingly, I've found that Amazon.com is the best place to get the images. Most albums have user-submitted images, which can be used easily. I've filled all the holes in my collection using this technique, so I highly recommend it.

The iTunes Album View

I've noted that iTunes is clearly a multi-threaded application. When I'm ripping a CD, both of my processors are using about 80% of their available cycles. Ripping seems to take a little longer than in Windows Media Player, though I haven't done a side by side comparison, so it could simply be my poor time estimation. I chose to use MP3 files (instead of AAC) at 160 kbps, higher than the 128 kbps I used to rip at with WMP. I'm about 2/3 of the way through ripping my music library, and it's taking forever. But think of the music I'll be able to listen to!

Syncing music from my computer to my iPod is incredibly easy. I initially thought that I would manually manage the music on my iPod, but the automatic syncing is so easy I'm not sure that I want that hassle. Other miscellaneous thoughts: the "cover flow" view in iTunes is a nice gimmick, but seems a little impractical for frequent use. I prefer to use the searching, sorting, and browsing options (which are all quite responsive).

Overall I'm quite pleased. Like any application, iTunes has its quirks, but overall it seems like a very solid program. I think I prefer it to Windows Media Player 11, which now feels like even more of an iTunes wannabe than it did before I switched.

A recent article at Indistinguishable from Jesse gives some updates on the current state of memory management in Firefox. There are some exciting improvements coming in Firefox 3, which should be a boon to many users. One of these days, when I get a free chance, I'd like to examine my extensions with the leak-gauge.pl script. I'm not 100% sure that there isn't a leak or two in Googlebar Lite, though I've done my best to be careful.

In entirely unrelated news:

  • WordPress 2.3 has been released. I'll probably upgrade sometime this week.
  • I just got a new 80 GB iPod. Pictures, reviews, and thoughts will appear throughout the week, so stay tuned.

Another new recurring feature I'm going to try out here at the site are programming tip 'grab bags.' These will often feature a few tips I've picked up over the years, which I find highly useful. We'll start out this inaugural article with a few Perl tips:

1. Don't parse command line options yourself

One thing I've learned a number of times over is to never parse command line options yourself. Why? Because the Getopt::Long and Getopt::Std modules do it for you (and they make it both easy and convenient). These standard modules allow you to store away your command line options either in separate variables, or in a hash. There are times you'll want to use Getopt::Long over Getopt::Std (and vice-versa), so know the differences between the two. Either one will save you lots of time and headache. Here's one way to make use of this module:

use Getopt::Std;

our($opt_c, $opt_d, $opt_t);
getopts("cdt:");

my $filename = shift;

This tiny snippet parses the given command line parameters, looking for either a 'c', a 'd', or a 't' option. In this example, the 'c' and 'd' options are flags and the 't' option expects a user supplied value (note the trailing colon). If the user passes either '-c' or '-d' on the command line, the $opt_c and $opt_d variables will get set appropriately (otherwise, they remain null). Likewise, if the user passes a '-t' on the command line, the $opt_t variable gets set to the value the user passed in (so the user would need to type something like myScript.pl -t someValue). Otherwise, $opt_t remains null. Also note that we are still able to retrieve other values passed in via the command line (in this example, a filename). Quite handy!

One other hidden benefit of the Getopt modules is the fact that they handle combined options. So, myScript.pl -cd would parse just the same as myScript.pl -c -d. Doing this kind of parsing by hand would be tricky, so don't try to do it. Let Getopt do all the work for you.

Getopt::Long allows for long options (which make use of the double dash, such as --verbose), but it can also handle single letter options. Storing options in a hash is also available to both modules, making it very easy to set up if you have lots of options to parse.

2. Use printf (or variants) to print plurals

This tip comes from the excellent Perl Cookbook, and I've used it a number of times. Use either the printf or sprintf functions to handle printing the proper plural (or singular) of a value. For example:

printf "%d item%s returned", $size, $size == 1 ? "" : "s";

If there were only 1 item, we would print out 1 item returned. Likewise, if we printed out 2 or more items, 2 items returned (note the trailing 's'). You can use this trick to print the proper plural for words that have strange plurals, like "goose" and "geese."

3. Use File::Spec to handle cross platform file paths

The File::Spec module and its children allow one to easily make cross-platform file paths, useful for those scripts which must operate across operating systems. In one project at work, I made use of the File::Spec::Functions module, which exports a number of handy functions. I find the catfile function very handy, and I use it like so:

my $logFile = catfile('weeklybuild', 'log', 'build.log');

The function takes care of putting the right separators between the values (backslash for Windows, forward slash for Linux, and colons for the Mac).

Earlier today I mentioned the xkcd web comic. If you aren't familiar with the comic, I highly recommend it. It's well worth subscribing to or bookmarking. I've gone through all of the comics, and have compiled a list of my favorites. Make sure you read the hidden jokes in each strip, by hovering over them with your mouse for the title attribute. Enjoy:

One nice thing about the xkcd web comic, is that each comic's image has an additional joke or tidbit of information hidden away in an HTML title attribute. Hover your mouse over it for a second or two, and you'll see the joke. Sometimes, the text is fairly lengthy, as in this example. Unfortunately, Firefox only shows one line of text in a title tooltip, so any lengthy amounts of text get cut off with an ellipsis.

Thankfully, bug 218223 was filed way back in 2003 (as a Firebird equivalent of a bug posted in 2000). Now, 7 years later, a fix has been implemented. Firefox 3.0 will include this fix, much to my delight. This just might be enough to make me switch to the alpha builds of 3.0 for my daily browsing habits.

Update: I've found an extension that fixes this problem. Woo-hoo!

A Gaming Milestone

Sep 13, 2007

Among all of the computer games I have ever played, one game has stumped me for as long as I have played it: the "Expert" difficulty level of Minesweeper. I have never, to my knowledge, beaten the game at that level, though I've tried a number of times. Granted, Minesweeper is a game that I rarely play, but you would think that I could have beaten the Expert level by now.

I'm happy to say that I've finally conquered this foe. Here's my result:

Cleared in 376 seconds