Marquee de Sells: Chris's insight outlet 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.




If you knew .NET like I know .NET...

Sun, 11/11/01

Many years ago when Java was new, I dove in. My first program I wrote like a C++ programmer and I didn't get it. Then I rewrote the program as a Java program and it was much nicer, but I still didn't get it. Then I discovered the lack of deterministic finalization and that's all she wrote; my C++ thinking turned me away (the fact that Java was ashamed of my favorite platform and, in fact, all platforms didn't help).

Now I've spent the last year doing .NET programming, mostly focused on Managed C++ and I didn't get it. I've participated in DevelopMentor's ASP.NET and Guerrilla .NET and loved both of them, but still didn't get it. I rewrote (with my good friend Jon's help) my entire web site in ASP.NET and didn't get it. And I spent most of last week preparing for my teach of the latest version of DevelopMentor's Essential .NET and I *still* didn't get it. Until today. Today I finally got it. The major power of Java wasn't that it was platform independent, as Sun so often touts. The power of Java (and therefore the power of .NET) is that it provides a major productivity boost for the programmer. I realized this today for the first time.

It started yesterday. Yesterday I ported a tiny little application (a time client) from MFC and C++ to .NET and C#. The first time I ported it, I ported it like it was still C++ and the result was ugly (I was trying to do the standard library trick of representing time as a the number of seconds since some marker time and then translating it into a formatted string at the last moment). In fact, I couldn't even do the nice formatting of the current time since .NET didn't support that means of conversion. But then I remembered that, unlike C++, .NET has proper date, time and span classes. Once I rewrote it in .NET style, it was a thing of beauty. With knowledge of only the name of the sockets namespace (System.Net), I was able to learn .NET and build a time client in under an hour. To paraphrase the closing sentence of one of my first articles, it just makes you want to grab the back the of computer monitor and feel the power of .NET.

Encouraged by my success and armed with the courage of my convictions (and a couple of web sites given me by Jason and Peter), I sat down to write a MSN Instant Messenger application. Those of you unlucky enough to have me as an IM contact saw me log in and log out about a hundred times yesterday (sorry : ). This was because every step of the way, I'd run my client and every step of the way, I'd make more progress. 90% of my code was reading and writing from the sockets and parsing strings. For the former, I used the StreamReader and StreamWriter and for the latter, I used the Regex class. Both did a ton of heavy lifting so I didn't have to. It was amazing.

