Monday, June 20, 2005

There’s a trend I’ve noticed recently in the world of tech blogs that has turned into a pet peeve. This trend is the “I have a secret and you don’t know it” blog posting.

My RSS subscriptions are fairly focused into a few categories, but I see it occuring pretty much with just the .NET development world. Maybe other software/platform ecosystems are the same, but the tech-gadget, poker-fan, photography-hobbyist groups don’t seem to feel the need.

In any case, employees of Microsoft, regional director/author types, and other people who have access to pre-release and pre-CTP efforts are the most guilty. Yeah, http://blogs.msdn.com, I’m looking your direction. Here’s the theme, typified by breathless anticipation and a complete lack of interesting detail or value:

  • Boy, I’m tired. I was up all night writing code on a new feature. I can’t talk about it yet, but you guys will love it.
  • So I was just talking to [some person] over in the [some product] group and he/she showed me some amazing stuff coming down the pipe. I wish I could talk about it, but it’s too early in the cycle.
  • Holy crap. I just got access to an early look at a new product some people I know are building and it’s unreal! I really wish I could tell you more.

So if you’re a blogger who finds yourself in this sort of position and you’re sitting down to write a blog post, here’s my advice… don’t. It’s annoying and you’re really not impressing anyone. Really.

In fact, you’re doing just the opposite as each of the above blog posts amounts to this: I’m an insider/important person and you’re not.

I’ve unsubscribed from a number of blogs lately because of this pet peeve… when you have FeedDemon loaded up with hundreds of subscriptions, you can’t spend time with blog posts that talk about not being able to talk about something.

Thank you for your support.

posted on Monday, June 20, 2005 9:50 AM Mountain Daylight Time  #    Comments [0]
 Friday, June 17, 2005

The “Baby Name Wizard’s NameVoyager” is a Java-based, web UI for looking at the popularity of baby names over time. When we were deciding on names for our newborn daughter, I would occasionally pull this up to see how common/rare a name was.

On its surface, it’s simply an area chart. For a given name or set of names, you see a names popularity expressed as “usage per million babies” over time (with decades on the X axis). From a visualization perspective, it’s interesting because it’s constantly updating as you type in a name. You can choose to view names for boys, girls, or both, and the area chart updates as you type — type in “Alex” and you’ll see Alex, Alexa, Alexis, Alexander, Alexandra, Alexandria, and so on. I like how, in addition to updating constantly as you type, it also animates the updates leaving the whole interface feeling very smooth.

Not that you’ll need to have the Java runtime on your machine in order for the applet to work.

posted on Friday, June 17, 2005 10:39 AM Mountain Daylight Time  #    Comments [0]

I created a new category for the blog… InfoPorn. It’s a name I got from Wired Magazine, but is a great way to refer to a longtime passion of mine: data visualization. Most of my development experience has been with applications that take high-volume data and aim to bring the interesting bits to the surface. Charts and graphs are great, but the visualization world has exploded lately with lots of online examples, Flash applications, entirely new visualization styles, and discussion groups all cropping up all over.

With the similar explosion in weblogs and RSS, it makes it very easy to find others who are interested in data visualization, as well as pointers to cool examples online. This category will be used to link to examples, mention ideas I’m tossing around, and so on.

posted on Friday, June 17, 2005 10:20 AM Mountain Daylight Time  #    Comments [0]

Whew.

Elizabeth Rosslie Donnici was born on Tuesday, June 14 at 3:27pm. She was born via c-section and came out screaming. She weighed in at 6 lbs 11 oz, and is just over 19” long. She looks a lot like her older sister did as a newborn. All is well with her and Michelle and both are now home and getting lots of rest (in 2–3 hour blocks, that is).

posted on Friday, June 17, 2005 10:07 AM Mountain Daylight Time  #    Comments [0]
 Saturday, June 11, 2005

