January 2007 Blog Posts

Paraesthesia.Tools.NAntTasks 1.1.0.0 Released

New tasks added:

alpharesx: Alphabetize .resx files by resource ID.

lintrelativepaths: Fail the build if a reference hint path uses a relative path to a common location.

propertydelete: Don't just set a property to an empty value - delete it so you can use property::exists to your advantage.

Go get it!

Got Battery?

Went to lunch at Sonic with Scoble today. Unfortunately, wasn't able to leave Sonic because my battery - fresh from being jumpstarted - was dead. Again.

A quick trip to Les Schwab fixed me up, but that was $50 worth of battery I really wasn't prepared to spend over lunch. And it doesn't enhance my mood any. Could've been worse, I suppose. Might have been a starter or alternator or something. Then again, the day ain't over yet.

Little Annoying Things

This is going to be one of those entries that sounds like I'm whining about a bunch of little insignificant things, and you're probably right. Unfortunately, it's the aggregation of all of these little things that's making me nuts right now.

Dead Battery
Thursday night I left the dome light on in my car, resulting in a dead battery Friday morning. Jenn left for work early, before me, so when I got in the car and found it not willing to start, I was alone and screwed. Luckily we have AAA, so I called the roadside assistance number to get someone to come out and give me a jumpstart. They told me they'd be there in 45 minutes.

An hour and a half later, the guy finally showed up. It took two minutes for him to hook a portable charger up to my battery and get the car started. Lesson learned: don't be in a hurry if you need roadside assistance.

Power Windows
Due to the battery going out, my power windows started acting wonky. They'd still go up and down, but I have this feature where you push the button down until it clicks and the window goes all the way down without you having to hold the button. That feature stopped working.

I figured it was a fuse or something and started picking about in the fusebox trying to figure out which one was burned out. There are like five fuses for the power windows (which is weird because I only have two windows that do anything). Thinking there might be some advice in the power window section of the owner's manual, I flipped to that section to find no discussion of fuses at all.

Of course, there's a tiny blurb in the middle of everything that tells you that if the battery goes dead or power becomes disconnected, the "auto power window" feature will disable. It further provides instructions about holding buttons down for a certain period of time to "reset" the system. Grrrrrr.

Instant Messaging
I use instant messenger a lot. We use it at work, I use it at home... I have three messaging clients installed (Google Talk, Windows Live Messenger, Office Communicator) to make sure I can get in touch with people and people can get in touch with me.

What I have noticed is that there are two types of people using instant messaging clients: those that mind the status message and those that see it but somehow believe it doesn't apply to them.

What do I mean? Tell me you don't have that friend or relative who will send you an instant message and expect you to chat chat chat even though they know you're at work and you have your status set to "Busy" or "Do Not Disturb" because you're trying to get stuff done.

Here's a quick primer for the people in the cheap seats:

 Windows Live CommunicatorGoogle Talk
DO talk to me - I'm availableWindows Live Communicator online status indicatorsGoogle Talk online status indicators
DON'T talk to me unless it's super importantWindows Live Communicator busy status indicatorsGoogle Talk busy status indicators


Yeah, this makes me look like a big dumb antisocial jerk, and I guess I'm going to have to live with that. But when I'm at work, I'm generally working and, especially lately, under the gun to get a product ready to ship. Email is a great way to catch up or drop me a link to the latest gadget site you found online that I need to see. When I'm at a stopping point or take a break, I'll be sure to check it out.

Motivational Difficulties
We're at the tail end of the product release cycle so the work lately has been extra boring. Fixing defects like "this label contains a spelling error" and "this field has a rounding error" and whatnot is the spit-and-polish that's gotta be done for the product to ship but it's not the most stimulating work, to say the least.

I'm bored. Bored, bored, bored.

And, yeah, I'm sure it's affecting my attitude. I'm not feeling terribly motivated to go the extra mile on fixing defects that, in many cases, shouldn't have been there in the first place. I suppose I should be glad that really all we've found are little stupid defects and not some colossal "holy crap the site doesn't work" sort of thing - it speaks well of the great team I work with - but it doesn't make it any more interesting. I find it harder and harder to wake up and get motivated to get in here.