But yesterday, I still didn't get it. I was so focused on getting my IM client working (about a half day's work) that I completely missed the magnitude of what I was doing. I was implementing an async notification-based socket protocol after reading an example doc, skimming a spec and digging in. And the code I ended up with wasn't spaghetti. It wasn't production ready yet (my error handling, while present, was rudimentary) and I didn't implement the entire spec, but I had refactored along the way and now I have the beginnings of a nice little namespace for doing IM work. And all of this happened the same day that I first discovered the existence of the System.Net namespace. It's only after reflection (and a good night's sleep) that I finally get it. The power of .NET is the programmer productivity.

This productivity comes from a combination of ease of use and flexibility that's going to attract almost everyone. It will attract the VB programmers because of the continued ease of use and the new functionality of the .NET Foundation Classes. It's also going to attract the C++ and the Java programmers for the same reason, but they won't admit that's why they like it. They'll claim to love .NET because of the power and flexibility. Not only are the .NET languages themselves allowed to be fully-featured, but the framework itself has tons of amazing functionality built right in. So much so that it's easy to miss some of it. When I needed to calculate an MD5 hash in my IM client, I went to the net, downloaded some C++ code and built myself a COM object (although I could have easily built a MC++ component, too) and then brought it into my app via interop (see what not being ashamed of the platform can do? : ). That was great, but this morning Peter asked me why I hadn't just used the MD5 functionality built into .NET. There's so much stuff in there that I missed it. As a community, we'll be digging into it for a long time to come.

In the past, I had scoffed at the value of programmer productive over user productivity. My argument was that programmers are soldiers on the field of combat taking bullets and protecting the users at home. This was how I justified the complexity of C++, but measured it against the flexibility of the language and the performance of the produced code, and therefore the pleasure of the user. Don't get me wrong. We're still going to be using C++ for high-performance, shrink-wrap software for some time to come. Windows and Office XQ (or whatever they're going to call them) will still be implemented in C++. Client applications that cannot dictate their deployment environment, i.e. can't dictate the presence of the .NET runtime, will still be implemented in C++ or VB6. Most of the rest is going to be built in .NET without 12-24 months. Stand-alone corporate applications can dictate the presence of the runtime, as can server-side n-tier applications. Web-based applications can take advantage of the compiled and caching performance gains using ASP-style programming, will still enjoying the flexibility and power of ISAPI-style programming via .NET modules and handlers. Everyone in these spaces that works under Windows is going to be moving to .NET, especially the Windows Java programmers who already know the power of such a platform, but want easy access to their DLLs and their COM servers. The reason that people in these environments can now afford to move is that continued research in virtual machine-style environments and increase in machine power has brought about the first platform where ease of use for the programmer does not mean that the user has to suffer. Applications built with .NET are going to be fast enough and when it comes to ASP, they're going to be much faster than what we've had in the past.

The combination of ease of use for the home-by-5 style programmer and the flexibility for the computers-are-my-life style programmer was so great in Java that tens of thousands flooded the Java conferences from the first year. Mix in a user experience that doesn't have to suffer from the programmers' choice of .NET and I finally get it.

0 comments




Be Your Own Teddy Bear

Wednesday, 10/17/01

According to legend, the TA office next to the Stanford computer science lab is guarded by a teddy bear. Before a student is allowed to consume valuable time asking a question of the TA, they must first explain it to the teddy bear. Apparently the bear is able to answer 80% of the questions that students ask, saving time for the TAs to play Unreal Tournament.

I often feel like I act as the teddy bear for the COM community. I get several email messages a day from folks that consider the mailings lists (resources set up to answer just these kinds of questions) to be too slow, so they ask me directly. If I don't know the answer off of the top of my head, I often respond with the following phrase:

    "Can you send me a tiny, tiny project that reproduces the problem? --Chris"

This, of course, implies that I will actually build and debug the project. And 20% of the time, I do. The other 80% of the time, by the time folks have reduced the problem enough to demonstrate it for me, they've already solved it, saving me the time (thank goodness).

Knowing that this is the case, I recommend that you become your own teddy bear. A whiteboard is handy for explaining the problem to yourself and Microsoft development tools are now so handy that you can typically whip out a small reproduction project very quickly. These very activities will often solve the problem, but even if they don't, you've got a concise description of the problem and a small repro case to send to your friends or to post to the list.

0 comments




The F-Key Diet

Made you look!

(if you don't know what I'm talking about, check here)

0 comments




Bill's Money

In a recent interview with Barbara Walters, Bill Gates was asked how he felt about Ted Turner's one billion dollar donation to the United Nation. This is what he had to say:

“Certainly, my giving will be in the same league as Ted’s, and beyond. … During my lifetime, you know, the money will be given away.”

He further went on to say:

“I don’t believe in passing on major wealth to (one’s) children, and therefore everything that I’m earning is going toward the causes that I think can help out.”

So far, Bill has given several hundred million dollars to libraries to provide lower income children with access to PCs and the Internet. Do you have an idea for a charity worthy of Bill's Money? Post your comments here and I'll keep track of them for Bill. When he's ready, he'll know where to come.

P.S. Just so you know, Bill has never once supported anything from this page and as far as I know, he has no idea this page even exists. Don't get your hopes up.

0 comments




Flattery

September 17th, 2001

Is it imitation or nudity that's the sincerest form of flattery? Either way, it looks like Robert Scoble is naked outside where the neighbors could see (unlike mine, which was inside and very private : ).

0 comments




CorPub

Oct 10, 2001

I've updated CorPub to show *all* managed AppDomains by initializing the COR debugging sub-system prior to enumerating them. Thanks to Atif Aziz for the tip.

September 13, 2001

I built the CorPub utility when my friend Jason pointed me at the .NET corpub.idl interfaces (his exact words were "ICorPublishProcess rocks!"). CorPub lists the managed processes on the current machine and the AppDomains in each process, as follows:

Managed process 0xa54: D:\project\mine\RegexPlorer\bin\Debug\RegexPlorer.exe
	AppDomain 0x1: RegexPlorer.exe

Managed process 0xdc8: C:\vs.net\Common7\IDE\devenv.exe
	AppDomain 0x1: DefaultDomain

Managed process 0x1ec: C:\PROGRA~1\MICROS~2.NET\FRAMEW~1\Bin\ildasm.exe
	AppDomain 0x1: DefaultDomain

It's fun for spelunking. Enjoy.

NOTE: .NET beta 2 is required to run this utility.

0 comments




Give Comfort

September 11th, 2001

The World Trade Center and the Pentagon were attacked today when hi-jacked commercial airlines crashed into them, destroying both of the towers and damaging the Pentagon. I can't possibly know what the people who had friends and families in those buildings are going through right now, but my thoughts and prayers are with them. If there's anything you can do today or in the coming weeks or months to help those people to recover from their loss, please put aside your computers and your work and do it. I will be doing the same. Thank you.

If you're interested, both Amazon.com and PayPay.com have set up disaster relief donation funds. 100% of all donations go directly to the American Red Cross.

0 comments




Q&A: .NET Cross Language Inheritance?

August 23rd, 2001

Q: D.J. Stachniak writes:

I missed the Conference.NET, but I've been reading through the PowerPoint presentations posted on DevelopMentor's web site. I noticed in the C++ In A Managed World presentation that there is a slide (page 62 specifically) which says ".NET supports real inheritance across languages - Although, that doesn't mean you should use it..."

Would anyone like to take a crack and explain to me why cross language inheritance might be bad?

A: Chris responds:

At the Microsoft PDC in 1993 (also known as the "COM PDC"), Kraig B. introduced COM by saying that it didn't have inheritance, but that was a good thing, because of the fragile base class problem. This problem says that derived objects, by definition, need to have incestuous knowledge of their base classes, including full understanding of the implied contract (which often requires to source to determine). What made this relationship fragile was that reliance on the implied contract caused all kinds of trouble when it changed, implying that it was knowledge of the source that caused this problem.

Of course, that's not the case. We often experiment with components that we don't have the source for and made decisions based on implied contracts that can easily change version to version. I would call this the "fragile use" problem, but it's more commonly called "DLL Hell." The idea that components can be replaced in the field without breaking things has long been known as a fallacy, and it doesn't matter if you've got the source or whether you're doing inheritance, aggregation or mere creation.

Eiffel's Design by Contract is a good step towards detecting problems, but that's an Eiffel-only thing. A good step towards reducing DLL Hell is the aggressive versioning and side-by-side installation of multiple versions that .NET supports. If your client or derived class binds to a specific version of a component, then there's no need to worry about it changing out from under you. Lack of source makes it harder to derive than to merely use, but assuming you can make things work empirically, cross-language inheritance might actually work in .NET (but don't hold me to that : ).

0 comments




Conference.NET: Notes from the Field

August 17th, 2001

In talking to fellow DevelopMentor instructor Craig Andera today, I realized that those of you who didn't get to attend DevelopMentor's Conference.NET this week, must've hoped that DevelopMentor's inaugural conference would suck so that you didn't miss anything good. Well, I'm pleased to tell you that it didn't suck. In fact, it was awesome. In further fact, I can't say that I've ever had more fun at a conference. Of course, I couldn't be everywhere, but here's what happened to me:

Day 1: Chris Doesn't Suck

Monday started with a rousing keynote from David Chappel, the industry's best-dressed speaker (not a high bar in our industry, of course, but even I have to admit that he's very good looking : ). An overview of his talk is available here, but what I most remember is that he pegged C++ as for dinosaurs only. While I certainly see his point, Microsoft's Managed Extensions to C++ are going to enable a lot of people to enter the world of .NET without rewriting large code bases, which is going to make it enormously popular. This was further evidenced by the volume of MC++ questions that I fielded all week long (one attendee left the lab unhappy with the answer he'd gotten from a C# bigot and dragged me back there to examine his problem). Like VB before it, I predict MC++ to be the .NET love that dares not speak its name. Of course, David's comments weren't exactly designed to fill my day-long MC++ tutorial later that day...

