personal comments edit

Another year come and gone, so it’s time again to throw up a bit of a retrospective of highlights for the past 365. (For reference, here’s last year’s retrospective.)

In January, I put out version 2.1 of my DHTML tooltips for Amazon links (which are sort of obsolete now since Amazon has all that set up from their site in a much richer format). I did a review of various clipboard management software and ended up with ClipX as the winner of that showdown. I also pumped out a little command-line GUID generator and a custom NAnt task assembly with some helpful stuff in it.

In February, we got a new little terrorist cat named Jack. I published some tips on disaster recovery and trouble-free continuous integration. We all got a little sick of hearing about FizzBuzz toward the end of the month.

March got me trying to get people to switch their blogs to use inline styling when including code snippets because they don’t format right in RSS otherwise. I’m still fighting that one. I got Media Center working with my Xbox 360 in a test environment (but I’m still trying to determine the right way to go to serve up DVDs and meet all of my requirements).

In April I had electronics and DRM issues. The lifespan of my 3G iPod sort of reached a logical limit as I hit the 1418 error and found that the iPod must be plugged into the wall while charging synchronizing as of iTunes 7. I got a Red Ring of Death on my second Xbox 360 (which hit me with some bad DRM juju) and bought a new DVD player because of bad Sony DRM. I also got into the design for testability vs. design for usability debate with respect to static helper utilities. Oh, and I attended MIX07, which I blogged a lot about [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].

May saw CheckFree acquiring Corillian. It also saw TypeMock publishing a nice case study of its usage inside Corillian. I tried to figure out how you’d detect through reflection if two object types can be added together, but never did get an answer. Just at the end of the month, I posted the EmbeddedPageHandlerFactory

  • a way to serve up ASP.NET 1.1 from embedded resources.

In June The Sopranos ended with a whimper and I migrated my blog to Subtext. I preordered GTA4 (which still hasn’t shipped), posted a CodeSmith template for generating generic KeyedCollection derivatives and solved the Guitar Hero controller loose whammy bar problem with some o-rings.

In July I did a fireworks show in Walla Walla, WA, gave away some code to convert an Outlook message into a task, and made a bookmarklet to automatically copy an Amazon Associates URL to your clipboard while browsing Amazon. I published the EmbeddedResourcePathProvider

  • a way to serve up ASP.NET 2.0 from embedded resources. Oh, and I turned 31.

I started August out by showing you how to mock a page request lifecycle with TypeMock. I started getting laser hair removal on my face (which I’ve continued to do: 1, 2, 3, 4). I also posted some tips for non-programmers who want to learn how to program.

In September my Xbox got tanked by a dashboard update so I got to send it in for repair, making this the third time I’ve had to get things fixed. I found an odd issue where ISAPI filters were causing problems with .NET and showed you how to optimize your TortoiseSVN cache for better disk I/O.

In October I celebrated my first wedding anniversary. I ran into a problem where I found that .NET assemblies store enum values, not references to the original enum, which caused some havoc. I got hit by some changes in the Xbox Live DRM model, which, two months later, I’m still fighting. I also posted a program to help you copy iTunes track metadata from one track to another.

In November I went to the Microsoft Patterns and Practices Summit (Days 1, 2, 3, 4, 5) and met Lutz Roeder while up there. I posted some tips on writing good XML doc comments in your code. I participated in the One Laptop Per Child program (which I later unboxed for you). I installed VS 2008 and the install was the worst. I rounded up some “Command Prompt Here” utilities for you and learned, via Rock Band, that I might just suck as a drummer. Finally, I showed you how to use ParseControl to combine ASP.NET skins and localization effectively.

December saw CheckFree getting acquired by Fiserv. Xbox DRM continues to eat my lunch so I posted some maintenance secrets that might help you avoid a call to Xbox Support. I posted UrlAbsolutifierModule

That pretty much brings us to current. It’s been a heck of a year - I got acquired twice, went to some great conferences (and met some cool people), and posted some [hopefully helpful] stuff for folks. Here’s to a great upcoming 2008!

media, music, windows comments edit

I bought a new laptop and I want to sync my iPod from the laptop now, not from the desktop in the other room. Unfortunately, moving your iTunes library around is kind of difficult. You can copy the library file (.itl file) over and fire up iTunes on the new computer, but it’s still going to look in the old location for the files and it’s not going to find them.

I tried the iTunes COM SDK but it turns out the physical location of a file is a read-only property.  Luckily, I found an article that talks about how you can manage your library and move things around by using the “Consolidate Library” feature.  I already have my music on an external drive, but I want to get it to a different drive that’s shared on the network, so here’s what I did:

  1. Install iTunes on the new laptop.
  2. Start iTunes so the initial iTunes library files are created and I can get past the setup bits.
  3. Copy the iTunes library files (both the .itl and .xml) over the top of the new ones on the new laptop.
  4. Plug the old external drive into the laptop. Make sure the drive letter on the new laptop is the same as it was on the old computer. In my case, this is the “F:” drive.
  5. Open iTunes on the new laptop and verify all the songs are found.
  6. Update the new iTunes settings - change the location of the iTunes library folder to the place you want the music files to be, tell iTunes to automatically manage your collection, and tell it to copy any new files into your iTunes library folder.
  7. In the new installation of iTunes, select Advanced -> Consolidate Library. This will copy the music from the old location to the new location and update the database with the appropriate new locations.

The only downside to this is that if you have a large collection (as I do), it’s not a very fast process and it takes up a lot of disk space - you’ll end up with two copies of your music collection. That said, once the consolidation is complete, you can delete the old copy of the collection and free up your disk space.