It'll pass when we get out of this rut, but it's a long tunnel to travel down to get to the light. They have free soda at work... I'm thinking they might want to put, say, free vodka in along with that. Heh.

Lack of Coordination
I just finished up playing Lego Star Wars 2 (good fun) and have returned to Gears of War. I played through the single-player campaign on the easy difficulty, but before I jump online I want to play it through on the medium/normal difficulty.

The thing is, I haven't got the coordination.

I have a great time playing the game, but in all seriousness, I'm having a hell of a time getting through the thing on the medium difficulty setting. I like playing games, and I like playing with other folks, but it occurs to me that if this is just the average difficulty, then it's not going to be any fun for me. I don't mind losing, but I do like to win sometimes, too. Hence the reason I wanted to get through at least the medium difficulty - to get good enough to maybe compete a little.

What I'm starting to realize is that I generally just suck at first person shooters. I can hold my own in racing games or fighting games or what-have-you, but I just don't have the coordination to run around and aim and shoot that, say, your average 14 year old has.

That said, I'm not super great at racing games or fighting games or what-have-you, either. I'm passable. I lose more than I win, but I'll win enough to keep me interested. I guess I just don't have the time or inclination anymore to dedicate to any single game and get good like that. I get bored with it too quickly. I get tired of reaching that point at which frustration breaks you and you realize you're just not going to be able to finish the level.

Anyway, I don't know if I'll be able to get through Gears of War on the medium difficulty as much as I'd like to be able to. I guess that's nothing new - I couldn't get through even the second level on GRAW on the medium difficulty. It's just frustrating.

Lip Sync and Automated Dialogue Replacement (ADR)
I reached a point where I could no longer handle watching videotapes because of the sound and picture quality. I couldn't put up with it anymore because it was too obvious and annoying on my home theater system. That very day I ran out and bought a DVD player and have never looked back.

As time goes on and I get better equipment - better speakers, better TV, etc. - I start noticing more and more things that bother me. Once I notice it, it's over. I can't not notice it anymore.

The thing that I've noticed lately is that the lips on the people on television and movies are not always actually synchronized with their words. Sometimes it's dead on. Sometimes it's just a little off. It might vary even through a single movie or TV program - one second it's on, one second it's not.

The problem is, it's not any single cause. It might be the TV taking too long to decompress the image. It might be the cable box sending the audio and video signals with bad synchronization. It might be the cable feed sending the audio and video signals with bad synchronization. It might be crappy ADR work.

I'm actually noticing bad ADR work more and more. I have to chalk it up to bad ADR when I'm watching a standard-def movie on DVD that will have proper lip synchronization in one scene but be just slightly off in another. Generally when I notice it, the picture is actually just slightly ahead of the sound, so there's nothing I can do. If it was the sound ahead of the picture, I'd pipe the whole thing through my receiver and add a delay to the sound. But it's not - there's no way I can add a "video delay." It's gotta be bad ADR. And just about the time I'm really annoyed by it, the scene changes and there's no issue anymore.


Anyway, I'm just annoyed by a lot of little things lately. No one of them is very big, and they all sound stupid and petty, but it doesn't make them less annoying. Here's to turning things around, eh?

Paraesthesia.Tools.NAntTasks - Custom NAnt Tasks

I use NAnt to do my automated builds both at home and at work. As such, I decided to start keeping a little library of custom NAnt tasks that help me get things done. I'll add to this library of custom tasks as things get fixed and new things get added.

To use the tasks, add a standard <loadtasks /> line to your NAnt build script and reference the custom task assembly. After that, you can use the tasks just like you would any other built-in NAnt task. It'll look like this:

<loadtasks assembly="Paraesthesia.Tools.NAntTasks.dll" />

The available tasks include:

