net comments edit

I love FxCop and static analysis tools in general. Anything that can help me write better, more standard and usable code that follows best practices is a great thing. I like running FxCop on any of my projects as part of the continuous integration cycle with all of the rules turned on.

Well, all but a select few.

See, while the out-of-the-box rules are great, there are a few that don’t seem to jive with almost any of the projects I’ve ever been on. Here’s the list of rules I don’t run, and a few I consider not running based on project needs and goals.

Don’t run:

  • CA2210 - AssembliesShouldHaveValidStrongNames: I like being able to consume third-party components, some of which might be open source. Unfortunately, not all of these will be strongly-named, and you can’t have a strong-named assembly that depends on assemblies that aren’t strong-named. Strong naming also becomes problematic when you want to provide or consume a plugin framework where people can easily drop assemblies into a folder and have them registered with an app. Versioning nightmare. Strong name where it makes sense, but not everything needs it.
  • CA1020 - AvoidNamespacesWithFewTypes: You run into this a lot when you have several assemblies contributing to a single namespace or when you’re early in a project and you’re still building things up. It might be okay to turn on later, but honestly, I never do.
  • CA1014 - MarkAssembliesWithClsCompliant: If I’m working in a very small project or something entirely standalone where I don’t depend on anything else, I can get this to work. If it’s not just a small project or standalone, I try marking things as CLS-compliant and all hell breaks loose. I start marking individual types as non-CLS-compliant based on compiler recommendations, which causes other types to be marked as non-CLS-compliant, and eventually nearly every type is marked as non-CLS-compliant. The root cause is usually that some central class has a dependency on some third-party component that isn’t CLS-compliant. In the end, it doesn’t seem worth the trouble. (Of course, I only really have C# clients for my stuff, so this might change if/when I have other languages needing to consume my output.)
  • CA1805 - DoNotInitializeUnnecessarily: This is basically, “Don’t say ‘bool x = false;’” because initializing fields to default values is redundant. I’m a huge fan of being explicit, though, and while it might be redundant, the microperf you get doesn’t outweigh the long-term readability and maintainability of the code.
  • CA2243 - AttributeStringLiteralsShouldParseCorrectly: This one says that any string literal that you pass to an attribute needs to be parseable into a System.Uri, System.Guid, or System.Version. That’s crap. Metadata attributes can be used for so much more than conveying those three types of information and ignoring every instance of where you might want to do that is just a pain.
  • CA1016 - MarkAssembliesWithAssemblyVersion: Most of my projects run in continuous integration and it’s the responsibility of the build server to properly assign the assembly version… but we run static analysis on developer environments, too, and a developer build is always version, which equates to “no version” and fails this rule. I know the assembly will be properly versioned in production so I don’t need a rule constantly popping up warnings in a development environment to tell me there’s a problem that I don’t actually have.

Consider not running:

  • CA1044 - PropertiesShouldNotBeWriteOnly: When you use dependency injection, you may legitimately have set-only properties on something. Most of the time, yeah, you’ll want an associated “get” for the property, but maybe not, depending on your design.
  • CA1303 - DoNotPassLiteralsAsLocalizedParameters: This one makes you localize all of your exception messages… and that’s sort of painful if you’re not distributing your stuff to folks who need localized exception messages.
  • CA1702 - CompoundWordsShouldBeCasedCorrectly: Turning this on, when you have a domain-specific language you’re working with, can cause a dictionary-related nightmare. For example, you might have “Doghouse” as a word (a legitimate compound word) and it’ll say “it should be DogHouse.” Uh, no. So then you get to fight with the dictionary, which is a never-ending battle. Leave this on until you start really running into it and see how much dictionary-battling you’d have to do to comply before just turning it off. One or two words, no big deal. A full grammar, problems.
  • CA1724 - TypeNamesShouldNotMatchNamespaces: The description of this rule on MSDN says it’ll only get raised if you have a type that is called “Collections,” “Forms,” “System,” or “UI.” I have run into this in several other cases - like a type named “MyNamespace.Security” (with security-related utility methods in it” conflicting with “System.Web.Security.” Watch and see where you run into this - it may or may not be worth running.
  • CA2209 - AssembliesShouldDeclareMinimumSecurity: If you haven’t fought code access security before, go ahead and keep this enabled. Good luck with that. Sometimes it can be solved with a one-line assembly attribute. Most times it becomes a gordian knot of horrors.
  • CA1006 - DoNotNestGenericTypesInMemberSignatures: This one says you can’t, say, declare a parameter or return value of type IList<ICollection<String>> because it’s confusing and hard to use. The side effect is that you also can’t have things like IList<Guid?> because the nullable Guid? is considered a generic. When you’re writing WCF service contracts, you really need that nullable type there because it affects the schema that gets generated and helps with interoperability. If you have a lot of these… well, this rule becomes more of a nuisance than anything. Depending on your design goals, you may or may not want this rule.
  • Rules involving URLs as System.Uri instead of System.String: There are several rules that tell you if you have a method or property that has “Url” in it that it needs to be of type System.Uri instead of System.String. Particularly at a web tier, passing System.Uri around is a pain that you really don’t need. In other places, maybe it’s helpful. Depends on your project. These rules are:

Every other rule I leave on, and for the most part I don’t exclude warnings - I fix the issue raised. In some cases it seems sort of stupid, but when the end product comes out, it’s consistent, maintainable, and consumable by others. Just the way I like it.

gaming, xbox comments edit

I finally wore out my original Rock Band drums last night:

That shadow is a

The shadow I circled in the picture above is actually a big dent in the pad. The underlying plastic is broken and the only thing holding it together is the rubber liner on top of the pad. Lame.

I’m seriously considering picking up the Ion Drum Rocker as a replacement since I’ve heard nothing but good about it, but I’ve also heard I should try out the new Guitar Hero: World Tour drum kit first. I have a party I’m going to in a couple of weeks where I’ll have a chance to try the GH drums, so I’ll wait until then to make a decision. Honestly, right now… those Ion drums are looking goooood.

media, windows comments edit

I have been considering ways to add to my Vista Media Center experience and one of the things I’m interested in doing is adding YouTube and other online media sources so I don’t have to hop into a browser to see them. I haven’t tried it yet, but I came across Yougle Vista - a plugin for Windows Vista Media Center to integrate YouTube, Flickr, Apple Trailers, and several other online media sources right into the interface. Might have to try that out.

personal, activities comments edit

For our second anniversary, Jenn and I packed up for a week and headed down to sunny southern California to visit Disneyland and Legoland.

We flew down on October 14th and were hoping to get there in reasonable time, but we had some fairly serious delays due to mechanical troubles on the plane, so we spent most of the day stuck in the airport. Luckily, we planned a “travel day” on either side of the actual vacation, so this didn’t hinder us too badly.

The 15th through 17th we toured through Disneyland and Disney’s California Adventure. It’d been years since either Jenn or I had been to Disneyland and neither of us had been to California Adventure, so it was really fun to see not only the stuff we were familiar with, but the new rides and exhibits.

From Disneyland and Legoland

The 15th was primarily Disneyland. We stayed at the Disneyland Hotel, so we took the monorail into the park first thing in the morning and while everyone else was working front-to-back on the park, we worked back-to-front. The first rides we did were the Mad Hatter’s Tea Party and the Alice in Wonderland rides because Alice is, by far, my favorite Disney character. Jenn wasn’t expecting much from the tea cups, but Ireally cranked that thing around and we both left pretty dizzy. (A kid coming on the ride after us literally ran to get our cup because “it was the fastest one out there.” Heh.)

We continued on through Fantasyland and then went through into Tomorrowland to enjoy some classic Star Tours action. After Tomorrowland, we hit Adventureland, stopping in at the Jungle Cruise and Enchanted Tiki Room, then through to see the Pirates of the Caribbean (which has been updated to match the movie). We came back to ride the new Indiana Jones ride and, while it was fun, we ended up having to ride twice because the first time we rode, it broke down and we got stuck on it (with the lights on and everything) for quite some time. We finished off that first day watching the characters parade down Main Street, USA.

From Disneyland and Legoland

The 16th we started the morning with a character breakfast at Goofy’s Kitchen, an all-you-can-eat buffet of just about anything you’d ever want to eat. Princess Jasmine and Princess Aurora were there, as was Goofy, Chip and Dale, Pluto, and Baloo. It sounds silly, but it was actually very fun (and great food).

From Disneyland and Legoland

Following breakfast, we spent the day going through California Adventure. California Adventure is less about the Disney cartoons and more about celebrating the nostalgia of California history. While there’s definitely some kid stuff here, I think it’s more adult-oriented because smaller kids aren’t going to know what stuff like the California Zephyr are.

We saw the Muppet Vision 3D movie, rode the taxi through Monstropolis (from Monsters, Inc.), checked out the various Bug’s Life things, and then wandered around on the boardwalk enjoying the rides and the food. We finished off the day in California Adventure watching the Pixar Play parade - a parade of Pixar movie characters.

Since California Adventure closed relatively early, we sauntered back over to Disneyland to see the Haunted Mansion (now done up in Nightmare Before Christmas style, and particularly so since it’s Halloween time) and ride Splash Mountain. Let me tell you - you can get into Splash Mountain easier later at night, but you really get soaked down and it doesn’t dry up too well. Jenn and I walked the park soaking for quite some time after that.

From Disneyland and Legoland

The 17th was dedicated to picking up rides and areas of the park we didn’t get a chance to see. We started the day in Disneyland and enjoyed the morning ceremonies in Toontown, getting our pictures with Mickey and seeing other characters as well. After that we went back to Fantasyland and took a cruise around Storybook land, seeing miniaturized versions of significant storybook locations. We started getting tired after that so we headed over to Tom Sawyer’s island and, after that, rode the Mark Twain riverboat.

The day was pretty hot, and we were worn out, so we took a breather back at the hotel for a bit before returrning to the park and riding the California Screamin’ roller coaster in California Adventure, then finishing out the day watching an amazing fireworks display over Cinderella’s Castle in Disneyland.

The 18th we checked out early from the hotel and drove the hour or so south from Anaheim into Carlsbad to see Legoland. Our hotel, the Sheraton Carlsbad Resort and Spa, had a private entrance to the park, so we headed right into the park without having to wait in line at the beginning.

The phrase of the day was, “Hey, check out that <insert noun> made out of Lego!” If you’ve ever seen a Lego show, or been to a Lego store and seen some impressive models, Legoland puts all of that to shame. Particularly the “Miniland” section, with full city replicas of well-known US locations. It’s spectacular from a Lego perspective… but the rides and attractions are definitely geared toward the younger (3 - 13) set. There’s really only one ride there for the older crowd: The “Knight’s Challenge,” which is basically a robot arm from a car manufacturing plant that someone welded some chairs to. You get in the chair and it thrashes the living crap out of you. An awesome ride, to be sure, and proves that it doesn’t need to have rails to be a good ride.

Another thing we noticed: Lego really hasn’t taken advantage of all of the merchandising opportunities it could. There were only like five or six different shirt styles that said anything about “Legoland” on them; everything else, including the Lego sets, were all things you could get at a Lego store or on their web site. There were a lot of things I wanted that simply didn’t exist. Here’s hoping they figure that one out.

From Disneyland and Legoland

Since we finished out Legoland in a day, we took the 19th to sleep in and rest our feet. Grabbed some breakfast at IHOP, drove down to see the Hotel del Coronado, and basically were lazy, which was nice.

The 20th saw us checking out from the hotel in Carlsbad and driving back to LAX to return the rental car and grab our plane home. Again, due to misjudged timings and such, we spent most of the day traveling.

All in all, it was a great trip. I really do love Disneyland and it was great to be a kid again. It’s sort of like going to Las Vegas (which I also love) but with less sin. I will definitely have to find another opportunity to go, or maybe hit Disney World in Florida so i can see Epcot. I probably will wait a while before going back to Legoland, to see if they do some renovations to address the older set or add some new models. Good times.

blog comments edit

Just downloaded a MetaWeblogAPI blog client for Blackberry. Here’s hoping it works!

UPDATE: Either the client sucks or there’s some oddness with the MetaWeblogAPI implementation in my version of Subtext. Either way, not good. Maybe this is my opportunity to learn Blackberry development. Until then, Opera Mini to the rescue!