net comments edit

If you have a business of 25 employees or less and you’re looking for a great unit testing mock/isolation product, Typemock has a screamin’ deal running until December 17: Get five developer licenses for Typemock Isolator and one build server license for $80/month.

That’s a pretty awesome deal. At current prices, it’s $799 for a developer license and $2499 for a build server license. It’d cost you $6494 for five dev licenses and a build server. A year of the same licenses at $80/month is just $960. Not bad, eh?

Go check out the deal for more info, or just pick yourself up some licenses while you can. Again, it’s just running until December 17, so get in while you can!

General Ramblings comments edit

Thanksgiving is my least favorite holiday.

I don’t like turkey. (Yes, it’s OK to gasp at that, and I know it’s hard to believe, but I’m not the only person out there who doesn’t like turkey.) I don’t like most of the trimmings that go along with a traditional Thanksgiving dinner. Stuffing? No thanks. I’ve even been talked about on the How Stuff Works podcast during “Listener Mail” time because of my turkey loathing. I usually end up in one of two situations, neither of which are good:

  1. Eat only mashed potatoes and rolls for dinner. Maybe sweet potatoes if there are some, but generally, the potatoes and rolls are the only bits of the traditional Thanksgiving dinner that are remotely palatable to me. This isn’t a good dinner and it’s not super tasty.
  2. Eat a one-off meal totally different from everyone else. This is bad in a different way. It means I’m eating something I like, but it also means I get to - yet again, and many times to the same people - explain why I’m eating something different. Not just a pain in the ass, but psychologically troubling as I get the looks and questions from around the table.

The last few years my family and I have gone to a buffet for Thanksgiving so they can have their turkey, but there are plenty of other things to eat and no one really notices because, well, it’s a buffet. This year, due to some scheduling trouble and other circumstances, that didn’t happen and it would have ended up being one of the above two situations. Again. I’m tired of that, so this year Jenn and I got together with a couple of friends… and some friends of friends… and their families… and had dinner with them.

While I am grateful to have met some very nice new friends and have been invited into their home for a meal of tasty shrimp scampi… it ended up being scenario #2 as mentioned above, which is not quite what I thought I was getting into. Again, no reflection on our friends, as they were wonderful and hospitable.

I think next year I’m just boycotting the whole Thanksgiving thing. It would be different if my family lived more than about 45 minutes away and I didn’t see them all the time, but they do, and I do, so the only real value Thanksgiving has is the dinner, which is the bit I’m not interested in.

The holiday weekend got a little better when we went to see Ninja Assassin. Great fight scenes and a little over-the-top gore never hurt anyone. It was only OK, as I wish the actual plot bits didn’t seem so… flat… but it was fun and nothing says ‘Thanksgiving’ like people getting their asses kicked.

The rest of the long weekend was spent playing a little Xbox 360, getting stuff done around the house, and generally relaxing, which always makes for a nice time. It looks like next weekend we’ll be decorating the house for Christmas, which should be fun.

media, music comments edit

A few days ago I was listening to some music on my iPod and noticed that a couple of tracks had metadata filed as “Firstname Lastname,” which is not how I file my music. I think I picked them up off AmazonMP3, and it kind of irritated me that I had to fix it, so I tweeted:

Wondering why so many folks file their music “Firstname Lastname” instead of “Lastname, Firstname.”

That actually brought a lot of responses (more than some questions I have where I actually really need to know the answer). I got a couple of responses from folks who wondered the same thing, but the opposition to the idea cited basically two problems:

  1. Most metadata out there is stored this way so it’s easier to just use it as-is than it is to fix it for your own collection.
  2. There could be confusion if you have a solo artist who also has a band. For example, “Ben Folds” should show up by “Ben Folds Five” if you have music by both.

My logic in storing “Lastname, Firstname” is pretty simple.

  • When I go looking in the store (or at the library) for “Michael Jackson,” I don’t go looking under “M.” I don’t think that should be different on my iPod.
  • I have no desire to store separate “display data” and “sort data,” though that possibility exists. Doing it that way means double-metadata to manage and makes the list look messy.

I looked around at how libraries file things and, while I couldn’t get my hands on a copy of the Library of Congress filing rules I did gather that, generally speaking, the accepted convention for Folks Who File For a Living is:

  • If it’s an individual person: Lastname, Firstname (e.g., “Folds, Ben”)
  • If it’s a collective, corporation, or group: Firstname Lastname (e.g., “Ben Folds Five” or “Steve Miller Band”)