alpharesx: The <alpharesx /> task is used to alphabetize resource files (*.resx) by resource ID. This is helpful in an environment where automated tools are used to merge resource file contents (like the built-in merge facilities in many source control products). Since many diff products don't do XML data differencing, odd merging tends to happen, especially when several developers are working in the same .resx file. Keeping the resources in a fixed order, in this case alphabetical, reduces confusion for the diff tool and makes automated merging much simpler and more reliable. It also helps when hand-editing the .resx file to be able to find what you're looking for in an easier fashion.


lintrelativepaths: When you add a reference to an assembly from a project, a "HintPath" is added to point to the location of that assembly. If it's a standard .NET Framework assembly, that "HintPath" will point to the .NET Framework assembly deep inside the WINDOWS folder. That's not a problem... until you get multiple developers working on the same source but checking it out to different locations on their machines. The reason is that by default, references get added with relative paths - so you might see something like ..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll. However, if that's not the relative path to the .NET 1.1 System.dll from where I checked out the code, my build will fail. How do you solve it? I solve it by using absolute paths - rather than ..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll, I put \WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll. (Not foolproof, but far more reliable.)

This task searches specified files using a regular expression and fails the build if you have relative paths to common locations like WINDOWS, Inetpub, or Program Files.


nunitexec: The <nunitexec /> task is a replacement for the built-in <nunit2 /> task. With NAnt and NUnit versions changing, there's all nature of trouble in getting the built-in task to work using assembly binding redirects and so forth. Generally people switch over to use the NUnit console application to avoid the issue, but the <exec /> task doesn't allow the nice syntax of the built-in <nunit2 /> task and changing working build scripts over is a pain.

<nunitexec /> has identical syntax to the built-in <nunit2 /> task, it just runs the console app. An option is included to allow you to specify the location of the NUnit console application. Refer to the <nunit2 /> documentation for a description of how to specify formatters and tests to run.


propertydelete: NAnt lets you create properties, change property values... but not delete them. That makes the property::exists test fairly limited. There are times when you might want to make a property not exist so you can better make use of simple tests like property::exists. That's what the <propertydelete /> task does - it doesn't just unset the property, it deletes it so it no longer exists.

Usage documentation is included in a CHM file in the binary distribution (or as XML doc in the code). It includes syntax descriptions and examples. You can get the source to the tasks as well. If you find a bug, send me email or leave a comment and give me a way to reproduce the issue.

Download Paraesthesia.Tools.NAntTasks 2.0.0.0
Download Paraesthesia.Tools.NAntTasks 2.0.0.0 Source

Version History:
1.0.0.0: First release. Includes nunitexec task.
1.1.0.0: Added alpharesx, lintrelativepaths, and propertydelete.
2.0.0.0:
  • Updated to .NET 2.0.
  • Updated to NAnt 0.86 beta 1.
  • Fixed nunitexec task to no longer output the "framework" parameter.
  • Fixed nunitexec task to properly quote only the value of command-line parameters.
  • Fixed alpharesx to output .resx files in 2.0 schema format.

ISO vs. VIDEO_TS Storage for Media Center

