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 1.2.0

Download CopyTrackMetadata 1.2.0 Source

Version History:

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

gaming, xbox comments edit

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.

General Ramblings comments edit

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.

gists, dotnet, csharp comments edit

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.

General Ramblings comments edit

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.