There’s an interesting discussion going on in the comments of Eric Wise’s blog about interface implementations versus type inheritance. I respectfully disagree with rlewallen’s post that an interface implementation serves as a "has a" relationship -- and most OO literature would disagree with that notion as well. "Has a" implies a composite relationship where a whole is made up of parts -- An Order object "has a" OrderDetails object. An Invoice object "has a" Customer object. That an interface "has" properties and methods" isn't the same thing, as any type "has" members -- class, interface, struct, and so on.

An interface defines an "is a" relationship... SqlConnection "is a" disposable object (e.g. implements IDisposable). A collection "is a" enumerable object (e.g. implements IEnumerable). Your Customer "is a" comparable object if it implements IComparable.

In terms of when to use one or the other, there are a couple of thoughts that come to mind for me.

First… My feeling is that inheritance is widely overused and that it often paints developers into a corner. Deep hierarchies tend to propagate themselves in that specialization rules out wide reuse… so when the developer needs something that’s “close to, but not quite” an existing class, they’re typically going to have to subclass again. This isn’t a .NET specific thing at all, as I saw it a lot in my Java days and in other OO languages (Delphi, VFP, and even PHP where OO isn’t enforced). Note that I’ve worked with C++ as well, but am not a fan of multiple inheritance environments. In general, I think developers are better served with composite (“has a”) relationships over inheritance. Make small building blocks and then “compose” them to get big components.

The key question is “when do I use an interface versus a implement base class?”. Years ago, someone (and I’ve long since forgotten who the author was) explained somewhere that an interface makes sense when a type “is also something else”. That is, a type that implements IComparable might also be a Customer, a string, an Invoice, and so on — but the manner of comparing them is very different. So while I know I want to compare two Customer types or two Invoice types, I really don’t want to assume anything about how they’re compared.

A type that implements IDisposable might be a SQL connection, a file handle, a graphics object, and so on. If all of these things had to inherit from either a “disposable” implementation, you’d have some unwieldy class hierarchies — and ugly code as the implementation for disposing of these things is very different. So if there’s no shared functionality (which would imply using a base class that provides it), then an interface lets you talk to widely different objects using the interface contract. The example I often use is:

A Car, Truck, and Boat might all be subclasses of the MotorizedVehicle base class. You have shared implementations here, dealing with starting an engine, basic navigation, and other functions related to a mototized vehicle. However, the MotorizedVehicle base class might implement the IDriveable interface – providing Steer, Accelerate, Decelerate, etc. While you could avoid the interface and declare those members on the base class, using IDriveable lets you implement behavior for your Bicycle, Scooter, and other non-motorized types that can be driven.

posted on Saturday, June 11, 2005 4:57 AM Mountain Daylight Time  #    Comments [0]

Sheesh, months have gone by since the last post. In the meantime, I’ve got a Firefox bookmarks folder full of things I wanted to post, comment on, ideas to toss out, etc.

It has, however, been a very busy few months.

  • I hadn’t mentioned it on the blog before, but my wife is pregnant. She’s due July 1, but we learned yesterday that the baby is in a breach position (feet down) and shows no signs of turning… so we’re scheduling a c-section this week rather than risk breach delivery. We know we’re having a girl (the ultrasound tech guarantees it) and Allie, our 5–year old, couldn’t be more excited about being a big sister.
  • Got through the spring youth soccer season, coaching two teams — Allie’s U-5 team (“herding” more than “coaching”) and the U-14 boys team I’ve coached for years. They’re now aged out of our local soccer program, but many will be playing in high school.
  • Got a spare bedroom cleared out, painted, decorated, and mostly furnished as a nursery.
  • Busy as can be at work, which is a great thing. I also moved up to a new role (VP, Engineering) to add to my duties as the lead architect.
  • The MLS soccer season is underway, though this is more a source of frustration than anything else these days.
  • Got a couple of side development projects underway (call ‘em personal R&D), stuff around the house, etc.

Anyway, there ya have it… I’m hoping to get through some of those “blog this” bookmarks this weekend before the fun starts next week.

posted on Saturday, June 11, 2005 3:34 AM Mountain Daylight Time  #    Comments [0]
 Sunday, February 27, 2005