In my continued research into how best to go about digitizing my movie collection and making it more accessible than it currently is (binders full of DVDs aren't too accessible) I'm reconsidering my position on storing the movie as ISO and might now just copy the VIDEO_TS folders to a drive instead. (I like DVD Decrypter for this.)

It turns out that both MediaPortal and My Movies for Media Center will support ISO playback using Daemon Tools, but ISO doesn't work for Media Center Extenders like the Xbox 360. Ideally you'd just store one copy of the movie, but with ISO not working, saving ISO would mean having to save two versions of it - the ISO and a MCE-compatible version. Talk about space usage.

My Movies has a document talking about which format to store movies in (they recommend VIDEO_TS over ISO) and the Xbox 360 as a media extender. Turns out Transcode360 can handle VIDEO_TS now, too, so from a "lossless" standpoint, it may be that VIDEO_TS is the way to go.

You can even burn VIDEO_TS to a watchable DVD later, which was my original notion of saving the ISO - so if the original DVD gets corrupted or scratched, I can re-create it. The only thing I don't know is how the various audio tracks (commentary, etc.) and extras (menus, behind-the-scenes videos) live on via VIDEO_TS and/or manifest on the Media Center Extender.

Find Unused Radio Stations

Neither my wife nor I have our iPods directly integrated through a line-in to the car. I have a tape deck adapter; Jenn uses a radio transmitter. For those in Jenn's place, there's a site that helps you find unused frequencies in your area. Here's the list of unused frequencies in my zip code.

IE7 Command Line Arguments

For one reason or another, I occasionally need to run Internet Explorer from the command line - maybe a script, maybe a shortcut, whatever. Good luck finding documentation on the available command line arguments for it, though, and iexplore doesn't respond to "/?" or anything.

Luckily, PeteL runs them down for us.

Clipboard Follow-Up: ClipX

After posting about several clipboard management software packages I'd tried that didn't quite meet my needs, I got some great comments from readers and tried out a few suggested packages.

I finally ended up with ClipX - it does everything I was hoping for.
  • You can right-click on the tray icon and select a clip, making it the active clip on the clipboard but not automatically pasting anything into any application.
  • You can use an alternate "paste" key to have the menu of clips pop up right in the application you're working in and select the clip to make active and paste - no confusing out-of-application experience.
  • The interface is minimal - there's no giant explorer window to deal with. The biggest it gets is the "clip management" window that lists out the current set of clips and lets you edit or delete them, but even that is basically just a big listbox.
  • It's got a plugin SDK and a few interesting plugins ready for download.
  • There are configuration options, but not so many it's overwhelming and every one of them makes sense.

Installed and loving it so far.

Here's the interface working inline - hit the "alternate paste" key (by default Ctrl-Shift-V) to bring this up and select a clip to paste in...

ClipX inline with TextPad

And here's the tray menu where you can just select the clip to make active without actually having to paste anything...

ClipX tray menu

I'm digging it. Check it out.

GuidGenConsole - Generate GUIDs at the Command Line

For those who haven't jumped neck deep in PowerShell, it's a pain to generate GUIDs. That GuidGen app that comes with Visual Studio is a pain.

Everyone's chipped in their own three-line GUID command-line generator, but I wrote one that fits my needs, so I figured I'd post it.

How's it different? Mine emulates the formatting for all of the available formats in standard GuidGen (though, admittedly, I don't use the C++ formats like IMPLEMENT_OLECREATE so someone will have to tell me if what I'm doing is messed up) and it lets you create multiple GUIDs at once. The entire output gets copied to the clipboard, too, so if you just generated 15 GUIDs and you need to paste them into a file, you don't have to copy each individually or generate 15 separate GUIDs.

GuidGenConsole Help

I didn't bother even including a readme or anything with this because it's dead simple.

Download GuidGenConsole 1.0.0.0
Download GuidGenConsole 1.0.0.0 Source

Pocket PC USB Sync Drivers

More a reminder for me than anything... last week I was having a hell of a time getting my Pocket PC to sync up. I'm not sure what happened - one second it was working, then it disconnected and wouldn't reconnect again. Rebooted and no luck. I ended up figuring that something weird happened to the drivers (it kept registering as an "unknown device").

But where do you get the USB drivers for Pocket PC?

This is what I ended up using and it seems to support a load of models (including my ViewSonic V37). Now I'm back in business.

Clipboard Manager Software

UPDATE: Based on comments from readers and trying a few suggestions out, I ended up going with ClipX, a free product that does exactly what I'm looking for.


Clipboard manager, clipboard organizer... whatever you call it, what I went searching for yesterday was something that would help me with multiple copy/paste selections so I could re-use earlier items I'd copied. (In my case, I was doing several commits to source code repositories - fixing the same thing in different versions of software, so I wanted identical log messages but didn't want to keep all of them in Notepad or whatever.)

Office comes with a clipboard manager but it only works when an Office program is running and, frankly, it's not my favorite. I can't put my finger on why - all I know is I see that thing and I'm instantly confused. Maybe I'm just uninitiated.

