You've reached the internet home of Chris Sells, who has a long history as a contributing member of the Windows developer community. He enjoys long walks on the beach and various computer technologies.
Tuesday, Sep 6, 2005, 12:04 PM in The Spout
I'm in
I feel like I've spent the last four days in hibernation, awaking like Rip Van Winkle to an entirely new environment. And while the new environment is still filled with boxes and won't have internet, cable or phone 'til tomorrow, it's still a very pleasant environment, flat so the boys can bike everywhere, near family, very near the schools, filled with friendly people (many of which have already introduced themselves and I'm worked double-hard this time to remember their names) and with plenty of potential for renovation (and the space that's there is nice all by itself). There will definitely be an adjustment period, but overall, it was very nice to wake up in.
On a personal note, with the move, getting ready for PDC, my son's birthday, my wife's birthday and my 14th wedding anniversary, some of my personal relationships have suffered (I'm *so* sorry to have missed last week's PND!). My have my apologies. I hope things will get better after the PDC!
Monday, Aug 29, 2005, 11:10 PM in Fun
MS Interns Out of Sync (Video)
You have to love a bunch of geeks willing to publish a video of themselves doing a parody of an N'Sync song, including the dance moves. Nice!
Monday, Aug 29, 2005, 12:55 PM in Tools
Early WinFS beta posted for MSDN subscribers
Not too far behind Indigo and Avalon's beta 1, WinFS posts their own beta 1 (although Tom Rizzo, Director in SQL marketing says it may be a tad early). Since their "endgame" is "that WinFS will be in beta when Windows Vista ships," so long as they don't move past beta to RC or RTM (or back to alpha), they've hit it. Congrats! : )
Friday, Aug 26, 2005, 12:31 AM in Conference
No DevCon This Year
Please return to your regularly scheduled programming.
P.S. I imagine the DevCon come back in time, but it may well be a while...
Friday, Aug 26, 2005, 12:29 AM in Fun
Avalon + Indigo = Magic @ the PDC
Doug and I will be giving the following talk at the PDC this year:
"Are you tired of lackluster user interfaces and bit-dropping communication infrastructures that don't work together? If so, then you'll want to see the magic that Doug Purdy and Chris Sells can wield when they build a couple of smart client applications using Windows Presentation Foundation and Windows Communication Foundation. In this talk, you'll be astounded and amazed by the power and simplicity of Doug and Chris, plus they might show you some WinFX, if you ask nicely."
It's midnight as I post this description and Doug has been in my office since 6:30pm working with me on it. If nothing else, it's going to be hella fun for us. : )
Wednesday, Aug 24, 2005, 9:07 AM in Fun
PND For You And Me
Between the new job, the new house and the book, I haven't had nearly enough contact with my local nerd friends. I'm starting to experience nerd withdrawal symptoms! Come to the PND next Tuesday and ask me about MDD, my PDC talk or how Jeff Richter and I were recently blamed for IDisposable.
Tuesday, Aug 23, 2005, 11:13 AM
Show Off @ The PDC
According to the post on Channel9:
"At this year’s PDC, we’ll be hosting our first-ever Show Off event. What the heck is Show Off, you ask? Well, Show Off is an evening event held at the PDC where you can show off your application, tip, tool, technique, animation, or anything cool that can help or inspire other developers. We’re asking you to submit a short video demonstrating what you want to show off."
Careful; these are the kinds of events that inspire me and my friends to get a little crazy. Still, there ain't an audience on the planet that wants to see your cool, geeky stuff more than the PDC audience. Come one, come all!
Monday, Aug 22, 2005, 1:56 PM in The Spout
New Contractor Advice: Time Estimation
I got a time estimate from a friend who's a brand new contractor in the area of home renovation (my wife made me promise to start renovations on our new place immediately as a condition of purchase). He'd already bid me an hourly rate, but I asked for a rough estimate of time spent. He hasn't yet seen the place (we can't talk the owner into letting us come over again), but he answered my question anyway, giving me an estimate 5x lower than I suspected it would be (Danger! Danger, Will Robinson!). I replied with the following advise on how a contractor should estimate time for maximum customer happiness (and therefore maximum revenue):
There are two schools of thought on time estimates. One school of thought, which I’ll call "bait & switch," says to knowingly under-estimate so that by the time the customer notices a slip, they're committed and they continue with their contractor by sheer momentum, hoping it'll all be over soon. This technique produces customers that either pay more than they thought or that force the contractor to cut corners to meet their initial estimate, lowering the quality. In either case, the customer tends to get unhappy, which hurts repeat business and word of mouth.
The other estimation technique I'll call "under-promise & over-deliver." In this scenario, the contractor estimates their time very conservatively, then doubles or triples it to take into account the unforeseen. This estimate may scare the customer away, but a good contractor will say things like "I hope it'll be less, but I want to make sure that we spend enough time to make sure that you're happy," to smooth the way. Plus, when the contractor delivers early, the customer is happy, calls again for future work and says things like "and he came in under the initial estimate!" to all his friends.
Obviously, very few people that read this site are contractors in the area of home renovation, but I think the advice applies to most forms of contracting. Take it as you will.
Saturday, Aug 20, 2005, 8:06 AM in The Spout
The List
Lord keep me off of the list of people that don't have to go through regular security checks:
"The Aug. 5 memo recommends reducing patdowns by giving screeners the discretion not to search those wearing tight-fitting clothes. It also suggests exempting several categories of passengers from screening, including federal judges, members of Congress, Cabinet members, state governors, high-ranking military officers and those with high-level security clearances."
Can't you just picture the movie where the terrorists kidnap a Cabinet member, hold their family hostage and use them as a mule to blow up some airplane? I'll take the anal probes at the airport, thank you.
Friday, Aug 19, 2005, 2:32 PM in The Spout
Cool New IVR Feature
In a (very) past life, I used to write intergrated voice response (IVR) systems aka "voicemail hell." It may not seem like it, but we spent a *ton* of time trying to make a voice output/12-key input UI as friendly as possible.
However, I never thought of the IVR feature I ran into today. While transfering my utilities to our new address, one of the utilities put me on hold and offered to call me back when it was my turn in line (promising me that I would not lose my place). I've got the world's most perfect cell phone and the world's most perfect Bluetooth headset, so staying on hold was just as easy as not, but still, that's a damn cool feature.
Friday, Aug 12, 2005, 10:05 PM in The Spout
Chris does the Half Monty
Here.
The one where I shake my booty up on stage in Reno:
Friday, Aug 12, 2005, 8:34 AM in Tools
Very Cool Nullable Fix
.NET 2.0 has the idea of a "nullable" type built right in, e.g.
Nullable<int> x = null; // legal
This adds nullability to value types as well as reference types. Further, C# adds direct support with this syntax:
int? x = null; // legal
However, while the C# language was updated to support nullability, the CLR was not, which lead to problems with boxing:
int? x = null;
object y = x;
// a boxed Nullable<T> was never null
if( y != null ) Console.WriteLine("Doh!");
This problem was fixed this late in the .NET 2.0 game by getting a bunch of folks together to rejigger things so that the following works the way you expect:
int? x = null;
object y = x;
// a boxed Nullable<T> can now be null
if( y == null ) Console.WriteLine("Wahoo!");
Friday, Aug 12, 2005, 12:00 AM in The Spout
The Half Monty
I spent last weekend in Reno with Joel, my fraternity brother, wife's sister's husband and business partner (we have an investing business). We'd both been working killer hours lately and we needed a break, so we spent three days on a "dirty boy's weekend" (as another friend called it). We gambled and drank and ate and slept in and took in a showing of The Dukes of Hazzard and, one night, we went to a comedy club. The main act was a fabulous comedian that took his craft very seriously. In fact, he was so committed to what he did, that he went to all the trouble to have his hair cut so that it looked short with it tucked into his hat, even though it was really very long, just so he could whip it out in his act for comedic effect. During his act, he juggled a chainsaw, did an amazing card trick, road a unicycle, played music on the MP3 player he'd plugged into his mic, brought folks up on stage and had us all laughing the entire time. He had this way of bringing folks up on stage where he'd point at a person, ask them their name (e.g. "Bob") and then say, "Folks, give Bob a hand as he comes up to help me out with this next bit." He was a true entertainer.
After he'd had us busting a gut for about an hour, he pointed to me and said, "What's your name?" I answered him and he said, "Folks, give Chris a hand as he comes up to help me out with this next bit" and up on stage I went. Now, from a distance, I look fairly normal sized, especially sitting down. Our comedian was a tad on the short size, frankly, so when I walked up on stage, I towered over him and his eyes got real big. Of course, I'm shy on stage, so I didn't say much, but nodded and played along good-naturedly. I mean, hell, I'd once led an audience into a public pie lynching of a suited marketing person, so I knew the drill.
He looked at me and said, "Chris, I want you to follow along with me. Do what I do. If you don't do what I do, it won't be funny. The funnier it is, the more likely you are to get laid." Of course, I was in Reno w/o my wife, so unless Joel got frisky, I wasn't going to get laid, but that didn't mean I wasn't enthusiastic about increasing my chances (and, of course, the audience was egging me on), so I nodded my head earnestly that I would do my best to follow along. He gave me a floppy cabby hat and put a top hat on his own head -- I followed along. He did a little bit of "spirit fingers" and I followed. He did some hip gyrations; I followed. Of course, the audience was loving this and I love it when the audience is having a good time, so I'm having a good time.
Then he started the music: "You Can Leave Your Hat On," by Tom Jones, made famous in strip routines the world over and most especially in the excellent movie: The Fully Monty.
I can see where this is going.
So can the audience.
Now I'm trying to remember what underwear I'm wearing.
Our comedian starts into his routine, doing flips and tricks with his hat that I try to keep up with, but it's hard enough to balance a stiff top hat on your head, let alone a floppy cabby hat so, while I make the best of it, I'm only funny because I can't do what this guy is doing. The best bit, of course, is when he holds his hat over his crotch, I follow, he gyrates, I follow, he lets go of his hat, I follow, his hat stays up and mine... does not (obviously he's more likely to get laid at this point than I am : ).
After this, he pulls half his belt out and swings it around in a sexy manner; I follow, being as sexy as a giant, overweight geek can be (remember the fat guy from The Full Monty?). He throws his belt over his should and I do the same.
And then the inevitable. The music builds to a fever pitch, he reaches down and pulls off his pull-away pants in one smooth motion, throwing them over his shoulder and the crowd goes wild.
Then he looks at me expectantly and the crowd goes even more wild (especially Joel who's nearly choking in laughter at this point). I raise my eyebrow to the comedian and he eggs me on. I raise my eyebrow to the audience and they egg me on. I remember that I'm no stranger to public nudity and a crazy audience is even more fun than a quiet photo studio, so I reach for my pants.
Of course, I'm not wearing my tear-away pants, so I'm laboriously unbuttoning and unzipping, following by carefully pulling off my pants over my sandals, which is not an easy thing to do without falling down when you're 6'5" and your center of gravity is someone near your left ear. But, I manage it and throw my pants over my shoulder, suddenly reminded of the underwear I chose for my day of revelry:
Now the comedian was nearly choking with laughter, but he said I did a great job and reached out to give me a hug (being careful to keep his hips as far away from mine as I was keeping mine from his), then shoo'd me off the stage. Then, while I'm still struggling to get my pants back on, the house lights go up, the act is over and the comedian is gone. And now, half the audience wants to shake my hand on the way out for showing off my polka dots on stage. It was a good way to start the weekend. : )
Thursday, Aug 11, 2005, 4:05 PM in Tools
What should I do w/ the metadata?
Imagine I've got some "metadata" that describes some functionality of my system, e.g. the command line parameters to a tool:
<args description="Two wrongs don't make a right, but three lefts do">
<arg name="lefts" description="Number of left turns" type="int" default=4" />
<arg name="attitude" description="Driver attitude" required="true" type="string" />
</args>
Once I have this "metadata" in place, should I a) use it to generate a class at compile-time that implements the command line parsing, or should I b) use it to drive a command-line parsing framework at run-time?
If I do a), generate the code, the result might look like this:
class Args {
public void Parse(string[] args) {...}
public string Usage { get {...} }
public int Lefts { get {...} set {...} }
public string Attitude { get {...} set {...} }
}
I've got better perf, but I have to generate the code in some way and .NET doesn't come with any built-in tools to do that (no, I don't count ASP.NET or XSLT as good codegen tools). Plus, the command-line args are now baked in and require a re-compile to change and who cares about perf to parse the command line? Finally, I'm much more likely to have most of the work done in a base class, e.g.
class Args : ArgsBase {
public void Parse(string[] args) { return base.Parse(args, ...); }
public string Usage { get {...} }
public int Lefts { get {...} set {...} }
public string Attitude { get {...} set {...} }
}
In my experience, most of the work of code-gen is generating the smallest possible bit of code to provide a nice wrapper around a base class that does most of the work in a very interpretive manner.
If I do b), have a run-time interpretter of the "metadata," I've got to build a command-line argument interpreter, but, as I've said, you almost always have that anyway. However, I also give up a develop-time wrapper aka "Intellicrack" which will be pried from my cold, dead fingers.
What do you guys do?
Friday, Aug 5, 2005, 4:03 PM in Fun
Fight Club Rules 9-16
If you love Fight Club (who doesn't?!?), then you'll love the rest of the Fight Club rules.