Response to tomholl:
Thanks for the prompt feedback.
I downloaded the just announced UIP Version 2 last night and pleased to see much improved documentation and improved functionality. Keep up the good work!
Edited to point out this is response to Pete's comments above about application blocks.
Well I'm not sure about "credit" - more like competitive necessity given the inroads the open source (and particularly J2EE) have made into the corporate community. Of course I may be biased having recently left a large corporation that decided to reverse its "two pronged" approach of J2EE and Microsoft and decided to concentrate on one - guess which one lost out! Microsoft HAD to put effort into this area (just like they had to throw away "object-oriented" VB and invent .NET, years after the competition), it's just a shame more effort and quality wasn't put in earlier and after the initial push (some "big league" accounts threatening to move on?) things have gone rather quiet.
I have to disagree with you about this Only being version one of the application blocks. It's more than two years since the first blocks appeared. Kind of shows the real priority of doing a good job I guess.
Yes, in my Response.Redirect comment I was talking UIP. I missed the explanation (which is "negotiable"). Unfortunately I didn't miss the explanation (or lack of responses) to questions like "Have you guys looked at Whidbey and where does this fit in? Does this have any future?" or "Have you looked at the caching application block?" (answer "No"). I guess I was just disappointed at how poor the samples were - you couldn't even use the back or forward buttons with the browser version when I looked at the code.
I think what really upsets me most about Microsoft is the frustration of feeling they are their own worst enemies. I don't think I've known a company where I've found so many good, likeable people who are genuinely passionate about what they do. If I had to join a company I guess Microsoft would be that company. But nobody seems to be controlling the passion. It's a bit like the over-enthusiastic kid who rushes into things without taking 10 seconds to think things through first (over-use of the word "cool" all over this site is another indication to this old fart of the obsession with being "hip" and "now" rather than necessarily taking a bit more time to build quality into something). Microsoft support of CSS and general standards compliance in Internet Explorer has been appalling and too much of the "developer" material turns out to be marketing wishlist rather than reality (got badly burnt on using early MDAC releases, ADC later RDC, cryptography - all stuff that the MSDN articles were implying worked today). If anything I see more and more focus on "simple canned demo's" rather than "real world" issues and problems, even at "developer only - no Powerpoint demo this, we're going to show you code" presentations.
The application blocks seem to have more than their fair share of that "early enthusiasm", although I agree some excellent publications have come out of the exercise (and also agree with all your comments on MSDN). So I'm optimistic that things are getting better in some areas of the company, albeit relieved I'm not having to suffer the pain a colleague currently trying to install BizTalk Server 2004 is
As for ApplicationExceptions - something to do with a mistaken design based around the idea that differentiation between SystemException and ApplicationException would be important and detectable at the "top level" of a program vs the realisation that they stop the object model being as shallow as is ideal while not adding any extra value. Sorry I can't quote you precise chapter and verse - I don't have the book to hand.
Not to be frivolous but the "international" thing that has annoyed me for years (and it's still there in the Longhorn beta) is that you tell the system what country you're in and what language you use and what keyboard layout and then it STILL sets the system clock to something ludicrous like -8.00 GMT so that you have to go in and manually set it after a Windows installation.
OK so maybe it's not that big a deal for people who only install an operating system once in several years but it irks me all the same.
Oh I haven't had a good rant in a long time, so please crave my indulgence
Can we talk "Patterns and Practices" or more specifically "Microsoft Application Blocks"?
A great idea for developers! Reuse! Reduced programming effort! Best of breed guidelines. Nice free PDF books if you don't want to go to a store and buy the real book.
All launched through a neat website with specialist areas on GotDotNet.
Except that different blocks have been developed in isolation with no real communication between the developers of the different blocks.
Want to use the UIP application block? Naive enough to assume it might use the Exception Publishing block or the Logging block or the caching block? Wrong! Can I use the Logging block (with IEF) or the Exception Publishing block together or are they in conflict (apparently so!)
Or how about 'best of breed' guidelines? When I see a program using Response.Redirect when Server.Transfer will work perfectly fine I really have to wonder about the quality of this "best of breed" reusable block I'm taking on board.
How about documentation? Well sometimes it's there. Like the Exception Handling guide. Great stuff about making sure if you throw your own custom exceptions you should inherit from ApplicationException. So today in a code review someone points out to me that the framework developers actually say DON'T inherit from ApplicationException (you can read why in the Framework Volume 1 book Addison-Wesley just published). Doh!
GotDotNet has some specialist areas for the different application blocks but questions and comments often go unanswered or, from my hasty look around one block earlier this week, are responded to with an enthusiastic expression of incredible naivety about real applications. I haven't worked out yet if it's because application block code is written by "ivory tower" architects rather than developers, or is just a lack of understanding about what many of us do in the real world.
Will these blocks just disappear into the ether, as so many other "embarrassments" have done in the past? Or is there any chance of communication between whichever managers decided this was a good idea, and a more consolidated approach to provide something that we'd all be proud to use? Perhaps even code reviews from those interested in using the blocks?