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.
Friday, Mar 19, 2004, 10:51 PM in The Spout
Review: Hell House
NetFlix brought "Hell House" to my house the other day and I just finished watching it (in fact, the credits are still rolling).
Hell House is the name of a specific kind of "haunted house" exhibit that some churches run every year at Halloween. This movie is a documentary of the church that originated the practice and is in it's 10th year, having had 75,000 guests over that period. The hook is that the church puts on little mini-plays showing real-life horrors, e.g. domestic abuse, rape, murder, drunk driving, abortion and, sin-of-sins, homosexuality (which doesn't hurt anyone, of course, but gets them on the news every year).
At the end of each tour through the Hell House scenes is a room with a member of the church applying age old used car salesman techniques to pressure people into converting or recommitting to the church. There success rate is 20%, which is why hundreds of churches around the country have adopted this practice.
It amazes me that such a thing actually happens. The techniques they use reminds me of a cross between the horror movies we was made to watch in driver's ed and the pressure our society puts on our children to believe in Santa. Don't cults get into trouble for this kind of thing? Truth is truly stranger than fiction.
Friday, Mar 19, 2004, 9:32 PM in The Spout
Have Some of WinFS Today
I have absolutely fallen in love with X1. I don't search my email, attachments or file system anymore; I just type a few character into filter fields until the results have narrowed enough to show me what I was looking for. This is but a small part of what WinFS is going to enabled and it already saves me hours/month. Highly recommended.
Thursday, Mar 18, 2004, 11:02 AM in The Spout
Quick Review of 4 California Theme Parks
Just flew in from California... and boy are my arms tired! <shot area="rim" />
We did 4 California theme parks in 4 days and here's what I thought:
- Magic Mountain: great rides, but even before spring break, the best rides had waits of 2-3 hours, so we didn't get to go on them (although Scream rocked). Also, the price gouging was gratuitous, including $3 for a soda, $.87 for a packet of ranch dressing and extra money for a bunch of the activities after paying to get into the park, e.g. virtual reality ride and rock climbing. Over all, thumbs down.
- Disney's California Adventure: Surprisingly good. The production values are high, even making the waiting as fun as possible, just like in every Disney park. The Bugs Life "it's hard to be a bug" show was hilarious and the Soarin' Over California ride took my breath away. Plus, all of the rides that had analogs in Magic Mountain were better at California Adventure. This was the winner of the trip. Thumbs up.
- San Diego Sea World: The day was a little overcast and their major ride wasn't running, but the shows were fun and it was a nice, mellow experience after two intense days. Also, the food was noticeably better than the other parks (although $50 on lunch for 4 was a bit much). More on the meal front: I called Don on the road between Sea World and the hotel in LA and he recommended In-n-Out Burger, which none of us had ever had before. My oldest son mentioned that meal more than Sea World, so both get a thumbs up.
- Disneyland: This park needs an overhaul. Their one really good ride, Indiana Jones, was closed and all of the rest of the rides were only interesting for the nostalgia factor (plus they broke down a lot). When I brought my 4-5 year olds here 4 years ago, it was really great to see the place again through their eyes. Now that they're older, the place holds no attraction for me. Thumbs down.
Over all the trip was a thumbs up if for no other reason than I was without my laptop for 4 days and didn't really miss it. Then I come home to find that you dang kids have TP'd my blog! : )
Thursday, Mar 11, 2004, 12:00 AM in The Spout
Avoid the GAC
Thursday, March 11th, 2004
The .NET Global Assembly Cache (GAC) is a misunderstood and misused beast. For all intents and purposes, it provides what COM and windows\system32 do, i.e. a machine-wide place to drop shared DLLs. Of course, the problems with sharing DLLs in a machine-wide spot is that it leads to a set of well-known problems collectively called "DLL Hell." There are many problems, but the biggest is that when a shared DLL is updated, you're really updating an unknown set of applications. If the set of applications is unknown, how can you possible test them before making this change? And if you can't test them, you're likely to break them. What this boils down to is that any of the shared spots for updates, whether it's a COM CLSID, windows\system32 or the GAC, are dangerous and should be avoided. And this is why the preferred .NET deployment scenario is "xcopy deployment," i.e. having your own private copy of each DLL that you test and deploy with the rest of your application.
"Aha!" you say. "The GAC supports multiple version of an assembly! When a foo.dll is updated to v1.1, v1.0 sits right along side of it so that your app *doesn't* break!" Of course, that's absolutely true. But if that's the case, why do you care? I mean, if there's a new assembly available but your app isn't picking it up, what difference does it make?
"Aha again!, you say. "I can put a publisher policy into the GAC along with my assembly so that apps *are* updated automatically!" That's true, too, but now, like any of the machine-wide code replacement strategies of old, you're on the hook for an awesome responsibility: making sure that as close to 0% of apps, known to you or not, don't break. This is an awesome responsibility and one that takes MS hundreds of man-years at each new release of the .NET Framework. And even with those hundreds of man-years of testing, we still don't always get it right. If this is a testing responsibility that you're willing to live with, I admire you. Personally, I don't have the moral fortitude to shoulder this burden. For example, we do sign genghis.dll when we ship it so that folks can put it into the GAC if they want, but we make no promise of backwards compatibility between versions and therefore we do not ship publisher policy DLLs. Instead, we expect folks to use xcopy deployment and catch the problems at compile-time and test-time.
So, if the GAC represents such a massive burden, why do we even have it? It's for two things that I've been able to identify:
Fixing critical bugs without touching the affected apps (and without breaking anything!)
Sharing types at run-time between assemblies deployed separately
#1 is what you get when you install Windows hot fixes and service packs via Windows Update. A ton of design, implementation and testing time is spent to make sure that existing code won't break before shipping these fixes.
#2 is needed if you're going to be sharing types between assemblies that you can't deploy as a group but absolutely must keep to the same version of things. .NET Remoting peers are in this category, but only if they're deployed in separate directories so that they won't share the same set of types available via xcopy deployment. However, if .NET Remoting peers are deployed on difference machines, the GAC won't help you anyway as you'll be manually insuring the types are the same across machines. BTW, the responsibility of keeping multiple machines to the same set of types (and the same framework for hosting those types) spawned an entirely new way to talk between machines, i.e. web services, so .NET Remoting itself is something to avoid unless you can administer both ends of the pipe for simultaneous updates.
Another scenario that fits into #2 is the Primary Interop Assembly (PIA). A PIA is a COM interop assembly that's been pre-generated and dropped into the GAC so that everyone that adds a reference in VS.NET to mso.dll (the COM library for Office) gets office.dll instead (the .NET Office PIA). That way, everyone can talk to the same set of types instead of everyone getting their own incompatible interop types generated on the fly. However, PIAs are primarily a way to make sure that VS.NET has a central place to pick up the shared types without regenerating new incompatible types.
Notice that "Saving hard drive space" wasn't on my list of reasons to use the GAC. I just purchased a 60GB, 7200RPM hard drive for my laptop for a measly coupla hundred bucks. I don't want to hear about you jeopardizing the reliability of the applications on my machine to save a tiny percentage of that space. Hell, when I buy a HD, I give 50% of it over to apps anyway, so help yourself and keep my apps running by avoiding any machine-wide space for updating shared DLLs, including the GAC! Thanks.
Discuss (did I miss any reasons to use the GAC?)
Wednesday, Mar 10, 2004, 11:24 AM in The Spout
WinForms Programming in C# 3rd Printing Ships
Here.
I find it unbelievable that after umpteen books, I finally seem to have blended quality with quantity as the C# version of my WinForms book enters it's 3rd printing after only 8 months in publication. Wahoo!
Tuesday, Mar 9, 2004, 5:21 PM in The Spout
Study: We're Eating Ourselves to Death
Here. Ouch. I resemble that remark...
Monday, Mar 8, 2004, 8:58 AM in The Spout
Putting the Fun Back In Programming
I know that I'm no longer untainted because I work in the big house, but I just don't get this. Do developers really want to build the same thing over and over, project to project, app to app or do they want to spend their time building cool, new stuff? Is .NET or Whidbey or Longhorn any different from continuing the foundation that we've built before? Does anyone really miss building their own file system or declarative content flow or toolbar? Will anyone miss building their own animation, object serialization or secure communications framework? I mean, building these infrastructure pieces is fun, but even more fun is pulling these pieces together to build something that's never been built before.
Tuesday, Mar 2, 2004, 1:42 PM in The Spout
Living Two Lives
Here.
I would say that I'm really living two lives. The first is what you see and today it's very boring as I'm sitting very still looking at a 14" LCD panel all day long making almost no noise. When my family comes home, that'll be more outwardly interesting, but it skips the entire reality of what I'm doing while I live that second life inside the machine.
In the upcoming documentary, Almost Real, Ann Shin explores folks living the extreme virtual life, e.g. monks leading prayer and SM folks doing their thing, all over the Internet (in case you need it, my safety word is "yellow" : ). These people are living very real virtual lives, often more real than there normal lives. Is that OK? Is that unnatural? I think it *is* OK. Why should the virtual life inside of our creations be any less valued than our so-called "normal" life (which was just created by the Overlords to test their simulation machine : ).
Anyway, it all boils down to one thing: impact. Are you impacted by the things that happen in the virtual world? I know I am. Sometimes it's negative and sometimes it's positive, but it can be just as strong as the impact I feel in my "normal" life. For me, most of my most meaningful impact happens in the "real" world, but as technology advances, I think more and more of that balance will tip, whether that's OK with you or not.
Sunday, Feb 29, 2004, 1:03 PM in The Spout
Suggestions for WinForms Programming 2/e
Here.
My co-author for the 2nd edition of Windows Forms Programming, Michael Weinhardt, doesn't have enough to do to with the new features in Whidbey or all of the stuff that I wished that I added to the 1st edition but didn't. No, he wants more, so he asked me to ask you nice folks what you'd like to see.
The goal of the 2/e edition of the book is to cover the features of WinForms Whidbey as well as related .NET features that are important to WinForms programmers. Also, we'd like to continue to encapsulate WinForms community best practices. What did I miss in either of these categories that you'd like to see in the 2/e?
Thursday, Feb 26, 2004, 12:25 PM in The Spout
Same-Sex Marriages *Should* Be Allowed
Being from the Midwest (and big and dumb-looking besides), most folks assume I'm a homophobic. As it turns out, I've known a few homosexuals in my life, but not very many. Or rather, I suspect that I know a lot more of them then I recognize, but I never think about it. I never think about it because it doesn't matter.
Real love is rare enough that people should be able to love and live and *marry* whoever the hell they want to and I resent a government that thinks that they get to decide who's love counts and who's love doesn't count (although I do support parents being able to decide whether their minor children should be able to marry).
BTW, you can save yourself the trouble of responding if you're going to say anything other than "+1", as I won't be responding to any kind of negative comments on this issue. There is literally nothing you can say to change my mind, so don't even try.
Tuesday, Feb 24, 2004, 12:33 PM in The Spout
Of Mixed Career Minds
Here. The one where Microsoft's up-coming Mid-Year Discussion and a late night IM chat with Lutz Roeder makes me introspective.
Tuesday, Feb 24, 2004, 12:00 AM in The Spout
Of Mixed Career Minds
Tuesday, February 24th, 2004
Don and I have an ongoing debate -- whether everyone was put on this planet for one purpose or whether a person gets to choose their path. This all started back in the middle of the bubble where we thought that we were so smart that we could take our success in training and turn our minds to anything we chose. We thought we could be anything, but used to talk most about politics (and Don even promised to get me elected as mayor of Beaverton) and religion (I'd like to get in on the ground floor of one of those "free love" cults : ).
Of course, the bubble burst, giving of us perspective on just what part of the success was us and what part was the go-go economy. Now, most of us that used to have those conversations work at Microsoft as a place to keep doing fun work without traveling to globe trying to keep up our old standards of living. These days Don talks about all of us having a specific place in the world and that he's pretty darn sure that he's found his (and you should see the guy; he's in there, fighting for what he thinks is best for the platform and building quite an impressive reputation base to extend his influence wider and wider). He's also of a firm mind that I've found my place and that I should be a s/w guy of some kind for the rest of my life.
So, I'm of two minds. On the one hand, I'm happy with the spot I've carved for myself in the Windows developer community and I think that there are plenty of fun s/w challenges to meet. Plus, my resume helps me get good gigs.
On the other hand, I'm not a big fan of being "predestined" to anything. I don't like the idea that fate or even my inborn predilections decides what I do and don't do in my life. I also still think that I'm smart enough and flexible enough that I could start another career. My latest fantasies revolve around moving into a place that my wife could afford on her nurse's salary while I write novels and spend my afternoons filling the public education gap my kids are experiencing. Previous fantasies include getting my jurist doctor at Harvard and becoming a courtroom prosecutor on my way to being a judge (I always know what's best for everyone : ). Also, the equities market calls my name and I've got a little property investment business on the side that could use more attention. So, I've got plenty of things I'd like to dig into before I die that have nothing whatever to do with my background or training. In fact, I've got so many other things to try that Lutz was making fun of me just last night, "Haven't you noticed that everyone in 2004 wants a new career?" Still, should I stick with what's safe because I may never achieve in other industries what I've achieved in this one or should I roll the dice and takes my chances, knowing that life is pretty short to spend it all doing the safe, comfortable thing?
Don't get me wrong; I'm not going anywhere just yet. I've started this Longhorn thing and I've got lots more to do there before I'm done. But I do think about hitting the reset button some day and starting over again from scratch. What do you guys think? Have any of you hit the reset button and ended up reading this post? Has anyone tried to escape from this industry only to end up back here and are happy they did? Does anything think that my hubris is going to get me into serious trouble? : )
Sunday, Feb 22, 2004, 9:51 PM in The Spout
Adding Ref-Counting to Rotor
Here.
Well, I can't put it off any longer. I wanted to wait 'til Chris Tavares and I were able to figure out what the problem was, but after months of help from the Compuware guys using a complementary hunk of their latest and greatest profiling software, we're no closer to finding out what causes the massive slow-down in compiling Rotor when we add our ref-counting implementation to it. The problem, of course, is that if we can't figure out what the problem is, we can't optimize our implementation to fix it.
The good news is that once we wait for the compilation to complete, the hybrid ref-counting (for deterministic resource management) + ref-tracking (for memory management) programming model is a thing of beauty. No longer do you have to write Dispose methods or even call Dispose methods, because our updated JITter takes care of it for you.
However, because compilation of Rotor makes such nice use as a managed test of our implementation and because it currently sucks butt perf-wise, we're stuck. If you're into the low-level guts and you've got the time (that's what Chris and I ran out of), we'd love your feedback on our perf problems. Who knows, if we can make it efficient, MS might stick it into the next version of the CLR... (but I don't work for that team, so don't hold me to that : ).
BTW, I'd like to really thank Chris Tavares for his implementation work. It was my idea and my funding, but he did all the work up to and including several drafts of the paper. All I did was complain. Thanks, Chris, and I hope you're enjoying your child, which is a far better way to spend your free time than implementing my cockamamie ideas in Rotor.
BTW2, I'd like to take this opportunity to publicly apologize to Brian Harry. It is definitely the case that ref-counting *can* be added to .NET but I have in no way shown that it *should* be done. Thanks for letting me try, though. : )
Thursday, Feb 5, 2004, 8:17 AM in The Spout
Severe Beating Shown, CBS Shocked/FCC Investigates
<politics>Or rather, that's the headline I wish I could post. However, instead of CBS and the FCC getting freaked out about the insane amount of severe violence on TV, available to our children any time of the day or night, they're worried about 3 seconds of breast. Idiots.</politics>
Sunday, Feb 1, 2004, 1:53 PM in The Spout
On Behalf of Software Engineers, I'm Sorry
Here. The one where an hour of phone support with my step-mom causes me to feel embarrassed about what we put normal humans through to use our software.