Marquee de Sells Archive
Current news
George Carlin, Rest In Peace
When I was a teenager, some kids were sneaking out to get drunk or have sex. I was sneaking into my parents' record collection to listen to George Carlin. Unfortunately, unleashing my version of his brand of humor on my peers was one of the things that kept me from being invited for parties or sex, but I still dearly loved the man and was very sorry to hear that he passed away yesterday.
Certain situations still trigger George Carlin responses whether I want them to or not; he is permanently lodged in my brain. And of all the things he's done, his incomplete list of impolite words is stuck in there furthest (*not* safe for work!).
I'll miss you, George. Give whatever all-powerful being you run into in the next life a piece of your mind about the state they've left us in here on Earth.
Update: a very NSFW GC highlight video series.
Monday, June 23, 2008 5:52 PM
(1 Replies)
Losing weight the old fashioned way: tonsilectomy
Today is my last day of time off work from a tonsillectomy a week ago Thursday. I'm down to about 20mg of OxyContin/day (from 60mg) and hope to have that down to nothing by Monday (although I still have half a jug for my next party : ).
Why would a grown man fresh off two SDRs and a BillG review feel the need to have his tonsils pulled? Well, I've been trying to talk someone into taking them for a coupla years now, even since the recurring strep throat started, but no luck. This time it was because I wasn't sleeping properly.
A few months ago at a routine checkup, my doctor was working her way down a standard questionnaire, asking me if I had this problem or that problem. I'd been swimming a lot and had lost a few pounds recently, so mostly I didn't have any health problems. Until she got to sleep:
"Are you having any trouble sleep?"
"Well, I've been waking up about 4am every morning, no matter when I go to bed."
"Any stress?"
"I work at Microsoft," I said, figuring that was answer enough.
She laughed. "I mean anything out of the ordinary?"
I couldn't think of anything that would explain it, so I said so.
"Have you ever had a sleep study?"
"Well, one time I recorded a chapter of my social studies text book and listened to it all night while I slept. I got an A on that test."
Now she was just tired of my lip, so she explained what she meant. And then she signed me up. And I went. And it sucked. Imagine trying to get sleep while tied up (and not in a good way!).
The diagnosis of my sleep study was "severe sleep apnea," as defined by more than 10 episodes an hour when I stop breathing and more than 10% decrease in oxygen to my brain. I was at 31 and 17% respectively, the sleep tech told me as they strapped me in for sleep study #2, this time with a C-PAP machine. Now imagine sleeping while being tied up and gagged.
Apparently the gag improved my sleep enough that it "cured" my sleep apnea so, without benefit of advice from an actual sleep doctor yet, I was set up with my own C-PAP machine, where I could gag myself every night before going to sleep. And not just gag myself, but strap on a hockey mask while someone blows into your mouth all night long. And now try to sleep while this is happening. My father got one and complained bitterly about it for a full year 'til he got used to it.
So, being even more stubborn than my father (which, if you knew my father, is stubborn on a Biblical scale), I asked for a second opinion. Or at least a first opinion from an actual sleep doctor (and not just a tech).
And I got one. There are other treatments besides C-PAP machines for sleep apnea, among them tonsillectomy (can work depending on the patient), some kind of dental appliance (generally not very successful) and, I kid you not, learning to play the digeridoo. This last one had me particularly interested as I've always wanted to do that anyway. (Come on! Breathing in and out at the same time and making weird noises! It's like sex without the mess!)
"Well, let's see if a tonsillectomy would help you," the doctor said, leaning in for a look down my throat. He shined his little light in and then started backward as if scared. "Oh, yeah... You'll want to have those looked at," he said, his eyes all big.
"What?" I asked, a little worried.
"Those are within the range where should talk to an ear-nose-throat doctor about having them removed," he said, hastily writing out a recommendation and stealing a look at my throat out of the corner of his eye as he did so.
And so I went to the ENT doctor, a young'un one step up from Doogie Howser (or maybe just having celebrated my 39th birthday, everyone is starting to look really young to me...). He explained how things worked inside the mouth and throat. He looked at my nose. He looked in my ears. He understood my dislike of the C-PAP machine. He described the four-point scale they used for measuring tonsils, asked me to open wide and, like the other doctor, started backward after a 500ms look.
"Those are huge!" Doogie said.
"Really?"
"Yeah!" I swear his pupils were dilated in some kind of fight or flight response.
"So, on the four-point scale?"
"4+. Huge!" he said. "Most people have a bunch of space around their tonsils to let he air in. How are you able to breath at all?"
"OK, doc. What do you think we should do?"
"We should take 'em out! Here's how it's going to work..." and he started describing the surgery, which was to include removing my tonsils, shaving back my uvula and fixing my deviated septum.
"Will I ever be able to sing?"
"Sure," he said. "That shouldn't be a problem."
"Great. I've always wanted to be able to sing!"
He laughed. "Well, no promises there." And then he started to describe the complications. Up until then, I was fine with him talking about permanent non-trivial surgery to correct a problem that I could be using an external (infernal!) machine to correct otherwise. But when he started talking about "uncontrolled bleeding" and "rushing to the emergency room as [my] stomach filled with blood," well, that was a bit much after no breakfast that morning.
"Are you OK?" he said, a concerned look on his face. "You've gone all white."
"Ah, no, actually, I'm not. I'm feeling a bit faint..."
So Doogie had me put my head between my knees and breath deeply. And when that didn't work, he popped some smelling salts under my nose. That hurts! But that didn't work either.
"Huh. That normally works," he said, dumbfounded at the giant man getting ready to pass out in his office. "Nurse! Bring me some juice!"
After recovering from the mere idea of uncontrolled bleeding down the back of my throat (which still makes me a little queasy just typing it), he said, "Well, let's not talk about that any more. You'll come in and I'll take care of it, OK?"
That sounded good to me, so I scheduled the surgery for 6/5, a week after the BillG and a few days after my birthday (my own gift to myself : ).
So, I had a few weeks to shutdown my work because the doctor said that I would be out for "at least" two weeks recovering. "And you'll be on heavy medications, too. Kids bounce back in a day or two, but this is *very* painful surgery for adults."
Great. Never had any surgery other than my wisdom teeth and now I get a doozy.
I started informing those around me of my impending doom. And then the advice started.
"The first week was really easy. It's the *second* week that's hard."
"My throat hurt so much that I just didn't eat for two weeks. I lost 30 pounds!"
"Those drugs will lower your IQ by like 30 points."
"I wonder if your voice will change? Mine did."
"I had a tonsillectomy as an adult and I still can't say my Ls properly."
As a professionally speaker, I didn't mind the idea of my voice changing a little (hopefully deeper), but losing my Ls? Good lord!
I was not to eat or drink starting midnight the night before my surgery, so I didn't. Normally the sleep deprivation has acted as an appetite suppressant, so that and the exercise has caused me to lose 43 pounds in the last 6 months. Missing a few coupla meals hasn't been an issue, but by 3pm the next morning, sitting on the hospital bed in a hospital gown, my ass hanging out while every nurse and doctor in the place asked me if I'd avoided food and water of any kind and I started to get damn hungry, hoping for the surgery just to have something else to do (although Melissa let me win a few hands of gin, which was nice).
Then the nice anesthesiologist came and slipped me a little something. I felt completely normal for about 10 minutes and then I woke up in the recovery room, the nurses asking me if I could help them move from the gurney to the bed. Seriously. That was my entire surgical experience. Melissa was there, making sure my stuff came with me and asking if I was OK.
Oh, and I was feeling no pain. I don't remember much from those first few hours. I could talk, which apparently was very unusual. I could walk. I remember my sister-in-law bringing my boys by for a visit and them waking me up every five minutes so I didn't spill my juice all over myself. I remember several pretty nurses waking me up every hour or so to adjust this sensor or give me that medication. I don't remember what I said to them, but I do remember making them laugh, which made the increasing pain of my throat more bearable.
We figured out my pain dosage that first night, 10mg of OxyContin every 4 hours mixed with intravenous morphine to take the edge off. I was disappointed that I didn't get any kind of "high," though. I just felt fuzzy headed and sleepy. Is that what Rush liked? I don't get it. I tell you though that the tennis elbow I'd given myself with the free weights in my garage was *completely* cured.
In that first 12 hours, it was my job to be able to walk, go to the bathroom on my own and manage my own pain via oral medications. And I did so. In fact, I was recovering so quickly, the doctor came by and gave me permission to go home hours early. I'd told him the night before that, if my voice had to change, could he push it toward Barry White? Oh, and I'd like to be able to say all my letters if possible. That morning, he asked, "Have you tried it? Can you still say your Ls?"
And then, because I couldn't not, I channeled A Christmas Story for demonstration purposes: "Fa ra ra ra ra ra ra ra ra!" willing to endure the pain in my throat for the cheap laugh. And I got it. : )
I came home a week ago Friday and have been largely ignoring my work, sleeping most of the time, getting up mainly for drugs every four hours and a little food (Top Ramen, Popsicles and water). The combo put me to sleep within an hour, giving me just time enough to send the random pathetic email or IM before collapsing again. Gradually I've been cutting back on pain meds and eating more, my throat just a minor annoyance at this point. It still hurts and my voice is still scratchy, but a quick chug of OC and I'm back in the game, mostly awake during the day and asleep at night.
I went in for my week check-in with the ENT guy yesterday. He was delighted to tell me about micro-pustules and puss inflammation that had riddled my tonsils. Not only where they "huge," but apparently my body's been fighting them off as a low level infection for who knows how long. While telling me this, the doctor put a bib around me and handed me a tray to hold as I looked at him questioningly.
"Oh, I don't think you're going to throw up," he said, rummaging for some instruments in a drawer. "I just need you to hold the splints when I take them out."
As part of fixing my deviated septum, Doogie had put splits in my nose so that things would heal open. At the mention of "splint," I thought of a little stick to hold my nostril open like the pole in the center of a tent. I thought he'd reach in, cut it in two and pull out a couple of tiny toothpicks. Well, he reached in, stretched my nostril to uncomfortable proportions, clipped the thread holding the split in and started pulling.
Have you seen the scene from Total Recall where Arnold reaches up into his nose and pulls out that giant tracking device? Yeah. Think that except the split was longer. The doctor kept pulling and it kept coming out until it fell with a thump into the tray.
"That was in my nose?!"
"Yep. And there's another one on the other side," he said, reaching for the other side.
"There is?!"
"Yeah. Didn't I tell you? Oh, I guess you were asleep when I put them in," he said, pulling another canoe out of my other nostril.
"Oh my god!" I said, looking down at the snot covered railroad ties in the tray I was holding.
"Are you OK? You look a little pale. OK, head back..." He was much more comfortable getting the color back into my face the second time, having practiced on me before.
"Nurse! Cold compresses!"
Friday, June 13, 2008 1:15 PM
(8 Replies)
Bill's Last Review
The last coupla months have been crazy. We've been warming up our PDC message with a series of SDR (Software Design Reviews) where we invite folks from the community, influencers, important customers, etc, to come and hear what we think the story is for our new technology before we blow it in front of a live PDC audience. There's a ton of prep to make sure we're as polished and as thought through as possible and that we're presenting as well possible, so there's been a ton of work on what the story is and how to present it properly. The latter means that I run a little internal training course called "Sells University" which is kind of an "extreme presentation skills" workshop I run, complete with Sells U hats and t-shirts (the alumni parties are fun : ).
Still we don't always get it right, which means mining the feedback (loud, enthusiastic and extensive feedback) to see what we can improve for the next time.
Sometimes the "next time," is something called a "BillG Review." This is where we get together our best folks, our best bits and our best story and we bring the all together for BillG himself for up to 4 hours of dog 'n' pony show. Normally this is as much about forcing teams together that should've been together all along as it is about the actual presentation to Bill, but either way, it's generally a month or more of hard work.
This time, we had two weeks.
"Chris, how'd you like to put together the demo for Bill's last review?" was what Doug asked me. I'd been to a BillG before, but had never been that involved, so I really had no idea what the effort was going to be. When faced with a new challenge and little information, I did what I always do: "I'd be happy to," I said.
And so began two weeks of 14+ hour days, meeting every day with execs up to the VP-level, figuring out what the story was, who'd say what, the mix of demo to slides, what he'd heard before, what he'll want to hear, rat holes we want to avoid, rot holes we want to engage him on (called "drawing the foul" in softie-speak), timing, etc.
And those are just the daily meetings -- the rest of the time is spent actually getting the bits to work, which means integrating technologies across teams and divisions, often for the first time. Can't have Bill saying, "But why didn't you just use such and so -- they've already solved that problem?" so we have to make stuff work, even if it's alpha and hasn't been made to work together yet or isn't stable when you bring it together. So I'm pulling in all my friends and their friends to set up conference calls to make these bits work with those bits and using the name "BillG" like a club to motivate folks that are already very very busy.
And it worked. It was more than full-time for two solid weeks, but we got a stack of bits working reliably and repeatably to demonstrate the goals of our work. It was chewing gum and bailing wire, but it got the point across. And the demo I worked on was just 15 minutes of a two hour review; there were dozens of other folks working on the rest of it.
The BillG review itself? Imagine the nicest conference room you've ever been to, with giant leather chairs, a podium, a huge retractable projection screen, miles of white board and acres of windows looking out over the green Microsoft campus. Imagine our Sr. VP checking in on us minutes beforehand to straighten out any questions we need answered (we spent 30 minutes guessing where Bill would sit and arranging ourselves accordingly). Then imagine Bill himself coming in like a ninja, appearing in his designated seat as if he'd teleported to it from his previous meeting (and maybe he did). No introductions, no fanfare, just "We'll get right to it, Bill."
And he listened, laughing a little from time to time, asking the odd question. I'd been at one of these before, but sitting along the wall, looking at the back of Bill's head. This time I was at the big boy's table. Last time, I'd tracked f-bombs, keeping a running total in my head: the higher the number, the worse you're doing. The last time, we had one/hour, which was considered to be outstanding. This time, zero. Even though the demo I'd prepared didn't go off flawlessly (there was a continuous reset in the underlying communications stack we were using that we'd never seen before), he got enough of the demo to appreciate our intent and was interested enough in the the rest of the material to seem pleased.
Near the end, he started talking more, synthesizing our work with the work going on in the rest of the company, making startling leaps that I'd never considered (and I've got pipe dreams in my head for the upcoming release and the one after that). We agreed some. We pushed back some. We asked him for help making some things happened.
And then he was gone, 30 minutes over his time, but off to somewhere else he had to be.
And then gushing started. We kicked ourselves for the little hiccup in our demo, but really we'd shown him what we wanted to show him and we felt good about it.
Was it really Bill's last review? Well, probably not. He's still got a few weeks left in his official role as chief software architect and I hear he still wants to work part-time on his pet projects (I was surprised to learn that we were one of those), but it's certainly one of the last. I can say that I worked to put together part of a BillG review while he was still around.
I still can't say that I've actually *met* the man, though. sigh.
Friday, June 13, 2008 9:55 AM
(0 Replies)
$200 Off Early Registration for PDC2008!
I love the smell of the PDC in the morning!
Wednesday, May 28, 2008 11:36 AM
(0 Replies)
The Next Generation
When I was in high school, "game programmer" meant at best BASIC or at worst 6502 assembly language, but either way, lots of text manipulation. These days, high school-age programmers are going to camps and programming competitions having spent their time in drag-n-drop programming environments like Game Maker. They've been doing work flow for 7 versions already!
Yesterday, I was a judge and the keynote speaker at a high school game programming contest. After asking a bunch of the 25 teams questions about their games, I was asked to speak about careers in software to 100 high school computer geeks. My people!
I started by introducing my youngest son as the "slide monkey" to warm applause and them myself as a Microsoft employee to... silence. So, I said: "How many of you think that Microsoft is..." and then I put my face down to the podium microphone and said in a voice from God, "EVIL?". Half of them raised their hands, all of them laughed and I had them engaged for the next 20 minutes.
Instead of listing various careers and their duties, I had dug through literally 13 years worth of bad Internet humor (641 emails) that I'd saved over the years and used all the silly, stupid, funny pictures to illustrate the various careers, like an x-ray of Homer's tiny brain (Architect), a picture of some hand puppets chasing a kitten (Legal), street signs that said "left turn" and "keep right" at the same time (User Assistance), etc. A couple pictures I had to clean up, like that one that said "Every time you masturbate, God kills a kitten," but even so, the pictures worked: they were listening to me.
While I had their attention, I told them two things. First, I told them that Microsoft was hiring. : ) Second, and most importantly, I told them not to worry about the money, but to pick a job that's going to get them excited every day. Pick the job that's the most *fun*. And when that one isn't fun anymore, pick another one! I tried to put every ounce of sincerity I had into it, because I believe it. I love my work, I love who I work with and I think everyone should have that. I know it's silly, but if I could inspire just one person to reject some high paying job that's going to make them miserable in favor of a starvation-wages job that they'll love, then I'm happy.
And to illustrate the downside of picking the wrong job, I closed my talk showing a little boy balling his eyes out (although in his case, it was because of Santa's tombstone behind him : )
What a good way to spend the day. Highly recommended.
Sunday, May 18, 2008 12:38 PM
(6 Replies)
Why I Love My Tribe and Want You To Join It!
Recently, I went to lunch with some friends of mine from the DevelopMentor Software days (wow, *that* was a long time ago) and they accused me of "radio silence" for the last two years.
"What?" I said. "I blog all the time!"
"Oh yeah? What have you been working on again?"
"Uhhh..."
I've mentioned my work on this blog in passing as "model-driven" this or "data-driven" that, but never the details. And I still can't tell you those kinds of details.
But what I can tell you is how I spend my days, because they are *glorious* days.
Have you ever had one of those jobs where you're energized about coming to work every single day, because whatever you're doing, it *really* needs doing and it's going to be different than yesterday?
You might be pushing to finish writing a talk for an upcoming SDR (Software Design Review) or getting that last bit of code checked in before a big internal drop, digging into security threat modeling for the first time or complaining that the thing your team is building is too damn hard to use, only to be told, "fine, then, fix it!"
You could be holding the hand of a new Jr. PM just joining the team or busting the balls of some Sr. Architect that thinks he's all that and a box of Cracker Jacks, interviewing the next set of folks that are dying to be on your team and turning some away because as much work as you have to do, it's better to leave it undone than to lower the bar even an inch on the quality standards you're committed to living up to.
You could be building your own sub-system that we already have 8 of inside the company, but you need some source code you understand and that you can experiment with so that you can add the one or two features you think could really make a difference, only to find out you've just built the thing that your management wants to base the next-gen version of that very sub-system on.
You might be meeting your boss in the ProClub locker room when you're half naked or soaking in the hot tub laughing about some trick you pulled in a meeting, listing the customers that need special attention or cornering an executive in the elevator asking for a really cool thing we have to do for the PDC, damn the cost.
You're definitely going to be going into work with the smartest, nicest, most fun, more interesting, most sincerely quality-focused people you've ever known. After Don had first come to Microsoft for a while, he told me that he'd found his "tribe." I'd been at DevelopMentor during it's heyday, so I couldn't imagine ever finding another group of people I enjoy working with that much. I was wrong. My tribe (of which Don is one of the chiefs) gets so much accomplished because we lean on each other, we trust each other and we spend *so* much time laughing with each other (and *at* each other : ).
Most of you will be able to see the thing I've been working on with my tribe at the PDC. Or, if you'd like to help us build it, we're always looking for new tribe members.
Wednesday, April 30, 2008 12:04 AM
(3 Replies)
Nobody Knows Shoes: The Book -- Pure Genius!
I friend of mine dropped a book with a funny cover in my lap and said, "Hey, check this out." I threw it on my pile and didn't get back to it for a few days. When I did, I didn't know what to make of it. It was like The Grapes of Wrath by Rory Blyth, with illustrations by a drunk Salvador Dali.
It took a few pages, but I eventually figured out that "Shoes" was a cross-platform GUI framework for Ruby and this 52-page book was a tutorial for it. By page 15, I knew the major concepts. By page 20, I could write my first program. By the end, 30 minutes after I'd started reading, I knew the whole thing.
But it was page 24 that completely blew me away. The use of pictures of dominoes and matches to illustrate layout in stacks and flows was genius. This wasn't just a random collection of wacky illustrations and non-traditional font choices -- the author of this book really knew how to tell a story.
It wasn't that I wanted to program Shoes, so went looking for a tutorial. It was the tutorial that made me want to program Shoes. Now *that's* writing.
P.S. This book is not from a publisher -- it's self-published through LuLu.com for cost. There is no bar code, copyright page, Table of Contents or index. It's just the stuff you actually need to get started programming a completely new thing. And, if you don't want to shell out the $8.72 to read a paper copy, you can read the HTML and PDF versions instead.
Saturday, March 22, 2008 9:38 AM
(4 Replies)
Anyone know anyone in the TV industry?
Don turned me onto the Walking Dead series of "graphic novels" (I'm too proud to call them "comic books!") and I loved them. I read volumes 1-4 in one day when I should've been doing other things.
Don thinks that they're good enough for a Lost-esque style 10pm cable TV show and I agree. The interplay of characters and watching them fall apart under the pressure is fascinating. The zombies are there, but it's mostly a background thing, like IRS agents when you forget to include the check (I wrote it! I swear I did!).
Anyone know anyone that needs the story for a new TV show? We'd watch and buy tons of advertisers' products!
Monday, March 17, 2008 4:24 PM
(1 Replies)
Do you want to host the WF workflow and rules designer?
If so, fill in this survey and tell the WF team what you want. They *really* want to know.
Friday, March 14, 2008 12:55 PM
(4 Replies)
On Beyond Unit Testing
Quetzal Bradley is a software development engineer (SDE) on my team with *tons* of experience in all manner of infrastructure stuff including the requirements of real-world software testing from the trenches at Microsoft.
Q gave a talk about what comes after unit testing to my team and I was blown away, so I sent him to tell Scott about it so that you could hear it, too.
Enjoy.
Saturday, March 08, 2008 2:02 PM
(1 Replies)
My Favorite Blog: Scott's computerzen.com
If I have time to read the web, I go to digg.com first, computerzen.com second and very little after that.
Just this morning, I enjoyed Six Months in the Inside - Am I evil yet?, Amazon Kindle and LINQ to Everything - LINQ to XSD adds more LINQiness. The Kindle review was especially enlightening because it was the first one I've read that actually a) covered the stuff I care about and b) pushed me off the fence about whether I want one (I do!).
Tuesday, March 04, 2008 7:15 AM
(1 Replies)
Programming WPF: "Programming Book of the Decade"
*blush*
Monday, March 03, 2008 12:33 PM
(2 Replies)
Programming WPF enters 2nd printing!
Wahoo! You love us, you really love us! : )
When a book goes to another printing, 100% of the time, there's a list of "errata" (aka "mistakes") that are fixed in the new printing. In this case, neither Ian nor I have any fixes to apply. So, it's official -- the book is perfect! : )
Thanks for reading.
Thursday, February 21, 2008 7:35 AM
(4 Replies)
Bridging object models: the faux-object idiom
My 1997 master's thesis came online today (he says, trying not to flinch). Here's the abstract:
Microsoft's Component Object Model (COM) is the dominant object model for the Microsoft Windows family of operating systems. COM encourages each object to support several views of itself, i.e. interfaces. Each interface represents a collection of logically related functions. A COM object is not allowed to expose multiple interfaces using multiple inheritance, however, as some languages do not support it and those that do are not guaranteed to do so in a binary-compatible way. Instead, an object exposes interfaces via a function called QueryInterface(). An object implements QueryInterface() to allow a client to ask what other interfaces the object supports at run-time.
This run-time type discovery scheme has three important characteristics. One, it allows an object to add additional functionality at a later date without disturbing functionality expected by an existing client. Two, it provides for language-independent polymorphism. Any object that supports a required interface can be used in a context that expects that interface. Three, it provides an opportunity for the client to degrade gracefully should an object not support requested functionality. For example, the client may request an alternate interface, ask for guidance from the user or simply continue without the requested functionality.
COM attempts to provide its services in as efficient a means as possible. For example, when an object server shares the same address space as its client, the client calls the functions of the object directly with no third-party intervention and no more overhead than calling a virtual function in C+ +. However, when using COM with some programming languages, this efficiency has a price: language integration. COM does not integrate well with a close-to-the-metal language like C+ +. In many ways COM was designed to look and act just like C + + , but C + + provides its own model of polymorphism, object lifetime control, object identity and type discovery. Of course: since C+ + is not language-independent or location transparent. it was designed differently. Because of these contrasting design goals, a C+ + programmer using COM often has a hard time reconciling the differences between the two object models.
To bridge the two object models, I have developed an abstraction for this purpose that I call a faux-object class. In this thesis, I illustrate the use of a specific instance of the faux-object idiom to provide an object model bridge for COM that more closely integrates with C+ +. By bundling several required interfaces together on the client side, a faux-object class provides the union of the operations of those interfaces, just as if we were allowed to use multiple inheritance in COM. By managing the lifetime of the COM object in the faux-object's constructor and destructor, it maps the lifetime control scheme of C+ + onto COM. And by using C+ + inline functions, a faux-object can provide most of these advantages with little or no additional run-time or memory overhead.
COM provides a standard Interface Definition Language (IDL) to unambiguously describe COM interfaces. Because IDL is such a rich description language, and because faux-object classes are well defined, I was able to build a tool to automate the generation of faux-object classes for the purpose of bridging the object models of COM and C+ +. This tool was used to generate several faux-object classes to test the usefulness of the faux-object idiom.
Enjoy.
Wednesday, February 20, 2008 12:28 PM
(9 Replies)
.NET Source Code Mass Downloader
On 1/16/08, Microsoft announced the ability to download some of the .NET Framework source code for debugging. This download process was only supported inside of a properly configured Visual Studio 2008.
21 Days Later: Kerem Kusmezer and John Robbins released a tool to download the source code en mass. Frankly, I'm surprised it took so long. : )
Wednesday, February 06, 2008 2:22 PM
(5 Replies)
I woke up today and decided to win the lottery
And so I did the only thing I could to do increase my odds -- I actually played the lottery. (I blame my inability to apply this strategy for my lottery losings in the past.)
I did a little research and then went to two local Plaid Pantries to purchase the Oregon Lottery "Trio."
At the first Plaid Pantry, an thin, stringy haired older lady behind the counter blinked in surprise when she saw me and then laughed to herself.
"I just saw your geek pin. It's so subtle... geek..." she said. "I wish I would've paid more attention to geeks when I was growing up. I only paid attention to the rockers."
"Well, that's pretty common," I said.
"But they're dumb and self-centered!"
"Yeah, but they get all the girls..."
"Well, I'm not a girl anymore and I prefer nerds. They're more stimulating!"
"Well," I said. "On behalf of the geek community, thank you."
She smiled, handed me my tickets and I left proud of my geek heritage.
At the second Plaid Pantry, a crowd had formed at the front desk. I got to the front of the line and a little old lady with a plastic tiara was cutting into a homemade chocolate fudge cake. The lady behind the counter said, "It's her birthday! And we love her!"
"Your birthday!" I said.
The birthday girl said, "Yep, don't you see my 65-year-old birthday crown?"
"Lovely," I said. "Happy birthday!"
The lady behind the counter said, "Well, no one was going to make a cake, so I did. That oughta be against the law."
I agreed and placed my Trio order. On the way out, I was happy to have been even a short part of that woman's birthday at the local convenience store where she was loved.
I decided to walk across the street to the locally owned coffee shop, tucked away off the main streets, fighting for survival against the Starbucks juggernaut. I walked in, said good morning to Ju, the owner and proprietor, who immediate started making my standard order. I haven't been there for months, but he still remembered what I wanted.
It's already been a good day. Think how much better it'll be after they announce my winning numbers? : )
Friday, February 01, 2008 9:20 AM
(8 Replies)
Poetry Proclivities
I'm not a big poetry fan in general, but notable exceptions are Poe's The Raven (especially the Simpson's version), Dr. Seuss and Shel Silverstein.
However, I have to admit a certain fondness for the lowly limerick. I've done some composing, but the subject matter is often not something I'd want to post on my blog ("Hi, Mom!"), so when I ran into the rare clean one, I had to share:
A Limerick packs laughs anatomical In a space that is quite economical But the good ones we've seen Very seldom are clean And the clean ones so seldom are comical
I've seen geek poetry, geek activities as song parodies, programs as songs (genius!), but I've never seen a geek limerick. Got any?
Wednesday, January 30, 2008 7:41 AM
(11 Replies)
Configuring VS08 to Debug .NET Framework Source
Shawn Burke has released the details to set up VS08 to debug into the .NET Framework source code, including the following assemblies:
- mscorlib.DLL
- System.DLL
- System.Data.DLL
- System.Drawing.DLL
- System.Web.DLL
- System.Web.Extensions.DLL
- System.Windows.Forms.DLL
- System.XML.DLL
- WPF (UIAutomation*.dll, System.Windows.DLL, System.Printing.DLL, System.Speech.DLL, WindowsBase.DLL, WindowsFormsIntegration.DLL, Presentation*.dll, some others)
- Microsoft.VisualBasic.DLL
Others are coming. Thanks, Shawn!
Friday, January 18, 2008 2:38 PM
(1 Replies)
Bookscan says "Programming WPF" is #3 .NET book!
Wahoo!
Thursday, January 17, 2008 10:25 AM
(0 Replies)
WPF Book Easter Egg
Does anyone have both the Anderson WPF book and the Griffiths/Sells WPF book? If so, have you read Don's forewords in both books?
Tuesday, January 08, 2008 11:46 AM
(9 Replies)
The Annotated Turing!
I just saw that Mr. Petzold is re-publishing the paper that started computer science and annotating it so that even I can understand it. I can't wait!
Sunday, January 06, 2008 7:55 AM
(6 Replies)
Time for some anti-social networking
OK, just after all my friends are on FaceBook, now I'm getting the requests to join Spock.com. I don't know what Spock.com is, but after the address-book thingie, MySpace, the high school alumni thingie, Friendster (?), the Google ork-something, the business thingie and most recently FaceBook, I'm all done. All I ever do on these sites is approve friends requests! Isn't there supposed to be some value to it other than that?
Oh, sure, I've had a few messages from people I haven't heard from in a while, but email works for that. In fact, email works for a helluva lot of the internet apps I see today. Plus, most of them just forward web form results to my email anyway! Why do I need a whole other thing when I've already got all my friends listed in my address book?
I declare the social network backlash officially started!
From now on, I'm going to be doing some anti-social networking around the ol' Casa de' Sells. If you want me, you know my email addresses, how to post comments on my blog and my phone number. That should be enough.
"*cough* When I was a boy, we didn't have these fancy social networks. *cough* *cough* We had email and we were happy to have it!"
"Yes, Grandpa. Shhhh...."
Saturday, January 05, 2008 5:37 PM
(15 Replies)
"So easy to read, it should be illegal"
Thanks very much "ET" on the Canadian Amazon. I can think of no higher compliment. : )
Friday, January 04, 2008 9:41 AM
(9 Replies)
WHS Continues to Rock My World
In the same way that .NET manages memory for you, Windows Home Server manages storage. All you have to do is tell it the names of shared folders you want it to have and which computers to back up and it will spread it and duplicate it across however many HDDs you have, without you worrying about which actual HDD your "Music" folder is on or where your wife's computer is being backed up to.
Plus, if you have more than one HDD and you have "Enable Folder Duplication" enabled for a shared folder, the data in that folder will be shared across multiple HDDs, effectively giving you the benefits of RAID without the config muss and fuss. (It's my understanding that this cross-HDD data duplication happens automatically for backed up data, but I don't know how to confirm that empirically without risking the data. : )
Because a 750GB SATA HDD was $156 at newegg.com, it was a no-brainer to pick one up. It arrived today and it was mean-time of 10 minutes between tearing the tape off the box and the new HDD being used for data storage on my WHS. I didn't even have to turn off the HP MediaServer machine!
All I did was pull an empty drawer forward, place the new HDD into it and push the drawer closed. Seating the drawer also seated both the data and power connections on the HDD itself, no wires or plastic connectors needed. I want all HDDs to work this way!
10 seconds later, the little light went on that said my new HDD was ready to be added as storage to my WHS, which only took right-clicking in the WHS console (already updated to display the new HDD) and adding it as storage. Another 10 seconds and some additional settings changes to enable folder duplication on my shared folders and the new HDD is in active service, providing redundant storage for all the data I care about in the house.
Really, the only problem I have now is that I only have enough data to fill 14% of the 1.4TB of new storage space. Maybe we need a Windows Friends & Family Server and I could rent out the extra space? : )
Thursday, January 03, 2008 3:57 PM
(8 Replies)
Fingerling Potato Baby Jesus
This is what happens when my relatives get together and the wine flows freely... : )
Thursday, December 27, 2007 5:37 PM
(8 Replies)
Christmas Delight
Not all was gloom and blackness this XMas. Among the new things in our lives, several of them rocked*:
- Our new HP MediaServer running Windows Home Server is awesome. As a Microsoft employee, I got a killer deal on this server appliance, but knowing what I now know, I'd have paid full price -- a whopping $550. In fact, I recently sunk another $200 into it for a memory upgrade and a 750GB HD, bringing it up to 1.25TB.
WHS keeps all the computers in my house automatically backed up, keeps shared folders duplicated across multiple HDs which can be added via the slide-out drawers in the front of the unit (no muss, no fuss) and serves it all up over the web securely. Plus, it's platform for add-ins, so, for example, if I want offsite storage of everything on the WHS box in case of catastrophe, I can get KeepValue for a flat $100 year.
- My youngest's new Zune 2 is the best MP3 player I've ever touched. We got the 4GB version, which is tiny, but still comes with amazing video playback, an FM radio and very intuitive controls. (I know I'm unusual in this regard, but when I first touched the iPod, I had no idea how to make it work and the manual didn't help.)
The client software is also a joy to use. The look and feel is unique and simple. Both the client and Zune UIs make me hope that those guys actually are building a phone. I want it.
Plus, we got a pair of the Altec-Lansing Zune speaker dock from woot.com for $40 and they sound great, worked instantly and come with the cutest remote control. Very nice package.
- I can't wait to put my new portable Bosch 10" Table Saw with Gravity Rise Stand to use (thanks, Babe!). I've been remodeling my homes for years, doing as much of it myself as I have time for, but was missing a saw to do straight rips. I'm all set now!
- My brother-in-law got Rock Band for his family and it *rocks*, especially the tone feedback on the microphone. (I love to sing, which you'll know if you're ever trapped in a car with me and Bohemian Rhapsody comes on the radio : )
- My youngest also got a pair of the Killer Rabbit Slippers, which Chris picked up for me when he and his wife went to Spamalot. I'd covet my son's new slippers except I love the Goofy loafer Slippers I stole from him years ago. : )
What did Santa bring you this year? Anything you'd recommend or want to steer folks away from?
*Yes, I know I'm a Microsoft employee and biased. Feel free to take what I say with as much salt as your heart can take. : )
Thursday, December 27, 2007 2:51 PM
(3 Replies)
The Sidekick Phone Sucks
I brought my son a Sidekick Slide cell phone for XMas this year and I've come to the conclusion that it sucks, or at least the way T-Mobile sells it sucks.
When I purchased it, the T-Mobile salesman offered me unlimited data and text messages for an additional $20/month on that line. The phone was an upgrade on our existing family plan, which already has 3000 minutes/month and unlimited text messaging and I don't really need my son surfing the interweb during class, so I declined. He never mentioned that the phone wouldn't actually work without this extra money, or I never would've purchased it.
Then, XMas morning rolls around, my son is super-excited and plugs his SIM card into his new phone, turns it on and is greeted with the activation screen. This lasted for hours. Eventually, he found the magic key combination and was able to use the phone, but when it crashed, it lost all his contacts and pictures. Plus, the battery life sucked, lasting maybe four hours between charges. The boy swears it's because it's still trying to activate in the background.
Finally, we called T-Mobile "customer care." If I wanted to use the "full capabilities" of the phone, like save f-ing contacts, we pay the $20/month. The contacts are saved "on the network" *only*. That sucks. This was a $200 phone subsidized with a 2-year extension to the contract and it can't store f-ing phone numbers?!?
I was about ready to cram the phone back up the T-Mobile salesman's.... well, I would've returned it, but the boy was so enamored, he committed to ponying up the dough from his allowance.
And I have a sneaking suspicion that even though we now have the "Sidekick feature" package, that the battery life is *still* going to suck... Keep your fingers crossed.
P.S. I can't tell you how much my son loves this phone...
Wednesday, December 26, 2007 10:48 PM
(3 Replies)
Microsoft needs you to build Emacs.Net
Interested? Drop Doug a line.
Wednesday, December 26, 2007 8:42 PM
(3 Replies)
Posting from my OLPC PC
The form factor is cool, the OS is fine (although I'd prefer Windows) but the chicklet keyboard is worthless. I can literally type faster on my t-mobile dash smartphone. Anyone want an OLPC laptop PC for $200 + shipping?
Sunday, December 23, 2007 10:13 PM
(15 Replies)
XBOX 360 For Pennies a Day!
In 2006, I purchased an XBOX 360 bundle from CostCo for about $550, including the console, a game and two wireless controllers.
In April of 2007, my 360 caught the "red ring of death" ("Ring around the rosy, pockets full of posies, ashes, ashes, we all fall down!"), at which point I brought it back to CostCo and exchanged it for the bundle they had available at the time, which was $475. They refunded me the difference!
Net return: $75 in one year on an initial investment of $550.
Earlier this month, my new 360 also caught the plague and I returned it again to CostCo, where the holiday bundle now costs $400.
Net return: $75 in 7 months on an initial investment of $475 in 58% of the time from the last return of this amount.
If this continues, at this rate I'll have made my original investment back in another 9 months, at which point I'll have had the use of an XBOX 360 for 28 months for the opportunity cost of the original $550, which is approximately $50 at 7% over two years after taxes, $1.80/month or 6 cents/day.
What a deal! : )
P.S. The moral of the story: buy your electronics at CostCo.
Sunday, December 16, 2007 2:22 PM
(13 Replies)
Conversing In Italian over the Interweb
Yesterday I got an email from a fellow named Corrado Cavalli to whom I sent a free copy of Programming WPF. When he received it and read through it, he posted a note on his web site, which of course, I went to read.
Now, Corrado lives in San Pellegrino Terme, Bergamo Italy, so his blog is in Italian. That didn't stop me from reading it in English using Google's language translation page.
Then, just to be "cheeky" as my Australian friends say, I composed simple responses in English and translated them to Italian before posting them, you know, pretending I'm smart and international and such like. : )
To be somewhat confident I wasn't asking him for improper knowledge of his dog, I did the Italian to English translation on the translated text and rearranged my English it bit when it wasn't quite right.
All in all, I'd say it worked out pretty well, although I did get some flowers from his dog the other day...
Wednesday, December 12, 2007 10:20 AM
(5 Replies)
Here Comes Another Bubble sttto some Billy Joel song...
This is hilarious!
Tuesday, December 11, 2007 12:01 PM
(1 Replies)
Win a Trip to NYC + WPF Dream Machine with Your WPF Application Stylings!
The nice folks at Lab 49 are throwing a contest for WPF programmers.
The goal: take the financial data they provide and build a kick-ass WPF app around it.
The grand prize:
- a trip for two to the MS Financial Services Developer Conference in NYC
- the "Ultimate WPF Developer's Machine"
- an XBox 360 Elite (plus games!)
- a Zune
- a profile in WindowsFS magazine
- a copy of Expression Studio, Visual Studio 2008 and Windows Vista Ultimate
- a WPF Team signed t-shirt
- <whew>!
Final submission is 2/29/08, but there are other prizes for early submission (by 2/14/08).
The judges (Charles Petzold, Rob Relyea, Josh Smith and yours truly) will be looking for "your use of WPF, innovative display of financial data, the quality of your code, performance, appearance, and overall functionality."
I'm a bit of a financial nut, so I'm very much looking forward to the results of this contest. Dazzle us!
Monday, December 10, 2007 12:52 PM
(3 Replies)
Give Them a Fish or Teach 'em To Fish?
Dvorak asks this about One Laptop Per Child:
"Does anyone but me see the OLPC XO-1 as an insulting 'let them eat cake' sort of message to the world's poor?"
I can see his point, but I don't see how decades of giving food and support to the 3rd world has helped them to become part of the 1st world. Maybe access to the world's information so that they can educate themselves and learn how to solve their own problems might work a little better. It's worth a try at least.
Monday, December 10, 2007 9:00 AM
(10 Replies)
Mark Your Calendars! PDC08 Announced
Save the Date!
October 27–30, 2008 Pre-conference October 26, 2008 Los Angeles, California
Thursday, December 06, 2007 10:04 AM
(0 Replies)
12 ways to de-commercialize the holidays
From 12 ways to de-commercialize the holidays:
- Yankee Swap
- Secret Santa
- Un-Secret Santa
- Re-gifting
- Pool your resources
- For children only
- Donate in others' names
- Limit spending
- Families helping others
- Plan family outings
- Let the kids rule for one day
- Take a trip
On the "Let the kids rule for one day" front, that's what we do each year for each kid's birthday. They look forward to that part of it more than any other.
Monday, December 03, 2007 6:10 PM
(4 Replies)
StayAtHomeServer.com!
From Mommy, Why is There a Server in the House?:
"When a mommy and a daddy love each other very much, the daddy wants to give the mommy a special gift.
"So he buys a 'stay-at-home' server."
I wish more of the rest of Microsoft had this kind of humor when dealing with the world! I thought I was going to wet myself...
Monday, December 03, 2007 5:58 PM
(0 Replies)
MS Math Add-In for Word 2007
I mention this because this is just the thing I've wanted to be able to check my kid's math homework: the Microsoft Math Add-In for Word 2007.
For example, after installing it, I can open Word, press Alt+= to get myself a new equation and then enter:
x^2 +2x + 2 + 3x - 4x^2
it translates into:

