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 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, 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. : )
Wednesday, Jul 27, 2005, 10:39 AM in The Spout
Limiting/Monitoring my sons' access to the 'net?
My 11-year old wants to do email and IM and he's already surfing the web. Does anyone have any recommendations for good software to limit and monitor his internet access? Thanks!
Saturday, Jul 16, 2005, 12:00 AM in The Spout
My First MsBuild Task
I wrote my first custom msbuild task this morning. I used the the Extend the MSBuild with a New Task topic from the msbuild wiki and it worked well to get me started. I started with the simplest thing that used at least an input property:
// HelloTask.cs using System; using Microsoft.Build.Utilities; // reference assembly of same name using Microsoft.Build.Framework; // ditto namespace MyFirstTask { public class HelloTask : Task { string _who; [Required] public string Who { get { return _who; } set { _who = value; } } public override bool Execute() { Log.LogMessage(string.Format("hello, {0}!", _who)); return true; } } }
My task implements the msbuild ITask interface by deriving from the Task helper base class, which provides the Log object, among other things. The only thing I have to do is implement the Execute method, which needs to return true on success. To prove that my task is called, I use the Log object to log a message (I could also log an error or a warning). The public Who property is set from the use of the task in an msbuild file. By marking the property with the Required attribute, I ensure that msbuild itself makes sure that a Who is provided.
Once I've compiled my task, I can use it directly from a .proj (or .csproj or .vbproj) file:
<!-- fun.proj --> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="HelloTarget"> <HelloTask Who="Joe" /> </Target> <UsingTask TaskName="MyFirstTask.HelloTask" AssemblyFile="C:\MyFirstTask\bin\Release\MyFirstTask.dll" /> </Project>
Notice the HelloTask element, which creates an instance of my HelloTask class and sets the Who property. The mapping between the HelloTask and the MyFirstTask.HelloTask class in the MyFirstTask.dll assembly is in the UsingTask element. Running msbuild against fun.proj yields the following output:
C:\taskfun>msbuild fun.proj Microsoft (R) Build Engine Version 2.0.50215.44 [Microsoft .NET Framework, Version 2.0.50215.44] Copyright (C) Microsoft Corporation 2005. All rights reserved. Build started 7/16/2005 7:04:09 PM. __________________________________________________ Project "C:\taskfun\fun.proj" (default targets): Target HelloTarget: hello, Joe! Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:00.04
Notice the "hello, Joe!" output by the task as its Execute method is called. Notice also that while the task is in its folder, the .proj file can be anywhere, so long as it has a UsingTask that maps appropriately. By convention, the UsingTask elements are kept in .targets files and put into shared folders to be used between multiple project files, e.g. Microsoft.common.targets, etc. Refactoring the UsingTask out of the .proj file and into a .targets file looks like this:
<!-- My.Fun.targets --> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="MyFirstTask.HelloTask" AssemblyFile="C:\MyFirstTask\bin\Release\MyFirstTask.dll" /> </Project><!-- fun.proj --> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="HelloTarget"> <HelloTask Who="Joe" /> </Target> <Import Project="c:\My.Fun.targets" /> </Project>
Of course, a real task does far more than this one, but it was hella easy to get started.
Sunday, Jul 10, 2005, 9:31 AM in The Spout
Enjoying This Moment
Here.
The one where I enjoy the passing of the book writing storm, if only for a moment.
Sunday, Jul 10, 2005, 8:33 AM in The Spout
Is it creepy that I think this is valid?
I've used this technique to keep people from dumping their work on me. Now I'm creeped out about it...
Sunday, Jul 10, 2005, 12:00 AM in The Spout
Enjoying This Moment
I'm sitting at my computer on Sunday morning with "nothing" to do (I mean, I could always work, but my team is good about taking weekends off). This morning comes after 3.5 months straight of evenings and weekends working on the Avalon book (I'm talking 20+ hours/week on the book on top of the 50-60 hours/week I spent getting up to speed on my new job). The final push was this week, which I took as vacation from work ("you took vacation to work!" my wife likes to say...).
Last night, I produced the 2nd draft of my last 1st draft chapter (which I was happy to trim by 17 pages w/o losing anything useful) and composed comments on a 2nd draft of Ian's chapter that was in my queue.
This morning, I took care of a reviewer comment that's been nagging me, sent Ian my feedback and composed a detailed schedule of the rest of my day which consists of:
- wait for feedback on non-finalized chapters
- apply feedback and finalize my last two chapters (30-60 minutes)
- produce 2nd draft of book preface (1-2 hours)
- review anything Ian sends my way (1-2 hours)
- (maybe) review 1st draft of chapter from the WinForms 2.0 book (1-2 hours)
Compared to how I have been spending my time lately, that's an extremely light day.
This book has been particularly difficult to write. Most of my writing has been on insights that I or the other members of the community have discovered in the use of the technology. These kinds of insights come after the technology is shipped and we've all had a chance to get to know it. Avalon, on the other hand, has a ways to go before it ships and the developer community is very small. Plus, some parts of Avalon don't work very well or have changed significantly since I first learned about them. The consequence of this is that most of my writings on Avalon have had to have at least one massive overhaul as I a) learn the best way to think about them and b) update them to actually reflect the latest bits.
The rub is that by the time the book sees the light of day (it should be on the PDC show floor), the Avalon team will likely have shipped another version of the bits, obsolescing what Ian and I have worked like dogs to ship. Of course, we'll post the errata and we'll update the book for the Avalon RTM, but still, it hurts that most of you won't be able to read the book when it's a perfect match for the bits.
I get to read it, though, and I'll tell you -- right now, the book rocks. : ) And the reason it rocks? Ian and I have worked hard to make sure it does, of course, but it's mostly been the internal and external reviewers that have done such a great job pointing out where we got it wrong. It's tough to hear, especially when it means a complete chapter re-write (I just finished one of those last night), but I'm so happy with the results that I'm willing to love them anyway.
Now I've raised the bar impossible high, but screw that -- I'm enjoying the moment...
Thursday, Jun 23, 2005, 2:24 PM in The Spout
My Worst Job
Following Rory's example, my worst job was where I spent two weeks with a friend working for his dad where the best of our two duties was to mow the doll factory's lawn (we used to fight over who's turn it was). The worst of the two duties was to sort leather remnants from the manufacture of furniture and car upholstery by color and texture into giant boxes, from which the underpaid immigrant women would construct dolls.
Talk about mind numbing... It drove home just how important it was to have a college degree.
I quit after two weeks because the amount of money I got for labor of that kind was nowhere near the degree of pain and suffering I endured, especially when I could just hang out at home for the summer. My friend, however, didn't get that choice. Poor bastard...
Monday, Jun 20, 2005, 4:44 PM in The Spout
Theoretical Computer Science
accounting is to mathematics as engineering is to computer science.
I'm an accountant sitting in a meeting run by mathematicians. Unless I can use the math to do my double-entry book-keeping, I just don't care. A mathematician cares only for the power of ideas and never needs to see the numbers.
As an accountant, I've read papers written by mathematicians and applied their ideas sparingly, but I've never seen a quorum of them discuss things before.
Fun. : )
Monday, Jun 20, 2005, 1:39 PM in The Spout
My Weekend
Dear Diary, this is how I spent my Father's Day weekend:
- Friday, 7:30am, dropped my family off at the airport so that they could visit relatives in MN
- Saturday, 1am, sent around the check-in notice for my day job and went to bed
- Saturday, 11am, woke up in book avoidance mode
- Saturday, 3pm, started porting styles chapter to Avalon b1
- Sunday, 4:30am, heard birds chirping, thought it would be a good idea to go to bed, still not done porting styles chapter and my butt hurts from sitting, plan to bring in a butt pillow tomorrow
- Sunday, 4:31am, reflected on why I'm working so hard on a book when my readers feel the need to compare me unfavorably to certain rotund movie characters, resolve to stop writing books so I can have a life back that includes exercise (and doesn't include reviewer feedback)
- Sunday, 9:30am, woke up, called my Dad to wish him a happy father's day, called my kids to hear them do the same for me
- Sunday, 10:30am, back at it porting styles chapter (butt pillow in place)
- Sunday, 1:30pm, finished porting styles chapter, started applying reviewer feedback
- Sunday, 3:30pm, shipped out 2nd draft of styles chapter for 48-hour quick-turn review, started reading data binding chapter reviews
- Sunday, 10:30pm, went to bed with data binding chapter only 1/3rd finalized
- Monday, 5:30am, got up to make the trip to Redmond, didn't finalize both chapters as per this weekend's plan, but I'm so happy to not be applying reviewer feedback right now that I have a hard time caring
- Monday, 1:33pm, composed this silly entry and working happily at my day job where reviewer feedback is not currently a part of my life
Tuesday, Jun 14, 2005, 11:50 AM in The Spout
The End of an Era
Today is Sara Williams's last day. Sara was the first Microsoft employee that I met. In fact, she was the first MS employee that a lot of people met. She's been at Microsoft for 14 years, which was long before it was cool for employees to talk to the outside world. She was a key part of MS's Developer Relations Group, whose job it was to do the outside world stuff while the rest of MS stayed inside and slid flat food under the door to each other.
Eventually, like others, Sara grew tired of Microsoft's insular-ism and specifically our developer network's unwillingness to embrace the community, so she launched GotDotNet which, inevitably, lead to her taking over MSDN altogether, which she developed Developer Centers and pushed a whole new way for Microsoft to embrace 3rd parties.
However, by far her most benevolent act was to hire me, a guy that refused to buckle to the pressure to move to Redmond and then she let me run roughshod over my colleagues putting up the Longhorn DevCenter and re-launching the Smart Client DevCenter. This set the stage for me proving myself in a remote-hostile environment and allowed me to eventually get myself onto an honest to gosh product team. It was all her.
Her departure from MSDN will leave an indelible mark on that organization and I can't say that it didn't play a factor my own decision to leave. Her departure from Microsoft is unbelievably sad. In many ways, Sara is Microsoft to me. She embodies each employee's personal responsibility to our customers. She's certainly not alone in her thinking at Microsoft, but that makes me no less sad to see her go.
Thanks very much, Sara. You made quite an impact on me. I wish you all the best and my undying adoration.
XXOO,
Chris