For the record, there is one feature missing from every single clipboard manager I've tried: I want to be able to select an item from the list and automatically have that replace whatever is currently on the clipboard. Every single one of these keeps track of what you put on the clipboard, but if you want to put one of the saved clips into your application, you have to double-click it and let the application do the "paste" action for you. I don't want that. I want to be able to select the clip, then go back to whatever application and hit Ctrl-V myself. Trying to make sure the app the clipboard manager is going to do the paste in is the correct app is cumbersome and almost more trouble than it's worth.

If someone knows of a [preferably free] clipboard manager that allows you to select an item and have it become active on the clipboard, let me know. If it's good enough, I'd even consider paying for it. That's how much I want that feature.

Oh, and several clipboard managers I came across use databases to store their stuff. No thanks. I don't need another service running just to help manage my clipboard. I want this thing to be lightweight and self-contained.

Anyway, when I went searching I found a few different products. Here's what I came out with:

LW-Works Clipboard RecorderLW-Works Clipboard Recorder: This is the one I'm currently using. There are two "views" for it - this little floating window (pictured) and a larger window that allows you to select one of the clips and preview it. It has support to preview several data types on the clipboard and is fairly configurable. You can set it up to show with a Windows hotkey, you can specify what sorts of things you want to be able to keep on the clipboard list, you can allow (or not) duplicate clippings from the same application... it's pretty good. I like the detail with this one - two views, the primary view being a super-compact window that conserves space but isn't so small it's unusable; the fact it puts the icon of the application it grabbed the clip from right next to the clip; the fact it minimizes instead of closes if I hit the "X" button in the corner of the main window. If it had the selected-item-in-list-is-active-on-clipboard feature, this would be The One.

There is a free version and a professional version. The free version has anything you need for a general clipboard manager. The professional version adds the ability to have multiple clipboard lists, save lists for later retrieval, send clipboard items to another computer, and paste multiple items at the same time to an application.

Clipboard.NETClipboard.NET: This is an open source project that is fairly young but is shaping up to have some nice features. The notion of having a plug-in framework for the clipboard monitor is appealing to me, and this has that. Several of the features ("Paste As HTML," "Google This," etc.) are implemented as plugins, and that's cool. The UI could use a little help as it is fairly large to have running all the time and has a lot of wasted space. There are a lot of options that could be added as well. Unfortunately, I spoke to the author and he doesn't have much time to dedicate to this lately, so unless someone else steps up, we may not see this come to fruition.

DittoDitto: This is a pretty popular open source project that has a lot of features. Too many features, in fact. So many, I almost can't even tell you what the thing can do. I mean... well, let me show you, rather than tell you:
Ditto Options
Notice how there are six tabs' worth of options? Each tab has the bajillion options on it that you see here. The working of the application is about this complex. Maybe it's just me - I bet this thing would do all I need it to if I could only wade through all the options and figure out how to get it to work.

It feels like this started out cool but ended up with huge feature-creep. Definitely by programmers for programmers. My mom would never be able to figure this out. And, honestly, I'm not eager to personally take something like this on.


So there you have it. I haven't yet found "the perfect clipboard manager." Like I said above, though - if someone has one that they think can satisfy me, I'd love to hear about it. Leave me a comment with a link so I can try it out. The key feature - in fact, it might have the worst UI ever but this feature would make it worth it - is to select an item and have that become the active clipboard item. None of these do that.

Dog Day Evening

