October 2007 Blog Posts

Halloween 2007

Jenn as Josephine and Trav as Napoleon.Halloween - always a good time.  This year Jenn and I went as Napoleon and Josephine.  The photo here is us on Saturday just before heading over to Jason and Tracy's house for a party.

As usual, we both made our costumes.  Jenn made the dress and cape/robe and I made everything you see but the hat and shoes.  It was quite the effort - more than I anticipated - and there were a couple of all-nighters pulled to get things done. 

Then, of course, I had to go and stain my pants in the chocolate fountain at the party, but that's another story.

The effort paid off - I got the "Honorable Mention" category at the company costume contest.  And had a hell of a time at that party.

When I told people I was going to be Napoleon, the conversation was almost always the same.  In fact, here's a [near] verbatim transcript of how every single one of them went:

Person: What are you going to be this year?
Travis: Napoleon.
Person: Dynamite?
Travis: No, moron, Bonaparte.  It's unfortunate for you that a small-scale cultural icon has overtaken an entire period in history.
Person: Aren't you a little tall to be Napoleon?
Travis: Because I haven't heard that one before.  Thanks for bringing that to my attention, though, because I'd never have thought of it! Guess I'll have to walk around on my knees or something because you can't get past my height but the first Napoleon you thought of was Dynamite.
Person: ...

The level of dripping acid in the conversation was, of course, adjusted based on present company, but you get the idea.

Not sure what we'll be next year, but we've got some ideas.  It was nice to have costumes that "went together."  Usually we just do our own thing.  We'll probably try for similarly-themed costumes again next year.

Family Vegas Vacation 2007

Trav and Jenn on "Speed: The Ride"Last week, my parents, Jenn, and I all packed up and headed down to Vegas for three days.

I've been to Las Vegas a bajillion times now but it's always different and there's always something new and fun to check out, so I love heading down there.  (Granted, it's a little hot for my taste, so while it's a nice place to visit, it'd take a lot for me to want to actually move there.)

We stayed at the MGM Grand and the night we got there we went to KA.  It's the second time I've seen that show, but it was just as spectacular as the first.  Once again, front row center tickets, and well worth the price of admission.

We took full advantage of the Las Vegas Monorail, even having a stop right at our hotel.  If you head down there, you'll find the $9 day ticket well worth the money.  Of course, that didn't stop us from walking our asses off and getting all grumpy because of the overall pain of one-foot-in-front-of-the-other.  At the end of the second day, we were just about dead and Dad just had to go to one last tchotchke shop to pick up this ridiculous tiny "Las Vegas" sign that, as it turns out, they sold at the gift store at our hotel.

On the other hand, how can you pass up a trip to go shit shopping at the World's Largest Gift Shop?  You can't say no.  You just can't.  Even though it's sort of like seeing all of the stupid tourist traps at the beach all in one big building.

While we were down at that end of the strip, we stopped in at The Sahara and rode "Speed: The Ride."  It's a roller coaster only 40 seconds long, but it's a hell of a 40 seconds and worth the $10 to ride.  Jenn, Dad, and I rode that and got off the train all weak-legged and wobbly.  Good times.

After all was said and done, we got back home safe and sound, ready for another trip down there.  I think we might go again in February for my friend Adam's birthday.  We'll have to see.

To close - a picture of me and my parents outside the Treasure Island:

Dad, Travis, and Mom outside the Treasure Island

The ASP.NET 2.0 Anthology

The ASP.NET 2.0 Anthology by Allen, Atwood, Barnett, Galloway, and Haack.I just got through reading The ASP.NET 2.0 Anthology and I have to say, I liked it.

Anthology is a "cookbook" approach at showing different tips and tricks for working with ASP.NET 2.0.  If you've never set foot in ASP.NET land, this isn't for you - it's not a "newbie trying to learn ASP.NET" book.  It's more of a "moderately experienced ASP.NET developer trying to sharpen the saw" book.

The voice of the book is fairly informal, which makes it nice - like you're learning tips from a friend, rather than being dictated to.  Even some of the code snippets - which are shown in a nice, easy-to-read format - inject humor (watch for the Office Space references in the "Working With Email" chapter).  It made the book really easy to get through and understand.

The book covers a large range of topics, from error handling to membership and role providers to form validation.  What was a pleasant surprise to see is that it covered a lot of things many other books don't, like project format, source control, and usage of popular third-party libraries (e.g., log4net and SubSonic).  There's discussion of non-ASP.NET issues like design patterns and practices, data access layer usage, and basic SQL Server query optimization - things that a reasonably experienced ASP.NET developer bumps into on occasion but may not have had time to delve into.  It even addresses differences for users of the Visual Studio Express Editions, who normally get sort of "left by the wayside."