That’s actually how I have my music filed, and that makes sense to me. I contacted a good friend of mine who actually went to school for this stuff and he concurred. He also mentioned that there are interesting edge cases to consider - for example, “Alice Cooper” was not originally the name of the singer but the name of the band, so you could argue it either way.

That would, in fact, mean you would not normally see solo work by Ben Folds sitting alongside his group work in Ben Folds Five, and you’d see Dave Matthews Band under “D” not “M,” but if Dave Matthews had solo work, it’d be under “M.”

My friend pointed me to DMOZ, the Open Directory Project, which is a place some folks feel is a good starting place to look if you don’t know how something would be filed. This general premise - individuals as Lastname, Firstname and groups as Firstname Lastname - appears to hold there.

Of course, I see why online music stores chose to skip this - so there are no edge cases. Trade potentially “incorrect” metadata to avoid forum flame wars about why individual artists don’t appear right next to their bands and such. I guess I’ll just have to continue fixing it manually.

Now to figure out the best way to store artist collaborations - duets, for example. If only there were multiple artist fields in the ID3 spec. Oh, wait, ID3 does support that. Too bad iTunes doesn’t. (Yeah, I know, MP4 doesn’t directly support ID3 but atoms… I still think it’s possible to support multiple artists.)

General Ramblings comments edit

The holiday season has begun at home, preceded quite a bit by its start in the stores. (Stores very nearly skipped Halloween this year and went straight to Christmas, didn’t they?)

First, we got a wreath for our door from a local door-to-door salesgirl. This is important in two respects: First, I’ve never had a wreath before, and while it sounds sort of cliché, it’s nice and sort of makes me feel like “a real homeowner” (even though we’ve been at the same place for years now). Second, if your kid gets off their ass and actually does the door-to-door sales for their organization, I’ll most likely buy something; if you take the sign-up sheet to work and stick it on the break area table and expect me to register… well, good luck with that. Hard work gets rewarded.

2009 Trans-Siberian Orchestra

2009 Trans-Siberian Orchestra

Second, we went to the Trans-Siberian Orchestra concert on Sunday. Not the first time we’ve seen them, but a brilliant show. Everything with TSO is always larger-than-life. Every number is huge and that just makes it full of awesome. We were in the tenth row, center section on the aisle

  • perfect seats. I snuck a few pictures toward the end with my crappy Blackberry camera. Epic stuff. I’d totally go again.

This week is Thanksgiving and I totally can’t stand turkey, nor am I really big on attempting to coordinate a bajillion disparate schedules to make sure everyone gets their “face time” in, which makes it my least favorite holiday all year. (I think it’d be more important to get together with people if we all didn’t live within 45 minutes of each other and see each other all the time.)

But I’m not going to let that drag me down. I’ve got this free-standing two-foot-tall green M&M in a Santa hat to stick by our front door and I’ve been waiting to put her out. Onward to the holidays!

dotnet, gists, xml comments edit

I use log4net for logging in various applications, but every time I start a new app I forget this and it never quite comes up in Google for me, so here we go.

Most of the examples on the log4net site showing configuration shows it right in the App.config/Web.config file for the application. That’s a painful way to go if you have, say, a single log4net.config that you want used in several projects or if you otherwise want to stick log4net.config somewhere else.

The magic bit that at least I can’t easily find and always forget is:

If you add an appSettings key called “log4net.Config” you can put an app-relative path to an external log4net.config file in there and everything will automatically configure itself using that.

It looks like this:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="log4net.Config" value="log4net.config" />
  </appSettings>
</configuration>

That example puts the log4net.config file right in the root of the application. You could specify “config/log4net.config” to put it in a “config” subfolder, too, for example. You don’t even have to call the XmlConfigurator.Configure method or mark your assembly with an XmlConfiguratorAttribute or anything. Magic happens. It just works.

This is specifically for the default “log4net-default-repository” repository. If you’re doing something fancy with different repositories, YMMV. I’ve not tried that.

For folks interested in spelunking, this is a hardcoded setting that takes effect in the private log4net.Core.DefaultRepositorySelector.ConfigureRepository(Assembly, ILoggerRepository) method which gets called from the public log4net.Core.DefaultRepositorySelector.CreateRepository(Assembly, Type, String, Boolean) method.