Marquee de Sells: Chris's insight outlet for category 'spout' via OData 2.0 Marquee de Sells: Chris's insight outlet for category 'spout' via ATOM 1.0 csells on twitter

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.




The New Microsoft Store Looks Cool

And the folks in Scottsdale, AZ lined up overnight to be there when it opened and get their copies of Windows 7 (which goes on sale today and, if I may say so, rocks).

0 comments




The Downside of Transparency

Ever since Chris Anderson built his blogging software and shared it with his colleagues, more and more Microsoft employees has been pushing hard on being as transparent to our customers as we can be. This has been a very much grass roots effort. I remember coming into Microsoft six years ago just when legal was busy giving everyone disclaimers to put on their personal blogs and telling us what we could and could not say. It was always a worry whether the next blog post would get you fired. I got in trouble personally several times, but the brave pioneers before me laid the groundwork for people like me to comment on the internals of Microsoft culture, for Robert Scoble to call Steve Balmer out onto the carpet several times and for Rory Blyth to talk about penises, all on the Microsoft dime. Now blogging is just an accepted way to do things. It's not even questioned anymore; it's expected.

And by and large, this transparency is good for reasons that are obvious these days -- when our customers see how the sausage is made and have a say in the ingredients, they're happier eating it with their breakfasts.

As with all good things, however, these is a downside. For example, the product I've been working on for 4.5 years has gone through many transformations. This has to do with how new software is designed at Microsoft.

The tag line when we're hiring folks is always, "Don't you want to change the world?!" Of course, everyone does and that's good, because people coming in the door want to take big risks and do big things. If you're trying for the next Office or Windows, that's the kind of thinking you need. However, what that means is that we have a lot of folks building 1.0 software. We do this in my division with an organizational structure called an "incubation."

My product was in incubation mode for years and we started with zero assumptions. My first day on the job, I was asked to "think about synchronization." What did that mean? What problem was I trying to solve? Does replication count as synchronization? Does data import? I struggled with this for months before I got my head around the process of noodling with a technology enough to understand what problems there were in the space and how that fit with our general idea of what we might want to build into a product.

We tried a huge amount of stuff, often rebuilding shipping technologies to which we had ready source code access just so we could get a feel for how it worked (I personally built multiple data synchronization engines, a WPF-compatible XAML parser, a data binding engine and a set of universal data viewers during that period, all of which were thrown away, as expected).

As we got further along, we started producing things that needed to be published, even if they weren't a core part of our product anymore (like MEF and some new features in XAML 4.0). Once this started happening, we started to feel like we had a handle on what we were doing to move into "startup" mode, where we formed a team to make productization plans. At this point, we started telling folks what we thought we had, including analysts and "insider" customers, getting their feedback. Based on this feedback, we re-jiggered the product and the story and did it again. And again.