There were really only a couple of minor issues that I found with the book.

First, there's a chapter in there called ".NET 2.0 Core Libraries" that looks as though it's intended to give an overview of, well, the .NET 2.0 core libraries... but in the 30 pages allocated to the topic you can barely scratch the surface, so it generally comes off as slightly schizophrenic, hopping from topic to topic.

The other issue I found is that there are some surprisingly good "nuggets" of information that seem misplaced and, in some cases, outright hidden, in the book and deserved a little more time in the sun.  For example, cross-page postbacks were sort of hidden in the "Component-based Development" chapter and asynchronous pages were hidden in the "Working With Email" chapter.  Interesting and valuable information that just sort of felt "out of place."

Overall, the content of the book far outweighs any of the minor organizational problems you run into.  If you're looking for something to learn from and spark ideas of ways to make better ASP.NET applications, this is a great book.

[In the interest of full disclosure: I was sent a review copy for free from one of the authors, Jon Galloway.  Thanks, Jon!]

CopyTrackMetadata - Copy iTunes Track Info

I'm in the process of re-ripping a lot of my CD collection in a higher quality format and I noticed that iTunes doesn't necessarily detect that I already have the song in my library and offer to copy the metadata from the old version to the new one for me.  But I need that - I need to be able to copy all the metadata (including artwork and playlist membership) from the old version of the track to the new one so I can delete the old version and keep on truckin'.

It's doubly difficult when you realize that the iTunes UI doesn't actually allow you to modify all of the metadata - things like play count don't have an interface.  So - time for a program.

The CopyTrackMetadata program I wrote allows you to copy any or all of the metadata from a source track to a destination track.  Just open iTunes, open the app, choose which metadata you want to copy, select the source and destination tracks, and click "Copy."  Done.

Here's the main window:

CopyTrackMetadata main window

And the myriad options you have on which metadata to copy:

CopyTrackMetadata options dialog

It's totally free, and it works great for me, but if it somehow destroys your music collection, you're on your own - this is totally unsupported.

Download CopyTrackMetadata
Download CopyTrackMetadata Source

Version History: First release. Updated for .NET 3.5 and fixed a breaking change in the way tracks get selected in iTunes 9.

Changes in Xbox Live DRM

I got my fourth Xbox (the results of the third repair) and steeled myself for the hoop-jumping madness that is the digital rights management system on Xbox Live.

In my two previous bouts with this, the process has been basically:

  1. Create a brand new Xbox Live Silver account.
  2. Delete all your stuff.  Try to re-download it because that's supposed to re-authorize the console.  It doesn't work for me.
  3. Call in for "points after repair."  (Get codes from Microsoft that you can redeem for points.)
  4. Apply those points to the Xbox Live Silver account.
  5. Re-purchase and re-download all of your stuff.

They must have been getting people abusing the system (like getting the points and buying different things) because the process has changed.  My understanding of the new process is:

  1. Call in to get points after repair, as before.
  2. Explain to the new technician what you mean by "points after repair" and why you want it.  (For me, it's because my account can play the content still but it won't work for any other profiles on the machine unless I'm logged in, so my wife is screwed if I take my profile and go play at a friend's house.)
  3. The technician will ask you if you've tried deleting and re-downloading the content.  Try it and find that it doesn't work.
  4. The technician will escalate the call to a supervisor who will ask you if you've tried deleting and re-downloading the content.  Somehow the result of the earlier trial hasn't changed in the last three minutes.
  5. The supervisor will give you a new reference number and schedule a call for a few days hence to get a resolution.
  6. Before the scheduled call, another technician will call you and ask you if you've tried deleting and re-downloading the content.  Because they didn't, like, write that down or anything.  Explain the results of the previous attempt and that you're waiting for the call.  The technician will tell you to keep waiting for that scheduled call.
  7. The scheduled call occurs and the technician on the other end will ask you if you've tried deleting and re-downloading the content.  Sigh.
  8. The issue will be escalated again, this time to someone who supposedly can do something about it.  In two to four weeks, you'll get a call with a resolution.
  9. When you get the call, you'll delete all of your content and re-download it through the Xbox Live Marketplace tab, under the area called something like "Previously Downloaded Content."  The resolution is, basically, that someone flipped a bit in a database somewhere so that this time when you re-download, it will not just re-download but also re-authorize your console for the content.

I am not all the way through this process.  I am currently on step eight, waiting my two-to-four weeks to get the call that says someone flipped the bit and I can re-authorize my console.

I'm not sure the new process is better.  I can see that it would stop the folks abusing the system, which I think is good, but I think it's pretty crappy that I've gotta sit for weeks waiting for this to happen.  There has got to be a better way.

Laser Hair Removal: Treatment 3