I really wish the iTunes COM SDK allowed me to just change the file location. It’d have been so much easier just to script the move.

General Ramblings comments edit

Friday night, the 21st, Jenn and I ventured into town for a wonderful live performance of Jesus Christ Superstar. It’s possibly my favorite Andrew Lloyd Webber musical (more because I’ve listened to it since I was very, very small so there’s a lot of sentimental attachment than anything else) and this was my third time seeing it.

It was Jenn’s first time not only seeing it, but hearing it, so there was a small amount of confusion at first, especially since they ran out of programs as we were walking in so she didn’t have a cast or set list. I tried to explain who was singing and such, but it took until the second half when we were able to find a program that she started getting into it.

It was a really good show to catch. Ted Neeley, who was Jesus in the motion picture version, played Jesus here, too. Amazing range on that guy, and I’m really glad we were able to make it because this is apparently his national farewell tour in the role. Corey Glover, lead singer of Living Colour, played Judas and also did a fantastic job.

The only real complaint I could issue had nothing to do with the show - it was my seats. When I bought them, the seating chart looked like I had some really great seats four rows from the front. When I got there, it turns out that the seating chart was broken up such that I didn’t see the entire front half of the auditorium sitting in front of me. I wasn’t four rows back, I was 30 rows back. Oh, and I got to sit next to a guy who decided it was his day to go on a smoking and drinking binge, so not ony did he stink to high heaven, but I had to repeatedly remind him not to sing along.

Other than that, it was a great show and I’m glad we made it. I couldn’t think of a better way to start the holiday season than a great show with some somewhat relevant subject matter. Good times.

personal comments edit

XO Laptop Unbox

Yesterday I received my XO laptop from the One Laptop Per Child “Get One, Give One” program.  I got some pictures of the laptop being unboxed and booted up for the first time so you can check those out if you’re interested.

It doesn’t ship with much in the way of instructions - it relies on you either connecting to their web site to get started or “exploring” the interface to see what things do.  That actually brought me to my first problem - connecting to the Internet.

The way the networking on the thing works, you visit a “neighborhood” page that displays a graphical representation of the wireless access points available to you as well as mesh networks and other XOs that you can connect to.  That was my first stumbling block: It only displays wireless access points that broadcast their SSID (mine didn’t).

It runs a flavor of Linux, so I suppose if you’re a Linux person you could do some manual configuration and get it to connect that way.  I’m a Windows person, and while I have run Linux before, I’m not really that knowledgeable about it, so the best I could do was try their manual wireless network association steps to see if that worked.  It did… for as long as I was in that terminal session.  But as soon as I rebooted, the connection was lost and I was back to square one.  So, rather than fight that beast, I just turned SSID broadcast on.  Hey, that wasn’t really stopping the malicious folks out there anyway.

It won’t connect to WPA networks (yet), which isn’t a problem for me since I’m still in the stone age using WEP.  After some trouble getting the security on it set up, I finally got connected.  Honestly, I don’t know how kids are supposed to do this, but maybe they assume that school wireless access points are just open without any security or something.  Maybe that’s how it really is.

The only other real problem I had with it was that the initial setup (when you first boot up) asks you your name and what colors you want your little computer icon to be.  (Your icon represents you on the network.)  Once you’ve set them, though… there’s no control panel applet or anything to change them with.  It took me a while, but I found that they have a command-line interface to change these things called “sugar-control-panel.”  Got my stuff all customized up and now I’m set.

The interface is primarily graphically-driven.  There’s very little text, which is good for its purpose (kids, developing countries, etc.), but not so accessible until you’ve really explored the thing and learned what it all means and does.  Applications are referred to as “activities” and it ships with several pre-installed ones including a web browser, an RSS reader, a paint program, and a Python programming environment.  There’s no email program, but there is a Gmail activity currently under development (right now it just launches the browser).

All in all, I think it’s a pretty great tool.  If they’d had this in school instead of ye olde Apple IIe, I’d maybe have learned something more than the BASIC code that runs the cannons and castles game.  On the other hand, I’ve found already that I’ve interfaced a lot with a Bash prompt (the “terminal” activity) already and, without any instruction, I’m not sure how kids are going to know what to do with some of the stuff.  From “I’ve never seen a computer” to “I’m programming in Python” is a pretty steep learning curve.  I think the real good stuff will be from the additional activities you can download as well as coupling this with a teacher’s curriculum.

Now they just need to get a Mono activity.  Awww yeaaah.  (Luckily, it looks like someone’s thought of this.)

If you’re interested in learning more about the One Laptop Per Child charity, how to give, or how to use the XO laptop, check out

net, vs comments edit

One of my co-workers, Peter Wong, came across this issue and struggled for quite some time to figure it out.

For some reason, running the product build on his development machine would pass all of the FxCop rules, but when other team members ran it, the FxCop spelling rules for identifiers would fail.

Turns out FxCop 1.35 uses the Office 2003 spell checker to do its work.  The rules were failing on machines that have Office 2003 installed and passing on machines without Office because they weren’t actually running.  It only works with Office 2003 - you’ll see the same rules-not-running behavior if all you have is Office 2007.  Apparently, we’re not the only ones who have noticed this.  I sure never saw anything about it in the docs, but I guess I never really looked, either.

They’re working towards fixing this problem in newer versions of FxCop.  Visual Studio 2008 code analysis tools have spelling rules built in and support custom dictionaries (won’t help folks without Team Foundation Server - it’s a policy you can configure).  FxCop 1.36, which just came out in beta, ships the spell checker built in so you don’t need to have Office installed.