For some reason, I find various online "personality" tests interesting, mostly because I'm curious about how the code works under the hood. There are so many subtleties involved, including the test-takers self-perception, their ability to be honest with themselves, and the difficulty of measuring complex traits with "Agree/Disagree" types of questions.

Anyway, there's no shortage of these types of things online and I came across this one via Peter Provost. The results below are probably more accurate than not for me… again, if I’m being honest with myself. :P

Cattell's 16 Factor Test Results
Warmth ||||||||||||||| 50%
Intellect |||||||||||||||||||||||||||| 90%
Emotional Stability ||||||||||||||| 50%
Aggressiveness |||||||||||||||||| 54%
Liveliness ||||||||||||||| 42%
Dutifulness ||||||||||||||||||||| 70%
Social Assertiveness |||||||||||| 38%
Sensitivity ||||||||||||||| 42%
Paranoia ||||||||||||||| 46%
Abstractness |||||||||||| 38%
Introversion |||||||||||||||||||||||| 74%
Anxiety ||||||||||||||| 42%
Openmindedness |||||||||||||||||| 54%
Independence |||||||||||||||||||||||| 78%
Perfectionism |||||||||||||||||||||||||||| 82%
Tension ||||||||||||||||||||| 62%
Take Cattell 16 Factor Test (similar to 16pf)
personality tests by similarminds.com

Factor low score high score
Warmth cold, selfish supportive, comforting
Intellect instinctive, unstable cerebral, analytical
Emotional Stability irritable, moody level headed, calm
Aggressiveness modest, docile controlling, tough
Liveliness somber, restrained wild, fun loving
Dutifulness untraditional, rebellious conforming, traditional
Social Assertiveness shy, withdrawn uninhibited, bold
Sensitivity coarse, tough touchy, soft
Paranoia trusting, easy going wary, suspicious
Abstractness practical, regular strange, imaginative
Introversion open, friendly private, quiet
Anxiety confident, self assured fearful, self-doubting
Openmindedness closeminded, set-in-ways curious, exploratory
Independence outgoing, social loner, craves solitude
Perfectionism disorganized, messy orderly, thorough
Tension relaxed, cool stressed, unsatisfied

posted on Sunday, February 27, 2005 9:55 AM Mountain Standard Time  #    Comments [0]

Don Box is getting the itch to write another book. Some of his previous books are considered must-haves for their subjects. He’s not sure which type of book he wants to write next, but is soliciting opinions on his blog.

My vote would be “B” without the COM pieces. Given that we’re just now learning more about Indigo, and that there’s a lot of “what is it and why do I need it” type of curiosity around it, the timing would seem to be perfect for a definitive Indigo text. And who better to write it?

COM’s not dead, but neither is it on an upward trend.

posted on Sunday, February 27, 2005 9:40 AM Mountain Standard Time  #    Comments [0]
 Tuesday, February 15, 2005

This blog was getting peppered with comment spam a while back and it became too much of a pain to deal with. So I turned off the comments feature and resolved to take care of it “one of these days”.

Today was that day.

I finally checked out a variety of options that are out there for dealing with comment spam on .Text sites. The one that seemed to have the biggest “bang for the buck” (where bang is the solution’s effectiveness and buck is the time spent implementing/managing it) was the Clearscreen HIP-CAPTCHA control from Miguel Jimenez. The part that took the longest was probably FTP’ing the changed files to the server. It doesn’t require a rebuild of the .Text source and seems to be working well in my brief testing.

I still have a bunch of stuff I want to do with my .Text install, starting with building it from source and continuing through a new skin design. But for now, this’ll do.

So now you have to enter some random code before you can post a comment. One thing I’ve noticed is that it sometimes has too much distortion in the display… in those cases, just hit Refresh on your browser and it’ll generate a new code. Shoot me an email if you run into any problems with it.

posted on Tuesday, February 15, 2005 4:34 PM Mountain Standard Time  #    Comments [0]

Claiming the feed…

Technorati Profile

posted on Tuesday, February 15, 2005 3:37 PM Mountain Standard Time  #    Comments [0]