If I right-click and choose Simplify, I get the following:

If I right-click again and choose Plot in 2D, I get:

If I've got an equation that I want to solve, I can enter it:

and then right-click and choose Solve for x and get all the possible solutions:

This even works if you have multiple equations with multiple unknowns, which means this is good through at least 8th grade Algebra. Wahoo!
Friday, November 30, 2007 10:35 AM
(6 Replies)
1 Setup == Innumerable Uninstalls?
OK, what's the deal with installing 1 product (Visual Studio 2008 beta 2) and having to do 22 separate uninstalls?!? How is this a good thing?
Tuesday, November 27, 2007 7:09 PM
(8 Replies)
Why aren't Windows settings stored in %HOMEPATH%?
Normally, this is the kind of question I'd pose and then provide an answer, but this time I just don't have one.
If my Word settings were stored in %HOMEPATH%\WordSettings.xml, I could edit the file, back it up, carry it to other machines and generally manage it. Instead, my settings seem to be stored in the Registry, %LOCALAPPDATA% or %APPDATA%, but who knows what's stored where or how to manage it.
Obviously, Unix already does just this and I'm jealous. If I had settings stored somewhere I could understand and apps that actually used XCOPY deployment, I wouldn't have to uninstall at all -- I could just delete.
These are the thoughts you have uninstalling VS05 and VS08b2...
Tuesday, November 27, 2007 6:18 PM
(17 Replies)
I had to load FireFox on my machine yesterday
In general, IE7 more than meets my needs. It shows me the web pages I want and it works well. However, there is one killer feature that FireFox has that I desperately needed yesterday that caused me to load it onto my machine. It's not my default browser and it doesn't replace IE7, but FireFox is there and fulfilling my one killer feature needs nicely.
What's the feature, you ask? Well I'll tell you: sane content scaling. IE7 has Ctrl+, but it works very poorly, unlike FireFox, where it works fabulously.
Here's the problem. Yesterday, I started reading the most excellent C# 3.0 in a Nutshell online, but the "Text Zoom +" button didn't increase the font size nearly enough for me to read on my giant LCD monitor. So, I started pressing Ctrl+ on IE7 and the text got bigger, but it didn't wrap the text inside the window, instead giving me horizontal scroll bar. This confuses me, because IE wraps text just fine when the window is resized or when the text size changes -- why can't it wrap when the content is scaled?
Anyway, FireFox rescales things very nicely and made my online reading very pleasant.
Monday, November 26, 2007 12:04 PM
(13 Replies)
C# 3.0 in a Nutshell, LINQPad and Pure Genius
I absolutely love what the Albahari brothers (Joe & Ben) have done with C# 3.0 in a Nutshell. Not only is their prose concise in a way that mine is not, but I have learned a bunch of stuff about LINQ I didn't know, they built a tool (LINQPad) that lets you experiment with LINQ interactively in a way that the designers of LINQ themselves don't support and the tool has all kinds of wonderful features that LINQ, SQL and Regular Expression programmers alike will want to use regularly long after they've read the book.
And if that weren't enough, the tool comes with an integrated tree of samples that follow along with the material in the book, teaching the material from another angle and reinforcing it perfectly. It's pure genius and if I ever write another book, it's a model I'm going to follow. Very highly recommended.
Monday, November 26, 2007 9:06 AM
(7 Replies)
Amazon Kindle Real-Life Review
I've posted about ebooks before (e.g. I Hate Books). It sounds like the Amazon Kindle has some real potential. All we need is a product with enough critical mass to create a market and then we can have real competition ala the music player market.
Has anyone used an ebook reader before? I have some friends with the Sony version and they love it. Are we there yet? Does anyone have a Kindle?
Saturday, November 24, 2007 11:11 AM
(11 Replies)
Visual Studio 2008 Has Been Released!
From the Visual Studio home page:
Enjoy! I know I have been.
Monday, November 19, 2007 10:52 AM
(1 Replies)
My Team is Hiring and We Need YOU!
As Don Box, Chris Anderson and Doug Purdy have mentioned, my team is hiring. We use agile methods and "everyone shovels," i.e. everyone designs, codes, writes unit tests, gives presentations on their stuff and writes the core docs.
Presently, we need language designers and UI framework designers. Interested? Tell Doug I sent you.
P.S. Did I mention that the team includes Don Box, Chris Anderson and Doug Purdy as well as Martin Gudgin, Jeff Schlimmer and Clemens Szyperski, as well as a bunch more talented folks?
Friday, November 16, 2007 10:31 AM
(3 Replies)
Free copies of "Programming WPF" for YOU!
I just got a box full of free copies of Programming WPF from ORA.
If you want one, post a comment on this post with a) a reason why you deserve one and b) contact info so I can follow up for snail mail addresses.
That's it! I'll pick the top n folks based on how many books I've got when I unpack the boxes. : )
Wednesday, November 14, 2007 3:20 PM
(163 Replies)
Volunteering as Christmas Present?
When I was a kid, Christmas was my favorite holiday because my entire family (grandparents, parents, siblings, cousins, aunts and uncles) would get together at our lake cabin, chop wood for the fireplace by day and play games at night, culminating in an hours-long gift opening bonanza on Christmas Eve where each of us would watch the opener open a gift, youngest-to-oldest, one at a time. Did we like opening? Sure, but even better was seeing the look at the person's face when you'd managed to get them just the right thing because you saw them all the time and you knew what they wanted.
Now, I'm building my own family in Oregon, but I still have parents and in-laws and grandparents that need Christmas presents. Do I know what they want and need? No, because I hardly ever see them. Do I get to see their faces when they open the gifts? No, because I'm in Oregon. Does that get me off the hook? No, because when the presents don't show up in time, one or two have been known to call and complain. So, what's a remote relative to do?
In the past, I've floated the idea of sending donations in their names to various charities, but that seems kind of like a cop out, as there's no real thought or effort in it. Plus, it's not every much fun to open.
This year, I thought I'd give an hour of volunteer service and then write a little story about it for them to read around the tree in our absence. I'll pick an organization that fits their personality. For my step-mom, I might walk dogs at the local Humane Society (she likes dogs). For my Grandmother, I might volunteer to drive some elderly shut-in on her holiday errands (as I do for her when I can when I'm in town). Then, step-mom and Grandma can hear about how the hour went and share it with whoever they're opening presents with by reading my description out loud. This way, someone gets something they need, I've put in the effort to show my loved on that they really are loved and there's a little something under the tree.
Thoughts? Has anyone done something like this before? Does anyone have any ideas for Portland-area organizations that can help me get my volunteer hours in this holiday season?
Monday, November 05, 2007 12:33 PM
(6 Replies)
The Future of Telecommuting
I truly believe that the future of employment will be much more individualistic and that requiring people to move will be an anachronism. Right now, phone + LiveMeeting is about 50% as good as being there; you're limited in what jobs you can do based on how much a part of your job "being there" actually is. We already have the pieces of technology to push "being there" to about 80%; we just haven't put them together yet. When we do, a bunch more barriers are going to come down. Until then, some folks are on the bleeding edge and isn't that what this whole industry is about anyway? : )
Monday, October 29, 2007 6:12 AM
(8 Replies)
Working Remotely for Microsoft: Misc Tips & Tricks
- I used to drive up because it gave me the freedom of traveling whenever I wanted and I always had a car on the far end. Besides the speeding tickets, the other big problem was the amount of human energy it takes to drive back and forth so often.
- I've taken the train, which I love because of the comfy surroundings and the electron dispensers, but if I want to be at a 9:45am meeting on Monday morning, I have to leave on the 2pm train on Sunday, which really cuts into family time.
- Now I fly. The drive to the airport is only 30 minutes and I've never gotten a ticket along the way. When I get there, I use the express line to Seattle flights and get myself a Chai tea on the far side of security, itself made easy by long practice and my slip-off Crocs. The flight is short and I've long ago dropped off luggage that I leave in building 42, so I only have to bring clean undies in my laptop carry-on. When I land, instead of renting a car, I take a cab and get the benefit of the HOV lane when means I can take the 8am flight instead of the 7:30am flight, giving me 30 more minutes in bed. When I arrive, I have a junker freebie car I leave in the parking lot for tooling around town.
- I split my overnights between my long-time friend and mentor Don Box and a local hotel. I stay at the hotel because I don't want to overstay my welcome and I stay at Don's because he and his family have made me feel so at home that I can't not stay there. As much as Don would prefer I be in WA, he has really gone a long way to enable my lifestyle and I love him for it.
- Sometimes when I'm on a roll, I'll keep going long into the night, just like the old days at DM. And sometimes when I'm not feeling it, I'll take the afternoon off and see a movie with my sweetie. It's all about the balance.
- I've always had an office for when I'm in Redmond, but I've always made sure I was the first guy on the double-up list when things get tight. Now only does this give me more face time when I'm in town, but I look like a hero and the guy who rooms with me only has to put up with me 3 days out of 10. I also let the other guy decide how to lay out the office, since my real office is set up just how I like it at my house. I've worked on couches, in the hall, in conference rooms, in the care and at the local Starbucks on 156th. Give me a laptop and wi-fi and I'm good to go.
- Keep a machine setup inside the firewall. Every once in a while, VPN won't let you do anything except terminal serve into a machine, at which point you can do anything just like you were there.
- Make Microsoft pay at least half of your phone and internet bills.
- Just because you're working from home, you should expect adequate equipment to be supplied by your employer. Over a 4.5 year period, Microsoft has supplied me with two laptops, a 20" LCD monitor and a printer-fax-scanner-copier, all in my home office.
Tomorrow, I'll post the final entry in this series with my thoughts about the future of telecommuting.
Sunday, October 28, 2007 8:21 PM
(0 Replies)
Working Remotely for Microsoft: What Are the Consequences?
When I went to work for Microsoft without moving up, I knew I was making a tradeoff. Before Microsoft, I spent a lot of time traveling, so MS meant staying home much more with my family. It also meant, because of MS's cultural bias, that my rate of advancement would be considerably slower than it would be if I was local. In fact, I was prepared to be completely unpromoted as several senior folks I trusted at Microsoft promised I would be. As it turned out, even though I came into Microsoft at a fairly high level (high enough that it wouldn't have been hard to not meet expectations even if I were local), I was promoted. I doubt seriously that I'll be promoted again, but I never thought I would be promoted at all. In fact, I've often referred to my Microsoft job, especially my new one on a product team, as "the world's greatest dead-end job." : )
I know this sounds bad, but it gives me two freedoms. First, and most importantly, it gives me the freedom to spend evenings and weekends with my family (especially since I shipped the last book I plan on working on for a long, long time) and to put them first. This was the conscious decision I made going it and I'm happy every day that I made it. The second freedom that took me by surprise is that I can focus on the parts of my job that I really love without worrying about picking up tasks just because they'll look good at review time. It's almost like I'm one of those Microsofties with "fuck you money" without the actual money. : )
Because my current boss cares deeply about making me as successful as I can be, we've talked about me having direct reports. I've done it before and I believe I could do it effectively again, even remotely (I've run successful remote development teams all over the world). However, because of the strong MS bias, I told my boss that I'd only take direct reports that had bought into the downsides of being remote, even if they're local. If I'm not perceived as effective because I'm remote, then by extension, neither will anyone that works for me. My boss hasn't pushed it since our conversation on that matter and frankly, I don't expect to get any reports, but he's surprised me before, so we'll see. : )
Tomorrow: Misc tips & tricks.
Saturday, October 27, 2007 11:49 AM
(3 Replies)
Working Remotely for Microsoft: Can You Communicate Effectively From Home During Meetings?
Communicating during a meeting is an art unto itself and has its own set of considerations:
- Learn to love LiveMeeting: If you can't see faces, the next best thing is whiteboards and what's on each other's computer screens. For whiteboards, you really need a video camera, which I'll talk about later. For desktop sharing, I've tried NetMeeting, VNC, Terminal Services (in shadow mode) every version of MS Messenger, Office Communicator, Vista Meeting Space and LiveMeeting and a bunch more I'm not remembering. The only one that works consistently through firewalls (mine and Microsoft's) and is easy to get bootstrapped is LiveMeeting. Learn how to start a "Meet Now" meeting (I have an URL that starts up the "Meet Now: Chris Sells" meeting but I have no idea where I got it) and use it! I've actually heard Don Box, who hates working with me when I'm not in the room, say "LiveMeeting is better than you being here!" And when you're jointly working on a shared document or shared code, it's pretty damn good.
- Get a LiveMeeting monkey: If you're going to do a remote presentation, make sure there's someone on the other end with LiveMeeting tested and running that can project your slides for you while you narrate.
- Learn the short path through LiveMeeting: Microsoft employees, like most humans, don't like to be distracted by things they don't care about. They don't want to install a new piece of software on a machine they just got working again last week and they certainly don't know how to use it. Make sure you can talk them through the shortest path to getting LiveMeeting installed and sharing their desktops. The first time, this takes 10-15 minutes of disk churn (unfortunately), so ideally you'll do it before the big meeting.
- Keep time zones in mind: Martin was at GMT+0. Tim was at GMT-5. Microsoft is at GMT-8, as am I. Being working and available for meetings, phone calls and quick turn emails is important, otherwise, your team is going to start forgetting to include you in ad hoc stuff, as was a problem for Tim and completely impossible for Martin.
- Meet new people face-to-face: I go up to Microsoft 3 days/2 nights every other week with the idea that I'm not going to get much actual coding or writing done, but I'm going to get face time with new people I need to start relationships with. When they hear you're remote, most folks at Microsoft will want to postpone the meeting 'til you're in town. To make them comfortable with you and to put faces to the voices, that's a good idea the first time. However, after that, phone calls are just fine, especially when combined with LiveMeeting.
- Learn your address book: When a meeting room is scheduled, the scheduler doesn't know the phone number for the meeting nor are they even going to remember that you're calling in, so you need to know how to get the phone number yourself. At Microsoft, the address book lists conference room phone numbers as "conf room [blg]/[room]," e.g. "conf room 42/5646". If you have any trouble or you need someone to call you a cab for the airport on the last day of your trip, you can look up the receptionist for the building you're in with "Reception Bldg [bldg]," e.g. "Reception Building 42".
- Get your own personal conference call number: If more than one person is calling into a single meeting room, have your personal conference call phone number and code ready. Again, Microsoft issues these to anyone that wants one (and again I can't remember where I got mine : ).
- Take meeting notes: If you are finding yourself missing out what's going on during meetings while you're on the phone, offer to take the meeting notes. That way, when you have questions, you're asking as the guy taking notes not the annoying guy who's too full of him/herself to move.
- Play solitaire: If you're not taking notes and you find yourself zoning out during a phone meeting, either because you're surfing the web or starting to do "real" work, you need to do something that will occupy your eyes and your hands while keeping your ears and brain free to pay attention. For that I recommend solitaire or, when I've really let my work interfere with my home life balance, I like to put the dishes away or fold clothes. Handy access to the Mute button on your phone covers up the "clink" noises. : )
- Learn to intuit what's going on to the whiteboard: I find that the single biggest downside to not being there in person, especially on a product team, is not being able to see the whiteboard. Microsoft has a face-to-face, brute force culture; if a design or implementation problem can't be solved in two sentences in email, that's cause for a whiteboard scribble session. What I've learned, however, is that most such whiteboard scribbles look the same: there are going to be some boxes, some lines and some letters. The most powerful thing about what's happening on the whiteboard is not the whiteboard itself, but the story that's told while the boxes and lines are being scribbled. With some practice, you can learn to guess what's on the whiteboard by listening to the story, even if you have to ask a clarifying question or two. Further, just the mere act of saying something like "Well, I'm just guessing, but what I think you think drew is…" More often than not, the folks on the other end of the phone will say something like, "Wow. That's pretty close, Chris, except that…" With a little practice, you too can become a "whiteboard whisper." : )
That's not to say that I wouldn't love a better solution for remote telepresence then I've got. I've tried a number of experiments over the years and right now Scott Hanselman and I are trying yet another one. For me, a basket of laptop that my team can carry to meetings for me that's running Skype for a/v sharing (it works through firewalls and does great noise cancelation), with a high quality pan/tilt/zoom camera I can control from my end is the killer app for remote employees. Scott's got more of a mobile IvanAnywhere mindset, but between the two of us, we hope to cobble together something that closes 80% of the remaining gap I can't close with the communication tips I've listed above.
Tomorrow we'll discuss the career consequences of working remotely at Microsoft.
Friday, October 26, 2007 11:01 AM
(3 Replies)
Working Remotely for Microsoft: Can You Communicate Effectively From Home?
Assuming you can focus on work and you can find someone to hire you, effective communication is the next issue you'll run into. When I was working for DM, practically everyone was remote, so our communication was based on email conversations that would be long and involved, sometimes lasting for days. However, that's not the case at Microsoft, where brevity in email is valued and meetings are called for the tough issues. How do you fit into this culture? I use several techniques:
Over-communicate: I like to check and double check the things I heard and read vs. the things I've seeing done. "I did X. Can you check it and make sure it's what we agreed on?" "We agree that you were going to do Y. How's that coming? I looked at that last check-in you made and you seem to be doing Z. Why?"
Pick good email subjects: Lots of times, people have so much email, if the subject isn't relevant, they don't bother.
Keep emails short: At Microsoft, we have literally thousands of mailing lists and it's not unusual for a single employee to belong to tens of them, generating 200-500 emails/day. If you want to be heard in that ruckus, you have to be succinct. If you get a reputation for long, rambling emails, especially without a summary, your missives will be ignored.
Summarize long emails at the top: When I need my email to go over a page, I summarize it at the top with a single sentence or two. That saves folks from having to dig through an email to get the gist.
Resend emails: I know Raymond Chen says not to, but if you don't get an answer to an email, send it again. I can't tell you how many times the first email was ignored, but the second email was answered.
Reply to yourself: If you're asking a question that doesn't get answered, follow up with the answer when you get it. I've had threads of conversation that were 80% me. At least they'll see you're there so they'll remember to keep sending the paycheck. : )
Follow up on hints: Sometimes you'll see something go by in an email that implies a different understanding than you had when last you talked to folks. For example, you're expecting to participate in a design review on Wednesday, but someone sends an email including the sentence like, "We'll have to have this question answered by Tuesday's design review anyway." In the hallway/meeting/face-to-face communication culture of Microsoft, decisions are made and changed all the time without a written follow-up, but most of the time you'll see the new data referenced in some kind of way. When that happens, follow up, e.g. "I thought the design review was on Wednesday. Has it been changed?"
Read those status mails: You're saving all kinds of time and being more productive by skipping those random conversations in the hallway, so you can afford to actual read your colleagues' status emails. I also like to follow up on them, asking questions about the stuff I'm curious about. Often it helps me get my own work done and it almost always means I can integrate my work with that of my team's better.
Own the efforts you're involved in: It's very easy to get focused on your own work and get out of sync with the team. If you're dependent on other folks to get their work done so that the thing you're doing gets done correctly and on time, you've got yourself a powerful motivator to communicate.
Get everyone on your team to use IM: IM is a wonderful simulation for hallway conversations that works even when the target of your question/comment is in a meeting (it's common for Microsofties to have their laptops open during meetings). At Microsoft, even if folks don't have a personal IM account via Yahoo or Live Messenger, they do have one with Office Communicator. If you're trying to get someone that's never online with it, instead of sending them an email with your question, send them a link to the Office Communicator installation and a request for them to log in. If that doesn't work, start calling them and asking them the same thing. They'll get the hint. : )
Pick up the phone: A ringing desktop phone is a novelty at Microsoft that few folks will ignore. Use it to startle them into submission! : )
Schedule a meeting for a phone call: If you can't get your team on the phone for a quick discussion, schedule a 15-minute phone call.
Tomorrow I'll focus on remote communication during meetings.
Thursday, October 25, 2007 7:37 AM
(6 Replies)
Working Remotely for Microsoft: Can I Find Someone To Let Me Work From Home?
Assuming you decide you can and want to work from home for Microsoft, now the trick is finding someone that will take you. The first time, this took me years. As my writing and speaking became more popular, I'd get more regular calls from someone at Microsoft with "the perfect job for me." Each time, I'd ask them if I had to move and when they replied, "Of course" as if the entire pool of worthy workers lived in Washington, I'd politely decline. Eventually when the question came up, Sara Williams said, "No need to move" and I went to work for MSDN. As is often the case with one's first Microsoft job, it wasn't a long-term fit (a software engineer needs to be on a product team!), but finding a product team took me took 6 months of digging. All the groups I talked to wanted me and they all were happy to move me (some even offered to move my extended family up, too, eliminating my main anchor for staying in OR), but culturally they just didn't know what to do with a remote guy.
Eventually, persistence, and my long experience working remotely, paid off and I actually had two competing offers (and I'm *so* happy about the one I chose). Microsoft has a *ton* of open positions and they get more open about remote employees all the time. Keep at it!
Tomorrow: Can You Communicate Effectively From Home?
Wednesday, October 24, 2007 11:53 AM
(10 Replies)
Working Remotely for Microsoft: Can You Focus On Work At Home?
First off, I don't recommend remote work for folks who don't like spending the vast majority of their time away from their colleagues, sometimes having trouble focusing on the work in favor of household duties or interactions. In fact, the ability to focus on work while at home is the #1 issue you'll have to face as a remote employee and I've seen it drive 80% of folks back to the office. I've always been naturally in the 20% bucket on that issue.
As an example, when I first started at DevelopMentor, my office was in an open back room separated from the dining room by a hallway kitchen. My two infant boys had me in clear view when I was handcrafting RPC packets for communication with a DCOM server, hanging on the child gate, crying for me to play with them. My wife also had in plain sight when she wanted something from the high shelf. My family often heard me protest, "You know, I am actually working over here!" I eventually built a door, purchased Melissa a stool and learned to be very mushy about the split between work and home life. My family's actually been very supportive and I've always preferred the work environment I've established at home over any I've ever had from an employer, if for no other reason than my home has my family in it.
My advice to anyone that wants to switch to remote work is to try it for a month or two first. Are you able to balance work and family life when you're at home? Are you able to go for days or weeks without the hallway conversations with your colleagues? Can you communicate effectively in ways that aren't face-to-face? If you don't like it, don't force yourself into it. For example, while DM instructors didn't seem to have any attrition due to remote work, all of the names I listed above as remote Microsoft employees have either quit, moved to Redmond or complained bitterly during their transition (Scott's still new : ).
Tomorrow I'll discuss "Can I Find Someone To Let Me Work From Home?"
Tuesday, October 23, 2007 10:59 AM
(4 Replies)
The Whiteboard Whisperer: Working Remotely for Microsoft
I've been at Microsoft about 4.5 years, the whole time a "remote employee," i.e. I work mainly from my home in a suburb of Portland, OR but the teams I've worked for have all been based at Microsoft HQ in Redmond, WA.
Microsoft is traditionally a company that moves the bulk of their employees to WA, especially for product team and related duties. Of course, we've got subsidiaries and sales world-wide, as well as the occasional technology team in talent hot spots around the world, but there is a large corporate bias towards moving new hires to HQ. In fact, so much so that when we've got open spots, I've learned not to recommend someone that I know won't move.
And yet, there are notable exceptions. Martin Gudgin worked from England for a number of years. Tim Ewald worked from New Hampshire. Scott Hanselman works from Portland, as did Rory Blythe. Sometimes if there's enough need and the right role, the distance bias can be overcome. And when it does, I sometimes get an IM, an email, a phone call or a meeting request so that I can answer the question: how do you do it?
Tune in tomorrow for "Can You Focus On Work At Home?"
Monday, October 22, 2007 9:16 PM
(3 Replies)
Fun With GridView*RowPresenter
I was searching for advanced WPF tree samples the other day and ran into the tree-list-view sample: 
Notice how the left-most column does the indenting, while the rest of the columns line up nicely. The code for the tree-view-sample is a little C# and a bunch of sophisticated XAML templates I didn't understand, so I stripped it down to the bare nubbins to discover what was going on. Assume a simple class holding the data: class Person { List< Person> children = new List< Person>(); public string Name { get; set; } public int Age { get; set; } public List< Person> Children { get { return children; } } }The juicy bit that makes the tree-list view above possible is the GridViewRowPresenter: < Window ... xmlns:local="clr-namespace:WpfApplication10" Title="GridView*RowPresenter Fun">
<Window.DataContext> <local:Person Name="John" Age="13" /> </Window.DataContext>
<GridViewRowPresenter Content="{Binding}"> <GridViewRowPresenter.Columns> <!-- NOTE: must explicitly create the collection --> <GridViewColumnCollection> <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" /> <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" /> </GridViewColumnCollection> </GridViewRowPresenter.Columns> </GridViewRowPresenter>
</Window>Here, we're creating an instance of the GridViewRowPresenter, which is the thing that the ListView creates for you if you use the GridView. Here, we're using it explicitly and setting the columns explicitly, binding it to our data and yielding the following: 
Notice that we're showing a single item, arranged as a row of values according to our column definition above. It's boring and not at all interactive, at least because we don't have a header, which we can get with an instance of the GridViewHeaderRowPresenter: < Window.Resources> <GridViewColumnCollection x:Key="columns"> <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" /> <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" /> </GridViewColumnCollection> </Window.Resources>
<StackPanel> <!-- NOTE: must share access to same column collection to get shared resizing --> <GridViewHeaderRowPresenter Columns="{StaticResource columns}" /> <GridViewRowPresenter Content="{Binding}" Columns="{StaticResource columns}" /> </StackPanel>Here we're creating an instance of the row presenter, passing in a reference to the same columns collection used by the row presenter so that the column sizes and positions are shared between the header row and the row presenters: 
If we want more than one piece of data, all we have to do is use an items control with an item template that in turn creates a row presenter for each item in the collection: < Window.DataContext> <x:Array Type="{x:Type local:Person}"> <local:Person Name="John" Age="13" /> <local:Person Name="Tom" Age="12" /> </x:Array> </Window.DataContext>
<Window.Resources> <GridViewColumnCollection x:Key="columns"> <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" /> <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" /> </GridViewColumnCollection> </Window.Resources>
<StackPanel> <GridViewHeaderRowPresenter Columns="{StaticResource columns}" /> <ItemsControl ItemsSource="{Binding}"> <ItemsControl.ItemTemplate> <DataTemplate> <GridViewRowPresenter Content="{Binding}" Columns="{StaticResource columns}" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </StackPanel>Now, we've got a stack panel that combines the header to the grid view rows with the grid view rows themselves, one per item in our collection: 
Now on a rush of discovery and simplicity, I took the next step to show hierarchical data, hosting the data in a TreeView control and using a hierarchical data template so that I could build the tree list view shown above with the tiniest bit of XAML and code: < Window.DataContext> <x:Array Type="{x:Type local:Person}"> <local:Person Name="Chris" Age="38"> <local:Person.Children> <local:Person Name="John" Age="13" /> <local:Person Name="Tom" Age="12" /> </local:Person.Children> </local:Person> <local:Person Name="Melissa" Age="39" /> </x:Array> </Window.DataContext>... <StackPanel> <GridViewHeaderRowPresenter Columns="{StaticResource columns}" /> <TreeView ItemsSource="{Binding}" BorderThickness="0"> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding Children}"> <GridViewRowPresenter Content="{Binding}" Columns="{StaticResource columns}" /> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView> </StackPanel> Unfortunately, that's where we run into the limit of what we can do without cranking things up a notch:
Beside the border around the tree view (caused by focus), the worst part about our simple tree-list-view is that, while each grid view row has the proper column sizes and relative positions, because the tree does the indenting, all of the columns are offset, not just the first one. The key to fixing this problem is to put the styling for indenting into the template for the first column only using the CellTemplate property of the GridViewRowColumn, taking over the drawing of the tree view items, which is what the tree-list-view sample does.
Friday, October 19, 2007 12:44 PM
(41 Replies)
The Windows Workflow Team Wants to Hear from You!
Are you using WF but it's not quite right? Are you avoiding WF because it doesn't have the features you need? Now's your chance to influence the future of WF with a quick survey. Vote early, vote often! : )
Friday, October 19, 2007 7:28 AM
(7 Replies)
Yahtzee Croshaw -- You're My Hero!
First it was the Halo 3 review (which I can't agree or disagree with yet because I'm still stuck on level one) which a Wii zealot forwarded to me because he likes to send me links to negative portrayals of anything MS-related (like that's a challenge to find : ), then it was the BioShock review (a game I never figured out the cool part of), then his POV on the console wars (I'm proudly a member of the frat-boy demographic!) and finally it was the Tomb Raider Anniversary review (a game I haven't played since v1 and preferred the Apple ][+ equivalent) which had me laughing out loud.
Agree with him or not, you gotta appreciate Yahtzee's style.
Wednesday, October 03, 2007 4:54 PM
(2 Replies)
Releasing the Source Code for the .NET Framework Libraries!
After programming with MFC (a lot!) and writing the ATL book, it was *very* difficult for me to live in a world without the source code to figure out how something was working. All of us have since moved over to Lutz's most excellent Reflector, but that's still no substitute for actually stepping in and now ScottGu has announced that we'll have the ability to browse and debug with the .NET library source code, integrated into VS2008:

Wahoo!
Wednesday, October 03, 2007 2:17 PM
(7 Replies)
I'm an "Uber Cool High Nerd"
Sunday, September 09, 2007 11:56 AM
(3 Replies)
20 Timeless Money Rules
Save yourself the Suzy whoever and read this instead:
- Be humble
- Take calculated risks
- Have an emergency fund
- Mix it up
- It's the portfolio, stupid
- Average is the new best
- Practice patience
- Don't time the market
- Be a cheapskate
- Don't follow the crowd
- Buy low
- Invest abroad
- Keep perspective
- Just do it
- Borrow responsibly
- Talk to your spouse
- Exit gracefully
- Pay only your share
- Give wisely
- Keep money in its place
Following this advice will put you in the top 20% of investors in the world.
Saturday, September 01, 2007 9:22 AM
(2 Replies)
"Programming WPF" (finally) shipping!
John Osborn of O'Reilly and Associates had this to say in my morning email:
"Congratulations, guys. The book is printed and shipping! Just got my copy this morning and it looks great. A very substantial body of work, to say the least.
"Thanks for all of your hard work on this project. Now to crank up the PR machine and make sure no book shelf is without a copy."
Wahoo!
Tuesday, August 28, 2007 9:48 AM
(1 Replies)
Shawn has prepared Genghis v0.8
Shawn Wildermuth has prepared a v0.8 release of Genghis that includes a bunch of stuff that the folks that put the v0.6 release together dropped. The v0.8 release has all the good stuff from the v0.5 release and all the new stuff from the v0.6 release in a .NET 2.0 package.
Shawn's really done all the work for Genghis since I came to Microsoft. Thanks, Shawn.
Friday, August 24, 2007 4:07 PM
(0 Replies)
Duck Typing for .NET!
For structural typing fans (and they'll be more of you over time -- trust me), David Meyer has posted a duck typing library for .NET. There are many reasons this is cool, but in summary, it allows for many of the dynamic features of languages like Python and Ruby to used used in any .NET language. Very cool.
Friday, August 17, 2007 1:42 PM
(2 Replies)
How to write a book - the short honest truth
I found this on digg.com and liked the short, honest style. Bottom line: anyone can write a book; it takes real work to write a good book.
Friday, August 17, 2007 1:31 PM
( |