Windows Server 2003 Service Pack 1 finally released

Here it is:

And that's not all . X64 both Windows Server and Windows XP were both RTM'd and are up on MSDN Subscriber downloads! Now. You have the ability to develop & test 32 & 64 bit apps on the same system. Now let's see, what did they have up there at TigerDirect for the AMD 3400's....


"Stop putting the toothpaste back in the tube"

Supreme Court, stodgy old alta-cacca's that they are, really got down to the nitty - gritty today in the first of a series of hearings pitting the entertainment giants against the P2P file-sharing community.

Hundreds of mostly young people gathered on the Supreme Court steps in support of the file-sharing companies, chanting and carrying signs. Some camped out overnight to attend the oral arguments.

Supreme Court precedent dates back to a 1984 ruling that Sony Corp. could not be held liable if consumers used the company's Betamax tape machines to illegally copy movies. Most of the comments I've read indicate the Justices have a healthy respect for innovation and entreprenuerism, and it will be hard to convince them to make file sharing networks legally liable for the frenzy of P2P movie and audio file sharing that goes on (most of which is, of course, not legal).

Justice Antonin Scalia wondered whether innovators would be punished immediately after creating a new product if the entertainment industry had a legal veto. "If I started a business now, how do I know how to proceed?" he asked. "If I'm a new inventor, I'm going to get sued right away."

"There's never the intent to break the law when the guy is in the garage inventing the iPod," added Justice David Souter.

Besides the lawsuits, the entertainment industry has deliberately polluted file-sharing networks with poor-quality copies of songs and falsely named files, among other tactics, to frustrate Internet thieves.

Well kudos to you, Mr and Mrs Supreme Court Justices! Got yer heads screwed on right about more than one thing, including letting people die in peace without the fewkin' Government getting into the act!

On a side note, I heard on the radio this morning that a secret 1943 psychological profile of Adolf Hitler done during World War II just turned up in the archives at Cornell University. Among other things, the profile said that he:

  • Could Not accept criticism

  • Enjoyed bullying people

  • Craved Attention
  • >
  • And if he lost the War, he'd probably kill himself.

They've put it online, if you are interested.


Dr. Dotnetsky alive and well in Phoenix, and Programmers as Musicians. . .

We've noticed a conspicuous absence of the revered Dr. Dexter Dotnetsky on eggheadcafe.com over the last couple of months. However, I recently got an email from him with the photo below attached. He says he is in Phoenix, working on a top - secret project, and will be back soon.

On another "Note", have you ever noticed the high percentage of programmers who are also accomplished musicians? Being a former semi-professional jazz musician myself (played bass with the Robert Hunt Trio in New York, played with the likes of David King, Jules Broussard, and Noel Jewkes in San Francisco, even played shakuhachi duets with Schawkie Roth in Mill Valley) I find this particularly interesting.

Surely the inventors of C# were musicians, no? (the key has seven sharps)... I think it has to do with brain chemistry myself. Particularly jazz musicians. What do you think?

throw new InvalidOperationException("Cannot restart Brain that is already in motion.");


Firefox and AJAX - my BUTT! Gimme a BREAK!

Yup. They've done it again. Asynchronous XMLHTTPRequest and javascript to load an XML Document "behind the scenes" in a web page and use it to update the UI. It's so absolutely innovative as a programming concept that they've even given the technique a new Acronymn - AJAX! Just like they gave REST it's name when all it really boils down to is simple RPC over http on the querystring, essentially. (Actually, Ajax was the son of Telamon king of Salamis. After Achilles, he was the mightiest of the Greek heroes in the Trojan War.)

Why do these people with their SOA's and their AJAX's and God knows what else feel compelled to do this crap? Sell more magazines, perhaps? Sell more software?

The problem is, XMLHTTP has been around for Internet Explorer since version 3.0. By Internet standards, that's ancient history. So now people have resorted to "reinventing" it to gain marketing hype and notoriety. In fact, the first "big" use of it was in Outlook Web Access, and it was written by the MS Exchange team. But, oh no! These Moz and Firefox people are gonna give it a brand new name -- as if they invented it. I only bring this up because I've been working on an all client-side RSS aggregator that I may roll into an ASP.NET server control, and I wanted to
see if I could offer support for Firefox in it.

Well, surprise! Turns out, they've shot themselves right in the foot: With Firefox, you can't even make a damned XMLHTTP request for a lousy RSS feed that's not in the same domain because they consider it a security risk.

Jeesh! Take your AJAX and shove it up your foaming cleanser guys! Boris sez, "Vee don't need no Steenking Acro-neems! Vee need PLAN dat VORKS!"


Cool MSN Search Features (1 regular, 1 in Alpha)