Further compounding my potential attendance problem was going to be Don Box. Don's an amazing man. He has the ability to dive completely into a technology, understanding it better than the designers, while still remembering the technical details of every other technology he's ever ingested and completely belittling any value they might have had when compared to his latest fetish. In his talk, C++ didn't respect the programmer, VB was the bane of every other programmer, COM was a mess and of course people had trouble getting DCOM to work over the Internet (how could it work when our neck-bearded network administrators had been replaced with kids pulled away from flipping burgers by the siren song of readily available MS networking certification?). Of course, to Don, only .NET and C# are at all useful to the reasonable, thinking developer. My biggest issue with Don is how right he usually is, but when he singled me out as destined to be the world's last C++ programmer by painting an image of me in a '76 Ford truck sporting a gun rack and a bumper sticker reading, "You can have my C++ when you pry it from my cold dead fingers," I knew that those attendees who hadn't yet decided weren't likely to show up in my MC++ tutorial...

The last 2/3rds of my day was spent teaching my first real material in about three years. Oh, I'd given the odd conference talk now and again, but after years on the sidelines managing the development of Gen<X>, I was nervous. After all that time, could I still manage to entertain and educate a room full of people on a topic that the keynote speakers had spent all morning panning? As it turns out, I can. Oh, I can't say I was brilliant, but I didn't suck, and that was enough.