Eventually, we move out of startup mode to become a real product team with dev, test, PM and UA splits (up 'til then everyone does everything or, as we liked to say, "everyone shovels"). Eventually in this mode, you publish some set of bits that are your best guess at the time of what we think we're eventually going to ship. In our case, it was the October 2008 "Oslo" SDK CTP, guaranteed only to take up space on your hard drive. At the time, we'd been telling the "Oslo" story for more than a year and it had evolved a great deal. Since we published that initial CTP, we've published a few more, along with an entire web site filled with articles, videos, specifications, samples, etc.

I mean, we did it big. We were part of the keynote at the 2008 PDC and we had lots of folks on our team that are very visible in the community, including Don Box, Chris Anderson and Doug Purdy. These are the heavy hitters, so when they said something, folks listened.

And we definitely got a lot of community involvement -- way more than we expected, in fact. With that involvement, we got a ton of feedback, which is the benefit to us of releasing early and often. We take that feedback and we make changes to our product -- sometimes big changes. In this particular case, we were building on all kinds of SQL Server-related technologies, so because of pressure to build the absolute best thing we possibly could for our customers, we actually merged the division that owned "Oslo" (and WF, AD, WCF, BizTalk, etc) with the SQL Server division.

Of course, those are the kinds of changes that our customers don't see. What they see is that things are changing and that they're not quite sure what our plans are. That's one big downside:

When you share early information, sometimes it's half-baked, it often changes and is almost always confusing.

As an example, Jeremy Miller recently had this to say about "Oslo" and our communication about it's purpose in life. Believe it or not, this is helpful feedback and it's my team's responsibility to understand what exactly is holding folks up and get it fixed in the way we tell the story and in the product itself.

Another part of my team's responsibility, of course, is communicating what it is the product does so that folks can understand it and give us feedback. That means that the first people that know how confusing a product is are the folks writing the documentation and tutorials, building the videos and producing the samples. And believe me, we act as customers on the team as well, logging bugs and making complaints and bugging the developers and PMs directly, hoping to fix everything before customers even see it. Of course, we can't do that all the time (or even most of the time), so often:

We produce materials that tell the story in the very best way we know how with the current set of bits.

Kraig's recent "Oslo" blog post is an example of this. This is an important part of the process, too, actually. We, as Microsoft employees, can complain to the folks producing the software 'til we're blue in the face, but often real changes aren't made 'til real customers complain. As a consequence of this:

We take the slings and arrows of our customers and thank them for taking the time to shoot us.

This one can really hurt, actually. I'm a professional, but I take it personally when I say something that doesn't resonate with my audience (at a recent conference, I threw away an entire completed slide deck and started over only days before the deadline so I could tell a better story) and the audience takes it personally when I show them something that they don't understand.

In fact, everyone in marketing, DPE, UA and every part of the team that interacts with customers directly or via the software we're producing, including the devs and test engineers, all take it personally. We care deeply about building products that delight and empower our customers, which is why we push so hard on transparency from the bottom -- the sooner we hear your complaints, no matter how confusing we might be, the better able we are to build something you love.

I'll tell you though, if we could build something you'd love without giving you an early look, we might want to do that because:

When a customer is confused or disappointed by an early look at a product, they might not want to look at it again for a really long time, if at all.

Early looks are a double-edged sword. We want the early feedback to make our product better, but if you don't come to look at it again, you'll never know we made it better.

Still, transparency is absolutely worth the downsides. Keeps those cards and letters comin'! : )

4 comments




PowerBoots makes me want to use PowerShell!

I've picked up PowerShell half a dozen times or more. The central premise, that I can pipe streams of objects instead of streams of text between programs, is pure genius. However, in the day-to-day, two things make me put it down again every single time:

  1. The differences between ps and cmd.exe are annoying and unnecessary.
  2. The lack of pushing the boundaries on the text output in a GUI window leaves me wondering what I really gain when I get over the hump of #1.

I understand the need to "reboot" the DOS command line and get something scalable and consistent, but ps is a superset of cmd.exe and aliasing could've made the transition seamless. However, because little more than "dir" works (and "dir /s" doesn't) I'm constantly bumping into barriers just trying to get my work done in the new shell.

And I'd be really ready to learn ps, especially since it's everywhere now, but what am I really gaining? I never wrote a bunch of shell scripts in cmd.exe and I don't find myself writing them in ps either, which means that the cool "piping objects" thing doesn't make my life any simpler. What I really really want is for the text window of the ps shell to also be something active, e.g. if I do a "dir", I'd like to be able to click on a file or folder in output of dir and open it or right-click on a file and choose a method on the .NET File object to execute. Even better, I'd like all of that functionality but with a keyboard command interface like the old Norton Commander used to provide. I've tried the ps IDEs and GUI shells and haven't liked any of them.

Anyway, the first thing that's made me really really want to move to ps is PowerBoots! It's starting to really deliver on what I had hoped to get out of ps and it feels like Shoes, which I already know I love. Check it out!

4 comments




Dynamic Languages: A Separation of Concerns

I saw Nick Muhonen give a talk on the new language features in C# 4.0 last night at the Portland-Area .NET User Group. He did a good job in spite of the constant questions I asked. He showed one example that I found especially compelling:

object GetConfig() {
  return new {
    WindowSize = new Size() { Width = 100, Height = 200 },
    ConnectionString = "...",
    ...
  };
}

