# 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]
# Wednesday, February 09, 2005

The Google Maps service was unleashed yesterday… holy crap, that rocks. Some notes:

1. Watch how rarely the full page refreshes. I haven’t looked under the hood to see how they do it, but I’m assuming some iframe tags and a lot of Javascript. One thing’s for sure — between this, Google Suggest, and Gmail, Google is pushing the envelope for what can be done in a web UI.

2. When it shows a pushpin on an address, clicking the pushpin opens a little callout box with a detailed map for the surrounding area. They even draw a shadow behind that callout box on the underlying layer. That’s slick.

3. You can search on all sorts of stuff. In the Search box at the top of the window, I had luck with addresses, partial addresses, city names, airport codes, zip codes, company names, and so on.

4. You can get at directions from just about anywhere. The little pushpin callouts, the main search results, and so on. Clicking the directions “From here” link in the callout box changes the box to a sort of “sub-search” that lets you provide the “To” address.

5. The searches are context-aware or location-aware. For example, start from the top (new browser window/tab) and search for “Sacramento”. The result is the city in California. Now search for “Kinkos” and you see pushpins for all of their locations in the Sacramento area. Close the tab/window and start fresh… this time, search for “Denver” first and then “Kinkos”. Now you have Kinkos in that area… so each search is aware of the one before it and/or the boundaries you’re currently looking at.

6. I combined it with SlickRun (which I’m addicted to) for a very fast mapping reference. For those that use SlickRun, just use the /?q= querystring, but provide the SlickRun word-replacement macro ($W$). http://maps.google.com/maps?q=$W$ is the command. Assuming your MagicWord is “map”, you can then enter “map boulder”, “map 123 main street, denver, co”, or “map sfo”. Way cool.

posted on Wednesday, February 09, 2005 4:26 AM Mountain Standard Time  #    Comments [0]
# Tuesday, February 08, 2005

So the long-awaited OS update came to our Series2 Tivo a week or so ago. Aside from supporting the new TivoToGo service, I’ve noticed only two things with the new version.

1. The UI feels slower.
2. While listening to music with the Home Media Option, the current song’s info banner moves around every few seconds (presumably to avoid burn-in).

I’m sure there are others, but that’s what I noticed. On to TivoToGo…

This update also added a web server and small web app to the Tivo box. This can be reached using https://[tivoipaddress]/nowplaying/index.html (note the “s” for secure http). You’re prompted to log in with “tivo” as the username and the password is your Media Access Key (you can find this in your Tivo’s System Information page).

Once logged in, you can see your current recordings and even download the .TiVo files to your machine. This approach for getting at video files isn’t officially supported, but it’s kinda cool to see the actual file sizes for all those shows you’re hanging on to.

Alternatively, you can use the new Tivo Desktop software (version 2.0), which provides a nice little UI for viewing your recordings, copying a bunch of them at once, and launching a media player to view the local files. Note that you MUST install the Tivo Desktop app, even if you plan to use the web interface to download them. This is because installing the desktop app forces you to provide your Media Access Key and a “playback password” (which you’re prompted for each time you watch a show on your PC).

Tivo says that viewing that watching the .TiVo files on your machine requires Windows Media Player 10 and and a codec. I’ve had good luck with the Intervideo codec that comes with WinDVD, but it seems there are lots of free/cheap codecs out there to choose from. I also found a program called The Core Media Player, which seems to play them all by itself just fine. Tinkering with codecs is a pain, but the ones listed on the official Tivo page seem to work well enough.

Once the desktop app is installed, the files are transferred, and you have WMP set up with a compatible codec, you’re set.

Top 10 Things To Know

1. As you can imagine, the files themselves can be quite large. A half-hour show I tested was about 680MB and a 2–hour movie is a few gigs of data.

2. These files naturally take a while to transfer to your local machine. Not only are they large to transfer, but the Tivo does some type of on-the-fly encoding/conversion of the files with your media access key. This is to ensure that someone can’t just post a file to the file-sharing networks and have it be viewable everywhere. I also understand that it takes even longer if your Tivo is otherwise busy (ie. recording a show), which makes sense given that the CPU is occupied.

3. To make the long transfer times liveable, I switched our Tivo from being wireless to being wired (using the Linksys USB200M). I was getting about 750kb/sec, which made a 680MB file transfer in about 15–18 minutes. It should have been faster for a file that size, but again the Tivo itself is “processing” the file as it copies it to your local machine — so that’s the bottleneck. Another thing you can do is use the Tivo Desktop software to queue the files up for copying… click some checkboxes, push a button, and go to bed.

4. Apparently, the 7.x version of the Tivo OS adds 802.11g and USB 2.0, which might make wireless transfers liveable (though still not as fast as wired).

5. Closed-captioning information isn’t retained in the files that end up on your machine.

6. You can learn all sorts of geeky things about the service from the hardcore Tivo fans at http://www.tivocommunity.com.