Day 2: Chris Has a Bad Hair Day

Day 1 ended with lots of celebration of my not sucking. I got to hang out with dear friends from as far back as 3rd grade and enjoy a bit more alcohol than was strictly necessary. After finally collapsing into bed at around 5:30am, I was hardly in any shape for my 8am business breakfast (note to self: never let the commission-based sales guy schedule the meetings -- they're just too damn eager). Needless to say I grabbed every minute of sleep that I could, but because of my short, deathlike REM, my hair was remarkably unmussed when I showed up without a shower (and even managed to make a point or two without falling asleep in my waffle). After two hours of scintillating business wrangling, I retired to my room to grab some quick Zs before returning to "office hours" in the lab. The lab was really great, because it contained a couple of hundred PCs with exercises from each of the conference talks so that attendees could practice what they'd learned, getting help from the rotating speakers pulling lab monkey duty and answering attendee questions about designs scrawled on cocktail napkins. This was also where I learned that my continued lack of a shower had finally made it's way to my hair. After thirty minutes of frightened stares, I stopped by the gift shop to buy a hat (stupid looking, but better than the Elijah Prince "do" I was sporting) on the way to my first Birds of a Feather talk.

The BOF that I was to do with Brian Randell, a died in the wool VB guy, was entitled "WinForms: Love it or leave it," and it was designed for two things: 1) to leave things very open to audience participation and 2) to make sure that Brian and I could show up without any preparation whatsoever. You see, both of us had fallen in love with WinForms, but we hadn't gotten to do much with it. We showed some fun demos, though. Mine was dedicated to the splitting and docking that WinForms has built into it (a thing of beauty!). Brian's was dedicated to the new opacity property setting which makes windows imperceptible (how very useful...). So, after me making fun of Brian about this fetish, he was getting a bit tense. Then, when the WinForms designer decided to crap out because of a license file problem, causing Brian to have to shut down the IDE, delete files manually, restart the IDE, etc, he got even more tense. When Don decided to rub it in with his standard, "You know, when I use Emacs, that never happens," Brian snapped. Before I even had a chance to draw a breath to put Don back in his place, Brian came right back with, "And how many products did you ship last year, Don?" A low moan swept the audience and Don turned tail and ran (after waiting a few minutes to let the ruckus die down). It was an awesome site to behold! I gained much respect for Brian that day.

I also gained much respect for WinForms. In spite of all of the hype about ASP.NET and Web Services, the thin-client backlash was in full swing at this BOF. Our room started out full and just gained people as it went on. Somewhere in the middle it became standing room only and still people came. And they didn't just sit there, either. They all participated in a very rousing discussion first about MFC/VB vs. WinForms and then onto the more interesting thin vs. rich client. These people were very tired of the limitations of HTML 3.2 and cross-platform DHTML and anxious to get back to a real development environment for UIs. Truly, the Renaissance for rich UIs has begun.

Day 3: Jason Whittington is Accused of Slut-like Ignorance

Day 3 was a big day for me. It started with a talk on a subject near and dear to my heart, generative programming. This is a relatively new term for the technology ideas we'd been using for years in building Gen<X>. Again, my room was full, not only of attendees but also of two of the software engineers from the Gen<X> team (Chris Tavares and Shawn Vanness). The audience was certainly spending a lot of time nodding their heads and understanding the benefits of generative programming, but when I showed them how far we had taken it and all of the things for which we were using Gen<X>, that took them right over the top.

And then, right after getting to pitch my favorite technology, I got to proceed right to my next BOF, where I would get to tilt at my own personal windmill -- non-deterministic finalization. Those of you who know me or my programming style know that I'm absolutely in love with the idea of objects managing their own resources and them being notified immediately when the last client is done with them, either via COM-style reference counting or via a C++ destructor. This kind of deterministic finalization allows for very aggressive reclamation of resources, even in the face of exceptions or forgetful programmers. Non-deterministic finalization, on the other hand, leaves notification that an object is no longer in use to a background thread managed by a garbage collector. Because when the GC will get around to notifying an object is non-deterministic and empirically takes a long time, this means that resources can no longer be claimed by automatic means, instead leaving it to the client to manually notify the object via a Close or Dispose method. In my opinion, this is not a robust technique in the face of exceptions or forgetful programmers.