Saturday found Jenn and me going to Laserport with Jason, Tracy, and Adam for a couple of rounds of laser tag. (My legs are killing me today, indicating that I clearly do not get enough exercise - a fact I'm well aware of but somehow never really do anything about.) Laser tag is hella fun and our team put the good ol' smack down on anyone we faced.

Only thing beyond that notable for Saturday: We got stuck behind this fairly inconsiderate driver who turned right in front of us when they had the red light and a sign posted for them saying "no turn on red." This is the first time I've actually been prompted to file a complaint against someone on Platewire.

Sunday was relaxing pretty much up until the very end. Jenn and I cleaned up some clutter that needed to be dealt with, we played some video games, and we ran a few errands. No big deal. We were enjoying the time until about 8:30p, when we were about to start watching a movie and heard this terribly loud barking coming from behind the house.

Now, we've had to talk to the neighbors before about their barking dog, but they really reined it in and it hasn't been a problem for a long time. This time, though, was far worse than any of the other times - it was extra loud and the dog was whining, crying, and barking all at the same time.

Irritated, I opened up my back curtains to see what was going on and there was a beagle puppy in my back yard. No collar, no license, just running around barking and whining.

Jenn and I went outside to see how it got in. The gate into the yard was closed, there were no holes under the fence, and all the boards were in place - it didn't get through the fence. We really don't know how it got there, but we're figuring someone dropped it into our yard. Fantastic.

Meanwhile, my cat's tail is as big around as a soda can. She's freaked out, alternating between stalking the dog through the window and hiding under the couch. To alleviate a little of that, we took the dog around the house and into the garage.

Here's the problem: It's late and animal control is closed to the public. Unless it's attacking or it's got a license, you're stuck until morning. What do you do?

You call the sheriff's office and they send an officer out to pick it up, that's what.

Of course, if either Jenn or I went inside, the dog would whine and bark; if we were both outside with it, it was fine (albeit a little hyperactive). So we were stuck sitting in the garage with this dog that someone dropped off in the yard, waiting for the police to come get it. We fed it some chicken (it was super hungry) and gave it some water while we waited. It took about an hour and a half before the officer showed up to get it. Let me tell you, there was some serious magazine reading going on.

So we're dog-free once again this morning, which is fine by me. I hope the dog finds a good home (I'm sure he will - he was cute), but mine is not that home.

Be An M&M

Another in the long line of making yourself into a popular character style... now you can be an M&M character.

Here's me:
Travis as an M&M

And here's Jenn:
Jenn as an M&M

Grant Drake on Sandcastle

Grant Drake (of NCoverExplorer note) speaks out about his dislike for Sandcastle. I've already voiced my negative opinions on Sandcastle. Months later, I still dislike it. Unfortunately, I've been fighting with it for so long that I don't know if there's much they can do to address my dislike. There's a lot of work still to do...

Snowed In

Oh, what a week it's been.

Saturday Jenn and I went with my friend Torin to check out Night at the Museum. It was actually pretty darn good in a "cute" sort of way. I don't know that I'll be buying it on DVD, but I didn't walk out feeling like I was cheated out of my money, either.

Sunday and Monday were a blur. Monday was a federal holiday, so we didn't have to work, but Jenn had plans to hang out with her family, so I was left alone with the cat to play video games and watch movies. I've been watching The Pretender Season 1 and loving it. (Just ordered Season 2 so I can keep going. I can't believe I didn't see this when it was on TV.)

Tuesday and Wednesday some serious cold weather hit the Portland area and made the roads really icy, so Jenn called in sick and I worked from home. You can see some of the footage of people who decided to drive in it. Not good. My dad had some trouble sliding around, too, and is going to have to make a visit to the local body shop to get his car fixed up.

I don't ever really feel productive when I'm home, though, because frankly there are so many more interesting things to do than work. But you gotta do what you gotta do, and I ended up on the couch with a TV tray and my laptop. Not terribly ergonomic by any means.

I'd have blogged all this yesterday, but we saw a huge spam increase at work and in order to stem the tide, hosts that sent spam to us were being blocked for access. Unfortunately, someone must have sent spam spoofing my domain or something because somehow my site got flagged as a spam site and I couldn't connect. I've got the block removed, but now I'm working with my ISP and our IT guys to see why I got blocked in the first place and track down what we can do to stop it in the future (if anything). I'm in a shared environment, so there's not a lot I can do from a server lockdown perspective other than having strong passwords on my accounts.

