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.
Sunday, May 18, 2008, 12:38 PM in The Spout
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!
Wednesday, Apr 30, 2008, 12:04 AM in The Spout
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.
Saturday, Mar 22, 2008, 9:38 AM in The Spout
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.
Monday, Mar 17, 2008, 4:24 PM
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!
Friday, Mar 14, 2008, 12:55 PM
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.
Saturday, Mar 8, 2008, 2:02 PM in Tools
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.
Tuesday, Mar 4, 2008, 7:15 AM
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!).
Monday, Mar 3, 2008, 12:33 PM in The Spout
Programming WPF: "Programming Book of the Decade"
Thursday, Feb 21, 2008, 7:35 AM in The Spout
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.
Wednesday, Feb 20, 2008, 12:28 PM in The Spout
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, Feb 6, 2008, 2:22 PM in .NET
.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. : )
Friday, Feb 1, 2008, 9:20 AM in Fun
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? : )
Wednesday, Jan 30, 2008, 7:41 AM in Fun
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?
Friday, Jan 18, 2008, 2:38 PM in Tools
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!
Thursday, Jan 17, 2008, 10:25 AM in The Spout