This issue has been the bane of my existence for years. When Java was first becoming popular, I was studying to become DevelopMentor's first Java instructor. And at first, I really liked it. Then I discovered that Java had non-deterministic destruction and my life turned to ATL instead. Fast forward a few years to an early design preview of .NET where I learn that Microsoft was "leveraging" many of the ideas of Java in its new runtime, including my favorite: non-deterministic finalization. I try to explain the problems inherent in this decision, but apparently, they've been all through this and Bill Gates has already made the decision for them. Of course, I don't know this, so I kept fighting the good fight with one of the first emails on DevelopMentor's .NET mailing list. This caused quite a stir, consuming much bandwidth to this day and eventually culminating in a long, explanatory email from Brian Harry, a PM on the .NET team. This email was intelligent and thoughtful and annoyed me no end because it put the final nail into the coffin containing my hope for DF in v1.0 of .NET, which we're going to be living with for years. In fact, this email annoyed me so much that, on Day 2, I referred to it as "Brian Harry's 'little' email." After all, the room was nearly empty except for a few of my very close friends and one attendee who I hadn't met. I met him 5 seconds later. It was, of course, Brian Harry. Remember, this was the day I had almost zero sleep, so I wasn't exactly on top of my game. What an inauspicious way to meet your arch-enemy... [1].

Now, I told you that story so that I could tell you this one.

The BOF was to be a debate between me (pro-DF) and Jason Whittington (pro-garbage collection), with Don as the master of ceremonies. Imagine a thoughtful, reasoned exchange of ideas between calm, measured adults. Now throw that image away. Instead, Don introduced the BOF by saying that there was the right way of thinking and the Chris way of thinking and that I had been lured into the packed room (containing, as backup for the side of evil, Brian Harry) for an "intervention." Now, it's not as if some of us didn't try to be thoughtful and reasoned. For example, Jason gave us all kinds of background into the history and practice of garbage collection and how it works under .NET. In fact, if you haven't yet had a chance to read Jason's GC talk from Conference.NET, you should. It's great. Unfortunately, the passions in the audience and in the other side of the debate, i.e. me, left little time for Jason's approach. Instead, Don and I and the audience went back and forth, invoking stories of ASP.NET applications written by the cream of the crop at DevelopMentor that leaked so many resources as to make them unusable, laments of the semantic incorrectness of tying resource management to object lifetime and analogies of deck chairs on boats that did and didn't sink. It was somewhere between a gospel revival and a schlock talk show (in fact, at one particularly cantankerous moment, the audience was literally chanting "Jerry! Jerry!"). At one point, I got so worked up during Jason's attempts to shed some actual light on the topic that I interrupted him exclaim, "Jason Whittington, you ignorant slut!" It was one of the highlights of my life...

But that was not to be the highlight of the show. Oh no. The most amazing thing about the show was later that evening at the close of conference party, where DevelopMentor introduced the .NET Band: The Band on the Runtime, made up of speakers and attendees who were also accomplished musicians. It was an awesome mix of showmanship, musicality and parody lyrics that caused the audience to sing along, wave their candles (in lieu of lighters), jump on stage and scream for an encore. When it was over, I was so moved that, in spite of my long friendship with Don and my pride in never seeing him as the hi-tech rock star that most folks do, I had to rush backstage to shake his hand and to be in his presence. I felt like a giddy school girl hoping to snatch a sweaty handkerchief from across his brow (which I'll be auctioning off at eBay when I'm good and ready...).

Day n: The Rest of My Life

I have to say that I was deeply affected this week at Conference.NET. I'd like to thank everyone who organized it and hosted it and made it happen. And those of you who had the chance to go, but didn't? Well, on your heads be it. Don't make that mistake again next year...

Related Links

[1] As it turns out, it didn't take long to make up with Mr. Harry and I soon found him to be reasoned and intelligent. Even worse, I found that I liked him. Damn it!

0 comments




Centerfold

WARNING: Do not follow this link if you don't want to see me naked!

0 comments




Don Gives a SOAP Talk

TechEd Barcellona, Spain 8/15/2001


0 comments




This Picture Needs a Caption

Chris riding The Incredible Hulk roller coaster in FLA in 2000. Notice the "COM is Love" t-shirt. I really wanted to say something funny or ironic in the title of this picture, but words failed me. Got one?

0 comments




Conference.NET Song Lyrics

King of the Code