Which brings us to today - Friday - and even though it's been a short week, it's been a long week. I woke up this morning exhausted and with a distinct lack of motivation. I'm doing what I can to motivate myself chemically (Mountain Dew?) but it's not working super well. I won't lie - I'm just not interested in what I'm tasked to do, so it's difficult to have a lot of zeal. Hopefully there will be something more fun to deal with next week.

Google SketchUp

I come across this sort of thing and always feel behind the times.

Google has this 3D modeling program called SketchUp that is apparently already on version 6. I haven't tried it yet, but it looks like it's pretty easy to use. It's no 3DStudio but it'll do in a pinch. Plus you can then place your 3D model on Google Earth so you can see what it will look like out in the world. Cool!

I Need a New Computer

It's been a few years since I've upgraded the ol' PC and I'm thinking the next time I do it, I will probably get a laptop. I don't generally upgrade individual components on my machine - lack of time, money, and energy, you see - and it'd be nice to be able to sit in the living room and watch a little TV or whatever while I'm answering emails and such.

I found the laptop I need this morning:

Is this Dr. Evil's laptop?

I'm all about the giant button and arbitrary LED readout. Oh hell yes. Pair this with the self destruction button USB hub and you're gooooooooooold.

Go check the laptop out! (via BoingBoing)

New Favorites for the New Year

Lots of change in recent times has brought about some new discoveries and new fun favorite things. Here are a few of the things Jenn and I have gotten into lately.

Simple Italian Sandwiches Panini: My sister and brother-in-law got us an ice cream maker for a late wedding/Christmas gift, but Jenn and I are too fat already so we ended up taking it back to Williams-Sonoma to see what else they have we might need. While there, I saw this cookbook and somehow got an insatiable craving for panini. Within the next two days we got a panini grill and are now addicted to panini.

I Love New York I Love New York: If you thought Flavor of Love was a train wreck of global proportions, you have to see the spin-off I Love New York. The contestant we all love to hate is back, and she's got her own show. I can't even begin to describe it, and I can't tear my eyes off the screen.

Gears of War Gears of War: I got this game for Christmas and am loving it. I haven't gotten online yet - I'm waiting to get through the single player campaign and hone my mad skillz a bit first - but even the single player campaign is great.

Lego Star Wars II Lego Star Wars II: The Original Trilogy: Jenn and I can't play games together because we are far too competitive, but this one seems to work. I got it for Jenn for Christmas and it's hella fun.

Amazon Associate "Product Previews" Issues

