<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><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>MS.COM Operations Tools Team WebLog</title><link>http://blogs.msdn.com/mscomts/default.aspx</link><description>Hey - What does this button do?</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Welcome to the rest of the MSCOM Operations Team!</title><link>http://blogs.msdn.com/mscomts/archive/2005/09/13/464817.aspx</link><pubDate>Tue, 13 Sep 2005 18:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:464817</guid><dc:creator>mscomts</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/464817.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=464817</wfw:commentRss><description>&lt;P&gt;Please join me in welcoming the rest of the &lt;A href="http://blogs.technet.com/mscom"&gt;MSCOM Operations Team &lt;/A&gt;to the world of blogging.&amp;nbsp; Stop by, have some coffee and leave them a comment to let them know you care.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;-S&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=464817" width="1" height="1"&gt;</description></item><item><title>Shell in .NET, revisited</title><link>http://blogs.msdn.com/mscomts/archive/2005/07/22/441884.aspx</link><pubDate>Fri, 22 Jul 2005 20:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:441884</guid><dc:creator>mscomts</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/441884.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=441884</wfw:commentRss><description>&lt;P&gt;Hi, Eric here again. A question came in to us, via email,&amp;nbsp;to my post about "shelling" in .NET. I thought I would respond with a new blog entry to share with the community.&lt;/P&gt;
&lt;P&gt;The question was:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;From: Andreas&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;Sent: Friday, July 22, 2005 7:13 AM&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;Hi Eric &lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;I liked your piece of code that sends keystorkes too call wordpad.&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;I am writing a mobile application and I&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;was trying to output information from &lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;the application to a printer.&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;I have written the information onto a &lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;text file in the windows CE mobile, since&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;I could not find a way to output the text&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;to the printer.&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;I have seen your code I thought, if I&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;could get wordpad to read the text&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;file and output to the printer, by sending&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;keystrokes.&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;Please let me know if you have any ideas.&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;&lt;/EM&gt;&lt;/FONT&gt;&amp;nbsp;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;Many Thanks&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Arial&gt;&lt;EM&gt;Andreas&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/BLOCKQUOTE&gt;&amp;nbsp;&lt;BR&gt;Thank you for the question, Andreas. To perform what you describe, I wrote some sample code for you, included below. It:&lt;BR&gt;&amp;nbsp;&lt;BR&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;1. opens wordpad&lt;BR&gt;2. opens a file&lt;BR&gt;3. prints it&lt;BR&gt;4. closes wordpad&lt;BR&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And you can give it a command line argument to specify the location of a file to print:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;shell.exe C:\WINDOWS\system32\clusoc.txt&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you don't give it this input argument, it has a hardcoded file path it tries to open.&lt;/P&gt;
&lt;P&gt;Good luck!&lt;/P&gt;
&lt;P&gt;- Eric&lt;/P&gt;
&lt;P&gt;_______&lt;/P&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;using System;&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;using System.Text;&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;using System.Diagnostics;&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;using System.Threading;&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;using System.Windows.Forms;&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;namespace shell&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;{&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;class shell&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;{&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;static void Main(string[] args)&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;{&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;//"shell" to open WordPad&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;Process myProcess = new Process();&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;myProcess.StartInfo.FileName = @"wordpad.exe";&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;myProcess.StartInfo.Verb = "Open";&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;myProcess.Start();&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;//pause for 0.5 seconds to give the application time to open&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;Thread.Sleep(500);&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;//look for input argument that indicates a file path&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;string PrintThisFile = string.Empty;&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;if (args.Length &amp;gt; 0)&lt;/EM&gt;&lt;/FONT&gt; 
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;PrintThisFile = args[0];&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/BLOCKQUOTE&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;else&lt;/EM&gt;&lt;/FONT&gt; 
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;PrintThisFile = @"C:\WINDOWS\system32\perffilt.h";&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/BLOCKQUOTE&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;//open a file&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;SendKeys.SendWait("%FO");&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;SendKeys.SendWait(PrintThisFile + "~");&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;//print&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;Thread.Sleep(500);&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;SendKeys.SendWait("%FP");&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;Thread.Sleep(500);&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;SendKeys.SendWait("~");&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;//close the active window&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;Thread.Sleep(3000);&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;SendKeys.SendWait("+(%{F4})");&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;}&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;}&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #d3d3d3" face="Courier New" size=2&gt;&lt;EM&gt;}&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=441884" width="1" height="1"&gt;</description></item><item><title>Can't Start Debugging (F5) in VS 2005 Beta 2?</title><link>http://blogs.msdn.com/mscomts/archive/2005/06/28/433510.aspx</link><pubDate>Tue, 28 Jun 2005 23:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:433510</guid><dc:creator>mscomts</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/433510.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=433510</wfw:commentRss><description>&lt;P&gt;&lt;FONT color=#000080&gt;&lt;SPAN style="COLOR: navy"&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;SPAN style="COLOR: navy"&gt;&lt;o:p&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;A couple of months ago, after I had just installed the then-new &lt;A href="http://lab.msdn.microsoft.com/vs2005/get/"&gt;Visual Studio 2005 Beta 2&lt;/A&gt;, I could not run any project in the IDE, as it would crash VS. Then I found a workaround using a Visual Studio community feature that I built for&lt;/FONT&gt; &lt;/FONT&gt;&lt;A href="http://forums.microsoft.com/msdn"&gt;&lt;FONT size=2&gt;MSDN Forums&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt;:&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT color=#000080 size=3&gt;&lt;SPAN style="COLOR: navy"&gt;&lt;o:p&gt;&lt;SPAN style="COLOR: navy"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000080 size=3&gt;&lt;SPAN style="COLOR: navy"&gt;&lt;o:p&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;
&lt;P class=MsoNormal style="MARGIN: 5pt 0in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;Uncheck Tools-&amp;gt;Options-&amp;gt;Debugger-&amp;gt;Redirect all console output to the Quick Console Window&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 5pt 0in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;You could also remove the old interop assembly: &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 5pt 0in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;rmdir /s /q %windir%\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Interop\&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 5pt 0in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;The new one will still be installed in 'assembly\GAC', so you should be good.&lt;/SPAN&gt;&lt;SPAN style="COLOR: navy"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT color=#000000 size=2&gt;This workaround came from:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;a href="http://blogs.msdn.com/greggm/archive/2005/05/02/414111.aspx"&gt;&lt;FONT size=2&gt;http://blogs.msdn.com/greggm/archive/2005/05/02/414111.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT color=#000000 size=2&gt;Which I found at:&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;A href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=6526"&gt;&lt;FONT size=2&gt;http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=6526&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000 size=2&gt;You too can help yourself like I did, while in the Visual Studio 2005 IDE! Use the main menu to select “Community”, and then “Ask a Question”. This feature searches the MSDN Forums to find postings with the keywords you enter. For this feature, I developed a full component stack: SQL stored procedures, a .NET Web Service on top of that, a .NET class library on top of that, and the “Ask a Question” ASP.NET UI on top of that. Another way to search MSDN Forums is use&lt;A href="http://forums.microsoft.com/msdn/Search/"&gt; &lt;/A&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;&lt;A href="http://forums.microsoft.com/msdn/Search/"&gt;their search UI&lt;/A&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000 size=2&gt;Help me, help you. :)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000 size=2&gt;- Eric&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=433510" width="1" height="1"&gt;</description></item><item><title>Like the Phoenix rising from the ashes</title><link>http://blogs.msdn.com/mscomts/archive/2005/06/28/433354.aspx</link><pubDate>Tue, 28 Jun 2005 17:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:433354</guid><dc:creator>mscomts</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/433354.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=433354</wfw:commentRss><description>&lt;P&gt;&lt;FONT size=2&gt;As anyone who reads our little corner of the world knows, it's been a while.&amp;nbsp; Now I could make excuses that we have been busy or we lost the password or dingos ate our blog, but in truth, we simply haven't taken the time to do it.&amp;nbsp; It's funny, we all have the best of intentions.&amp;nbsp; I can't tell you how many times I've been talking with my team and someone says "I almost blogged today about....." or "I should blog about ....", but it never seems to actually happen.&amp;nbsp; I mean, we are busy and I did have to go look up the password again and ok, well the dingos were an exaggeration, but we need to make a concerted effort to poke our heads out and tell&amp;nbsp;you what we've been up to.&amp;nbsp; So whether you want us to be or not, we're back.&amp;nbsp; Good to see you all again.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;-Scott&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=433354" width="1" height="1"&gt;</description></item><item><title>MOM Service Account Password Change - Update</title><link>http://blogs.msdn.com/mscomts/archive/2005/03/15/396458.aspx</link><pubDate>Tue, 15 Mar 2005 23:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:396458</guid><dc:creator>mscomts</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/396458.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=396458</wfw:commentRss><description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Some time ago I posted with respect to creating a facility for automating the MOM service account password change process. I did indeed complete the program, which can be summarized as follows:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;ol style="MARGIN-TOP: 0in" type="1"&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l3 level1 lfo3; tab-stops: list .5in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Expose a UI for collecting the Configuration Group and credential information, for starting the update process, and for notifying the user of progress through the various steps.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;ol style="MARGIN-TOP: 0in" type="1" start="2"&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l3 level1 lfo3; tab-stops: list .5in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Stop the MOM service on all management servers using the following .NET classes: &lt;br /&gt;- System.ServiceProcess.ServiceController&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;- System.ServiceProcess.ServiceControllerStatus&lt;br style="mso-special-character: line-break" /&gt;&lt;/li&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l3 level1 lfo3; tab-stops: list .5in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Shut down the DAS COM+ application using the following COM+ interface:&lt;br /&gt;- COMAdmin.COMAdminCatalog&lt;br style="mso-special-character: line-break" /&gt;&lt;/span&gt;&lt;/li&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l3 level1 lfo3; tab-stops: list .5in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Change the DAS identity using the following COM+ interfaces:&lt;br /&gt;- COMAdmin.COMAdminCatalog&lt;br /&gt;- COMAdmin.COMAdminCatalogObject&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;ol style="MARGIN-TOP: 0in" type="1" start="5"&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l3 level1 lfo3; tab-stops: list .5in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Change MOM action account, using the following .NET class to exec an updated version of &lt;i style="mso-bidi-font-style: normal"&gt;SetActionAccount*&lt;/i&gt; that allows for providing the password as a command line parameter:&lt;br /&gt;- System.Diagnostics.Process&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;ol style="MARGIN-TOP: 0in" type="1" start="6"&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l3 level1 lfo3; tab-stops: list .5in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Restart MOM (DAS is restarted automatically with it) using the following .NET classes:&lt;br /&gt;- System.ServiceProcess.ServiceController&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;- System.ServiceProcess.ServiceControllerStatus&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Along the way, however, I encountered a number of roadblocks that made this process impractical, the most significant of which was a COM+ behavior that results in the current credentials being cached beyond the application shut down. This results in having to reboot all of the management servers anyway, one of the key things I was trying to eliminate as part of this new process.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;In the end, the best workaround I came across is documented (though not with respect to this issue specifically) in the MOM 2005 Security Guide, the URL for which and the key section from which are appended at the end of this post. It is important to note that this workaround only works on Windows Server 2003, since only it to date supports the use of the Network Service account. Also of particular note related to the guide’s instructions are:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;ol style="MARGIN-TOP: 0in" type="1"&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo4; tab-stops: list .5in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Creating the SQL server login with the indicated database access results in the new database user being created for the OnePoint database, so you can skip the new database user step.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt 0.25in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;ol style="MARGIN-TOP: 0in" type="1" start="2"&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo4; tab-stops: list .5in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;By “computer name” the guide is referring to each management server in your configuration group(s). You must add a login for each management server for this to work properly.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;ol style="MARGIN-TOP: 0in" type="1" start="3"&gt; &lt;li class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo4; tab-stops: list .5in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;A reminder is provided in the guide, but I will add it again here as a key to avoiding possibly confusing SQL errors: Remember to add the “$” symbol to the end of the computer name for each login, i.e. domain\mgtserver1$.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;By following the steps outlined in the appended section of the security guide with the above notes in mind, you can simply automate through batch file or script the stopping and restarting of the MOM service and the use of SetActionAccount to reset the MOM action account credentials on the management servers; no reboot required. You also no longer have to worry about the DAS application, since it is running within the Network Service context. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;At least one other large IT group here at Microsoft beside ours is operating MOM 2005 this way, so far without any known problems.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div; mso-border-bottom-alt: solid windowtext .75pt"&gt; &lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0in 0in 1.0pt 0in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0in 0in 1.0pt 0in"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:country-region w:st="on"&gt;&lt;st1:place w:st="on"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Kent&lt;/span&gt;&lt;/st1:place&gt;&lt;/st1:country-region&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0in 0in 1.0pt 0in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0in 0in 1.0pt 0in"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;* The new version of of SetActionAccount I refer to herein is available currently as a hotfix, which you can obtain by contacting Microsoft Product Support Services, or as part of MOM 2005 Service Pack 1 due out later this year.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; MARGIN: 0in 0in 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0in; BORDER-BOTTOM: medium none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0in 0in 1.0pt 0in"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in; mso-layout-grid-align: none"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Microsoft Operations Manager 2005 Security Guide (Partial)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Link to the complete document:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;a href="http://www.microsoft.com/technet/prodtechnol/mom/mom2005/secguide10.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/mom/mom2005/secguide10.mspx&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in; mso-layout-grid-align: none; mso-outline-level: 4"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 14pt; FONT-FAMILY: Arial"&gt;To use Network Service for DAS&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;This process requires procedures to be done on both the MOM Database Server and then the MOM Management Server.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /&gt;&lt;v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"&gt;&lt;/v:path&gt;&lt;o:lock aspectratio="t" v:ext="edit"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape id=_x0000_i1025 style="WIDTH: 6.75pt; HEIGHT: 13.5pt" type="#_x0000_t75"&gt;&lt;v:imagedata src="file:///C:\DOCUME~1\kentso\LOCALS~1\Temp\msohtml1\01\clip_image001.wmz" o:href="/technet/images/prodtechnol/mom/important.gif"&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;Important&lt;br /&gt;You can only do this if the Management Server is running on Windows Server 2003. Windows 2000 does not support the Network Service account.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in; mso-layout-grid-align: none"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="FONT-FAMILY: Arial"&gt;On the MOM Database Server:&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo1; tab-stops: 13.05pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;1.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;On the MOM Database Server, verify that the MSSQLSvc Service Principal Name is registered by using “setspn.exe -L &amp;lt;&lt;i&gt;SQL Server FQDN&lt;/i&gt;&amp;gt;" at the command line, where &amp;lt;&lt;i&gt;SQL Server FQDN&lt;/i&gt;&amp;gt; is the Fully-Qualified Domain Name of the MOM Database Server Instance.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo1; tab-stops: 13.05pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;2.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;In SQL Server Enterprise Manager, expand the OnePoint folder.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo1; tab-stops: 13.05pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;3.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Add a new database user by right-clicking on the Users sub-node of the OnePoint database folder and selecting New Database User.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo1; tab-stops: 13.05pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;4.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;In the Database Users - New User dialog, enter the computer name in the Login name text box. Computer names follow the format domain\computername$. Do not forget the trailing “$”.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo1; tab-stops: 13.05pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;5.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Grant this computer account user the db_owner database role membership and click OK.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo1; tab-stops: 13.05pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;6.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Navigate to the Security folder for the SQL Server instance.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo1; tab-stops: 13.05pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;7.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Add a new SQL Server Login by right-clicking on the Logins folder and selecting New Login.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo1; tab-stops: 13.05pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;8.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;On the General tab of the SQL Server Properties - New Login dialog, enter the computer name in the Name textbox. Computer names follow the format domain\computername$. Do not forget the trailing “$”.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo1; tab-stops: 13.05pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;9.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;On the Database Access tab, grant this computer account db_owner access to the OnePoint database by selecting the Permit checkbox next to the OnePoint database and then the db_owner checkbox below.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo1; tab-stops: 13.05pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;10.&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Click OK.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in; mso-layout-grid-align: none"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="FONT-FAMILY: Arial"&gt;On the Management Server&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: 11.9pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;1.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;On the Management Server, stop the MOM Service.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: 11.9pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;2.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;In the Component Services snap-in, expand &lt;b&gt;Component Services / Computers / My Computer / COM+ Applications&lt;/b&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: 11.9pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;3.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Right-click the &lt;b&gt;Microsoft Operations Manager Data Access Server&lt;/b&gt; node and click Shut down.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: 11.9pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;4.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;After the application has stopped, open its properties.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: 11.9pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;5.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;On the Identity tab, select the System Account and the Network Service options, and then click OK.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: 11.9pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;6.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;Start the MOM Service.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 5pt 0in 5pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: 11.9pt list .5in; mso-layout-grid-align: none"&gt;&lt;span style="FONT-FAMILY: Arial; mso-fareast-font-family: Arial"&gt;&lt;span style="mso-list: Ignore"&gt;7.&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Arial"&gt;After the MOM Service has started, open the MOM Administrator console and confirm that you do not see any DAS errors.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=396458" width="1" height="1"&gt;</description></item><item><title>How about a little spin around the block?</title><link>http://blogs.msdn.com/mscomts/archive/2005/03/07/387093.aspx</link><pubDate>Mon, 07 Mar 2005 15:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:387093</guid><dc:creator>mscomts</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/387093.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=387093</wfw:commentRss><description>&lt;p&gt;Sometimes we are just so focused on the task at hand, we miss some really cool stuff right under our noses.&amp;nbsp; Microsoft is such a big place, many times you don't hear about great work being done around the company by other teams.&amp;nbsp; Recently, I was asked to attend a meeting to discuss the possibility of MSCOM Operations taking over the daily operations of a project called "Virtual Labs".&amp;nbsp; Basically, Virtual Labs is just like it sounds; you can set up a virtual sandbox environment consisting of multiple virtual servers, create a virtual network between them and test drive some of our newest software online, free of charge.&amp;nbsp; If you'd like to have a look at what I'm talking about, check it out here: &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/technet/traincert/virtuallab/default.mspx"&gt;http://www.microsoft.com/technet/traincert/virtuallab/default.mspx&lt;/a&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;There are quite a few labs already available, so have a little fun!&lt;/p&gt; &lt;p&gt;That's it for now&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=387093" width="1" height="1"&gt;</description></item><item><title>Shell in .NET!</title><link>http://blogs.msdn.com/mscomts/archive/2005/02/04/367468.aspx</link><pubDate>Fri, 04 Feb 2005 23:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:367468</guid><dc:creator>mscomts</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/367468.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=367468</wfw:commentRss><description>&lt;p&gt;Maybe many of you out there in Developer Land are already aware of this, but I need to point out that you can indeed shell, sleep, and SendKeys using the new fancy C# and .NET Framework. You see, a few months ago, I needed to come up with a quick and dirty demo of a Windows application.&amp;nbsp;Then I&amp;nbsp;came up with the brilliant notion of&amp;nbsp;shelling to it, then sending keystrokes to it to demo the app. I wondered, can you still peform this most crude form of application interoperability with the most elegant C# and .NET?&lt;/p&gt; &lt;p&gt;The answer is a big YES! Check this C# code out:&lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Text;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;using System.Diagnostics;&lt;br /&gt;using System.Threading;&lt;br /&gt;using System.Windows.Forms;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;namespace ConsoleApplication1&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; //"shell" to open WordPad&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Process myProcess = new Process();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myProcess.StartInfo.FileName = @"wordpad.exe";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myProcess.StartInfo.Verb = "Open";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myProcess.Start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //pause for 1/2 second&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.Sleep(500);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //open the Format dialog&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendKeys.SendWait("%OF");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //set the font size, then ENTER&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendKeys.SendWait("{TAB}{TAB}48~");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //type some text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SendKeys.SendWait("Hello world");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The above code is a console EXE program that brings up WordPad, then types a big "Hello World", with a 0.5 second sleep in between to give WordPad time to open. I love this code -- it is SO old school. It warms my heart that you can still stoop to this level. I hope you enjoy it as much as I.&lt;/p&gt; &lt;p&gt;For a list of all of the SendKeys codes, see the following page in MSDN online:&lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemWindowsFormsSendKeysClassTopic.asp"&gt;http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemWindowsFormsSendKeysClassTopic.asp&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Happy coding!&lt;/p&gt; &lt;p&gt;- Eric&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=367468" width="1" height="1"&gt;</description></item><item><title>What's Wrong With This Code (T-SQL Edition)</title><link>http://blogs.msdn.com/mscomts/archive/2005/01/11/351096.aspx</link><pubDate>Wed, 12 Jan 2005 01:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:351096</guid><dc:creator>mscomts</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/351096.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=351096</wfw:commentRss><description>&lt;p&gt;&lt;font face="Courier New"&gt;This code (actually, code very much like it) made it through development and test (in a different team; we never make mistakes,) and worked beautifully.&amp;nbsp; In production, however, it was an utter failure.&amp;nbsp; It isn't difficult to spot the problem; can you?&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;----------------------------------------------&lt;/p&gt;&lt;font face="Courier New"&gt;&lt;br /&gt;INSERT INTO BigFatTable (Name, Description, Time) &lt;br /&gt;VALUES (@Name, @Description, @Time) &lt;br /&gt;SELECT @Output = SCOPE_IDENTITY() &lt;br /&gt;FROM BigFatTable &lt;br /&gt;&lt;/font&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;----------------------------------------------&lt;/p&gt;&lt;br /&gt;// &lt;br /&gt;//&amp;nbsp;&amp;nbsp; Llywarch Moel &lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (aka Number 5) &lt;br /&gt;// &lt;/font&gt;&lt;/font&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=351096" width="1" height="1"&gt;</description></item><item><title>Woe to ATI</title><link>http://blogs.msdn.com/mscomts/archive/2004/12/16/318307.aspx</link><pubDate>Thu, 16 Dec 2004 18:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:318307</guid><dc:creator>mscomts</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/318307.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=318307</wfw:commentRss><description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;For many years I have been pretty heavily involved in the &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:mswterms w:st="on"&gt;gaming industry&lt;/st1:mswterms&gt;.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Through scores of beta tests, to assisting in the design of scalable systems for third generation MMORPGs to writing reviews and conducting interviews I’ve been in, out and around the industry since it became an industry.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Of course game graphics and system hardware have come a long way in a ridiculously short amount of time.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Who remembers when 3dfx graphics cards were all the rage?&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;In recent years the showdown on the graphics front is between nVidia and ATI.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Now nVidia has held the lead for quite some time and the weight of it has made them stagger at times.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;ATI, ever the stalwart competitor has put up a good fight and come up with some very good products over the years.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Being a massive nerd, I love to build my own game systems.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;During my last build I decided to take a shot on the latest and greatest ATI card.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I had&amp;nbsp;previously only purchased&amp;nbsp;nVidia products as I had felt they were marginally better in performance but mostly because I knew that game developers used them in their development machines.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;But the RADEON 9800 Pro 256 was my choice at the time.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;A choice I have regretted every single day.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Since the day I booted my newly assembled behemoth containing all of the latest and greatest gaming hardware (for that millisecond) the 3D gaming quality on this Sapphire OEM has been deplorable.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Some games, the games that are more 2D based than 3D based had almost no problems, but every game that renders 3D objects has quality issues.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Every single game.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Now, simple model and texture games such as Zoo Tycoon 2 have the minor irritation of the occasional flashing texture.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Easy to overlook and ignore and in all likelihood ATI will release a driver update to relieve this issue even more.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;But games with heavy 3D, like EverQuest 2, World of Warcraft, Doom 3, and Half-Life 2 have significant problems with bad textures, broken models, running text, ad nauseam.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;And forget about Battlefield &lt;st1:country-region w:st="on"&gt;&lt;st1:place w:st="on"&gt;Vietnam&lt;/st1:place&gt;&lt;/st1:country-region&gt;, that’s just texture stew.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Sapphire tells me to talk to ATI, of course.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;ATI has been stringing me along with “that should be fixed in driver update X” messages for months.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The store I bought it from wouldn’t take it back after the first 30 days (and who can blame them?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;After 30 days a used graphics card is scrap silicon to a retailer).&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;I&amp;nbsp;had taken&amp;nbsp;the last 6 weeks off of my harassment campaign for support and decided to try it once again.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Just to see if I got any different kind of result.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; Um, y&lt;/span&gt;eah.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;In all the time I’ve been trying to resolve this problem with ATI, not one single time has anyone asked for a screenshot of the problem despite my offering&amp;nbsp;to provide them&amp;nbsp;every time.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;In all this time not once was there ever a mention of simply replacing my defective card with a new one.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I paid almost $500 for it and you can now pick that same card up for about $250.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;And I know it is simply my card that is defective.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I’ve borrowed the exact same card from a friend who bought his from the same place I did at the same time I did and his works just fine in my machine.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I’ve also tried an nVidia based card.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;No problems.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Clearly I have a defective unit and you would think ATI could afford to replace it.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;The last email I received from ATI suggested that I adjust my bios settings with things such as “Set your AGP support from 8X to 2X”, among others.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;I made sure to reply: “Thank you for supporting nVidia.”&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Will&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=318307" width="1" height="1"&gt;</description></item><item><title>Lockdown</title><link>http://blogs.msdn.com/mscomts/archive/2004/12/13/282136.aspx</link><pubDate>Mon, 13 Dec 2004 19:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:282136</guid><dc:creator>mscomts</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/282136.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=282136</wfw:commentRss><description>&lt;p&gt;Ah, the holidays.&amp;nbsp; &lt;/p&gt; &lt;p&gt;For people in most operations organizations, there is a collective sigh of relief around this time of year.&amp;nbsp; Not only are many of the people who are responsible for releasing changes out into the production environment on vacation (or getting ready for vacation), but the holidays are the joyful time of year that dances in the dreams of every operations person...the time of Data Center lockdowns.&amp;nbsp; If vacations are not enough to sway the throng of projects coming down the pipe with the frequency of a firehose, Saint Nick and his elves (read data center staff) give us all the gift of peace for 3 weeks.&amp;nbsp; This is not to say that code releases don't still happen, they do to be sure.&amp;nbsp; However, with no new server deployments, server rebuilds, or really data center staff available, we in operations get a nice reprieve.&amp;nbsp; Interestingly, many ops folks&amp;nbsp;end up working through the&amp;nbsp;holidays just because it's quiet!&amp;nbsp; So to all the data centers who require&amp;nbsp;holiday lockdowns, from all of us to all of&amp;nbsp;you, a&amp;nbsp;collective thank you!&amp;nbsp; &amp;nbsp;&lt;/p&gt; &lt;p&gt;Scott&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=282136" width="1" height="1"&gt;</description></item><item><title>Easing the Digital Photo File Storage Crisis</title><link>http://blogs.msdn.com/mscomts/archive/2004/11/30/272368.aspx</link><pubDate>Tue, 30 Nov 2004 17:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:272368</guid><dc:creator>mscomts</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/272368.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=272368</wfw:commentRss><description>After owning a &lt;a href="http://www.dpreview.com/reviews/specs/Pentax/pentax_optio550.asp"&gt;digtial camera&lt;/a&gt; for a year and a half, I now have about &lt;a href="http://photos.yahoo.com/ericki"&gt;6000 photo files&lt;/a&gt;, which have swamped my old&amp;nbsp;home computer's 16GB harddisk. So on the day after Thanksgiving, popular for shopping, I&amp;nbsp;considered going to &lt;a href="http://www.frys.com/"&gt;Fry's&lt;/a&gt; to buy an external harddisk. They had some great discounts going on, and I had never made the pilgrimage to this haven of geekdom. Then, I thought better of driving the 15 miles and fighting the crowds. I stayed home and took advantage of their sales online, which led to the purchase of the &lt;a href="http://shop1.outpost.com/product/4194083"&gt;160GB external harddisk&lt;/a&gt; for $60, after&amp;nbsp;rebate. &lt;h2&gt;&lt;/h2&gt; &lt;p&gt;While I waited for my order to arrive, I decided to write a utility program to better organize my 6000 photos. It was taking forever&amp;nbsp;to open my big photo file folder!&amp;nbsp;My new program copies all of the files found within one folder tree to a new folder tree, which has the files broken out by the date each picture was taken. A distinct folder is created for each day a picture was taken. Now it is easy to open the root folder, and find all the pictures from Christmas 2003, for example.&amp;nbsp;With a little more polish, this utility could be ready for public consumption.&lt;/p&gt;Geek out,&lt;br /&gt; &lt;p&gt;Eric&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=272368" width="1" height="1"&gt;</description></item><item><title>Unheard of temperatures</title><link>http://blogs.msdn.com/mscomts/archive/2004/11/24/269559.aspx</link><pubDate>Thu, 25 Nov 2004 01:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:269559</guid><dc:creator>mscomts</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/269559.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=269559</wfw:commentRss><description>&lt;P&gt;I was recently working on a thermometer control and decided to write a temperature class to go along with it.&amp;nbsp; What I found interesting is that there are temperature systems that I had never even heard of let alone used (namely Reaumer and Rankine).&amp;nbsp; I'm from Canada and I've heard of some pretty nasty temperatures, but these were still a suprise to me. :-) &amp;nbsp;Anyway I wrote the class in C# and thought others might find some use in it.&amp;nbsp;&amp;nbsp; Here it is:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;using System;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;namespace ThermometerDemo&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Summary description for Temperature.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Temperature&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public enum SystemOfMeasure { Fahrenheit = 0, Celsius, Kelvin, RanKine, Reaumer };&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private SystemOfMeasure _systemOfMeasure;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public SystemOfMeasure Scale&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; get { return _systemOfMeasure; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { _systemOfMeasure = value; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private double _temperatureKelvin;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public double Value&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; get { return Temperature.Convert( _temperatureKelvin, SystemOfMeasure.Kelvin, _systemOfMeasure ); }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { this._temperatureKelvin = Temperature.Convert( value, _systemOfMeasure , SystemOfMeasure.Kelvin ); }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public double AbsoluteZero&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; get { return Temperature.Convert( 0F, SystemOfMeasure.Kelvin, _systemOfMeasure ); }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region Construction&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Temperature() : this( SystemOfMeasure.Kelvin, 298.15F ) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; // SI temperature at standard state in Kelvin.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Temperature( SystemOfMeasure systemOfMeasure ) : this( systemOfMeasure, 298.15F )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; // SI temperature at standard state.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Temperature( double temperature ) : this( SystemOfMeasure.Kelvin, temperature )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Temperature( SystemOfMeasure systemOfMeasure, double temperature )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; _systemOfMeasure = systemOfMeasure;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value = temperature;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion Construction&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # region Public Methods&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static double Convert( double temperature, SystemOfMeasure originSystem, SystemOfMeasure targetSystem )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; // Convert to Kelvin.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double temperatureKelvin;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch( originSystem )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case SystemOfMeasure.Fahrenheit:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temperatureKelvin = ( 5F / 9F ) * ( temperature - 32 ) + 273.15F;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.Celsius:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temperatureKelvin = temperature + 273.15F;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.Kelvin:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temperatureKelvin = temperature;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.Reaumer:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temperatureKelvin = ( 5F / 9F ) * temperature + 273.15F;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.RanKine:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temperatureKelvin = temperature / 1.8F;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; default:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ArgumentOutOfRangeException( "originSystem", originSystem, "Unsupported origin system of measure");&lt;BR&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;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Convert to the new system.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double resultTemperature;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch( targetSystem )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case SystemOfMeasure.Fahrenheit:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultTemperature = 32F + ( 1.8F ) * ( temperatureKelvin - 273.15F );&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.Celsius:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultTemperature = temperatureKelvin - 273.15F;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.Kelvin:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultTemperature = temperatureKelvin;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.Reaumer:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultTemperature = ( 1.8F ) * ( temperatureKelvin - 273.15F );&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.RanKine:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultTemperature = temperatureKelvin * 1.8F;&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; default:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ArgumentOutOfRangeException( "originSystem", originSystem, "Unsupported target system of measure");&lt;BR&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;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return resultTemperature;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static string GetUnitAbbreviation( SystemOfMeasure systemOfMeasure )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; switch( systemOfMeasure )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case SystemOfMeasure.Fahrenheit:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "&amp;#176;F";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.Celsius:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "&amp;#176;C";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.Kelvin:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "K";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.Reaumer:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "&amp;#176;Re";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; case SystemOfMeasure.RanKine:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "&amp;#176;Ra";&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&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; default:&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ArgumentOutOfRangeException( "systemOfMeasure", systemOfMeasure, "Unsupported system of measure");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion Public Methods&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;eHowitzer&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=269559" width="1" height="1"&gt;</description></item><item><title>Funny Business</title><link>http://blogs.msdn.com/mscomts/archive/2004/11/17/258939.aspx</link><pubDate>Wed, 17 Nov 2004 17:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:258939</guid><dc:creator>mscomts</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/258939.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=258939</wfw:commentRss><description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;The entertainment industry is a funny business.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;It is completely dependant on the random whims of consumers.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;That is not to say that the success of a product is unpredictable, simply that there are a great many factors involved in design, development and distribution of an entertainment property that getting them all together is a fluid venture at best.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;As I’m sure we all know, Halo 2 dropped recently to great fanfare.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;This follow up to the perennial &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:mswterms w:st="on"&gt;Xbox&lt;/st1:mswterms&gt; title was highly anticipated and accompanied with some killer trailers and excellent television commercials.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The media was whipped into a savage frenzy that culminated in a $125 million dollar opening day bombshell.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Numbers like that are simply unprecedented.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Nothing has ever come close to matching a single day total like that of Halo 2.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Even such powerhouse properties as the Spider-Man movie franchise pales in comparison.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Spider-Man 2 bowed in with an opening weekend, a long 4&lt;sup&gt;th&lt;/sup&gt; of July weekend I might add, with $115 million.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;But let’s compare something a little closer, digital animated feature films.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Shrek 2 bowed in with an opening weekend of $108 million.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Finding Nemo racked up $70 million in its debut weekend.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;By those comparisons, Halo 2 devastated the entertainment industry.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;However, if we take a step back and view the entire domain of digital entertainment, a different picture begins to take shape.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Shrek 2 piled up $436 million in US domestic box office sales during its 14 week theatrical run and Finding Nemo scored $339 million for its 29 week run.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Remember, that is the &lt;st1:country-region w:st="on"&gt;&lt;st1:place w:st="on"&gt;US&lt;/st1:place&gt;&lt;/st1:country-region&gt; box office sales.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Some estimates suggest that approximately 15 million &lt;st1:mswterms w:st="on"&gt;Xbox&lt;/st1:mswterms&gt; units have been sold worldwide.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;If one copy of Halo 2 were sold for every &lt;st1:mswterms w:st="on"&gt;Xbox&lt;/st1:mswterms&gt; at $50 per sale, then Halo 2 would scratch up $750 million in worldwide sales.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;As much as I would love to see that come to fruition, I just can't see it.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;In fact, I can’t see sales of Halo 2 topping $400 million, but it is possible.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Now look at this picture again, Shrek 2 scored $436 million in US box office sales.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Halo 2 _could_ reach $750 million world wide.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Take another step back and the fog begins to clear.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Worldwide box office figures for Shrek 2 and Nemo top out at $849 and $865 million respectively.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;And we haven’t even begun to touch DVD and VHS sales or rentals yet.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Sure the Halo 2 release was a massive success, but let’s not consider it an earth shattering event just yet.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Which brings me to another issue.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;What the hell is wrong with Disney?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Have they become so bloated that they have forgotten how to make a good animated movie?&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Look at the charts and it’s clear to see that the future of Disney animation is Pixar.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;At least, one would think so.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Since 1989 Disney has released 9 traditional animation movies and 6 digital animation movies in conjunction with Pixar.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The most lackluster of all the Pixar movies, A Bug’s Life (1998), currently sits at #84 in the all time box office charts with $357 million.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;At $357 million, A Bug’s Life roasts all of the traditional animation releases except for Tarzan (1999, #51 @ $435), Aladdin (1992, #35 @ $501) and The Lion King (1992, #15 @ $784).&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;And, with the exception of A Bug’s Life, each successive Pixar movie has out grossed it’s predecessor.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;With an opening weekend take of $143 million, The Incredibles looks to continue this trend (remember, Finding Nemo took in $70 million in its opening bow in 2003).&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;One would think that cultivating a relationship with Pixar would be a top priority at Disney, but instead they have done nothing but breed animosity and distrust.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;To the point where Pixar has decided to take their toys and play in someone else’s sandbox.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Cars, the next feature from Pixar (slated for 2005) will be the final movie in the current contract between Disney and Pixar.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Rather than try and smooth the ruffled feathers and extend that contract, Disney has apparently decided to spin up their own digital animation division (how long did it take to make this decision?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;6 years?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Right on time guys.) and crank out…Toy Story 3.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Toy Story 2 is where the bad blood began between these companies to begin with.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;The question has been raised as to whether Pixar can survive without Disney.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;In my opinion this isn’t even a question.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Even if Pixar did not want to handle their own financing, publicity and distribution business (which they certain could) there are many powerhouse studios who are just waiting to swoop in and steal this money maker.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Fox Studios has struggled with their animation division for years and finally landed a winner with Ice Age.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;They’ve got the juice to take on Pixar.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Dreamworks has their own very successful animation studio (coincidentally Disney is building their digital division in Glendale California, not far from the Dreamworks studio) however, Dreamworks has shown a penchant for being opportunistic and could certainly handle bringing Pixar into their stable.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;st1:mswterms w:st="on"&gt;Sony&lt;/st1:mswterms&gt;, &lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;Paramount&lt;/st1:place&gt;&lt;/st1:City&gt; and perhaps half a dozen others could all be interested in handling the load.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;At this rate Disney animation will die a slow and agonizing Lilo &amp;amp; Stitch 6 death.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Will&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=258939" width="1" height="1"&gt;</description></item><item><title>New Guy Likes Chess</title><link>http://blogs.msdn.com/mscomts/archive/2004/11/09/254601.aspx</link><pubDate>Tue, 09 Nov 2004 19:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:254601</guid><dc:creator>mscomts</dc:creator><slash:comments>15</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/254601.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=254601</wfw:commentRss><description>Hello, there. I'm Eric, a brand new addition to the Microsoft.com Operations Tools Team. As a part of beaming into the team, I thought I would try the team weblog. For the subject of my first post, I will keep it relatively light: playing chess. I have been enjoying playing occasional friendly games of chess for many years, and enjoy it in many forms. I am no &lt;a href="http://en.wikipedia.org/wiki/International_Grandmaster"&gt;Grandmaster&lt;/a&gt;, but I have some basic battle skills, as some of my new teammates are finding out firsthand.&amp;nbsp; &amp;gt;:]&lt;br /&gt;&lt;br /&gt;It is great to play at home on my nice big wooden board with the solid, heavy, wooden pieces which yield a satisfying thud when you place them, adding emphasis to your decisions. But I rarely get to play on that board at home.&lt;br /&gt;&lt;br /&gt;More convenient, is playing chess on the Web. I have played games at &lt;a href="http://games.yahoo.com/ch"&gt;Yahoo&lt;/a&gt; and &lt;a href="http://zone.msn.com/en/chess"&gt;MSN&lt;/a&gt;. These sites are cool -- clocks, rated games, play people in real-time all around the world, chat with them during the game, 24x7. Another novel way to play is via &lt;a href="http://messenger.msn.com/Resource/"&gt;MSN Instant Messenger&lt;/a&gt;. You can challenge your IM contacts to chess, checkers, tic tac toe and more.&lt;br /&gt;&lt;br /&gt;However, all of these forms of chess involve waiting -- waiting for your opponent to move -- which can be a drag. When using a clock, your wait is your gain. Without a clock, once you have your next move figured out, based on the move you just know they will do, you are left to: trash talk, small talk, day dream, think about work. Not the optimum use of your time&amp;nbsp; :)&lt;br /&gt;&lt;br /&gt;Which brings me to a more time-efficient way to go: correspondence chess. This style of chess has been practiced for eons. A primitive form is sending &lt;a href="http://en.wikipedia.org/wiki/Category:Chess_notation"&gt;notations describing moves&lt;/a&gt; via snail mail, while you keep a board at home/work set up with the current state of the game. The beauty of correspondence chess is you can take all the time you need, while your opponent pursues other interests -- no waiting. The downside is that paper mail involves postage, envelopes, and thinking about postal pickup times.&lt;br /&gt;&lt;br /&gt;Fortunately, computing has improved correspondence chess. I played the first form of electronic correspondence chess a few years ago, using email and &lt;a href="http://www.microsoft.com/technet/prodtechnol/exchange/55/reskit/exape.mspx#EBAA"&gt;custom Exchange chess forms&lt;/a&gt;, built with Visual Basic. Moves would arrive via email. You opened the email, and the board would render. Make a move,&amp;nbsp;send it back. Take all the time you want. What fun! And you could replay entire current games, and past games, stepping through each move, one by one. The bad news is that this custom Exchange form seems to be extinct now, when running newer versions of Exchange and Outlook.&lt;br /&gt;&lt;br /&gt;So, the other day, I wondered if somebody had yet created webpage-based correspondence chess. The answer is yes, and there are &lt;a href="http://chess.about.com/od/emailservers/"&gt;many choices&lt;/a&gt;! You make moves on a webpage, click a button, and then your opponent gets an email notification with a link back to the game board. You install nothing. Perfect!&lt;br /&gt;&lt;br /&gt;Some require a substantial registration. I have tried two that don't require registration:&amp;nbsp; &lt;a href="http://echess.org/"&gt;eChess.org&lt;/a&gt;, &lt;a href="http://www.postcardchess.com/"&gt;PostcardChess.com&lt;/a&gt;. But my favorite so far is &lt;a href="http://www.schemingmind.com/"&gt;SchemingMind.com&lt;/a&gt;. It requires a modest registration, but it is worth it. Unlike those other two, SchemingMind shows the game history, offers replaying of each move, stores your past games for later review, and might enforce more rules. eChess.org states clearly that rule enforcement is up to the players.&lt;br /&gt;&lt;br /&gt;I understand that there is &lt;a href="http://www.faqs.org/faqs/games/chess/gnu-faq/"&gt;another way to play&lt;/a&gt; where you install a client desktop application and configure it to connect to some chess server. But this has always seemed like too much trouble to me.&lt;br /&gt;&lt;br /&gt;There you have it, enough information to get you started burning all of your free time playing chess -- I mean keeping your mental faculties extra sharp via logical chess problem solving.&lt;br /&gt;&lt;br /&gt;Bring it on,&lt;br /&gt;- Eric&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=254601" width="1" height="1"&gt;</description></item><item><title>Event Debouncing</title><link>http://blogs.msdn.com/mscomts/archive/2004/11/08/254114.aspx</link><pubDate>Mon, 08 Nov 2004 21:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:254114</guid><dc:creator>mscomts</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mscomts/comments/254114.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mscomts/commentrss.aspx?PostID=254114</wfw:commentRss><description>&lt;P&gt;I have recently encountered a situation where my code was receiving objects sent, via a scoping event, from code on another thread.&amp;nbsp; These "scope" objects require my code to change state to reflect the object received.&amp;nbsp; This resulted in my code receiving scoping events at inopportune times (such as in the middle of working on the previous scope change).&amp;nbsp; I needed a way to "de-bounce" the scope changes in order to ignore them while I was updating, and also check when I was finished updating to see what scope changes had occurred while I was processing.&amp;nbsp; Here is a simple solution that I put together to help solve the problem.&amp;nbsp; The first code block shows my usage of the class, and the second is the class itself.&amp;nbsp; I hope you find it interesting (and maybe useful).&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Code Block #1: Usage&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private ScopeTracker _scopeTracker = new ScopeTracker( ScopeTracker.TrackingStyle.DiscardAllButLast );&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void OnScopeChanged(object scope)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _scopeTracker.TrackChange( scope );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If( !updatingState )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; if( _scopeTracker.IsNewScopeChange() )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.UpdateState( _scopeTracker.ConsumeNextScopeChange() );&lt;BR&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; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void UpdateState ( object o )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( updatingState )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; return;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; updatingState = true;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // do work on another thread (possibly)&amp;#8230;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; updatingState = false;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( _scopeTracker.IsNewScopeChange() )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; this.UpdateState( _scopeTracker.ConsumeNextScopeChange() );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Code Block #2: Class definition.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class ScopeTracker&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public enum TrackingStyle { QueueAll, DiscardAllButLast };&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object LastScopeChange&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _lastScopeChange;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private TrackingStyle _trackingStyle;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private Queue _trackedScopeChanges = new Queue();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private object _lastScopeChange = null;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ScopeTracker( TrackingStyle TrackingStyle )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; _trackingStyle = TrackingStyle;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Returns true if the change is tracked, else returns false.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="ScopeObject"&amp;gt;&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool TrackChange( object ScopeObject )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; bool bTracked = false;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If we are only tracking the last scope change, then throw away any previous&lt;BR&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; scope changes we are tracking.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( _trackingStyle == TrackingStyle.DiscardAllButLast )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _trackedScopeChanges.Clear();&lt;BR&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;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Only track changes if they are changes.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( 1 &amp;gt; _trackedScopeChanges.Count )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Since we don't have any changes in the queue check to see if this new&lt;BR&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; //&amp;nbsp;&amp;nbsp;&amp;nbsp; one is different than our last one.&lt;BR&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; if( _lastScopeChange != ScopeObject )&lt;BR&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;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _trackedScopeChanges.Enqueue( ScopeObject );&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bTracked = true;&lt;BR&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;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // We have changes in the queue, so see if this new one is the same as the last&lt;BR&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; //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; change we put in the queue.&lt;BR&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; if( ScopeObject != _trackedScopeChanges.Peek() )&lt;BR&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;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _trackedScopeChanges.Enqueue( ScopeObject );&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bTracked = true;&lt;BR&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;BR&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;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return bTracked;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object ConsumeNextScopeChange()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; if( 1 &amp;gt; _trackedScopeChanges.Count )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;BR&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;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _lastScopeChange = _trackedScopeChanges.Dequeue();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _lastScopeChange;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool IsNewScopeChange()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; if( 1 &amp;gt; _trackedScopeChanges.Count )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public object SyncToValidScope()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; if( this.IsNewScopeChange() )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this.ConsumeNextScopeChange();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( null != _lastScopeChange )&lt;BR&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;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _lastScopeChange;&lt;BR&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;BR&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; else&lt;BR&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;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;BR&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;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=254114" width="1" height="1"&gt;</description></item></channel></rss>