MSN Search is making it's "Move". They offer a branded free site search option (which is no biggie, it just adds the standard "site:xxx.com" directive ), and also, if you've noticed at the very bottom of a search results page, there is a familiar
"RSS" icon. Lordy, Lordy! MSN search results as RSS! Now that's an interesting idea, even if its in Alpha and could be changed or taken down at any time...

So here are two samples, one to search this UnBlog, and the other for any set of search terms you want, returned as RSS, all courtesy of MSN Search.
Each one is pre-filled with some sample entry that will return results. Just view source on this page to get the code.

Also, please note the disclaimer in the Returned RSS:

"These XML results may not be used, reproduced or transmitted in any manner or for any purpose other than rendering MSN Search results within an RSS aggregator for your personal, non-commercial use. Any other use of these results requires express written permission from Microsoft Corporation. By accessing this web page or using these results in any manner whatsoever, you agree to be bound by the foregoing restrictions."

In other words, don't use this page as your "personal RSS search engine". Its only here to share the code.

MSN Search

RSS Search:


Taking out a Second Mortgage to fill up that SUV?

Taking a look at the Amex Oil Index Chart since 1985, you can see that the big spike at the end clearly doesn't reflect the real increase in demand, which has been relatively "regular" until about the middle of 2003 (year - over - year, for example from last year, only about a 2 percent increase). What you are seeing is a lot of oil futures traders have unusually low short positions, an indication that prices are peaking (that's correct, the majority of futures traders are exactly wrong around price extremes). So, don't take out a second mortgage to fill up your SUV just yet. Short Crude instead! You'll be able to make enough profit to be buying gasoline for a long time!

Amex Oil Index Posted by Hello

DEC VS.NET --> FEB VS.NET and SQL Server 2005 Gotchas

When uninstalling December CTP's to install the latest February 2005 CTP's be sure NOT TO UNINSTALL .NET Framework 2.0 first! The CTP's cannot uninstall without .NET 2.0 present. I found that if you install the February CTP of VS.NET 2005, the old SQL Server 2005 from December 2004 can use the latest Framework 2.0 version to be able to be uninstalled.
Then, you can install the February SQL 2005 version.

Another gotcha - these guys ARE NOT compatible with each other. In other words, if you install VS.NET 2005 February, it WILL NOT WORK with the December 2005 CTP version of SQL Server 2005.


We Don't need no Steenking Vee Bee Dot Net!

This Richard Grimes thing has really fired up a lot of people! The guy is a pro, he can say whatever the hell he wants in his parting shot at DDJ. So he put down .NET and made a bunch of predictions.Who cares! When .NET first came out I clearly remember one JAVA guru calling it "Vaporware".

You really don't want to engage too much in mental masturbation over this kind of thing. Maybe he was having a Senior Moment. Maybe somebody in Redmond got him pissed off. One thing I know,
his comments about VB.NET were right on. We don't need no steenking Vee Bee Dot Net! Nyaaa, Nyaa Nyaaa!

It's not the language itself (although I've come to hate it). What it really is: Microsoft tried to create a new language for marketing purposes, because of all the billions ( a la Carl Sagan) of VB develpers out there. In doing so, they perpetuated all the helper classes and crutches and Option Strict=off and Option Explicit = off and the result is you have beelions of crybaby VB developers now doing .NET and they are being allowed -- even encouraged --to write crappy code and get away with it. The VB.NET compiler compiles it - it doesn't even whimper. I am humiliated almost daily by the C# compiler - I have to write quality, strongly typed code. And all this stuff about case insensitivity is a buncha baloney! What, they are gonna redo the UNIX filesystem because you think case insensitivity is passé?

If you want to feed a man for a lifetime don't give him a VB.NET fish. Let him learn C#. Look at the Enterprise Library. All C#. Look at ASP.NET - all 1 million plus lines of code -- C Sharp. What are we talking here, Greek?

Hanselman got it right when he said: Set VB6=Nothing.

I say, Set VB.NET = VB.NOT!


Laugh, Dammit!

I'm always telling the Significant Other, if we are gonna do Blockbuster, let's get a movie that will make us LAUGH! It is just pitiful to me to see how many people are just so damned serious about every little thing in their lives, they may have actually forgotten that life is FUN! Not only fun, but it is downright FUNNY! How the hell can you enjoy yourself if you walk around treating every little thing like a damned crisis!

Now here's a blog that is funny. If you are a programmer like me, and you don't get at least two or three GOOD LAUGHS a day, do yourself a favor. Bookmark this guy's blog and visit it. It will make you realize, if only for a short while, that it's not worth it to get too serious ABOUT ANYTHING. We're here for a nanosecond in the spacetime of the cosmos, and then we are GONE. Try to enjoy it a little bit while you are here, OK?