I updated the DHTML tooltip script to allow peaceful coexistence of my DHTML tooltips and the Amazon "Product Previews" link enhancement script, but I'm having issues getting everything to work together on my site. In a very simple page - the example included with the DHTML tooltip script - everything rocks. On my blog, everything works great in Firefox 2.0. In IE 7, I get all sorts of weird artifacts - the CSS on the page goes nuts, making the titles of my articles look different; the Product Preview that pops up is entirely missing the product title and sometimes other things; and a JavaScript error pops up telling me that there's a "syntax error" (but doesn't provide much information beyond that).

I've sent a note to Amazon to ask for help. Hopefully they can hook me up.

Amazon Associate DHTML Image Tooltips 2.1 Released

This latest adds support for the DHTML tooltip script to co-exist with the Amazon "link-enhancer" script that has been released. The Amazon script takes precedence; links that have been modified by the Amazon script will be bypassed by the DHTML tooltip script. Tooltips that explicitly make use of the DHTML tooltip script will still function properly, and Amazon links not modified by the Amazon "link-enhancer" script will still be updated by the DHTML tooltip script as always.

Go get it!

2006 Retrospective

What can I say about 2006? I think about it and it reminds me of A Tale of Two Cities - "It was the best of times, it was the worst of times." Some of the stuff I blogged, some I didn't, but let's see if we can recap some of the major happenings.

In January, I ended my three year stint of taking allergy shots. I still have some minor troubles now and then, but nothing like it used to be. I put it to the test when we went karaoke-ing at a local pub, marking it as the best time I've ever had at a karaoke bar.

In February, Stu and I invented "units" - running up against a video game for sometimes hours on end. Jenn and I started working out to try and look good for the wedding (and it didn't totally fail, but it didn't really succeed, either).

In March, following a great run at Paper Mario, I went to the Corillian Casino Night and had a blast. We saw the Cirque du Soleil show, Varekai, and we decided a lot of stuff surrounding the wedding (like catering). I also went to a really great Peer Mentoring seminar and learned a lot of stuff I use all the time.

April found Stu entirely addicted to coffee in a week (which we'd find out would end a few months later after he decided it was really kicking his ass). I got further into some fun board games, switched to cable phone service, and got my Xbox 360. We rounded the month off with the 24: Season 1 marathon. April also found Stu and Tiff getting divorced, which, while I didn't blog it and won't go too far into it, was an unfortunate occurrence for them that affected Jenn and I far more than I think either of them realized. This was actually quite a turning point for a lot of things. I'm sorry it had to happen, and I wish things would have worked out.

In May I spent a lot of time playing Tomb Raider: Legend and my dad got an Xbox 360 (though he's rarely on it, which sucks). It was all to be overshadowed with my granddad passing after a bout of cancer. I still think about him all the time and miss him very much.

In June not a lot happened beyond some experimentation with scripting and contact information and a round of rototilling at home. I did take a bad drink in there, but I wouldn't really qualify that as "eventful" as much as just gross.

July was much more eventful. My sister, Tori, got married to a really cool guy named Brandon (congrats again!); Jenn and I did our usual pyrotechnics at the sewage treatment plant; I turned 30 and had a great birthday (even though my Xbox 360 died and had to be sent in for repair); and my stinking dad got me hooked on R/C helicopters so I had to spend a lot of money.

In August we got our sprinkler system installed. I got my Xbox 360 back and discovered the lameness that is Xbox Live Digital Rights Management. We got the house trim painted, but it didn't turn out too great and had to be fixed. Stu's parents came to visit and it was great to finally meet them in person and talk, even if they couldn't stay very long. I also went a little aggro because people just don't understand the need for RSVPs when planning a wedding.

September started off with a fun, unit-filled Labor Day weekend. I didn't (and still don't) get Sandcastle and think Microsoft should have just taken NDoc over. I got myself a PSP (love it!) and discovered the awesomeness that is TypeMock.

October began with my bachelor party in Vegas, one of the best times I've ever had. I saw the Cirque show KA while I was there, front row center, and it absolutely rocked. The month peaked when Jenn and I got married and went to Aruba.

November was fairly uneventful, which was fine since October was exactly the opposite, and ended with a fairly lame Thanksgiving (my least favorite holiday).

December started off slow, but things definitely started happening toward the middle of the month when we were hit with a city-wide blackout. I also wrote about some of the cool gadgets I use to help me keep the house clean. The month took a definite downturn as Jenn's fat kitty got sick and had to be put down. That cast a shadow on Christmas, making it sort of hard to have a great time the way you really should during the holiday.

I took the last two weeks of the year off and started back to work on the third of January, 2007, after taking a while to recover from Jason and Tracy's yearly New Year's bash (which was a load of fun where I proved once again that I am an unstoppable force at Scene It! and where I successfully avoided getting conned into going streaking). Stu was there, but ditched after showing up fairly late and only hanging out for about an hour - just as we were starting to play games. He missed out on a great time.

2006 was a pretty stressful year. A lot happened, both good and bad, and I'm really not sure where 2007 will lead. Friends I thought were really tight with me have drifted (extremely suddenly and fairly inexplicably) away. I find that unfortunate, particularly as I'm sure they don't actually realize it. Or maybe that's just the way things go. Friends that had drifted away over the course of the years have come back and are just as much fun as ever, albeit slightly changed over time. Things I thought would become regular traditions turned out to be more important to me than to other folks, and things I never thought would happen came to pass.

Regardless, the past is past and what's happened has happened. On to 2007, whatever it holds in store.