Sung to "King of the Road"

Platform for sale or rent
who cares where all the others went
no more pointer, pushes, pops or peaks
I ain't got no memory leaks
I wrote ten lines of C# today
I was more productive than yesterday
I'm a programmer of mean by no means
I'm a king of the code

I feel sorry for those guys at Sun
DOTNET has got them on the run
But when I hear Scott McNeally whine
I say stick your VM where the Sun don't shine
Most folks agree VB DOT NET
Is the best version of Java that we've seen yet
I'm a programmer of mean by no means
I'm a king of the code

You C guys think all this stuff is new
A friendly runtime that hides the goo
I'm a VB guy, better watch out for me
'cause I've been writing managed code since 93
Database code's busted -- no time to cry
Patch it all to the newest API
I'm a programmer of mean by no means
I'm a king of the code

New waves they come and go so fast
COM was love, but love don't last
If COM was love than what's DOTNET
It's love without the cigarette
DOTNET will be here till we all get bored
Then we'll throw it away and invent DOT-ORG
I'm a programmer of mean by no means
I'm a king of the code

Wild Side

Bill G came from Seattle WA
Spread .NET across the USA
Plucked out pointers on the way
Shaved ref counting - started sporting GC
He said Hey babe take a walk on the wild side
Hey babe take a walk on the wild side

Chris Sells never once threw one away
In the end, he had to pay and pay
An object here, and object there
Memory is the place where they say
Hey Chrissie, take a walk on the wild side
I say hey babe, let's going back home and finalize

And the .NET girls go
Do do do do do do do do do do
do do do do do do do do do
doooooooooooooooo ah
 
<break>The musical stylings of Francesco Balena</break>

Jon Flanders came from out of the heartland
With ASP he's was everybody's darling
But he never lost his head
Even when they told him COM was dead
I said hey Jon, take a walk on the wild side
I believe they call it Interop-O-cide

Brian Randell came and hit the streets
Hoping .NET would bring inter-language peace
He hates it when those bigots say
C#'s for work, VB's for play
I say hey Brian, take a walk on the wild side
It's curly braces that make your code bonafide

My friend Don Box, he's just coding away
Though he was James Joyce for a day
Yeah I guess Don's pretty smart
But he mistakes his code for art
I say Hey Don, take a walk on the wild side
You're just a liquor salesman, it can't be denied

And the .NET girls go ....

And the .NET girls go
Do do do do do do do do do do
Do do do do do do do do do do
Do do do do do do do do do do
Do do do do do do do do do do
Do do do do do do do do do do

Bill G and the Feds

Sung to "Bennie and the Jets"

Hey kids - you wanna see a scene-o
Let's watch Billy Gates get it on with Janet Reno
We're talking anti-trust now - so stick around
Gonna rack legal bills that know no bound
Hey Joel Kline he's on the case
Oh man he's so spaced out
B-B-B-Bill G and the Feds
Billy he's so silly and litigical
The center of a courtroom scene
He's got those Harvard roots, class action suits
You know I read it in a magazine - oh yea
B-B-B-Bill G and the Feds

Hey kids, go crank up your browsers
You're in for nasty weather, gonna make you wet your trousers We're
gonna stifle competition with such as sense of ease Gonna bring those
bastards from Netscape down to their knees Hey Judge Jackson, have you
heard this case Oh man, his ruling was so spaced out
B-B-B-Bill G and the Feds
Billy he's so silly and litigical
The center of a courtroom seen
He's got those Harvard roots, class action suits
You know I read it in a magazine - oh yea
B-B-B-Bill G and the Feds

Bill G, Bill G, Bill G, Bill G and the Feds...
Bill G, Bill G, Bill G, Bill G and the Feds...

DevelopMentor's Conference.NET
Sung by the .NET Band on the Runtime

0 comments




Mr. June, 2000

Nothing comes between me and my technology...


All pictures courtesy of Jason Whittington's most excellent PhotoShop skills.

See the parody by Ted Neward inspired by this picture.

0 comments




.NET XML Checker and Validator

Aug 8, 2001

xmlValid is simple command line utility that will check an xml file for well-formedness and, optionally, will validate it against a supplied XML schema file (xsd). I built it to check that my site's HTML files were well-formed (and therefore XHTML-compliance), but it's got all kinds of other uses, including checking .NET .config files. Source is included. Enjoy.

Usage: xmlValid.exe xmlFile [xsdFile]

Note that this utility requires .NET beta 2 to be installed.

0 comments




70 older posts       2565 newer posts