On Perfect Software: It's the Process, Stupid!

Recently an old article I'd seen several times before surfaced on a couple of blogs, and I went back and re-read it. It's about the On-board shuttle group, and how they write perfect code. And I mean PERFECT. This is the software that makes the Space Shuttle go. What makes it remarkable is how well the software works. This software never crashes. It never needs to be re-booted. This software is bug-free. It is perfect, as perfect as human beings have ever achieved. The last three versions of the program -- each 420,000 lines long --had just one error each. I've lifted out and edited a few lines to save you some searching and reading time; what follows is really the essence of this whole concept:

This is all the work of 260 women and men based in an anonymous office building across the street from the Johnson Space Center in Clear Lake, Texas, southeast of Houston. Their prowess is world renowned: the shuttle software group is one of just four outfits in the world to win the Level 5 ranking of the government's Software Engineering Institute.

But, HOW do they write the right stuff?

The answer is, it's their process. The group's most important creation is not the perfect software they write -- it's the process they invented that writes the perfect software, and the process can be reduced to these four simple propositions:

1. The product is only as good as the plan for the product.

At the on-board shuttle group, about one-third of the process of writing software happens before anyone writes a line of code. NASA and the Lockheed Martin group agree in the most minute detail about everything the new code is supposed to do -- and they commit that understanding to paper, with the kind of specificity and precision usually found in blueprints. The specs for the current program fill 30 volumes and run 40,000 pages.

Most organizations launch into even big projects without planning what the software must do in blueprint-like detail. So after coders have already started writing a program, the customer is busily changing its design. The result is chaotic, costly programming where code is constantly being changed and infected with errors, even as it is being designed.

2. The best teamwork is a healthy rivalry.

Within the software group, there are subgroups and subcultures.

The central group breaks down into two key teams: the coders - the people who sit and write code -- and the verifiers -- the people who try to find flaws in the code. The two outfits report to separate bosses and function under opposing marching orders. The development group is supposed to deliver completely error-free code, so perfect that the testers find no flaws at all. The testing group is supposed to pummel away at the code with flight scenarios and simulations that reveal as many flaws as possible.

The results of this friendly rivalry: the shuttle group now finds 85% of its errors before formal testing begins, and 99.9% before the program is delivered to NASA.

3. The database is the software base.

There is the software. And then there are the databases beneath the software, two enormous databases, encyclopedic in their comprehensiveness.

One is the history of the code itself -- with every line annotated, showing every time it was changed, why it was changed, when it was changed, what the purpose of the change was, what specifications documents detail the change. Everything that happens to the program is recorded in its master history. The genealogy of every line of code -- the reason it is the way it is -- is instantly available to everyone.

The other database -- the error database -- stands as a kind of monument to the way the on-board shuttle group goes about its work. Here is recorded every single error ever made while writing or working on the software, going back almost 20 years. For every one of those errors, the database records when the error was discovered; what set of commands revealed the error; who discovered it; what activity was going on when it was discovered -- testing, training, or flight.

4. Don't just fix the mistakes -- fix whatever permitted the mistake in the first place.

The process is so pervasive, it gets the blame for any error -- if there is a flaw in the software, there must be something wrong with the way its being written, something that can be corrected. Any error not found at the planning stage has slipped through at least some checks. Why? Is there something wrong with the inspection process? Does a question need to be added to a checklist?

The way the process works, it not only finds errors in the software. The process finds errors in the process.

In the history of human technology, nothing has become as essential as fast as software. Virtually everything -- from the international monetary system and major power plants to blenders and microwave ovens -- runs on software. In office buildings, the elevators, the lights, the water, the air conditioning are all controlled by software. In cars, the transmission, the ignition timing, the air bag, even the door locks are controlled by software. In most cities so are the traffic lights. Almost every written communication that's more complicated than a postcard depends on software; every phone conversation and every overnight package delivery requires it. And yet, 80% of major organizations basically write software that sucks, because they don't have a process.

Think about it.


Mark of the Web!

Kind of reminds me of the "Mark of Zorro" (Jeesh, I must be getting old).

Anyway, basically its a special marker comment in a local (on your box) web page:

<!-- saved from url=(0023)http://www.contoso.com/ -->
The (0023) is the the string length of the URL that follows;at a minimum, the string length should indicate the number of characters in the complete URL up to the end of the top-level domain name (.com, .org, .net, and so on for Internet sites).
The comment must contain the Web page's URL immediately following the string length.
The comment must appear in the first 2,048 bytes of the HTML document, within the HTML markup.

