Sunday, September 24, 2006
SoCal Tech Summit - Samples and Notes
I just returned from the Southern California .NET Tech Summit (www.socaltechsummit.com), which is a one-day event that is very well organized and attendees seem to love it. If you are from the L.A. area, you should keep an eye on this event, as it is really worthwhile.
I did two sessions: LINQ and WPF. I have written a lot about these topics, so I am going to keep this post short. You can download the LINQ samples here, and the WPF samples here. For more details on these technologies, also check out previous LINQ posts, and this WPF post.
Also, if you are interested in a LINQ article of mine, check out this URL: http://www.markusegger.com/Articles/Article.aspx?quickid=0603021. More WPF stuff is coming. We are also getting pretty close to launching the www.WPFExperts.com community portal. Not quite there yet, but soon...
One a side-node, I enjoyed doing my sessions there. Especially the WPF session was well attended and a lot of fun to present. And I tied Rocky Lhotka for the best session of the conference. Yeah! :-)
Posted @ 11:53 AM by Egger, Markus (email@example.com) -
Wednesday, September 20, 2006
Microsoft's Error Messages Drive Me Ballistic!
I find that there are few things I encounter in my daily developer life that are as frustrating as the error messages Microsoft chooses to display to me. I have to admit that I by no means are super-great in creating error messages, but what Microsoft puts us through at time seems to be deliberately insulting and sadistic. Just right now for instance, I have already spent 3 hours trying to resolve a version conflict in a Visual Studio solution. The error message I get is:
"Found conflicts between different versions of the same dependent assembly."
That is all fine, but how about telling me which f-ing one!?!?! I mean, could it be such a leap of mind to think that whenever one displays an error message like this, it would also be good to provide some additional information such as the name of the components involved? Couldn't they simply answer the questions "what?" and "why?" as best as possible? It seems almost trivial in this case. After all, there gotta be some assembly of a certain name that has a reference to another assembly of a certain name, that a third assembly of a certain name tries to access too. It doesn't seem to take a rocket scientist to figure out that this information may be useful.
And to add insult to injury, I can even double-click the error message to add a setting to the app.config file which adds a binding redirect, so whichever assemblies are trying to use the one that causes the conflict will both use the latest version. That is nice, but it doesn't help me, since I do not need to know the name of the assembly that is being used (nor does the redirect help me in this case), but instead I need to know the names of the assemblies that are trying to use it. But no, no such chance. I will probably have to write myself a tool to figure this one out. Argh.
And there are many such examples. A little while back, I tried to install a video decoder card on a media center PC. There was some issue, and I was told about it via the following "useful" error message:
So the message says "Decoder Error" and "The video decoder has...". And that's it. The decoder has what?!?!? Are they actually doing this on purpose?
There are tons of similar examples. This gotta change! What it takes is a mind-set shift at Microsoft, similar to what they did with the security stuff. As long as this is not an issue that is actively being worked on and that everyone at Microsoft is made aware of, this will not improve.
It is unbelievable how much time I waste due to this sort of stuff. It is ironic to think that Microsoft is spending billions on making developers more productive. How nice, there now is a smart-tag on the Visual Studio UI designers. That is great, but you know what: It saves me a few seconds. Giving me better error messages would remove my main productivity hurdle...
Posted @ 5:47 PM by Egger, Markus (firstname.lastname@example.org) -