<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Steve Nyholm</title><link>http://blogs.vertigosoftware.com/snyholm/default.aspx</link><description>Software Engineer</description><dc:language>en-US</dc:language><generator>CommunityServer 1.1 (Build: 1.1.0.50615)</generator><item><title>javascript : void(0)</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/09/29/3831.aspx</link><pubDate>Sat, 30 Sep 2006 03:09:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3831</guid><dc:creator>snyholm</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3831.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3831</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Verdana&gt;You see "&lt;FONT face="Courier New"&gt;javascript&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;:&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;void(0)&lt;/FONT&gt;" all over the place, especially as the &lt;FONT face="Courier New"&gt;href&lt;/FONT&gt; value for a link that uses the &lt;FONT face="Courier New"&gt;onclick&lt;/FONT&gt; event for functionality.&amp;nbsp;&amp;nbsp;Ever wondered exactly what this line of javascript does?&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;According to the &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/a33kc5c5.aspx"&gt;&lt;FONT face=Verdana&gt;MSDN JScript 8.0 Reference&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana&gt;,&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;EM&gt;"The void operator evaluates its expression, and returns undefined. It is most useful in situations where you want an expression evaluated but do not want the results visible to the remainder of the script."&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;FONT face=Verdana&gt;As an added bonus, here are some more client-side references (from &lt;FONT face=Verdana&gt;w3schools)&lt;/FONT&gt;:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P dir=ltr&gt;&lt;FONT face=Verdana&gt;&lt;A href="http://www.w3schools.com/tags/ref_entities.asp"&gt;HTML 4.01 Entities Reference&lt;/A&gt;&lt;BR&gt;&lt;A href="http://www.w3schools.com/tags/ref_urlencode.asp"&gt;HTML URL-encoding Reference&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3831" width="1" height="1"&gt;</description></item><item><title>Simple Exceptions</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/09/27/Simple_Exceptions.aspx</link><pubDate>Thu, 28 Sep 2006 02:57:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3798</guid><dc:creator>snyholm</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3798.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3798</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Verdana&gt;We all know to organize our try…catch blocks with the most specific exceptions first, right?&amp;nbsp; Right???&amp;nbsp; Of course!&amp;nbsp; (Recommended reading:&amp;nbsp;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/exceptdotnet.asp"&gt;Exception Management Architecture Guide&lt;/A&gt;&amp;nbsp;and&amp;nbsp;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconBestPracticesForHandlingExceptions.asp"&gt;Best Practices for Handling Exceptions&lt;/A&gt;.)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;But how do you actually tell which exceptions are more specific?&amp;nbsp; Look up the inheritance hierarchy of the exception classes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;You could use the object browser:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;IMG src="/photos/snyholm/images/3797/original.aspx"&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Or the MSDN (&lt;A href="http://msdn2.microsoft.com/en-us/library/ms229335.aspx"&gt;.NET Framework Class Library Online Reference&lt;/A&gt;):&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;IMG src="/photos/snyholm/images/3796/original.aspx"&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;How do you tell which exceptions you need?&amp;nbsp; Look up the .NET FCL classes in the MSDN &lt;A href="http://msdn2.microsoft.com/en-us/library/ms229335.aspx"&gt;.NET Framework Class Library Online Reference&lt;/A&gt;.&amp;nbsp; The class description usually tells you which exceptions to watch for.&amp;nbsp; For example, the "&lt;EM&gt;The &lt;/EM&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/system.net.httpwebrequest.aspx"&gt;&lt;EM&gt;HttpWebRequest&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; class throws a WebException when errors occur while accessing a resource.&lt;/EM&gt;"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Here's a quick code example.&amp;nbsp; &lt;EM&gt;Now, you only want to include the exceptions that could actually occur in&amp;nbsp;your code.&amp;nbsp; I put a lot of exceptions in here just to&amp;nbsp;make a point.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;static&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; DownloadFileContents(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; fileUrl) &lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string&lt;/FONT&gt;&lt;FONT size=2&gt; contents = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;StreamReader reader = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;HttpWebRequest&amp;nbsp;webRequest;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;HttpWebResponse webResponse = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;webRequest = WebRequest.Create(fileUrl) &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; HttpWebRequest;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt; (webRequest != &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;webResponse = webRequest.GetResponse() &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; HttpWebResponse;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt; (webResponse != &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;reader = &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; StreamReader(webResponse.GetResponseStream());&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;contents = reader.ReadToEnd();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // inheritance hierarchy = WebException : InvalidOperationException : SystemException : Exception&amp;nbsp;&lt;BR&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // this will catch all unhandled exceptions&amp;nbsp;that are&amp;nbsp;of type WebException&amp;nbsp;or&amp;nbsp;inherit from&amp;nbsp;it&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;catch&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#008000&gt; &lt;FONT color=#000000&gt;(System.Net.WebException ex)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Log and handle exception&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#000000&gt; }&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // inheritance hierarchy = InvalidOperationException : SystemException : Exception&amp;nbsp;&lt;BR&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // this will catch all unhandled exceptions&amp;nbsp;that are&amp;nbsp;of type InvalidOperationException&amp;nbsp;or&amp;nbsp;inherit from&amp;nbsp;it&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;catch&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#008000&gt; &lt;FONT color=#000000&gt;(System.InvalidOperationException ex)&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#000000&gt; {&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Log and handle exception&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#000000&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // inheritance hierarchy = SecurityException : SystemException : Exception&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // this will catch all unhandled exceptions&amp;nbsp;that are&amp;nbsp;of type SecurityException&amp;nbsp;or&amp;nbsp;inherit from&amp;nbsp;it&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; (System.Security.SecurityException ex)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Log and handle exception&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // inheritance hierarchy = ArgumentException : SystemException : Exception&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // this will catch all unhandled exceptions&amp;nbsp;that are&amp;nbsp;of type ArgumentException&amp;nbsp;or&amp;nbsp;inherit from&amp;nbsp;it&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; (ArgumentException ex)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Log and handle exception&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // inheritance hierarchy = OutOfMemoryException : SystemException : Exception&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // this will catch all unhandled exceptions&amp;nbsp;that are&amp;nbsp;of type OutOfMemoryException&amp;nbsp;or&amp;nbsp;inherit from&amp;nbsp;it&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; (OutOfMemoryException ex)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Log and handle exception&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // inheritance hierarchy = SystemException : Exception&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // this will catch all unhandled exceptions&amp;nbsp;that are&amp;nbsp;of type SystemException&amp;nbsp;or&amp;nbsp;inherit from&amp;nbsp;it&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; (System.SystemException ex)&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Log and handle exception&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;// inheritance hierarchy = Exception&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // this will catch all unhandled exceptions &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; (Exception ex)&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Log and handle exception&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; finally&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt; (reader != &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;reader.Close();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt; (webResponse != &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;)&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;webResponse.Close();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; contents;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3798" width="1" height="1"&gt;</description></item><item><title>New Microsoft Developer Certs: MCTS, MCPD, MCITP... replacing MCAD, MCSD, MCDBA</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/09/27/3793.aspx</link><pubDate>Wed, 27 Sep 2006 23:10:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3793</guid><dc:creator>snyholm</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3793.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3793</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;With the release of ASP.NET 2.0 and SQL Server 2005, Microsoft released a new series of certificates and… new acronyms.&amp;nbsp; Here we go for a&lt;/FONT&gt;&lt;FONT face=Verdana color=#000000&gt;nother round on the &lt;A href="http://searchvb.techtarget.com/originalContent/0,289142,sid8_gci1109668,00.html"&gt;certification treadmill&lt;/A&gt;.&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000000&gt;I’ve been on that treadmill a few times…&amp;nbsp; MCSD on .NET, MCAD, MCSD on VB6, MCDBA, and even an MCP+SB!&amp;nbsp; The&amp;nbsp;&lt;A href="http://www.microsoft.com/learning/mcp/newgen/default.mspx"&gt;Microsoft Learning&lt;/A&gt;&amp;nbsp;website is a good starting point for looking into the certification maze.&amp;nbsp; I took a look through the new tests and the new acronyms.&amp;nbsp; For most web developers getting&amp;nbsp;their first certification, this looks like a good order to take&amp;nbsp;the tests en-route to the premier MCPD Enterprise Applications Developer. (upgrade paths are at the bottom)&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face=Verdana size=5&gt;&lt;STRONG&gt;Fresh Certification Path&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;1. MCP&lt;/STRONG&gt; - Passing any one test will get you the &lt;A href="http://www.microsoft.com/learning/mcp/mcp/default.asp"&gt;MCP&lt;/A&gt;&amp;nbsp;certification.&amp;nbsp; Why not start with the foundation test?&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;Exam &lt;STRONG&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-536.asp"&gt;70–536&lt;/A&gt;&lt;/STRONG&gt;: TS: Microsoft .NET Framework 2.0 - Application Development Foundation&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;2. MCTS:Web&lt;/STRONG&gt; - Then take this test to&amp;nbsp;get the &lt;A href="http://www.microsoft.com/learning/mcp/mcts/webapps/default.mspx"&gt;Technology Specialist: .NET Framework 2.0 Web Applications&lt;/A&gt; certification:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;Exam &lt;STRONG&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-528.asp"&gt;70–528&lt;/A&gt;&lt;/STRONG&gt;: TS: Microsoft .NET Framework 2.0 - Web-Based Client Development&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;3.&amp;nbsp;MCPD:Web&lt;/STRONG&gt; - &amp;lt;optional&amp;gt; To quickly get another acronym,&amp;nbsp;take this&amp;nbsp;test to add the &lt;A href="http://www.microsoft.com/learning/mcp/mcpd/webdev/default.mspx"&gt;Professional Developer: Web Developer&lt;/A&gt; certification:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;Exam &lt;STRONG&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-547.asp"&gt;70-547&lt;/A&gt;&lt;/STRONG&gt;: PRO: Designing and Developing Web Applications by Using the Microsoft .NET Framework &lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;4. MCTS:Distributed &lt;/STRONG&gt;- Then take this one test to add the&amp;nbsp;&lt;A href="http://www.microsoft.com/learning/mcp/mcts/distapps/default.mspx"&gt;Technology Specialist: .NET Framework 2.0 Distributed Applications&lt;/A&gt;&amp;nbsp;certification:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;Exam &lt;STRONG&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-529.asp"&gt;70–529&lt;/A&gt;&lt;/STRONG&gt;: TS: Microsoft .NET Framework 2.0 - Distributed Application Development &lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;FONT face=Verdana&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;5. MCTS:Win &lt;/STRONG&gt;- Then take&amp;nbsp;the next&amp;nbsp;test to add the&amp;nbsp;&lt;A href="http://www.microsoft.com/learning/mcp/mcts/winapps/default.mspx"&gt;Technology Specialist: .NET Framework 2.0&amp;nbsp;Windows Applications&lt;/A&gt;&amp;nbsp;certification:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;Exam &lt;STRONG&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-526.asp"&gt;70–526&lt;/A&gt;&lt;/STRONG&gt;: TS: Microsoft .NET Framework 2.0 - Windows-Based Client Development&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;6. MCPD:Enterprise&lt;/STRONG&gt; - Finally, add this test for the premier &lt;A href="http://www.microsoft.com/learning/mcp/mcpd/entapp/default.mspx"&gt;Professional Developer: Enterprise Applications Developer&lt;/A&gt;&amp;nbsp;certification:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;Exam &lt;STRONG&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-549.asp"&gt;70–549&lt;/A&gt;&lt;/STRONG&gt;: PRO: Designing and Developing Enterprise Applications by Using the Microsoft .NET Framework&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Verdana size=5&gt;&lt;STRONG&gt;SQL Server&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;SQL Server elective tests were not included in this round of developer certification.&amp;nbsp; In fact,&amp;nbsp;no "elective" tests were included.&amp;nbsp;&amp;nbsp;There is a separate certificate for SQL Server.&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;MCTS:SQL&lt;/STRONG&gt; - Passing this test will get you the &lt;A href="http://www.microsoft.com/learning/mcp/mcts/sql/default.mspx"&gt;Technology Specialist: SQL Server 2005&lt;/A&gt;&amp;nbsp; certification:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;Exam &lt;STRONG&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-431.asp"&gt;70–431&lt;/A&gt;&lt;/STRONG&gt;: TS: Microsoft SQL Server 2005 - Implementation and Maintenance&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;MCITP:SQL Dev&lt;/STRONG&gt; - Then add these two tests for the &lt;A href="http://www.microsoft.com/learning/mcp/mcitp/dbdev/default.mspx"&gt;IT Professional: Database Developer&lt;/A&gt; certification:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;Exam &lt;STRONG&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-441.asp"&gt;70–441&lt;/A&gt;&lt;/STRONG&gt;: PRO: Designing Database Solutions by Using Microsoft SQL Server 2005 Open License 6.0&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;Exam &lt;STRONG&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-442.asp"&gt;70–442&lt;/A&gt;&lt;/STRONG&gt;: PRO: Designing and Optimizing Data Access by Using Microsoft SQL Server 2005&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;There are two other paths for SQL Server certification: &lt;A href="http://www.microsoft.com/learning/mcp/mcitp/dbadmin/default.mspx"&gt;MCITP:DBA&lt;/A&gt; and &lt;A href="http://www.microsoft.com/learning/mcp/mcitp/bid/default.mspx"&gt;MCITP:Business Intelligence Developer&lt;/A&gt;&amp;nbsp;(data warehousing).&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Verdana size=5&gt;&lt;STRONG&gt;Other Certs&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;There are also cert paths for &lt;A href="http://www.microsoft.com/learning/mcp/mcts/mobility/default.mspx"&gt;MCTS:Mobile&lt;/A&gt;&amp;nbsp;(1 test), &lt;A href="http://www.microsoft.com/learning/mcp/mcts/biztalk/default.mspx"&gt;MCTS:BizTalk&lt;/A&gt;&amp;nbsp;(1 test), &lt;A href="http://www.microsoft.com/learning/mcp/mcts/livecomm/default.mspx"&gt;MCTS:Office Live Communications Server&lt;/A&gt;&amp;nbsp;(1 test), and &lt;A href="http://www.microsoft.com/learning/mcp/mcpd/windev/default.mspx"&gt;MCPD:Win&lt;/A&gt; (1 more test).&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Verdana size=5&gt;&lt;STRONG&gt;Upgrade Paths&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;Upgrade or start over?&amp;nbsp;&lt;/STRONG&gt; What tests do you take for the new certs if you have already passed some .NET 1.0 certification exams?&amp;nbsp; Well, that's going to be your decision.&amp;nbsp; Take some pride in the fact that you're already certified on the .NET 1.0 platform, so adding .NET 2.0 certification will show breadth of skills, ability to learn, and the motivation to stay current in your skills.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;You may decide that you want to review all of the material and &lt;EM&gt;take all of the exams &lt;/EM&gt;for the new certs... or you can take a pragmatic approach and get the new certs using the &lt;EM&gt;upgrade exams&lt;/EM&gt;.&amp;nbsp; If this describes you, count the total # of tests you'd need for each approach and take the approach with the fewer tests.&amp;nbsp; If you're an acronym collector, use the approach that will give you the most certifications.&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;Here are the upgrade paths:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;MCTS:Web&lt;/STRONG&gt; - exam &lt;A href="http://www.microsoft.com/learning/exams/70-551.asp"&gt;&lt;STRONG&gt;70-551&lt;/STRONG&gt;&lt;/A&gt;, upgrade from &lt;STRONG&gt;MCAD&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;MCTS:Win&lt;/STRONG&gt; - exam &lt;STRONG&gt;&lt;A href="http://www.microsoft.com/learning/exams/70-552.asp"&gt;70-552&lt;/A&gt;&lt;/STRONG&gt;, upgrade from &lt;STRONG&gt;MCAD&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;MCPD:Enterprise&lt;/STRONG&gt; - exams &lt;A href="http://www.microsoft.com/learning/exams/70-553.asp"&gt;&lt;STRONG&gt;70-553&lt;/STRONG&gt;&lt;/A&gt; &amp;amp; &lt;A href="http://www.microsoft.com/learning/exams/70-554.asp"&gt;&lt;STRONG&gt;70-554&lt;/STRONG&gt;&lt;/A&gt;, upgrade from &lt;STRONG&gt;MCSD&lt;/STRONG&gt; (yes that is 2 tests to upgrade your MCSD)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;STRONG&gt;MCITP:DBA&lt;/STRONG&gt; - exam &lt;A href="http://www.microsoft.com/learning/exams/70-447.asp"&gt;&lt;STRONG&gt;70-447&lt;/STRONG&gt;&lt;/A&gt;, upgrade from &lt;STRONG&gt;MCDBA&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/FONT&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3793" width="1" height="1"&gt;</description></item><item><title>Javascript - capturing onsubmit when calling form.submit()</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/09/27/3788.aspx</link><pubDate>Wed, 27 Sep 2006 22:38:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3788</guid><dc:creator>snyholm</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3788.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3788</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Verdana&gt;I was recently asked: "Why doesn't the form.onsubmit event get fired when I submit my form using javascript?"&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;The answer: Current browsers do not adhere to this part of the html specification.&amp;nbsp; The event only fires when it is activated by a user - and does not fire when activated by code.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;The W3C &lt;/FONT&gt;&lt;A href="http://www.w3.org/TR/2001/WD-DOM-Level-2-HTML-20011210/html.html#ID-76767676"&gt;&lt;FONT face=Verdana&gt;Document Object Model (DOM) Level 2 HTML Specification&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;says that submit() "submits the form. It performs the same action as a submit button." &lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;However, this browser non-compliance is documented in the &lt;/FONT&gt;&lt;A href="http://www.w3.org/2001/12/DOM-Level-2-issues#i6"&gt;&lt;FONT face=Verdana&gt;DOM Level 2 HTML Issues List&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana&gt;.&amp;nbsp; The Resolution: "Unfortunately, given the differences between implementations, it was not possible to find a common ground on this issue. No changes were in the specification. You cannot rely on having an event when invoking the submit() method."&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;The &lt;/FONT&gt;&lt;A href="http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/index.html"&gt;&lt;FONT face=Verdana&gt;Mozilla&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;Client-Side JavaScript Reference says that onsubmit&amp;nbsp;"Executes JavaScript code when a submit event occurs; that is, when a user submits a form."&amp;nbsp; Notice that it says user action... this excludes javascript code.&amp;nbsp; (This appears to be the same as the &lt;/FONT&gt;&lt;A href="http://docs.sun.com/source/816-6408-10/handlers.htm#1121163"&gt;&lt;FONT face=Verdana&gt;Netscape/Sun&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;reference.)&lt;BR&gt;&amp;nbsp;&lt;BR&gt;The &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onsubmit.asp"&gt;&lt;FONT face=Verdana&gt;Microsoft&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;reference is more explicit, "The submit method does not invoke the onsubmit event handler."&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT face=Verdana&gt;More references:&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT face=Verdana&gt;Many people have written on this topic, including &lt;/FONT&gt;&lt;/EM&gt;&lt;A href="http://www.codestore.net/store.nsf/unid/DOMM-4QS3RL/"&gt;&lt;EM&gt;&lt;FONT face=Verdana&gt;codestore&lt;/FONT&gt;&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;&lt;FONT face=Verdana&gt;&amp;nbsp;and &lt;/FONT&gt;&lt;/EM&gt;&lt;A href="http://www.alexking.org/blog/2003/10/01/javascript-onsubmit-handler/#"&gt;&lt;EM&gt;&lt;FONT face=Verdana&gt;alexking&lt;/FONT&gt;&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;&lt;FONT face=Verdana&gt;.&amp;nbsp; &lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.lookuptables.com/"&gt;&lt;EM&gt;&lt;FONT face=Verdana&gt;ASCII Lookup Table&lt;/FONT&gt;&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;&lt;FONT face=Verdana&gt; (by the way, ASCII stands for American Standard Code for Information Interchange)&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.webmaster-talk.com/javascript-forum/40661-javascript-works-ie-but-not.html"&gt;&lt;FONT face=Verdana&gt;&lt;EM&gt;Discussion of capturing the ASCII key code value pressed in Firefox and Internet Explorer 6&lt;/EM&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/A&gt;&lt;FONT face=Verdana&gt;Here is a quick code example that demonstrates one workaround for this problem:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;form&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="searchForm"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="searchForm"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;method&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="get"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;onsubmit&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;="return validateMyForm()"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&amp;lt;!-- &lt;BR&gt;Associate the onsubmit event handler with a javascript validation function.&lt;BR&gt;This function will return a boolean value. This return value determines whether the form is submitted or not.&lt;BR&gt;--&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;label&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Search: &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;label&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;input&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="textboxSearch"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="textboxSearch"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;maxlength&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="128"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;type&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="text"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;select&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="selectFilter"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="selectFilter"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;onkeypress&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;="return handleKeystroke(event)"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;option&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;selected&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="First"&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt;First&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;option&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;option&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Second"&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Second&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;option&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;option&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Third"&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Third&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;option&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;option&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Fourth"&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Fourth&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;option&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;option&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Fifth"&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Fifth&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;option&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&amp;lt;!--&lt;BR&gt;Associate the onkeypress event with a javascript function, passing in the event object. &lt;BR&gt;This function will attempt to submit the form if the Enter key is pressed.&lt;BR&gt;--&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;input&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;class&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="submitButton"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;type&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="submit"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Go"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;title&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Go"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;form&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;SCRIPT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;language&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="JavaScript"&amp;gt;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;//This function handles the onkeypress event.&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;//If the Enter key is pressed, it attempts to submit the form.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;function&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; handleKeystroke(e)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; keyPressed;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Browser compatibility check&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; (document.all)&amp;nbsp;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Browser used: Internet Explorer 6&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;keyPressed = e.keyCode;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;alert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;'handleKeystroke: IE property: keyCode'&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&amp;nbsp;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;else&amp;nbsp;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#008000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Browser used: Firefox&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;keyPressed = e.which;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;alert(&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000&gt;'handleKeystroke: FF property: which'&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;);&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;alert(&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000&gt;'handleKeystroke: key=' &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;+ keyPressed);&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//13 = ASCII code for Enter key&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT face="Courier New"&gt; (keyPressed == 13)&amp;nbsp;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;alert(&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000&gt;'handleKeystroke: pressed Enter'&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;);&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Directly calling document.searchForm.submit() will not fire the form's onsubmit event handler.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//Call a javascript helper funtion that simulates that event.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;submitMyForm();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;alert(&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000&gt;'handleKeystroke: pressed another key'&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;);&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;FONT face="Courier New" size=2&gt;//This function performs validation and any other pre-form-submit tasks.&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;//The form will only be submitted if this function returns true.&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;function&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; validateMyForm()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var&lt;/FONT&gt;&lt;FONT size=2&gt; isValid = confirm(&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;'Do you want to submit the form?'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;alert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;'validateMyForm: isValid = ' &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;+ isValid);&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; isValid;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;//This function simulates the onsubmit event handler.&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;//This function should be called by javascript code instead of document.MyFormName.submit().&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;function&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; submitMyForm()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//first, call the same validation function used in the form.onsubmit event handler&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; thisresult = validateMyForm();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;alert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;'submitMyForm: validateMyForm returned: ' &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;+ thisresult);&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;//if the function returned true, submit the form&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; (thisresult)&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;alert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;'submitMyForm: javascript will submit form'&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;document.searchForm.submit();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;SCRIPT&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3788" width="1" height="1"&gt;</description></item><item><title>Javascript trick: closing a Firefox tab</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/09/26/3773.aspx</link><pubDate>Tue, 26 Sep 2006 18:36:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3773</guid><dc:creator>snyholm</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3773.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3773</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Verdana&gt;Find out that the plain ol'&lt;/FONT&gt; &lt;FONT face="Courier New" color=#0000ff&gt;window.close()&lt;/FONT&gt; &lt;FONT face=Verdana&gt;doesn't actually close the &lt;EM&gt;window&lt;/EM&gt; if the window is a tab in Firefox?&amp;nbsp; Basically, it doesn't consider the tab to be opened by script... so you need to trick the browser into thinking that hte page &lt;EM&gt;was&lt;/EM&gt; opened by script, then close it.&amp;nbsp; &lt;A href="http://www.interwebby.com/blog/2006/02/04/3/"&gt;Interwebby.com&lt;/A&gt;&amp;nbsp;came up with this nifty&amp;nbsp;workaround: &lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff&gt;&amp;lt;script language="javascript" type="text/javascript"&amp;gt;&lt;BR&gt;&lt;STRONG&gt;function&lt;/STRONG&gt; closeWindow() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.open('','_parent','');&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;window.close();&lt;BR&gt;}&lt;BR&gt;&amp;lt;/script&amp;gt; &lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3773" width="1" height="1"&gt;</description></item><item><title>AMAZING CSS website</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/09/19/AMAZING_CSS_website.aspx</link><pubDate>Wed, 20 Sep 2006 00:46:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3724</guid><dc:creator>snyholm</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3724.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3724</wfw:commentRss><description>&lt;P&gt;&lt;SPAN&gt;&lt;A href="http://www.stunicholls.myby.co.uk/"&gt;http://www.stunicholls.myby.co.uk/&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;I ran across this website while debugging a horizontal navigation menu that used &amp;lt;LI&amp;gt; elements to hold the data and CSS to apply the horizontal formatting.&amp;nbsp; The old menu was great - but we needed to modify it to support &lt;a href="http://vertigoblogs/snyholm/archive/2006/08/29/3459.aspx"&gt;RTL&lt;/A&gt;.&amp;nbsp; When we flipped the page, the menu didn't flip with it. :-(&amp;nbsp; Thanks to &lt;A href="http://www.webreference.com/programming/css_lists/index.html"&gt;this webreference tutorial&lt;/A&gt; for a reference to that AMAZING CSS website!&amp;nbsp; And the answer to today's puzzle.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Along the way, I also picked up &lt;A href="http://www.ironspider.ca/adv/cssproperties/dimensions.htm"&gt;this reference that explained the padding/margin property shortcuts&lt;/A&gt;.&amp;nbsp; As well as one of those simple box pictures to remind you exactly where the margin, padding, border and content really sit.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;And &lt;A href="http://www.sitepoint.com/article/browser-specific-css-hacks"&gt;this reference for browser-specific CSS hacks &lt;/A&gt;and references to interesting websites like &lt;A href="http://www.thecounter.com/stats/"&gt;browser stats for the internet&lt;/A&gt;&amp;nbsp;(81% for IE6 and 10% for Firefox), &lt;A href="http://browsers.evolt.org/"&gt;an archive of installers for old versions of browsers&lt;/A&gt;, and &lt;A href="http://www.browsercam.com/"&gt;this tool for sending you screenshots of your website as viewed by different browsers &amp;amp; platforms&lt;/A&gt;.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3724" width="1" height="1"&gt;</description></item><item><title>Web.config: &amp;quot;&amp;amp;&amp;quot; Error</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/08/30/3477.aspx</link><pubDate>Thu, 31 Aug 2006 00:17:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3477</guid><dc:creator>snyholm</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3477.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3477</wfw:commentRss><description>&lt;P&gt;The other day, I tried to debug my code (F5).&amp;nbsp; But the code would not run.&amp;nbsp; I was getting this message in a dialog box:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;&lt;EM&gt;Error while trying to run project: Unable to start debugging on the web server. Server side-error occurred on sending debug HTTP request. &lt;BR&gt;&lt;BR&gt;Make sure the server is operating correctly. Verify there are no syntax errors in web.config by doing a Debug.Start Without Debugging. You may also want to refer to the ASP.NET and ATL Server debugging topic in the online documentation.&lt;/EM&gt; &lt;/BLOCKQUOTE&gt;
&lt;P&gt;OK, so I start the project without debugging (CTRL + F5).&amp;nbsp; I just get a vague error that locates the problem in my web.config app settings.&amp;nbsp; &lt;A href="http://bernardstudios.com/archive/2004/07/17/288.aspx"&gt;Some people&lt;/A&gt;&amp;nbsp;get the message that the expected token is 'SEMICOLON'.&amp;nbsp; Turns out, the error was caused by having a ampersand ("&amp;amp;") in the setting value.&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;add&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;key&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Setting3"&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Value3 &lt;FONT&gt;&lt;U&gt;&lt;STRONG&gt;&amp;amp;&lt;/STRONG&gt;&lt;/U&gt;&lt;/FONT&gt; Value3.1"&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/FONT&gt;
&lt;P&gt;This was easily fixed by HTML-encoding the ampersand:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;add&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;key&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Setting3"&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Value3 &lt;FONT&gt;&lt;STRONG&gt;&lt;U&gt;&amp;amp;amp;&lt;/U&gt;&lt;/STRONG&gt;&lt;/FONT&gt; Value3.1"&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;When would you get this error?&amp;nbsp; A common example is a setting that stores a URL with querystring values:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;add&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;key&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="MyUrl"&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="http://www.mysite.com/myapp/mypage?value1=abc&lt;FONT&gt;&lt;U&gt;&lt;STRONG&gt;&amp;amp;&lt;/STRONG&gt;&lt;/U&gt;&lt;/FONT&gt;value2=xyz"&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;/&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;For more web.config errors, check out this MSDN Support Topic: &lt;BR&gt;&lt;A href="http://support.microsoft.com/kb/306172"&gt;&lt;EM&gt;INFO: Common Errors When You Debug ASP.NET Applications in Visual Studio .NET&lt;/EM&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;/A&gt;The application error went a little something like this:&lt;/P&gt;
&lt;P&gt;
&lt;HR&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;
&lt;HR&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;FONT face=Verdana color=#ff0000 size=5&gt;Server Error in '/MyWebApp' Application&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;
&lt;HR&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#a52a2a size=4&gt;&lt;EM&gt;Configuration Error&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;Description:&lt;/STRONG&gt; An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately. &lt;BR&gt;&lt;BR&gt;&lt;B&gt;Parser Error Message: &lt;/B&gt;An error occurred while parsing EntityName. Line 8, position 45.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Source Error:&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;BR&gt;&lt;BR&gt;
&lt;TABLE bgColor=#ffffcc&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;CODE&gt;&lt;PRE&gt;Line 6:          &amp;lt;add key="Setting1" value="Value1.1" /&amp;gt;
Line 7:          &amp;lt;add key="Setting2" value="Value2 or 2.1" /&amp;gt;
&lt;FONT color=red&gt;Line 8:          &amp;lt;add key="Setting3" value="Value3 &amp;amp; Value3.1" /&amp;gt;        
&lt;/FONT&gt;Line 9:          &amp;lt;add key="Setting4" value="Value4" /&amp;gt;        
Line 10:         &amp;lt;add key="Setting5" value="Value5" /&amp;gt; &lt;/PRE&gt;&lt;/CODE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;B&gt;Source File: &lt;/B&gt;C:\metro\v2.4\ESD\Src\DP Test Harness\TestMetroAddToLocker\web.config&lt;B&gt; &amp;nbsp;&amp;nbsp; Line: &lt;/B&gt;8 &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3477" width="1" height="1"&gt;</description></item><item><title>Keyboard Shortcuts Reference</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/08/30/Keyboard_Shortcuts_Reference.aspx</link><pubDate>Wed, 30 Aug 2006 20:58:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3475</guid><dc:creator>snyholm</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3475.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3475</wfw:commentRss><description>&lt;P&gt;If you like keyboard shortcuts, you'll love this handy reference: &lt;A href="http://www.seoconsultants.com/windows/keyboard/"&gt;http://www.seoconsultants.com/windows/keyboard/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;For example, here's one I didn't know before: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;[Windows Key] + [Pause/Break]&lt;/STRONG&gt;&amp;nbsp;opens the System Properties dialog box (aka My Computer Properties).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Here's another great resource:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.codinghorror.com/blog/archives/000378.html"&gt;http://www.codinghorror.com/blog/archives/000378.html&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3475" width="1" height="1"&gt;</description></item><item><title>Scroll clickey in Visual Studio 2005</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/08/29/Scoll_clickey_in_Visual_Studio_2005.aspx</link><pubDate>Wed, 30 Aug 2006 02:02:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3468</guid><dc:creator>snyholm</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3468.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3468</wfw:commentRss><description>&lt;P&gt;It's the little things in life... &lt;/P&gt;
&lt;P&gt;One nice feature of the Visual Studio 2005 IDE is the improved ability to handle windows.&amp;nbsp; You can still tile horizontally and vertically as with previous versions.&amp;nbsp; They added more features to the file tab's context menu.&amp;nbsp; They also added the ability to close a window without needing to click the little "X" or selecting "Close" from the context menu.&amp;nbsp; Simply click on the file tab with the scroll button.&amp;nbsp; Yes, press the&amp;nbsp;middle wheel&amp;nbsp;button... and poof!&amp;nbsp; The window is closed.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;IMG src="/photos/snyholm/images/3467/original.aspx"&gt;&lt;/P&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3468" width="1" height="1"&gt;</description></item><item><title>ASP.NET caching</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/08/29/3464.aspx</link><pubDate>Wed, 30 Aug 2006 01:37:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3464</guid><dc:creator>snyholm</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3464.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3464</wfw:commentRss><description>&lt;P&gt;There are a lot of good articles and tutorials about caching out there.&amp;nbsp; Here are some notes I've been saving on the topic...&lt;/P&gt;
&lt;P&gt;On a very simple level, there are two methods of caching:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Output Cache for storing frequently requested pages 
&lt;LI&gt;The .NET Cache API for storing arbitrary data&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Output Cache&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Output caching is extremely fast.&amp;nbsp; However, when using output caching, the code-behind is not re-run for each request.&amp;nbsp; Dynamic data will not be displayed.&amp;nbsp; The server saves a copy of the fully built page (response) and will return that saved copy for each request.&amp;nbsp; You can use parameters to generate a set of cached pages/controls.&amp;nbsp; For example, if you have a querystring parameter with 5 different values, you can set up output caching to save those 5 pre-rendered pages.&amp;nbsp; Output caching is typically declared in the markup.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff&gt;&amp;lt;%@OutputCache Duration="240" VaryByParam="none" %&amp;gt;&lt;BR&gt;&amp;lt;%@OutputCache Duration="240" VaryByParam="GetOrPostVariableName" %&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;.NET Cache API&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The Cache API is very versatile and lets you cache data from your code.&amp;nbsp; The typical formula for caching is:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Get data from cache 
&lt;LI&gt;If no data was returned, get the data from the resources (database query, file access, etc.) and store the data in cache&lt;/LI&gt;&lt;/OL&gt;&lt;FONT color=#008000 size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;// Check to see if&amp;nbsp;the value is cached&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; cachedValue = HttpContext.Current.Cache["CacheKey"] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; String;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if &lt;/FONT&gt;&lt;FONT size=2&gt;(cachedValue != &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp;&amp;amp; cachedValue != &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;.Empty)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Perform the resource intensive operation&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#000000&gt;ca&lt;/FONT&gt;&lt;FONT color=#000000&gt;chedValue = GetValue();&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Insert the value into cache&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpContext.Current.Cache.Insert("CacheKey", cachedValue, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;, DateTime.Now.AddMinutes(240), TimeSpan.Zero);&lt;BR&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New" color=#008000&gt;// Use cachedValue&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;STRONG&gt;Application object&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Another option for caching is to use the Application object, a common trick from “Classic ASP”.&amp;nbsp; However, using the cache API will provide you with more features.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;So when do you use cache?&amp;nbsp;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;If&amp;nbsp;data can be used more than once 
&lt;LI&gt;If data is general rather than specific to a given request or user 
&lt;LI&gt;If the data is user- or request-specific, but is long lived&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Why would you want to avoid using cache?&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;To prevent out of memory errors.&lt;/LI&gt;&lt;/UL&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;For performance, you can generally consider there are four basic hardware categories: processor (% utilization), memory (# of bytes to # of available bytes), disk (input/output time), network bandwidth (input/output time).&amp;nbsp; Your servers have finite resources in each of these categories.&amp;nbsp; Caching reduces the dependence on slow resources (disk and network) and increases the dependence on fast resources (memory).&amp;nbsp; Thus, if you use too much caching, your server can run out of memory.&amp;nbsp; Generally on an x86 machine, you want to run a process with no higher than 800MB of private bytes in order to reduce the chance of an out-of-memory error.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;What are some advanced caching tips?&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Cache supports expiration dependencies that can force invalidation. These include time, key, file, and database (added in 2.0).&amp;nbsp; You can create custom cache invalidators.&amp;nbsp; 
&lt;LI&gt;Dynamically loading output cached controls&amp;nbsp; 
&lt;LI&gt;If you use session state in a page that has output caching enabled, and if the application runs on IIS 6.0, then you need to turn off kernel-mode output caching 
&lt;LI&gt;Adding an application-wide bypassCache setting that will allow you to easily turn caching off 
&lt;LI&gt;Preventing race conditions while loading cache in a high-load application&lt;/LI&gt;&lt;/UL&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;This code snippet adds bypassCache and race condition checks:&lt;/P&gt;&lt;FONT color=#008000 size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;// Check to see if&amp;nbsp;we are using caching and if the value is cached&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; cachedValue = HttpContext.Current.Cache["CacheKey"] &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; String;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if &lt;/FONT&gt;&lt;FONT size=2&gt;(bypassCache || (cachedValue != &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;FONT size=2&gt; &amp;amp;&amp;amp; cachedValue != &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;.Empty))&lt;BR&gt;{&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check to see if&amp;nbsp;we are&amp;nbsp;currently caching this item&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (isCachingInProgress)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Threading.Thread.Sleep(1000);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Try again&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;// Perform the resource intensive operation&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // (inside this operation, set isCachingInProgress to true when starting and false when finishing)&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#000000&gt;ca&lt;/FONT&gt;&lt;FONT color=#000000&gt;chedValue = GetValue();&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008000 size=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#008000 size=2&gt;// Insert the value into cache&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;HttpContext.Current.Cache.Insert("CacheKey", cachedValue, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;, DateTime.Now.AddMinutes(240), TimeSpan.Zero);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;// Use cachedValue&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=5&gt;References&lt;BR&gt;&lt;/FONT&gt;ASP.NET Caching&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp04262001.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp04262001.asp&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;ASP.NET Caching: Techniques and Best Practices&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/asp.net/reference/state/default.aspx?pull=/library/en-us/dnaspp/html/aspnet-cachingtechniquesbestpract.asp"&gt;http://msdn.microsoft.com/asp.net/reference/state/default.aspx?pull=/library/en-us/dnaspp/html/aspnet-cachingtechniquesbestpract.asp&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Caching with ASP.NET&lt;BR&gt;&lt;A href="http://aspnet.4guysfromrolla.com/articles/022802-1.aspx"&gt;http://aspnet.4guysfromrolla.com/articles/022802-1.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;10 Tips for Writing High-Performance Web Applications &lt;BR&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/05/01/ASPNETPerformance/"&gt;http://msdn.microsoft.com/msdnmag/issues/05/01/ASPNETPerformance/&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Keep Sites Running Smoothly By Avoiding These 10 Common ASP.NET Pitfalls&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/06/07/WebAppFollies/"&gt;http://msdn.microsoft.com/msdnmag/issues/06/07/WebAppFollies/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Output Caching – VaryByCustom attribute&lt;BR&gt;&lt;a href="http://vertigoblogs/liam/archive/2005/08/03/1290.aspx"&gt;http://vertigoblogs/liam/archive/2005/08/03/1290.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Peter A. Bromberg demonstrates that the Application object is a high-performing method of caching.&amp;nbsp; Application vs. Cache Class Speed Tests&lt;BR&gt;&lt;A href="http://www.eggheadcafe.com/articles/20030405.asp"&gt;http://www.eggheadcafe.com/articles/20030405.asp&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Accessing ASP.NET Cache from multiple threads&lt;BR&gt;&lt;A href="http://www.dotnet247.com/247reference/msgs/56/283604.aspx"&gt;http://www.dotnet247.com/247reference/msgs/56/283604.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3464" width="1" height="1"&gt;</description></item><item><title>Globalization &amp;amp; Localization: RTL</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/08/29/3459.aspx</link><pubDate>Tue, 29 Aug 2006 22:08:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3459</guid><dc:creator>snyholm</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3459.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3459</wfw:commentRss><description>&lt;P&gt;I was recently asked to provide a proof of concept to show how a website could be modified to support RTL display (Right-To-Left).&amp;nbsp; Most US websites use a LTR (Left-To-Right) layout of the page, so they can easily be read by LTR-reading users.&amp;nbsp; With the right architecture and design, a web app can support RTL-reading users in widely known RTL languages (scripts)&amp;nbsp;such as Hebrew or Arabic.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The website can be changed to RTL layout by making the following changes:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Update the HTML element with the &lt;FONT face="Courier New" color=#000000&gt;&lt;FONT color=#ff0000&gt;DIR&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="RTL"&lt;/FONT&gt;&lt;/FONT&gt; attribute setting.&amp;nbsp; This setting changes most of the page to RTL.&amp;nbsp; No other attributes need this setting because they will inherit from the HTML element.&amp;nbsp; Only specify other elements if they need to override the HTML element’s setting. 
&lt;LI&gt;Fix layout issues caused by explicitly set right or left alignment in CSS or html element attributes.&amp;nbsp; CSS attributes I needed to fix included &lt;FONT face="Courier New" color=#ff0000&gt;align&lt;/FONT&gt;, &lt;FONT face="Courier New" color=#ff0000&gt;clear&lt;/FONT&gt; and &lt;FONT face="Courier New" color=#ff0000&gt;float&lt;/FONT&gt;. 
&lt;LI&gt;Replace images with RTL-directional images.&amp;nbsp; Note that truly bi-directional images do not need to be replaced. 
&lt;LI&gt;Change the language (script) of the verbiage on the page.&amp;nbsp; Browsers automatically render certain languages LTR or RTL based on the Unicode algorithm.&amp;nbsp; Displaying English on an RTL page will result in text that flows backwards to the UI layout.&amp;nbsp; Also notice that ending punctuation is affected by the RTL attribute setting. 
&lt;LI&gt;Fix other alignment issues.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT size=5&gt;References&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;An example RTL page: &lt;A href="http://ar.wikipedia.org/wiki/Sandbox"&gt;http://ar.wikipedia.org/wiki/Sandbox&lt;/A&gt;&lt;BR&gt;Compare with &lt;A href="http://en.wikipedia.org/wiki/Main_Page"&gt;http://en.wikipedia.org/wiki/Main_Page&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;MSDN: How to: Display Right-to-Left Text Using HTML Tags for Globalization &lt;BR&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/twe16yc2.aspx"&gt;http://msdn2.microsoft.com/en-us/library/twe16yc2.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;MSDN: direction Attribute | direction Property&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/direction_1.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/direction_1.asp&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;BDO tag. BDO stands for 'bidirectional override'. This inline element can be used to override the Unicode bidirectional algorithm if the dir attribute doesn't produce the desired result or if you want to produce a different result.&amp;nbsp; BDO can only be used with inline text.&amp;nbsp; It does not work to wrap the body content in a BDO tag.&lt;BR&gt;Example: &lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a52a2a&gt;bdo&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;dir&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="rtl"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;style&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="border:solid 1px red"&amp;gt;&lt;/FONT&gt;RIGHT TO LEFT TEXT&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a52a2a&gt;bdo&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt; would display as: &lt;FONT face="Courier New"&gt;TXET TFEL OT THGIR.&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://www.w3schools.com/tags/tag_bdo.asp"&gt;http://www.w3schools.com/tags/tag_bdo.asp&lt;/A&gt;&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/bdo.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/bdo.asp&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;W3C FAQ: Script direction and languages &lt;BR&gt;&lt;A href="http://www.w3.org/International/questions/qa-scripts"&gt;http://www.w3.org/International/questions/qa-scripts&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;W3C: Authoring Techniques for XHTML &amp;amp; HTML Internationalization: Handling Bidirectional Text 1.0&lt;BR&gt;&lt;A href="http://www.w3.org/TR/i18n-html-tech-bidi/"&gt;http://www.w3.org/TR/i18n-html-tech-bidi/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Right-To-Left Text in Markup Languages&lt;BR&gt;&lt;A href="http://www.i18nguy.com/markup/right-to-left.html"&gt;http://www.i18nguy.com/markup/right-to-left.html&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=5&gt;General localization resources:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Web Site Localization in ASP.NET v1.1&lt;BR&gt;&lt;a href="http://vertigoblogs/swarren/articles/1343.aspx"&gt;http://vertigoblogs/swarren/articles/1343.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Localization in .NET 2.0&lt;BR&gt;&lt;a href="http://vertigoblogs/liam/archive/2005/10/21/1553.aspx"&gt;http://vertigoblogs/liam/archive/2005/10/21/1553.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Microsoft Global Development and Computing Portal &lt;BR&gt;&lt;A href="http://www.microsoft.com/globaldev/default.mspx"&gt;http://www.microsoft.com/globaldev/default.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Globalization issues in ASP, ASP.NET 1.0 and ASP.NET 2.0&lt;BR&gt;&lt;A href="http://support.microsoft.com/default.aspx?scid=kb;en-us;893663&amp;amp;sd=rss&amp;amp;spid=6351"&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;893663&amp;amp;sd=rss&amp;amp;spid=6351&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3459" width="1" height="1"&gt;</description></item><item><title>Simple XML read</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/08/24/Simple_XML_read.aspx</link><pubDate>Fri, 25 Aug 2006 02:45:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:3433</guid><dc:creator>snyholm</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/3433.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=3433</wfw:commentRss><description>&lt;P&gt;So you need to read a value from an XML file…&amp;nbsp; C’mon, XML and XPath aren’t difficult at all!&amp;nbsp; &lt;/P&gt;
&lt;P&gt;1. Load the XML data into an XmlDocument object using the Load method.&amp;nbsp; You can load the XML from a document referenced by URL.&lt;/P&gt;
&lt;P&gt;2. Write an XPath query to access the value you want.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;3. Put the value into an XmlNode object using this method xmlDocument.SelectSingleNode(XPathQuery).&lt;/P&gt;
&lt;P&gt;4. Finally, access the value with the xmlNode.Innertext property.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;p.s. Consider caching your XML data to improve performance.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Here are some cool XPath resources: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.w3schools.com/xpath/xpath_syntax.asp"&gt;http://www.w3schools.com/xpath/xpath_syntax.asp&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;MSDN topic: XPath Examples&lt;/P&gt;
&lt;P&gt;(locally installed .NET 1.x MSDN reference)&lt;BR&gt;ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.WIN32COM.v10.en/xmlsdk/html/1431789e-c545-4765-8c09-3057e07d3041.htm&lt;BR&gt;MSDN Library | Win 32 and COM Development | XML | MSXML | XML Standards Reference | XPath Reference | XPath Syntax | XPath Examples&lt;/P&gt;
&lt;P&gt;(online .NET 2.0 MSDN reference)&lt;BR&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms256086.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms256086.aspx&lt;/A&gt;&lt;BR&gt;MSDN Library | .NET Development | General Reference | XML Standards Reference | XPath Reference | XPath Syntax | XPath Examples&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=3433" width="1" height="1"&gt;</description></item><item><title>Debugging IndexOf</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/06/16/Debugging_IndexOf.aspx</link><pubDate>Fri, 16 Jun 2006 21:03:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:2909</guid><dc:creator>snyholm</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/2909.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=2909</wfw:commentRss><description>&lt;P&gt;Ever get this annoying error in the command window?&amp;nbsp; Are you getting it even when you &lt;STRONG&gt;are positively, 100% sure &lt;/STRONG&gt;that the syntax is correct?&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;error: managed EE does not understand expression's syntax&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;According to &lt;A href="http://groups.google.com/group/microsoft.public.dotnet.framework.aspnet/browse_thread/thread/d528af85c0e84b1a/ac7f5c64de1f4ab6?lnk=st&amp;amp;q=%22asp.net%22+%22indexof+does+not+exist%22&amp;amp;rnum=1&amp;amp;hl=en#ac7f5c64de1f4ab6"&gt;this thread&lt;/A&gt;, in some versions of Visual Studio, the debugger does not support string methods like IndexOf.&amp;nbsp; So here's a little hack/trick... you can assign the value of the string method to a local variable and look at the value of that local variable in the debugger after assignment.&amp;nbsp; Check out this example:&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#000000&gt;...&lt;/FONT&gt;&lt;BR&gt;int&lt;/FONT&gt; i = stringBeingSearched.IndexOf(stringToFind);&lt;BR&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (stringBeingSearched.IndexOf(stringToFind) &amp;lt; 0)&lt;BR&gt;...&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=2909" width="1" height="1"&gt;</description></item><item><title>Bottom Aligned Text on a Web Page</title><link>http://blogs.vertigosoftware.com/snyholm/archive/2006/06/16/Bottom_Aligned_Text_on_a_Web_Page.aspx</link><pubDate>Fri, 16 Jun 2006 20:54:00 GMT</pubDate><guid isPermaLink="false">fcb82b5c-78c7-46a5-b6ff-1ef27e7d7271:2908</guid><dc:creator>snyholm</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.vertigosoftware.com/snyholm/comments/2908.aspx</comments><wfw:commentRss>http://blogs.vertigosoftware.com/snyholm/commentrss.aspx?PostID=2908</wfw:commentRss><description>&lt;P&gt;If you need to make some bottom-aligned content in your web page&amp;nbsp;and you're using a table-based layout, the tfoot element is pretty cool.&amp;nbsp; &lt;A href="http://www.siteexperts.com/tips/html/tfoottip.htm"&gt;Site Experts&lt;/A&gt; gives a good demonstration of how it works.&amp;nbsp; Here's a quick example:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;FONT color=#a52a2a&gt;table&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;height&lt;/FONT&gt;="100%"&amp;gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;FONT color=#a52a2a&gt;tfoot&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;valign&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="bottom"&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a52a2a&gt;tr&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;align&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="center"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;valign&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="bottom"&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a52a2a&gt;td&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;align&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="center"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;valign&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="bottom"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;colspan&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="2"&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This text will be aligned at the bottom of the table.&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a52a2a&gt;td&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a52a2a&gt;tr&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;FONT color=#a52a2a&gt;tfoot&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;valign&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="bottom"&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a52a2a&gt;table&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.vertigosoftware.com/aggbug.aspx?PostID=2908" width="1" height="1"&gt;</description></item></channel></rss>