It was four weeks since my second hair removal treatment and eight since my first as of this past Saturday, so once again I headed in to get my face zapped.

My second treatment used the Aesthera Isolaz IPL in an attempt to get me some reasonably pain-free results.  While it was far, far lower in pain magnitude, I really didn't see much in the way of results.  In fact, I could barely tell anything was done at all.  As such, this third treatment we went back to the Dermo Flash since that had a reasonable balance of pain and results.

My normal technician was sick, so I got a different lady zapping me.  She said she totally didn't blame me for sticking with the Dermo Flash - the MeDioStar does get overall better results but she has yet to find any guy who can take the pain involved (it's apparently that much more intense when used on coarse male hair).  She did one guy's beard and by the end was almost in tears herself with watching how much pain the guy was in, and he was on his own pain killers.  So... no MeDioStar laser for me, thanks.  I'll stick with Dermo Flash.

The Old Enum Switcharoo

Some friends of mine at work, Vish and Peter, found this one.  It's tasty.

We work on a web application that has a lot of external dependencies.  Generally speaking, we have pretty decent luck upgrading these external dependencies when the interfaces don't change - swap in the new assembly for the old one, do any binding redirects or what-have-you, and you're off.  Unfortunately, one particular upgrade wasn't working too well and we had a heck of a time figuring out why.

The problem was in a particular switch statement that was based on an enumeration value.  We get the value from the external dependency then pass it through the switch statement so we know how to behave based on the value.  The problem we were seeing was that we could watch the logging through the system, see that all the way through the service layer everything was fine, then suddenly when it hit our application, our app was receiving the wrong value.  There wasn't any serialization problem, there wasn't any caching issues, it was just somehow getting the wrong value.

The answer lies in what I'm going to call "The Old Enum Switcharoo."

Turns out that if a third party dependency changes the order of an enumeration, that's an interface-breaking change.  Even if they don't add or remove any values - just re-order the same values inside it (which is exactly what happened to us) - things fall apart.

I put together a reproduction so you can see what's going on.  It's a small console application that has an external dependency with three enumeration values.  Instructions for how to build/run your own repro are included in the source file; I've also included two folders with pre-built binaries so you can just run it and witness, if that's all you're up for.  Here's what it looks like:

The Old Enum Switcharoo - in action!

Go ahead and grab the reproduction code here:

Reproduction Code for The Old Enum Switcharoo [EnumSwitcharoo.zip - 15KB]

The solution to the problem is to either get the external dependency to put their enumeration back (which is a possibility for us, since we control it) or recompile your application against the new version of the dependency.

First Anniversary

Sunday was my first wedding anniversary.

It wasn't, like, super special or ultra-romantic or anything because, well... Jenn and I have really been together for closer to eight years, not just one.  Plus we've got a trip to Las Vegas planned in a week or so and we're going to a show down there and such, so we have already spent our anniversary budget on that.