7. I think Tivo really needs to do something about the codec issue. Unless you have a machine that already has a DVD player package, you may not have a codec that lets you play back the mpeg2 files in Windows Media Player (or elsewhere). And using one of their recommended codecs means you pay $15 for the service that is otherwise marketed as free. Not a big hit to the wallet, but I do see the whole “download and install a codec, configure WMP, wait for long file transfers” thing deterring the non-geeks out there. It certainly wouldn’t meet the Wife-Acceptance test.

8. Some codecs and configurations make seeking forward/backward impossible, leaving you with just the WMP slider bar to navigate within a show. That’s a pain, but the Core Media Player did allow moving forward/backward easily with the right/left arrows. The size of the jump is configurable, so you could make the right-arrow jump exactly 30 seconds to skip commercials.

9. To burn a show on to a DVD, Tivo says you need the Sonic MyDVD software (not worth the link). The http://www.tivocommunity.com gang can point you to other options that supposedly work (haven’t tried them myself)… but the MyDVD software does apparently use the PACE Interlok copy-protection mechanism. I’m somewhat familiar with this “solution” because it’s used by several vendors in the electronic music world (particularly with soft synths and fx plugins)… lots of problems have been reported with this over the last few years, mostly because it replaces kernel-level drivers on your machine. Even if you uninstall MyDVD, those are left behind… nasty stuff and lots of electronic musicians (myself included) simply won’t purchase software that uses it.

10. Bottom line… in a pinch, it’s a useful option to have. I don’t see its release as a huge win for Tivo in the market (getting it to work still feels too “techy”), nor do I see it as something that even tech-geek Tivo owners will use a great deal. On the other hand, if you are the geeky type and you regularly travel, it’s a handy way to have something to watch during layovers or long flights.

 

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

… to the 2005 resolutions, huh?

Thus far, 2005 has sucked pretty mightily. Illness in my extended family, illness here at home, Allie catching pneumonia, Michelle and I both being sick… yuck.

On the upside, not all is lost with those resolutions. I am reading more and I have taken some steps on that personal project I mentioned. I got a good book on Vegas Video, which has given me some ideas for that video project I mentioned. And while I haven’t exactly taken a ton of pictures, I have been to two different Nikon classes in the last month and picked up some great pointers.

The downside… exercise has suffered (been sick), blogging has suffered (sick, lazy, busy, whatever), and this site still looks the same.

Still, my Firefox bookmarks include a “Blog This Stuff” folder that’s jammed with links, article ideas, and other possible blog entries.

I’ll try to do better.

Oh… and we have a 20–week ultrasound appointment this Friday. That’s gotta be good for a blog entry, right?

posted on Tuesday, February 08, 2005 2:55 PM Mountain Standard Time  #    Comments [0]
# Sunday, January 09, 2005

So Tivo finally announced their TivoToGo service… with it, you can transfer recorded shows to your laptop to watch “on the go”. Later this month, they’re supposed to have an app available that lets you burn those shows to DVD as well. It’s a slick service that’s been in the works for a while.

In order for it to work, Tivo has to roll out a software upgrade to all their Series 2 boxes. And their web site says that this can take several weeks! I understand that rolling out an upgrade to that many boxes is a big deal, but that still seems like a really long time. There are some reports of people getting it already, but no such luck here. Tivo put up a “get on the priority list” page, but who knows what effect that has.

I just know I want it now. Patience is not one of my virtues.

posted on Sunday, January 09, 2005 10:55 AM Mountain Standard Time  #    Comments [0]

Glad to hear that all is well with Justin Rogers. He hadn’t blogged or been in touch with anyone since mid-November, so Darren Neimke tracked him down. Justin’s been one of the more prolific bloggers that I read regularly and is the only .NET blogger whose name is a folder of its own in my Firefox bookmarks (too hard to categorize his articles!).

Anyway, I’m glad that all’s well and I hope Justin will be blogging again soon.

posted on Sunday, January 09, 2005 10:45 AM Mountain Standard Time  #    Comments [0]

… is hard. It’s easy to come up with a list of all the things I want to do, change, start, finish, or otherwise commit to. It’s hard to make a list that has a chance at getting done. After all, a year is a long time and who can say how things will move up or down in importance.

Instead, I think I’m going to try to come up with quarterly resolutions. This way, the timeframe is smaller and I can take on more manageable goals. That’s my approach to development projects as well… make a list of components. Prioritize them. Take the top few and break them into tasks. Prioritize those. Get to work. That’s how you eat an elephant.

So here’s my list of goals for Q1 2005:

  • Exercise at least 3 times a week — using the bike when I have to be indoors, playing soccer more when the weather’s good.
  • Read more fiction, starting with Cryptonomicon.
  • Begin development on a side project that’s been kicking around in my head for a while. I’d like to have the database done, the DAL created, and start the framework.
  • Take more pictures with our new camera, particularly with the camera in Manual mode.
  • Improve this site, including a new layout, a photos section, at least one article, and more useful links.
  • Blog more — at least 4 times a week.
  • Complete another retrospective video for Allie (I’ve got lots of raw footage).

With luck, I’ll make a good dent on all of these… maybe posting them here will keep me honest.

posted on Sunday, January 09, 2005 10:39 AM Mountain Standard Time  #    Comments [0]