Of course, you wouldn't hard code settings in your application -- you'd load them from somewhere (ideally a database, but that's another story : ). Anyway, in C# 4.0, I can write code like this:

dynamic config = GetConfig();
mainWindow.Size = config.WindowSize;
...

Notice the use of the dynamic keyword -- this means I don't have to know the type at compile-type -- I'll check for the WindowSize property at run-time ala .NET Reflection, COM IDispatch or VB "Option Explicit Off". Of course, this is the cornerstone of all dynamic languages, e.g. Perl, Python, Ruby, etc. These languages have been gaining in popularity for the last few years and I didn't understand why. Tim Ewald, my close friend and compadre, kept trying to explain it to me, but I'm just too slow to get it and I didn't ''til last night watch Nick do his thing. It wasn't looking at the code that Nick typed that made the point for me, it was looking at what he didn't type.

When writing dynamic code, there is no requirement to define a type.

That is, when I inevitably add another property or 10 to my app config, I have to write code to use the new properties, but that's all. I don't have to write a class and I likely don't have to update the save/load code either, because it's also going to be dynamic and just expose whatever data is part of the serialized config. Or, to put it another way:

When writing dynamic code, I only have to write the part I care about.

In the case of dealing with application config, that's about 2/3rds of the code I no longer have to write. Of course, this isn't a new idea -- Stuart Halloway has been talking about embracing essence (the code you care about) and rejecting ceremony (the code you don't) for a long time now. It just took Nick's concrete example for me to understand it.

And not only does this make dynamic code good for reducing the code you type, it always makes it good for the code you're generating, e.g. COM interop assemblies, database mapping code, XML mapping code, etc. In general, I find that most of the code we have generated for us in the .NET programming environment is code to map to foreign type systems, i.e. COM, databases, XML, web services, etc. With dynamic languages, you can write that code once and just use it. In fact, in C# 4.0, there's no need to use Primary Interop Assemblies (PIAs) anymore -- those can just be mapped to a sub-class of the "DynamicObject" type that .NET 4.0 ships to provide that dynamic mapping bridge.

When writing dynamic code, you don't need generated code layers to map to foreign type systems.

This means I don't have to do the mapping to databases per query or to XML per XSD -- I can just have an implementation of DynamicObject, point it at my configuration and go -- no muss, no fuss. Of course, purely dynamic languages have a construct for DO built right in, so it's even easier.

Around the table after Nick's talk last night, someone was complaining that with purely dynamic languages, I give up the benefits of the compiler doing static type checking (I think it was Nick : ). I argued that this was a good thing. The compiler is really just one kind of unit testing -- it's testing names. It can't do any of the other unit testing you need done, however, so you still need unit tests. What that means is that, with static languages, you've got some unit tests separate from your code and some baked into the code via types, casts, etc.

When writing dynamic code, you can separate unit tests completely out of your code.

Of course, as software engineers, we already know that separating concerns leads to better, more readable and more maintainable code, which is why we've long separated our applications into tiers, separated our view from our data, our interfaces from our implementations, etc. Dynamic languages let us do another complete separation of concerns with regards to unit tests that static languages don't allow. In a static language, the ceremony is required, thereby obfuscating the essence.

And all of this is great except for one question -- how do I get my list of possible code to write when I type "." if I'm using a dynamic language or dynamic features of a static language ala C# 4.0?

When writing dynamic code, I don't get Intellisense.

My name is Chris Sells and I'm an Intellisense addict. Admitting I have the problem is the first step...

9 comments




Win7 killed a feature I love in Vista!

All my friends have updated to Windows 7. My 14-year old son is running Win7. I'm the only one I know that's not running Windows 7. The reason? Windows 7 took away a feature I use all the time, as shown on the right: Search the Internet.

Here's what I do all day, every day in Vista: Ctrl+Esc to bring up the Start menu, then I start typing. If I'm searching on my HD, I immediately get matches and I can choose one with just the arrows and the Enter key. If I'm typing in the name of a program in the Start menu, I get those matches and choose one. If I want "calc" or "notepad" I can just type those and those work.

However, 80% of the time, I want to search the internet, so enter my search term, optionally including attributes like "site:", I press, down-arrow once, highlight "Search the Internet" and press Enter. This brings up my default browser with my search results in my default search engine without me having to move the mouse or open the browser and wait for the home page or even decide where I want the search results to come from until after I've entered my search phrase.

And they took it out of Windows 7. : (

I logged the bug and heard nothing.

Does anyone know of I 3rd party program I can run that will work exactly like the Vista Start menu under Windows 7? Please?

18 comments




Twitter takes a bite out of blogs

At the last DevCon in 2003, blogging was rampant. We had about 100 posts in the lead up to the conference and during the conference itself.

A this year's DSL DevCon, there's a ton of buzz, but almost none of it is in the blogosphere. Instead, it's all in Twitter.Last I checked, it was more than 150 tweets and we're still on the first talk of the 2nd day (and day #1 was only a half day).

The worm has turned.

0 comments




Why I Hate My iPhone

I've had an iphone for the last coupla weeks and there are some things that drive me crazy about it!

And all of that pales in comparison to the single worst deficiency in the app-suite of the iphone for which I've found no good work-arounds; the calendar app is nearly worthless in a business environment:

The calendar app is the single thing that makes me miss my Dash. Someone please tell me there's a workaround to these issues! I'll pay!

The reason I list the things I hate about my iphone is because the list of things I love about it would be impossible to enumerate. I had a T-Mobile Dash for years and it went with me everywhere. It was as big a boost in my electronic lifestyle as my first laptop. After having a smart phone for contacts, email, music and surfing the web, I couldn't go back. Plus, I loved the Dash so much that I'd try a new phone every 6 months or so and then bring it back because it just didn't compare.

On the other hand, the iPhone replaced my Dash in 24 hours. I've been twittering iPhone development related apps. I've purchased iphone charing cables for everywhere in my life where I sit for more than 5 minutes. I want to integrate my iphone as closely into my car as possible.

They will pry my iphone out of my cold dead hands.

9 comments




How I learned to Stop Worrying and Love the Twitter

Scott Hanselman performed an intervention on me in the mall the other day. I was in denial and while I can't say I'm fully into acceptance, I'm at least past anger. : )

It took Scott 90 minutes and I fought him every step of the way, but I think I finally have a handle on what Twitter is. I've heard it described as a "24-hour virtual cocktail party," which always turned me off. I'll take a lake of fire any day over more than three strangers in a room with which I share no common task and with whom I'm expected to socialize. Making that into a 24-hour thing and including everyone in the world does not make this more attractive to me.

And while that is one valid way to describe Twitter, the more attractive way for me to thing about it is as a single global chat room with conventions and tools to pull out the bits and pieces you want, i.e. the people to which you want to listen, the topics you care about, etc.

Except that's not right, either.

Instead, it's more like a poetry reading in a hippy bar where you're up on stage saying whatever comes into your head and the audience is generally ignoring you (because they're also on their own stage) except occasionally when they holler "yeah man! right on!" back at the stage.

And why is that cool?

Well, I can't speak for anyone else, but until Scott turned the light on in my head, it wasn't. Now I check Twitter (via TweetDeck) half a dozen times a day looking for direct messages first, then replies, then new search results (I search on my name, Oslo and DSL right now), then whatever's on top of my "All Friends." When I find someone that says something interesting about a topic I like, I follow them for a while til I decide they're saying mostly stuff I'm not interested in and then I unfollow.

The whole thing feels very much like what we used to do in email ("Look! Cute kiddie pictures!") and then in blogs ("Look! I have a blog!") before we figured out how to use it and what it was really for. I can't say I really know what Twitter is for yet, although I've been following Scott's advice, i.e. bigger, permanent stuff goes into blogs, transient stuff to a few people goes into email and transient stuff that goes to the hippy bar audience (i.e. the world) goes into Twitter.

I'm still very much learning and hardly anyone is following me (@csells), but that's OK. I'm already finding out who's in the Oslo community and have had lots of useful stuff on personal topics, too, e.g. sharing my iPhone love/hate.

Also, I have to say that I really love the social aspect -- I'm working alone at my house a lot and it's nice to have the world listening to every fool thing that comes into my head. : )

3 comments




Eat Less and Exercise: Before and After

A few years ago, I looked like the "before" picture to the right. I didn't look like that all the time, thank goodness -- this was some couples' party and I was doing the "ballerina dance" challenge -- but as you can tell, I was a tad overweight. Specifically, I weighed in excess of 100 pounds more than the top end of my idea weight range, which put me over 300 pounds.

I had been a skinny kid with a fast metabolism growing up. At 6'5" it takes a lot of food to get to full grown, even when I had only a medium build (I can't even claim to be "big boned"). In college, living in a fraternity served by a cook that believed fully in the benefits of meat and potatoes and having been born in the Midwest with a gravy ladle in my mouth, I got my "freshman 15" in the first semester and kept on going until I was the jolly fellow you see to your right (complete with the belly that shook like a bowl full of jelly).

I tried dieting. A few years ago, I was able to lose 50 pounds on The Geek Diet (it was a freely downloadable PDF file at the time), but gained it all back in a year. The problem was that that diet is fundamentally based on deprivation: you count calories and don't eat more than a certain amount based on your activity level. This made me hungry and crabby all the time. Then, one Christmas back in Fargo under the influence of my deep-fried meat, brownie, cinnamon roll and fudge pushing grandmother, I snapped. It was like a psychological rubber band, pulling me right back into my old habits. Also, I didn't exercise, so I'd plateau'd and my metabolism wasn't equipped to deal with even a few extra calories.

Over the last twelve months, I tried something different and as of a coupla week ago, I look like the guy on the left. I called it "eat right and exercise." It sounds revolutionary, I know, but I've lost 60 pounds over the last year and I've kept it off (even after the visit to my grandfather over the holidays!) The idea isn't to diet at all, but to change your habits. I can't say that I'm expert enough to recommend any of this to you, but here's what I did:

Stop Eating When You're Full. This was the hardest one to learn. In college, I learned up to drink and, most importantly, when to notice when it's time to stop drinking. However, it took me 'til I was 38 to learn how to tell when I was full. This involves eating slowly and being very ready to leave food on your plate (which I always try to do now).

There's Always More Later. This is the other key to stopping eating. As much as I might like something and want to finish it, I had to realize that there would always be more of whatever it was later. I learned to feel good about leaving food uneaten, no matter how good it was.

Eat Better Food. If you have to choose between eating 1000 calories of Doritos or of broccoli, I think we all know the right choice to make. The key is, making it. I've had to learn to like salad, fruits and vegetables, which I'm still working on. I'm always trying new things to learn to eat things that are better for me.

Don't Buy Grazing Food. If I'm doing something I don't like or am bored or reading or watching TV or any number of other things, I can easily eat chocolate or chips or any other manner of things that are bad for me, even if I'm not hungry. I have a hard time saying "no" to an unhealthy snack when I'm watching a movie, for example, so I don't buy them. Instead. I buy apples and applesauce and melons and other things that are good for me so that if I have to snack, there are only good things available.

Eat Lots of Meals. This one is counter-intuitive, but I find I do better if I eat a small amount every few hours than larger meals three times a day. In general, if I'm hungry, I eat and if I'm full, I stop. It's really just that easy.

Don't Deprive Yourself. If you want a piece of chocolate or a chip or whatever it is that you crave, then have it. Life is short and there is a variety of wonderful things to enjoy. Don't gorge yourself -- everything in motivation -- but don't make yourself crazy, either. I find it makes me feel good to eat a piece or two of my grandmother's famous fudge and it feels equally good to stop eating it.

Exercise Regularly. This is one of my major failings with The Geek Diet. I was depriving myself of calories, but I wasn't boosting my metabolism, so my body was just adapting to fewer and fewer calories. These days, I try to swim 2 miles/week and that seems to keep me at my fighting weight.

Mix It Up. I find I'm happiest eating a bunch of small portions than one or two large portions at a meal. I like variety, so I like a little bit of a few things. Also, to make sure that my body doesn't get used to my level of exercise (it's getting easier and easier to swim for distance), I try a variety of exercises. For example, I just did a 90 minute hot yoga class the other day (I thought I was gonna die) and I regularly do sprints in the pool, going as fast as I can. The latter's useful because it always sucks, no matter how fit I get, so it's almost more than I can handle.

Commit. The key to making anything happen is to decide it's going to happen and then route around obstacles until it does. The days I swim without resting or swim a mile when I normally go half are the days I decide to do so. The key to weight loss or any other accomplishment is first to commit.

Don't Beat Yourself Up. Didn't do as much exercise as you wanted this week? Had a few too many Twinkies? So what. You're human. Let it go. Don't give up. Do better today.

The whole point of all this is that it's not about a temporary diet, but about changing my habits permanently. I still have 40 pounds I'd like to lose, but I don't obsess about it. In fact, I haven't weighed myself in months. And even if I never do lose those pounds, I'm down from a 44 waist on my pants to a 38. If I do nothing but stay there, I'll be happy as hell with myself.

I love that most of these tips are just like Scott's newsflash -- gives me some validation. Do you have tips to contribute? Tell me about them.

10 comments




tvrss.net + uTorrent + FiOS + WHS + 360 = DVR Bliss

So, the other day, Windows XP SP2 destroyed my Windows Media Center Edition install that I've been using for years and absolutely loved. It let me record all my favorite shows on two separate tuners and I could watch them on the TV attached to my MCE box, from all the PCs in my house and from my XBOX 360. Losing it was a huge blow, especially since it was clear I'd need to repave and I was swamped with PDC and post-PDC work (damn those MSDN Magazine deadlines!).

A little research revealed the following facts:

All of this means is that if I were to schedule episodes of say, Burn Notice, to be recorded by uTorrent and dropped into the Videos\TV\Burn Notice folder of my WHS box, I'd be able to access those and play them back on my XBOX 360 even more simply then I could access video from my MCE box, because I don't have to start up the Media Center software first -- access to shared folders is built right into the XBOX 360 menuing system. And I could have all of this in HD (no CableCard required) without commercials and without regard for how many tuners I have. This is all free and, if I don't want to watch live TV (the Superbowl was the last time I did), then I don't even need to spend $55/month on cable.

Plus, when combined with my photos, music and ripped DVDs, all of which are also stored on my WHS box, and streaming movies I don't yet own, I could access all of my digital media from my XBOX 360 (attached to my 46" LCD panel) and from all of my PCs simply and quickly.

Of course, I would never record my favorite TV programs like this, because it's very much a copyright violation and therefore highly illegal.

But if I did, wow, it would rock...

Why do I need cable again?

3 comments




Tired of writing unit tests yourself? Try Pex!

From the Pex site:

"Pex (Program EXploration) produces a traditional unit test suite with high code coverage. ... To do so, Pex performs a systematic white box program analysis. Pex learns the program behavior by monitoring execution traces, and uses a constraint solver to produce new test cases with different behavior. At Microsoft, this technique has proven highly effective in testing even an extremely well-tested component." [ed: emphasis mine]

So, Pex will produce a parameterized set of unit tests for your classes and does all of this integrated with Visual Studio and the unit testing built into VS. I've seen the demo and it blew me away. Nikolai Tillmann, a developer at MSR (Microsoft Research), has a nice write-up that discusses his work and when you're done with that, go download Pex!

3 comments




MS + jQuery: This Is Huge!

Yesterday, the ASP.NET team announced that they were going to ship jQuery, a small, populate open source web client library. And not only is Microsoft going to ship this library, as is, but we're going to build support into Visual Studio for it, build future versions of our web components assuming it and support it via PSS like any other Microsoft product.

This is huge.

Of course, is it useful for developers using Microsoft tools, because they get another supported library out of the box for them to use to build their applications. But that's not what makes it huge.

What makes it huge is that, instead of seeing the functionality in jQuery and thinking to themselves, "Wow. jQuery is really great. Let's build something from scratch like that into our products," the ASP.NET team, in what is the first time in Microsoft history afaik, decided to reuse something from the world that was already working, adding only the thing we do better than anyone else: integration into a suite of libraries and tools.

"But isn't this just 'embrace and extend?'" I hear you asking. "Isn't Microsoft just going to absorb jQuery, thereby killing it for folks not using Microsoft products?"

There are two ways forward at this point. One, we could push on jQuery in a Microsoft-centric way until the project "owners" (which is a slippery concept with an OSS project anyway), decide to either give up and let Microsoft "own" it or they decide to fork jQuery, thereby creating jQuery-classic and jQuery-MS. This would not be good for the jQuery community.

The other way to go, and this is the way I hope it goes, is that Microsoft learns to play nicely in this world, submitting features, changes and bug fixes to the jQuery source tree in a way that's consistent with the vision from which jQuery sprang, making it work better for Microsoft customers and non-Microsoft customers alike.

If we can learn to do that second thing, then we've turned a corner at Microsoft. I'm keeping my fingers crossed.

3 comments




Custom Window Chrome in WPF

Joe Castro, a developer on the WPF product team, has written a very cool article about how to do custom chrome in your WPF applications. But, what makes it even cooler is that he dissects the various ways that shipping apps do custom chrome on various versions of Windows. It's amazing the number of techniques there are. Very nicely done, Joe.

0 comments




I don't pretend to understand advertising

I've always liked the Mac vs. PC ads. They're clever, they make me laugh and I like both actors (Accepted is very under rated, IMO). Of course, I actually prefer my PC running Windows to a Macintosh (I had a Mac IIcx back in the day), I prefer Vista to XP and I'm a Microsoft employee, so I don't have any trouble seeing the exaggeration, but there's always a kernel of truth, which is what makes them funny. The part that kinda annoys me is that Apple seems to be claiming they have no such problems, which is, of course, not true.

The Mac vs. PC ads I understand: they're meant to put down the PC by having the PC guy look like an idiot, leaving the Mac guy to seem non-threatening and therefore better by comparison.

On the other hand, I can't say I understand the latest Windows ad with Jerry and Bill. I did enjoy it, however. Not only did Bill seem much friendlier and more approachable than I've ever seen him, but the image of someone in the shower with their shoes and socks on made me laugh, as did the image of Bill wiggling his butt in a Deep Throat sorta way.

And the commercials are having an effect: they're being talked about and folks are interested in the next one. How often do you hear about folks looking forward to a commercial? That in and of itself is an achievement.

1 comment




Programming WPF goes into 3rd printing

Get 'em while they're hot!

4 comments




Where did my old Word command go in new Word?

I've been using Word for a long time and my fingers knew where the commands were that I used even though my brain didn't. Most of the those commands I've mapped to the new Ribbon-enabled Word without a problem, but sometimes I still search. For those times, the Office guys have put up a cool tool that shows me where the new version of each command is located in the new Word. Enjoy.

4 comments




Digigirlz Rock!

I gave a talk to the Digigirlz yesterday and it was a blast. It was 25 high school girls that were on the Microsoft campus all week learning various technologies to promote women in IT. The girls are nominated by their teachers for aptitude and attitude and these girls had both in spades.

Vijaye Raji and I were giving the talk, me primarily the pretty front man while he drove the slides, typed the code and made sure I didn't get things very wrong (he knew the environment and the language far better than I). We were teaching general programming basics using a variant of BASIC that was especially well suited to new programmers. We spent two hours showing them how to do turtle graphics and how to write a game (Pong) all from scratch and we all had a blast doing it.

And these girls were sharp! I'm used to pacing material for rooms of adult software engineers, but I didn't have enough. I had to take feature requests from the audience and figure out how to implement them on the fly while they followed along, programming their own versions of the game as we went. They were hands on the whole time and eventually I enlisted their help to tell us what code to write. Mind you, this was a language they'd only learned minutes before, but they didn't have any trouble at all.

They laughed and asked questions and answered my questions and were engaged the whole time (well, most of them -- some were seduced by the siren song of the high speed internet connection : ). I figured I was doing OK when one of the girls asked me if I ever thought about being a teacher.

"Naw," I said. "I hate kids..."

They didn't buy it... : )

4 comments




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.

2 comments




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!"

10 comments




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.

5 comments




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.

3 comments




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.

3 comments




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.

1 comment




Programming WPF: "Programming Book of the Decade"

*blush*

3 comments




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.

3 comments




627 older posts       25 newer posts

Powered By ASP.NET

Hosted by SecureWebs

Mensa

IEEE