Basically, with XP SP2, local webpages now run as untrusted, and that's why you get that nasty security thing at the top of the page now.

Th MOTW enables you to test your active HTML documents in the security zone where you intend the pages to run. Adding the MOTW to your Web pages also enables you to fully test their compatibility with users' security settings.

Here's the documentation and a lot more info on it:


In sum, the MOTW in a page allows the content to run as if it came from the internet zone. Script and active content hasthe same privileges as if you were viewing it from a website.


Testing, Testing, Testing . . . and password reset requests:

In 1915, in his General Theory of Relativity, Einstein basically said that the combined speed of an object's motion through space and time is always exactly equal to the speed of light. In other words, as you travel faster, time "slows down" for you. At the speed of light, time stops.

In 1971, Haefele and Keating flew caesium beam atomic clocks around the world on a commercial jet. When they compared the clocks to identical stationary clocks on the ground, they found that less time had elapsed on the flying clocks - precisely in accordance with Einstein's discoveries from 56 years earlier! Yes, it took that long, and there was a hell of a lot of testing in - between.

There's an important analogy here: In software development, as in quantum physics, theories are wonderful and can be very exciting, but it is only through the rigors of testing that we can determine the facts and capabilities of our product. How much testing have you done on your latest creation? When I was involved in a jointly - funded banking middleware project with Microsoft, I spent several weeks at their testing labs, "learning the ropes." I can tell you categorically that it was a real eye-opener. The staff there is incredibly knowledgeable and professional.

In the most recent MS TechNet Flash newsletter, there is an interesting blurb about password reset requests. I quote:

Help Desk Institute:
Nearly 30 percent of help-desk calls are password related. They are time-consuming for the help desk and thus extremely costly to the company in lost productivity.

Password resets are the second most common reason workers call help desks, accounting for about one in four help desk requests.
At an average cost of $22 per call, that adds up fast, especially for large-scale and midsize organizations.

Giga Information Group:
Consider that each call to the help desk to reset a user's password costs an average of US$15 to $20 and takes an average of 10 minutes. Implementing a speech-enabled, self-service password reset application reduces the cost per call to less than $0.50 and reduces the time needed to complete the call to less than one minute.
Enterprises with more than 5,000 employees most likely will earn a favorable return on their investment in IVR and voice authentication in less than six months.
Consider this scenario: If your support organization (supporting around 20,000 employees) receives an average of 3,000 calls per month, 30 percent of 3,000 is 900 calls per month or 10,800 per year just on password resets. With each password reset incident costing the company $32.50 to $57.50, the yearly grand total is $351,000 to $621,000 for forgotten password requests.

You can learn more about speech-enabled password reset applications for Microsoft Speech Server and test out demo applications here

Do The NDoc Rock!

Anybody who's ever read some of my rants on eggheadcafe.com knows that I am a big proponent of writing documentation for your creations WHILE YOU ARE CREATING. The reasoning for this should be as objective as gravity to anybody who has walked into a new environment and had code thrown at them for which there is ZERO documentation (Sound familiar?).

I wrote a "HOWTO" article recently just to show how easy it is to document your C# classes, then use NDoc and the HTML Help Compiler to create beautiful MSDN style CHM help files with TOC, index and fulltext search (Beats those crappy PDF's by a mile!).

Recently I had to do this again with a solution that I and another dev are working on which has about 21 different class libraries in it. Of those, 75% or more had NO DOCUMENTATION at all. What's worse, a few of the C# ones actually had old "//" style comments but the guys put them in using old C-style double-slashes instead of the built-in triple slash "///<summary... >" tag structure.

I can't stress this enough: If you want to be a professional developer, you must learn to write and create professional documentation AS AN INTEGRAL PART OF EACH OF YOUR PROJECTS.

It cannot be an "afterthought". It must be part of your deliverable! Unless you are totally coddled, you do not work in a vacuum. Other people will need to look at your code. In fact, six months from now, YOU may need to revisit your code.

Enough said. NDoc 1.3.1 now has a very nice new Alpha feature as a new output option called "Linear HTML" -- which essentially puts all your C# documentation into a single HTML file complete with CSS and internal anchor-style hyperlinks. You can save this as MHT, or you can even pull it into MS Word and save it back out as a Word document (some organizations are stupid enough to require Word documentation instead of Full-text searchable CHM). That's in addition to the HTML version, which creates online website of your help that looks and acts almost identical to MSDN online (including that nice "Sync TOC" link), as well as MSDN "CHM", Visual Studio HTML Help 2.0 format, and several other cross-platform choices.

But it all starts at one place - while you are writing the code, with XML comment tags, which you must learn to use correctly.