Instead, we got each other cards and went with our friends Angela and Keaka to see Resident Evil: Extinction.  Like I said - the romance abounded.  (RE was pretty decent.  I had fun with the previous two movies and this one was about on par.  It ended really quickly... but I guess you can't complain much about the third movie in a series based on a video game.)

After that, we went for some cocktails, courtesy of Angela and Keaka (thanks!) at Dessert Noir, a pretty decent, but sort of pricey, little cafe near the theater.  I had a tasty chocolate/cherry concoction and Jenn had a coffee-based beverage.

Not a bad little first anniversary when all was said and done.  I can't say it didn't just sneak up on me, but I didn't forget.

The rest of the weekend - Saturday and part of Sunday - was spent working on my Halloween costume, sewing.  I always forget how hard it is to put sleeves in.  I'm working on a jacket that's part of my costume and I got the sleeves in... but they puckered at the seam a bit, which is disappointing.  I'd like to blame the pattern for leaving too much extra fabric on the sleeve at the top where it joins to the body, but I suppose if I was a better tailor I'd be able to accommodate for that.  I think it'll be okay; it'll withstand a cursory inspection.

Not All IM Clients Are Created Equal

I've used several instant messaging clients up to now, but I'm recently getting some experience with Lotus Sametime.  Somehow it feels like someone on the product side over there thought, "Hey, if we bill this as an 'Enterprise' client, we can ignore any UI goodness whatsoever!  It doesn't have to look good because it's 'Enterprise!'"

I think they should rename it "Lotus VB6time" because, well... see for yourself.

Sametime - now with additional VB6!

I can see the sales droid selling this now, invoking adjectives like "minimalist" and "rugged."  It doesn't matter what it looks like as long as it works, right?  Right?

Three Days in North Carolina

I don't travel much, and I've really only been off the west coast of the US three times - once when I was about four on a visit to Washington DC that I don't remember; once on a family trip to Hawaii when I was in high school; and once on my honeymoon last year to Aruba.  I've never been to Canada.  I've never been to Mexico.

When I got the opportunity to go to Asheville, North Carolina, for three days on business, I thought that was pretty cool.  A great opportunity to break out of my common "travel zone," which is mainly either Seattle, WA, or Las Vegas, NV.

I won't go into the business trip part of things - what really struck me here was my bad luck with the actual travel proper.  It makes me wonder if this is common or if I just got the short end of the stick, as I usually do.  I don't really have a frame of reference, so I'll throw it out there.

I got notified pretty late in the game (a little less than a week) that I needed to fly, so when I booked the tickets, I was basically left with two choices:  Either fly out early Sunday morning and get to North Carolina late Sunday night, or fly out Sunday evening and take the red eye to North Carolina to get there first thing Monday morning.

I should have taken the "throw away your Sunday" option, but instead I opted for the red eye.  I had things I wanted to do on Sunday and I sort of figured that the good ol' red eye is sort of a rite of passage for travelers.  Everyone's got a red eye story, right?  Now I've got one.

I'm a tall guy.  When I booked my [coach] tickets, I specifically asked for an aisle seat so I'd have a little room to stretch out.  This was particularly important to me on the cross-country flight because I get pretty cramped up in coach so it's nice to be able to stick my leg out into the aisle rather than riding the seat in front of me like a horse.

The flight east had three legs - Portland to Seattle, Seattle to Charlotte, Charlotte to Asheville.

From Portland to Seattle we were on a little puddle-jumper prop plane.  I got stuck in the back row by the window - not an aisle seat.  The back row was a lot like sitting at the back of the bus - it was more like a long bench with arm rests than a row of seats.  No seat reclining here - you're flush against the back of the plane.  The flight attendant couldn't even get the snack cart back to us; we served ourselves off the opposite end of the cart.  Lame.

From Seattle to Charlotte, the red eye, it was even more special.  The plane was a fairly large Airbus model, so I had more chance of getting a decent seat.  Instead, I got a quadruple-whammy.  My seat was on the window, so again, no aisle.  It was in front of the emergency exit, so no reclining.  It was in the aisle across from the bathroom, so even when the cabin lights went down, it was never dark because (when no one was stinking up the bathroom) the door was open and the light was glaring out.  And, even had all that been okay, the lady next to me snored like a chainsaw.

I think I got two bad hours' worth of sleep on that one.

Arriving at Charlotte airport, I noticed that there are rocking chairs everywhere.  I'm not sure why.  Maybe that's a North Carolina thing.  I thought it was sort of interesting, though.  (They had the rocking chairs at Asheville airport, too.)

From Charlotte to Asheville it was another puddle-jumper, this time a jet.  I didn't get the back row, but did get another window seat.  At least the flight was short.

I arrived about a half hour late for the meeting I was supposed to be in.  My friend that was traveling with me rented a car and we headed out.

The roads around Asheville are the most confusing thing I've ever encountered.  I'm not sure if maybe they're doing a lot of construction, but there are lots of instances where a single highway might be referred to by two or three different numbers.  Or if you get directions from the Hertz stand, like we did, they might tell you to "stay in the center lane to get on I-240" but there are only two lanes (which one is the center?) and there's no damn sign indicating anything about I-240.

We made a full circle around the city of Asheville, at one point even leaving the boundaries of the map we had, before finding the way to where we were going.  The return trip to the airport, two days later, was no better.  If you get directions that tell you to "take the exit to 26," do you follow the sign that says "I-40" or "Future 26?"  (I'll give you a hint - the "Future 26" exit doesn't get you to 26.)

The puddle jumper back from Asheville to Charlotte was an interesting experience, more from the airport standpoint than from the flight.  It was sort of like flying out of the airport from Wings.  Everyone knows everyone.  They don't use a PA system - they just talk really loud.  Just... very interesting.  Oh, and I got another window seat on that flight.

From Charlotte to San Francisco (yes, I returned through SFO) I got a seat in the middle of two people, which is actually worse than getting the window seat.  On one side I had a skater punk kid who was actually very quiet, which was nice.  On the other side of me I had a guy who very badly needed a shower and, when he wasn't trying to talk to me, was talking to himself and making hand gestures like he was kung fu fighting.

San Francisco to Portland was the only leg of the trip where I got my aisle seat, and by far it was the best bit of travel I had the whole time.  I actually had a whole row to myself and the flight attendants kept throwing me extra snacks and drinks because I was in the back near their station.  They were super cool.

The rest of the week I spent catching up and not being very productive - filing expense reports, returning emails, and generally doing administrivia that didn't get done while I was out.  But I was super tired and am just now really starting to level out sleep-wise.

Next time, I'm not taking that damn red eye.