<?xml version="1.0"?>
<!-- RSS generated by Radio UserLand v8.0.8 on Sun, 12 Sep 2004 06:13:07 GMT -->
<rss version="2.0">
	<channel>
		<title>Mark Michaelis: Software Engineering</title>
		<link>http://mark.michaelis.net/weblog/categories/softwareEngineering/</link>
		<description>This category relates to interesting computer related stuff that I am researching or reading about.  Most of it is in the area of .NET technologies which is the focus of most of my computer related time at the moment.</description>
		<language>en-us</language>
		<copyright>Copyright 2004 Mark Michaelis</copyright>
		<lastBuildDate>Wed, 15 Dec 2004 04:15:20 GMT</lastBuildDate>
		<docs>http://backend.userland.com/rss</docs>
		<generator>Radio UserLand v8.0.8</generator>
		<managingEditor>mark@michaelis.net</managingEditor>
		<webMaster>mark@michaelis.net</webMaster>
		<category domain="http://www.weblogs.com/rssUpdates/changes.xml">rssUpdates</category> 
		<skipHours>
			<hour>18</hour>
			<hour>2</hour>
			<hour>3</hour>
			<hour>8</hour>
			<hour>4</hour>
			<hour>13</hour>
			<hour>0</hour>
			<hour>5</hour>
			</skipHours>
		<ttl>60</ttl>
		<item>
			<title>Moved my blog</title>
			<description>I have finally taken some time to get &lt;A href=&quot;http://mark.michaelis.net/Blog&quot;&gt;my blog&lt;/A&gt; running again.  The RSS feed is now &lt;A href=&quot;http://mark.michaelis.net/Blog/SyndicationService.asmx/GetRss&quot;&gt;here&lt;/A&gt;.</description>
			<guid>http://mark.michaelis.net/weblog/2004/09/24.html#a626</guid>
			<pubDate>Wed, 15 Dec 2004 04:15:20 GMT</pubDate>
			<comments></comments>
			</item>
		<item>
			<title>Applications: Running 32-Bit Applications with Windows Running on AMD Opteron and AMD Athlon 64 Systems</title>
			<description>&lt;P&gt;I came across this title in the release notes for the beta version of Windows 2003 for 64 bit AMD with SP1.&amp;nbsp; It seems innocuous enough at first.&amp;nbsp; The problem is in the details which I quote below:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;&lt;!--StartFragment --&gt;&amp;nbsp;Generally, you can run 32-bit applications on Windows Server&amp;nbsp;2003, Standard Edition; Windows Server&amp;nbsp;2003, Enterprise Edition; and Windows&amp;nbsp;XP 64-Bit Edition without making any changes. Applications that meet the following criteria, however, are not compatible with Windows products running on AMD Opteron and Athlon 64 systems: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Applications with 16-bit installers 
&lt;LI&gt;Applications that install 32-bit kernel-mode drivers 
&lt;LI&gt;&lt;FONT color=red&gt;Applications with dependencies on &lt;STRONG&gt;any&lt;/STRONG&gt; version of Microsoft .NET Framework&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;We recommend that you contact your software vendors to verify whether one of these exceptions applies to your software.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Hmmmmm... I think that could be a problem for me.&amp;nbsp; Uggghhhhhhh!!!!!!&amp;nbsp;&amp;nbsp;Besides, wasn&apos;t the .NET Framework supposed to deal explicitly with this problem?&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/09/11.html#a617</guid>
			<pubDate>Sun, 12 Sep 2004 06:08:54 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=617&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F09%2F11.html%23a617</comments>
			</item>
		<item>
			<title>System.Diagnostics.Stopwatch in .NET 2.0</title>
			<description>&lt;P&gt;&lt;IMG alt=&quot;A picture named System.Diagnostics.Stopwatch.jpg&quot; hspace=15 src=&quot;http://mark.michaelis.net/weblog/2004/09/10/System.Diagnostics.Stopwatch.jpg&quot; align=right vspace=5 border=0&gt;One omission from .NET 1.0 that would have been extremely useful is a Stopwatch that can report accurate time (presumably using the high performance counter APIs).&amp;nbsp; It is needed especially for doing any type of&amp;nbsp;small scale&amp;nbsp;testing.&amp;nbsp; Unfortunately, there is no such class in .NET 1.0.&amp;nbsp; However, 2.0 does have such a class in the &lt;A href=&quot;http://msdn2.microsoft.com/library/System.Diagnostics.aspx&quot;&gt;System.Diagnostics&lt;/A&gt; namespace called &lt;A href=&quot;http://msdn2.microsoft.com/library/System.Diagnostics.Stopwatch.aspx&quot;&gt;Stopwatch&lt;/A&gt;.&lt;/P&gt;
&lt;P align=left&gt;If you are stuck in the 1.0 world still then&amp;nbsp;&lt;A href=&quot;http://www.hh-system.com/danielstrigl&quot;&gt;Daniel Strigl&lt;/A&gt; has defined a class on &lt;A href=&quot;http://www.codeproject.com&quot;&gt;CodeProject&lt;/A&gt; called &lt;A href=&quot;http://www.codeproject.com/csharp/highperformancetimercshar.asp&quot;&gt;HiPerfTimer&lt;/A&gt; that could easily be converted to look like the &lt;A href=&quot;http://msdn2.microsoft.com/library/System.Diagnostics.Stopwatch.aspx&quot;&gt;Stopwatch&lt;/A&gt;&amp;nbsp;class in 2.0.&amp;nbsp;&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/09/10.html#a616</guid>
			<pubDate>Fri, 10 Sep 2004 17:24:59 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=616&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F09%2F10.html%23a616</comments>
			</item>
		<item>
			<title>Trying intraVnews, another Outlook Add-in RSS Reader </title>
			<link>http://www.intravnews.com/download.htm</link>
			<description>&lt;P&gt;In the past I have been a big fan of &lt;A href=&quot;http://www.newsgator.com/&quot;&gt;NewsGator&lt;/A&gt; and pretty much used it exclusively.&amp;nbsp; However, one particularly irritating feature of some blogs is that they only supply the title, posting URL,&amp;nbsp;and date in the RSS feed, forcing one to go to the website to view the body.&amp;nbsp; &lt;A href=&quot;http://www.intravnews.com/&quot;&gt;intraVnews&lt;/A&gt; deals with this issue displaying the&amp;nbsp;posting URL content&amp;nbsp;below the blog content.&amp;nbsp; This is a fantastic feature that allows one to still follow blogs that don&apos;t provide a body.&amp;nbsp; (This begs the question that perhaps blogs that don&apos;t provide a body should continue to be boycotted regardless of the tools to overcome the problem.)&lt;/P&gt;
&lt;P&gt;I am currently giving &lt;A href=&quot;http://www.intravnews.com/&quot;&gt;intraVnews&lt;/A&gt;&amp;nbsp;a try and so far I am reasonably pleased.&amp;nbsp; In fact, I have NewsGator and intraVnews installed simultaneously without problem.&amp;nbsp; My two negative comments on intraVnews relate to &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Moving blog folders -&amp;nbsp; The UI for this is rather cumbersome and time consuming if there are lots of blogs.&lt;/LI&gt;
&lt;LI&gt;The scheduler to download doesn&apos;t appear to autostart (presumably a setting I haven&apos;t found yet.)&amp;nbsp;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;One of the key items I need to investigate soon relates to exporting the settings of the RSS reader and then importing them once I re-install&amp;nbsp;the OS.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/06/03.html#a613</guid>
			<pubDate>Thu, 03 Jun 2004 07:34:50 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=613&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F06%2F03.html%23a613</comments>
			</item>
		<item>
			<title>From Cassette to Digital File with PlusDeck 2</title>
			<link>http://www.em411.com/show/hardware/188/1/plusdeck_2.html</link>
			<description>&lt;P&gt;&lt;A href=&quot;http://www.em411.com/show/hardware/188/1/plusdeck_2.html&quot;&gt;Here&lt;/A&gt; is an interesting device&amp;nbsp;especially if you already own a Windows Media PC and want to add cassette capabilities.&amp;nbsp; The &lt;A href=&quot;http://www.em411.com/show/hardware/188/1/plusdeck_2.html&quot;&gt;PlusDeck 2&lt;/A&gt; is an internal cassette deck for your computer that can help convert cassettes to their WMA/MP3 equivalent.&amp;nbsp; I have lots of cassettes, especially talks from Willow Creek, that I would love to convert just so they can be digitally organized.&amp;nbsp; I would then listen to the MP3s on my not-yet-existent mini Smart Phone with built in MP3 player (and Bluetooth of course).&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/06/02.html#a611</guid>
			<pubDate>Thu, 03 Jun 2004 05:59:23 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=611&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F06%2F02.html%23a611</comments>
			</item>
		<item>
			<title>Defining a Component in Software Engineering</title>
			<link>http://blogs.msdn.com/michael_platt/archive/2004/05/17/133201.aspx</link>
			<description>&lt;P&gt;When .NET was first released I was disappointed by the fact that they had not provided a definition for the term &quot;component.&quot;&amp;nbsp; The term was common in the COM days but it was never clearly defined as referring to a particular COM object or the DLL in which&amp;nbsp;the COM object&amp;nbsp;was implemented.&lt;/P&gt;
&lt;P&gt;Under .NET the definitions remain ambiguous and&amp;nbsp;at this point too many leading engineers have placed a stake in the ground one side or the other so it is unlikely to get resolved any time soon.&amp;nbsp;&amp;nbsp;Some, like Juval Lowy, firmly believe it corresponds to a class.&amp;nbsp; Other sway more&amp;nbsp;toward&amp;nbsp;it referring to an entire assemble.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I share &lt;A href=&quot;http://blogs.msdn.com/michael_platt/archive/2004/05/17/133201.aspx&quot;&gt;Michael Platt&apos;s amazement&lt;/A&gt; that these terms remain ambiguous given the length of time they have been pervasive in the industry.&amp;nbsp; Furthermore, the frequent need to create designs that include&amp;nbsp;classes as well as the containers of the class definitions would lead one to expect that their definitions were firmly established.&amp;nbsp; Perhaps what makes this even worse is that &quot;module&quot; now has a definite meaning in the .NET space.&amp;nbsp; Therefore, it cannot be used as the generic term for a container of&amp;nbsp;compiled code.&lt;/P&gt;
&lt;P&gt;Personally, I prefer the component to mean assembly (or container of compiled code)&amp;nbsp;as I don&apos;t believe there is any need to provide another word for object or class as these have firm O.O. definitions.&amp;nbsp; Furthermore, there is not really any generic term for the files (or streams)&amp;nbsp;that contain a series of bytes implementing a feature (or class etc.)&amp;nbsp; Component seems like a great term to fill this hole.&amp;nbsp; Recently I read &lt;A href=&quot;http://blogs.msdn.com/michael_platt/&quot;&gt;Michael Platt&apos;s&lt;/A&gt; &lt;A href=&quot;http://blogs.msdn.com/michael_platt/archive/2004/05/17/133201.aspx&quot;&gt;discussion of the terms Object, Component, Model, and Service&lt;/A&gt; and was pleased to hear I am not alone in my leanings.&lt;/P&gt;
&lt;P&gt;Thoughts?&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/06/02.html#a610</guid>
			<pubDate>Thu, 03 Jun 2004 00:10:32 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=610&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F06%2F02.html%23a610</comments>
			</item>
		<item>
			<title>Creating a Toggle Anchor Lock macro for images in word</title>
			<description>&lt;P&gt;I recently wanted a button or keystroke that could automatically toggle the Lock Anchor state for&amp;nbsp;shapes in Microsoft Word.&amp;nbsp; Unfortunately, there didn&apos;t seem to be a built-in Word action for doing this.&amp;nbsp;&amp;nbsp;Using a tip from&amp;nbsp;&lt;A href=&quot;http://homepage.swissonline.ch/cindymeister/CMpriv.htm&quot;&gt;Cindy Meister&lt;/A&gt; I created the following macro that does the trick nicely:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;Sub ToggleShapeAnchor()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim newlockAnchorSetting As Boolean&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Selection.Type = wdSelectionShape Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (Selection.ShapeRange.Count &amp;gt;= 1) Then&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; newlockAnchorSetting = Not Selection.ShapeRange(1).LockAnchor&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For Each Shape In Selection.ShapeRange&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; Shape.LockAnchor = newlockAnchorSetting&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;End Sub&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;I also had a problem with trying to make fine adjustments of the shapes.&amp;nbsp; Each adjustment caused the shape to jump a couple inches up the page.&amp;nbsp; Further adjustment caused it to jump again.&amp;nbsp; Cindy informed me that this was generally indicative of damage in the binary structures of the control page layout and advised I tried round tripping the file to RTF, WordML, or HTML.&amp;nbsp; I also found that turning on and off the anchor sometimes seemed to get particular images positioning correctly again.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/06/01.html#a608</guid>
			<pubDate>Wed, 02 Jun 2004 04:40:54 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=608&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F06%2F01.html%23a608</comments>
			</item>
		<item>
			<title>Viewing MSDN help externally from Visual Studio May 2005 Tech. Preview</title>
			<link>http://blogs.msdn.com/robcaron/archive/2004/05/27/143485.aspx</link>
			<description>&lt;P&gt;VS.NET external help didn&apos;t work for me until &lt;A href=&quot;http://www.breaman.net/&quot;&gt;Michael Stokesbary&lt;/A&gt; recommended&amp;nbsp;&lt;A href=&quot;http://blogs.msdn.com/robcaron/archive/2004/05/27/143485.aspx&quot;&gt;this post&lt;/A&gt; from &lt;A href=&quot;http://blogs.msdn.com/robcaron/&quot;&gt;Rob Caron&lt;/A&gt;.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/06/01.html#a607</guid>
			<pubDate>Wed, 02 Jun 2004 04:24:24 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=607&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F06%2F01.html%23a607</comments>
			</item>
		<item>
			<title>Comparison Operators not Behaving Equally</title>
			<link>http://www.gotdotnet.com/Community/MessageBoard/Thread.aspx?id=227150</link>
			<description>&lt;P&gt;The current &lt;A href=&quot;http://download.microsoft.com/download/8/1/6/81682478-4018-48fe-9e5e-f87a44af3db9/SpecificationVer2.doc&quot;&gt;C# 2.0 specification&lt;/A&gt; includes the following quote: &lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;&quot;A comparison operator (&lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;==&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;, &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;!=&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;, &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;&amp;lt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;, &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;&amp;gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;, &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;&amp;lt;=&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;, &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;&amp;gt;=&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;) has a lifted form when the operand types are both non-nullable value types and the result type is &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;bool&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;. The lifted form of a comparison operator&lt;SPAN style=&quot;mso-spacerun: yes&quot;&gt;&amp;nbsp; &lt;/SPAN&gt;is formed by adding a &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;?&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt; modifier to each operand type (but not to the result type). Lifted forms of the &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;==&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt; and &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;!=&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt; operators consider two null values equal, and a null value unequal to a non-null value. Lifted forms of the &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;&amp;lt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;, &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;&amp;gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;, &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;&amp;lt;=&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;, and &lt;/SPAN&gt;&lt;SPAN class=Codefragment&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-bidi-font-family: &apos;Times New Roman&apos;&quot;&gt;&lt;FONT face=&quot;Lucida Console&quot;&gt;&amp;gt;=&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt; operators return false if one or both operands are null.&quot;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;What does this mean?&lt;/P&gt;
&lt;P dir=ltr&gt;Perhaps the most significant concept in this paragraphs is at the end where it declares that&amp;nbsp;the operators &lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;lt;= &lt;/FONT&gt;and &lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;lt;=&lt;/FONT&gt; versus the operator &lt;FONT face=&quot;Courier, Monospace&quot;&gt;==&lt;/FONT&gt; behave differently for &lt;FONT face=&quot;Courier, Monospace&quot;&gt;Nullable&amp;lt;T&amp;gt;&lt;/FONT&gt; types when that have the value &lt;FONT face=&quot;Courier, Monospace&quot;&gt;null&lt;/FONT&gt;.&amp;nbsp; As a result, even though &lt;FONT face=&quot;Courier, Monospace&quot;&gt;==&lt;/FONT&gt; may return true, the &lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;gt;=&lt;/FONT&gt; operator and the&amp;nbsp;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;lt;=&lt;/FONT&gt; operator will sometimes return false.&amp;nbsp; Let&apos;s consider an example.&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P dir=ltr&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;&lt;FONT color=blue&gt;int&lt;/FONT&gt;&lt;FONT color=blue&gt;?&lt;/FONT&gt; x, y;&amp;nbsp;&amp;nbsp; &lt;FONT color=green&gt;&lt;A href=&quot;http:///&quot;&gt;&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt;&lt;/A&gt; Declares two variables of type Nullable&amp;lt;int&amp;gt; &lt;/FONT&gt;&lt;BR&gt;x = &lt;FONT color=blue&gt;null&lt;/FONT&gt;;&lt;BR&gt;y = &lt;FONT color=blue&gt;null&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face=Courier&gt;Assert.IsTrue(x == y);&lt;BR&gt;Assert.IsFalse(x &amp;lt;= y);&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;When &lt;FONT face=&quot;Courier, Monospace&quot;&gt;null&lt;/FONT&gt; is involved with a nullable type, therefore, the &amp;gt;= operator would not be equivalent to the combination of the &lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;gt;&lt;/FONT&gt; and &lt;FONT face=&quot;Courier, Monospace&quot;&gt;==&lt;/FONT&gt; operators.&amp;nbsp; In other words,&amp;nbsp; the&amp;nbsp;expression&amp;nbsp;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;x&amp;gt;=y&lt;/FONT&gt;&amp;nbsp;would not be equivalent to the combination of &lt;FONT face=&quot;Courier, Monospace&quot;&gt;x&amp;gt;y || x==y&lt;/FONT&gt;.&amp;nbsp; Perhaps what is most unusual about this is generally they operator &amp;gt;= is called greater-then-or-equal but in the case of both operands being null, the result of the &amp;gt;= operator would be not equal even though the &lt;FONT face=&quot;Courier, Monospace&quot;&gt;==&lt;/FONT&gt; operator&amp;nbsp;indicates they are equal.&lt;/P&gt;
&lt;P dir=ltr&gt;Furthermore if you were to sort a list of &lt;FONT face=&quot;Courier, Monospace&quot;&gt;Nullable&amp;lt;T&amp;gt;&lt;/FONT&gt; types using the&amp;nbsp;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;gt;&lt;/FONT&gt; operator for ascending order and the&amp;nbsp;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;lt;&lt;/FONT&gt; operator for descending order then regardless, all items with the value &lt;FONT face=&quot;Courier, Monospace&quot;&gt;null&lt;/FONT&gt; would sort to the same location regardless of which operator (&lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;lt;&lt;/FONT&gt; or &lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;gt;&lt;/FONT&gt;) was used (&lt;FONT face=&quot;Courier, Monospace&quot;&gt;null&lt;/FONT&gt; items would always sort to the top or the bottom regardless of which operator is used.)&lt;/P&gt;
&lt;P dir=ltr&gt;Note that currently the May 2005 Visual Studio.NET Tech. Preview does not support the&amp;nbsp;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;gt;=&lt;/FONT&gt; and &lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;lt;=&lt;/FONT&gt; operators.&amp;nbsp; Also, the &lt;FONT face=&quot;Courier, Monospace&quot;&gt;==&lt;/FONT&gt; operator is marked as obsolete.&lt;/P&gt;
&lt;P dir=ltr&gt;I would be curious to know what folks think about this implementation?&lt;/P&gt;
&lt;P dir=ltr&gt;(This topic is also being discussed at on the &lt;A href=&quot;http://www.gotdotnet.com/Community/MessageBoard/MessageBoard.aspx?id=5627&quot;&gt;GotDotNet C# Language Message&lt;/A&gt; board &lt;A href=&quot;http://www.gotdotnet.com/Community/MessageBoard/Thread.aspx?id=227150&quot;&gt;here&lt;/A&gt;.)&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/06/01.html#a606</guid>
			<pubDate>Tue, 01 Jun 2004 23:21:35 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=606&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F06%2F01.html%23a606</comments>
			</item>
		<item>
			<title>TechEd Webcasts</title>
			<description>&lt;P&gt;For those of you who were not able to make it to&amp;nbsp;&lt;A onclick=&quot;WindowSetFocus(this.href);return false;&quot; href=&quot;http://www.microsoft.com/seminar/teched2004/default.mspx&quot;&gt;Tech Ed 2004&lt;/A&gt;&amp;nbsp;this year, here are several of the developer related&amp;nbsp;talks that will be broadcast over the web (in date order):&lt;/P&gt;
&lt;P&gt;
&lt;TABLE id=dlSearchResults style=&quot;BORDER-COLLAPSE: collapse&quot; cellSpacing=0 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE cellSpacing=1 cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=searchEventList vAlign=center width=&quot;3%&quot;&gt;&lt;B&gt;1.&lt;/B&gt; &lt;/TD&gt;
&lt;TD class=searchLink vAlign=center noWrap align=left&gt;&lt;A onclick=&quot;WindowSetFocus(this.href);return false;&quot; href=&quot;http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032250704&quot;&gt;MSDN Webcast: Live from TechEd: Visual Studio Tools for Office - Nuts and Bolts &amp;#150; Level 200 &lt;/A&gt;&lt;/TD&gt;
&lt;TD vAlign=center align=left width=&quot;100%&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=searchEventList colSpan=3&gt;
&lt;DIV&gt;&lt;I&gt;5/24/2004 12:15 PM&lt;/I&gt; &lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE cellSpacing=1 cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=searchEventList vAlign=center width=&quot;3%&quot;&gt;&lt;B&gt;2.&lt;/B&gt; &lt;/TD&gt;
&lt;TD class=searchLink vAlign=center noWrap align=left&gt;&lt;A onclick=&quot;WindowSetFocus(this.href);return false;&quot; href=&quot;http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032250706&quot;&gt;MSDN Webcast: Live from TechEd: How Hackers Hack &amp;#150; Level 200 &lt;/A&gt;&lt;/TD&gt;
&lt;TD vAlign=center align=left width=&quot;100%&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=searchEventList colSpan=3&gt;
&lt;DIV&gt;&lt;I&gt;5/25/2004 12:15 PM&lt;/I&gt; &lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE cellSpacing=1 cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=searchEventList vAlign=center width=&quot;3%&quot;&gt;&lt;B&gt;3.&lt;/B&gt; &lt;/TD&gt;
&lt;TD class=searchLink vAlign=center noWrap align=left&gt;&lt;A onclick=&quot;WindowSetFocus(this.href);return false;&quot; href=&quot;http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032250526&quot;&gt;MSDN Webcast: Head-Spinning Interoperability in Managed C++ &amp;#150; Level 400 &lt;/A&gt;&lt;/TD&gt;
&lt;TD vAlign=center align=left width=&quot;100%&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=searchEventList colSpan=3&gt;
&lt;DIV&gt;&lt;I&gt;5/26/2004 11:00 AM&lt;/I&gt; &lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE cellSpacing=1 cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=searchEventList vAlign=center width=&quot;3%&quot;&gt;&lt;B&gt;4.&lt;/B&gt; &lt;/TD&gt;
&lt;TD class=searchLink vAlign=center noWrap align=left&gt;&lt;A onclick=&quot;WindowSetFocus(this.href);return false;&quot; href=&quot;http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032250528&quot;&gt;MSDN Architecture Webcast: patterns &amp;amp; practices Live: New Developments and Releases &amp;#150; Level 200 &lt;/A&gt;&lt;/TD&gt;
&lt;TD vAlign=center align=left width=&quot;100%&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=searchEventList colSpan=3&gt;
&lt;DIV&gt;&lt;I&gt;5/27/2004 11:00 AM&lt;/I&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE cellSpacing=1 cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=searchEventList vAlign=center width=&quot;3%&quot;&gt;&lt;B&gt;5.&lt;/B&gt; &lt;/TD&gt;
&lt;TD class=searchLink vAlign=center noWrap align=left&gt;&lt;A onclick=&quot;WindowSetFocus(this.href);return false;&quot; href=&quot;http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032250708&quot;&gt;MSDN Webcast: Live from TechEd: Whidbey IDE enhancements &amp;#150; Level 200 &lt;/A&gt;&lt;/TD&gt;
&lt;TD vAlign=center align=left width=&quot;100%&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=searchEventList colSpan=3&gt;
&lt;DIV&gt;&lt;I&gt;5/27/2004 11:45 AM &lt;/I&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;TABLE cellSpacing=1 cellPadding=0 width=&quot;100%&quot; border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=searchEventList vAlign=center width=&quot;3%&quot;&gt;&lt;B&gt;7.&lt;/B&gt; &lt;/TD&gt;
&lt;TD class=searchLink vAlign=center noWrap align=left&gt;&lt;A onclick=&quot;WindowSetFocus(this.href);return false;&quot; href=&quot;http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032250709&quot;&gt;MSDN Webcast: Live from TechEd: Identity Management in ASP.NET &amp;#150; Level 200 &lt;/A&gt;&lt;/TD&gt;
&lt;TD vAlign=center align=left width=&quot;100%&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=searchEventList colSpan=3&gt;
&lt;DIV&gt;&lt;I&gt;5/28/2004 12:15 PM&lt;/I&gt;&lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;I am not sure why these are the only ones showing up on the &lt;A href=&quot;http://msevents.microsoft.com&quot;&gt;Microsoft Event Search pages&lt;/A&gt;&amp;nbsp;so if you come across others please let me know.</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/05/23.html#a604</guid>
			<pubDate>Mon, 24 May 2004 05:05:05 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=604&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F05%2F23.html%23a604</comments>
			</item>
		<item>
			<title>Marking items in shared libraries as obsolete</title>
			<link>http://www.gotdotnet.com/team/changeinfo/V2.0/obsoletefaq.aspx</link>
			<description>&lt;P&gt;My primary responsibility at work over the past year has been to be lead a team of developers that is responsible for building a Framework on top of the .NET Framework that fills in all the holes the Microsoft left and defines best patterns and practices for my companies .NET development.&amp;nbsp; I&amp;nbsp;admit that unfortunately&amp;nbsp;sometimes we don&apos;t always get everything completed perfectly due to various constraints and then we have to go back in a later release and &quot;fix&quot; the problems we introduced.&amp;nbsp; The &lt;A href=&quot;http://www.gotdotnet.com/team/changeinfo/V2.0/obsoletefaq.aspx&quot;&gt;Making AP Is Obsolete&lt;/A&gt; practices documented here provide good guidelines on how to make changes to APIs in future releases.&amp;nbsp; Note that to depricate an API one decorates it with the &lt;FONT face=&quot;Courier, Monospace&quot;&gt;ObsoleteAttribute&lt;/FONT&gt; attribute.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/05/13.html#a601</guid>
			<pubDate>Fri, 14 May 2004 04:05:43 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=601</comments>
			</item>
		<item>
			<title>MSDE Query</title>
			<link>http://www.msde.biz/msdequery/download.htm</link>
			<description>&lt;P&gt;For the &lt;A href=&quot;http://inductivebible.org&quot;&gt;Inductive Bible program&lt;/A&gt;&amp;nbsp;(previously called eBible)&amp;nbsp;I am working we are currently using MSDE (assuming no SQL Server available).&amp;nbsp; Unfortunately, MSDE doesn&apos;t come with any management or query tools.&amp;nbsp; However, there are some free solutions out there that fulfill the purpose and are worth checking out.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.whitebearconsulting.com/Utilities.htm&quot;&gt;&lt;STRONG&gt;MSDE Manager&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;Includes both a .NET and an unmanaged version.&amp;nbsp; This is free for personal use.&amp;nbsp; The big plus of this tool over the others is that it includes database administration not just query capabilities so it is more than simply a replacement for query manager, offering more like the functional equivalent of Enterprise Manager.&amp;nbsp; The company, White Bear Consulting, also provides versions as controls that can be bundled into you applications for a reasonable fee.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href=&quot;http://www.msde.biz/msdequery/download.htm&quot;&gt;MSDE Query&lt;/A&gt;&lt;BR&gt;&lt;/STRONG&gt;The first tool I tried.&amp;nbsp; It works much like SQL Server&apos;s query manager, allowing you to select the database and then execute queries against the database.&amp;nbsp; It has an MDI interface so each query can be in its own window.&amp;nbsp; Results are reported either as text, the default, or into a grid.&amp;nbsp; Overall I would say this is a fully functional replacement for SQL Server&apos;s query manager.&amp;nbsp; The same company also has a program similar to Enterprise Manager at minimal cost that&amp;nbsp;is worth checking out if you need such a tool.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.codeproject.com/cs/database/msde-gui.asp&quot;&gt;&lt;STRONG&gt;MSDE GUI&lt;BR&gt;&lt;/STRONG&gt;&lt;/A&gt;Based on the screen shots this looks like another viable option that includes source code so you could perhaps include it into your own application.&amp;nbsp; Certainly worth checking out if you need to bundle something in your application.&lt;/P&gt;
&lt;P&gt;There are a couple issues with our choice for MSDE.&amp;nbsp; Firstly, I don&apos;t expect users of the software to have the most cutting edge computers or connections.&amp;nbsp; MSDE is a&amp;nbsp;45 MB download which would certainly be a hitch to telephone modem users especially given that they are also going to have to download the .NET Framework redistributable.&amp;nbsp; Secondly, it is not exactly clear whether we&amp;nbsp;should install even when there is already a SQL Server installation in order to protect the copyrighted material that we include.&amp;nbsp; Given our own MSDE instance we can control the security on the database but this would mean duplicate binary installs as well.&lt;/P&gt;
&lt;P&gt;(Updated 5/14/2004 by adding reference to &lt;A href=&quot;http://www.whitebearconsulting.com/Utilities.htm&quot;&gt;MSDE Manager&lt;/A&gt;&amp;nbsp;which is currently my favorite because of the database administration functionality.)&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/05/12.html#a600</guid>
			<pubDate>Wed, 12 May 2004 18:33:30 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=600</comments>
			</item>
		<item>
			<title>Beware of Inequalities with Floating Point Types</title>
			<description>&lt;P&gt;I have been playing around with the inaccuracies of floats and decided to share some of the simplest comparisons that might surprise folks that use the equality comparisons of floats indiscriminately.&lt;/P&gt;
&lt;P&gt;The following code listing pretty much captures the issues:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;&lt;FONT color=blue&gt;using&lt;/FONT&gt; System.Diagnostics;&lt;BR&gt;...&lt;BR&gt;&lt;FONT color=blue&gt;decimal&lt;/FONT&gt;&amp;nbsp;decimalNumber = 4.2M;&lt;BR&gt;&lt;FONT color=blue&gt;double&lt;/FONT&gt;&amp;nbsp;doubleNumber1 = 0.1F * 42F;&lt;BR&gt;&lt;FONT color=blue&gt;double&lt;FONT color=#000000&gt;&amp;nbsp;doubleNumber2 = 0.1D * 42D;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;&lt;FONT color=blue&gt;float&lt;/FONT&gt;&amp;nbsp;floatNumber = 0.1F * 42F;&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;Trace.Assert(decimalNumber != (&lt;FONT color=blue&gt;decimal&lt;/FONT&gt;)doubleNumber1);&lt;BR&gt;&lt;FONT color=green&gt;&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; Displays: 4.2 != 4.20000006258488&lt;/FONT&gt; &lt;BR&gt;System.Console.WriteLine(&quot;{0} != {1}&quot;, decimalNumber, (&lt;FONT color=blue&gt;decimal&lt;/FONT&gt;)doubleNumber1);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;Trace.Assert((&lt;FONT color=blue&gt;double&lt;/FONT&gt;)decimalNumber != doubleNumber1);&lt;BR&gt;&lt;FONT color=green&gt;&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; Displays: 4.2 != 4.20000006258488 &lt;BR&gt;&lt;/FONT&gt;System.Console.WriteLine(&quot;{0} != {1}&quot;, (&lt;FONT color=blue&gt;double&lt;/FONT&gt;)decimalNumber, doubleNumber1);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;Trace.Assert((&lt;FONT color=blue&gt;float&lt;/FONT&gt;)decimalNumber != floatNumber);&lt;BR&gt;&lt;FONT color=green&gt;&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; Displays: 4.2 != 4.2&lt;/FONT&gt; &lt;BR&gt;System.Console.WriteLine(&quot;{0} != {1}&quot;, (&lt;FONT color=blue&gt;float&lt;/FONT&gt;)decimalNumber, floatNumber);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;Trace.Assert(doubleNumber1 != (&lt;FONT color=blue&gt;double&lt;/FONT&gt;)floatNumber);&lt;BR&gt;&lt;FONT color=green&gt;&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; Displays: 4.20000006258488 != 4.20000028610229&lt;/FONT&gt; &lt;BR&gt;System.Console.WriteLine(&quot;{0} != {1}&quot;, doubleNumber1, (&lt;FONT color=blue&gt;double&lt;/FONT&gt;)floatNumber);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;Trace.Assert(doubleNumber1 != doubleNumber2);&lt;BR&gt;&lt;FONT color=green&gt;&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; Displays: 4.20000006258488 != 4.2 &lt;BR&gt;&lt;/FONT&gt;System.Console.WriteLine(&quot;{0} != {1}&quot;, doubleNumber1, doubleNumber2);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;Trace.Assert(floatNumber != doubleNumber2);&lt;BR&gt;&lt;FONT color=green&gt;&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; Displays: 4.2 != 4.2&lt;/FONT&gt; &lt;BR&gt;System.Console.WriteLine(&quot;{0} != {1}&quot;, floatNumber, doubleNumber2);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;Trace.Assert((&lt;FONT color=blue&gt;double&lt;/FONT&gt;)4.2F != 4.2D);&lt;BR&gt;&lt;FONT color=green&gt;&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; Display: 4.19999980926514 != 4.2&lt;/FONT&gt; &lt;BR&gt;System.Console.WriteLine(&quot;{0} != {1}&quot;, (&lt;FONT color=blue&gt;double&lt;/FONT&gt;)4.2F, 4.2D);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;Trace.Assert(4.2F != 4.2D);&lt;BR&gt;&lt;FONT color=green&gt;&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; Display: 4.2 != 4.2&lt;/FONT&gt; &lt;BR&gt;System.Console.WriteLine(&quot;{0} != {1}&quot;, 4.2F, 4.2D);&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P dir=ltr&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;I find&amp;nbsp;the results notable&amp;nbsp;in several regards: 
&lt;P&gt;&lt;/P&gt;
&lt;OL dir=ltr&gt;
&lt;LI&gt;
&lt;DIV&gt;You can use a &lt;FONT face=&quot;Courier, Monospace&quot;&gt;double&lt;/FONT&gt;&amp;nbsp;to expose the&amp;nbsp;inaccuracy of a float.&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;Comparing&amp;nbsp;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;decimalNumber&lt;/FONT&gt; and &lt;FONT face=&quot;Courier, Monospace&quot;&gt;floatNumber&lt;/FONT&gt; reveals they are not equal even though printing the values out to 20 decimal places indicates they are equivalent.&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;doubleNumber1&lt;/FONT&gt; and &lt;FONT face=&quot;Courier, Monospace&quot;&gt;floatNumber&lt;/FONT&gt; are not equivalent even though they are both assigned the exact same calculated value in the code.&amp;nbsp;&amp;nbsp;(In fact, the IL reveals the values are different.)&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;This is not just an issue of calculation as the last two assertions reveal.&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P dir=ltr&gt;The obvious question at this point is why?&lt;/P&gt;
&lt;OL dir=ltr&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;float&lt;/FONT&gt; is only accurate to 7 digits so if you cast it to a data type that can hold more than that you will inevitable expose the &quot;insignificant&quot; portion such that it becomes significant.&amp;nbsp; (This is why &lt;FONT face=&quot;Courier, Monospace&quot;&gt;(double)4.2F&lt;/FONT&gt;&lt;FONT face=Courier&gt;&amp;nbsp;does not equal&amp;nbsp;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;4.2D&lt;/FONT&gt;.)&lt;/FONT&gt;&lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;decimal, float&lt;/FONT&gt;&amp;nbsp;and &lt;FONT face=&quot;Courier, Monospace&quot;&gt;double&lt;/FONT&gt; get initialized with different calculated values because they require different levels of accuracy.&amp;nbsp; The decompiled IL code is as follows:&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;&lt;FONT face=Courier&gt;&lt;FONT color=#0000ff&gt;decimal&lt;/FONT&gt;&amp;nbsp;decimalNumber = 4.2;&lt;BR&gt;&lt;FONT color=blue&gt;double&lt;/FONT&gt;&amp;nbsp;doubleNumber1 = 4.200000062584877;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=blue&gt;&lt;FONT face=Courier&gt;double&lt;/FONT&gt;&lt;FONT face=Courier color=#000000&gt;&amp;nbsp;doubleNumber2 = 4.2000000000000002;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Courier&gt;&lt;FONT color=blue&gt;float&lt;/FONT&gt;&amp;nbsp;floatNumber = 4.2000003;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;
&lt;HR&gt;

&lt;P&gt;In response to and appreciation of &lt;A href=&quot;http://falafelsoft.com/Flogs/julian/articles/FloatEquality.aspx&quot;&gt;Julian&apos;s post here&lt;/A&gt; I took the time to correct my&amp;nbsp;post.&amp;nbsp; Thanks Julian!&lt;/P&gt;
&lt;P&gt;I should perhaps delete the entire post but I think my carelessness requires a correction.&amp;nbsp; The primary modifications are as follows:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;I updated the IL code.&amp;nbsp; Converting the hex values displayed by ILDasm. 
&lt;LI&gt;Deleted the &amp;nbsp;&quot;&lt;FONT face=Courier&gt;Trace.Assert((&lt;FONT color=blue&gt;decimal&lt;/FONT&gt;)4.2F != 4.2M);&lt;/FONT&gt;.&quot;&amp;nbsp; &quot;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;Trace.Assert(!4.2M.Equals(4.2F));&lt;/FONT&gt;&quot; was what I should have posted.&amp;nbsp; 
&lt;LI&gt;I updated the variable names to be slightly better. 
&lt;LI&gt;Deleted: &quot;Even though &lt;FONT face=&quot;Courier, Monospace&quot;&gt;floatNumber &lt;/FONT&gt;and&amp;nbsp;&lt;FONT face=Courier&gt;doubleNumber2&lt;/FONT&gt; are assigned the same values in IL they still don&apos;t evaluate as equal.&quot;&amp;nbsp; This was incorrect.&amp;nbsp; They are not assigned the same value in IL, only in C#. 
&lt;LI&gt;Delete: &quot;Any time you compare one &amp;lt;of these&amp;gt; types against another the &lt;FONT face=&quot;Courier, Monospace&quot;&gt;Equals(object value)&lt;/FONT&gt; method is called and it returns false if the data type is not the same. &quot;&amp;nbsp; It didn&apos;t really fit as I didn&apos;t use the &lt;FONT face=&quot;Courier, Monospace&quot;&gt;Equals()&lt;/FONT&gt; method in any of my code and generally the Equals() method is overloaded with a parameter that takes the class type. 
&lt;LI&gt;Deleted: &quot;If you remove the calculations and simply assign 4.2F ....&quot;&amp;nbsp; This was just incorrect (see colophon).&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;Colophon:&amp;nbsp; &lt;BR&gt;&lt;/STRONG&gt;The root cause of all the errors was the fact that I was using csc.exe for compiling and not VS.NET.&amp;nbsp; As a result, I forgot the /D:TRACE switch so assertions were ignored.&amp;nbsp; I am amazed that only one of the assertions in the end was invalid but regardless I should have been more careful.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/04/25.html#a598</guid>
			<pubDate>Mon, 26 Apr 2004 03:07:40 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=598&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F04%2F25.html%23a598</comments>
			</item>
		<item>
			<title>Outlook&apos;s &quot;I&apos;m sorry.... MapiExcption...&quot; Dialog</title>
			<description>&lt;P&gt;I unexpectedly received the following dialog from Microsoft Outlook 2003 after dialing in to my VPN.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=&quot;A picture named I&apos;mSorryMapiException.jpg&quot; src=&quot;http://mark1.michaelis.net/weblog/2004/04/23/I&apos;mSorryMapiException.jpg&quot;&gt;&lt;/P&gt;
&lt;P&gt;Perhaps what puzzles me most is exactly who &quot;I&apos;m&quot; is referring to.&amp;nbsp; I was not aware that my computer had feelings of remorse --&amp;nbsp;or any feelings for that matter.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/04/23.html#a596</guid>
			<pubDate>Sat, 24 Apr 2004 05:51:41 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=596&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F04%2F23.html%23a596</comments>
			</item>
		<item>
			<title>News Readers for Microsoft Outlook</title>
			<description>&lt;P&gt;I came across two NNTP news reader add-ins for Microsoft Outlook recently.&amp;nbsp; The first is &lt;A href=&quot;http://www.ghytred.com/NewsLook/about.aspx&quot;&gt;NewsLook&lt;/A&gt; and the second is from &lt;A href=&quot;http://www.mapilab.com/outlook/nntp/&quot;&gt;MAPILab&apos;s&lt;/A&gt;. It appears none of the have the fast efficient newsgroup reading support that comes with Agent Newsreader but still, the idea of integrating email, newsgroups and RSS (via NewsGator) is intriguing.&lt;/P&gt;
&lt;P&gt;By the way, why doesn&apos;t Outlook support the efficiencies of Agent?&amp;nbsp; I can go through hundreds of messages in Agent in short order and Outlook is an order of magnitude slower.&amp;nbsp; Perhaps the key differentiating factor is the single key accelerator keys (R versus CTRL+R for example) but I think there is more than that.&lt;/P&gt;
&lt;P&gt;Note that there is a &lt;A href=&quot;http://www.mapilab.com/outlook/&quot;&gt;host of Outlook&lt;/A&gt; tools from MAPILab&apos;s including a Redirector, Mailing List Service, Duplicate Email Remover and more that I would really like to try.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/04/23.html#a595</guid>
			<pubDate>Fri, 23 Apr 2004 11:45:10 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=595&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F04%2F23.html%23a595</comments>
			</item>
		<item>
			<title>NAS Versus SAN</title>
			<link>http://www.ftponline.com/wss/2003_05/magazine/features/tclark/default.aspx</link>
			<description>&lt;P&gt;This article contains a good introduction into the NAS and SAN storage options.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I recently&amp;nbsp;received a quote for a custom built&amp;nbsp;half-terabyte computer with hot swappable hard drives and an ATA serial controller.&amp;nbsp; The price was over $2,500, however, and this seemed higher than necessary.&amp;nbsp; You can by off the shelf NAS devices for less than that.&amp;nbsp; The unexpected costs were in the case (&lt;SPAN style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;SuperMicro SC742T-550 for $600) and the AMD mother board (&lt;SPAN style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;TYAN AMD-8000 Chipset Model: Tomcat K8S for $295).&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: &apos;Times New Roman&apos;; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: &apos;Times New Roman&apos;; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA&quot;&gt;I am interested to learn more about the &lt;A href=&quot;http://www.microsoft.com/windowsserversystem/storage/default.mspx&quot;&gt;Microsoft storage solutions&lt;/A&gt; that are coming out but the OEM hardware I have seen so far is similarly priced to the custom system.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/04/23.html#a594</guid>
			<pubDate>Fri, 23 Apr 2004 11:31:08 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=594&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F04%2F23.html%23a594</comments>
			</item>
		<item>
			<title>To write a book?</title>
			<link>http://www.simplegeek.com/commentview.aspx/d0eaf161-1a37-4562-acc4-61156e2943f7</link>
			<description>There is little that can be added to Chris Anderson&apos;s post on writing a book.&amp;nbsp; As an author of several, I think he hits the mark quite well.&amp;nbsp; However, I must agree with &lt;A href=&quot;http://www.mikepope.com/blog/&quot;&gt;Mike&apos;s&lt;/A&gt;&amp;nbsp;comment that, &quot;Writing is a great way to learn something.&quot;&amp;nbsp; This is perhaps the greatest motivator for me.</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/04/23.html#a592</guid>
			<pubDate>Fri, 23 Apr 2004 11:19:54 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=592&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F04%2F23.html%23a592</comments>
			</item>
		<item>
			<title>Mobile/Wireless highlights from around the Web</title>
			<link>http://www.computerworld.com/mobiletopics/mobile/story/0,10801,74404,00.html?nas=MW-74404</link>
			<description>&lt;P&gt;&lt;A href=&quot;http://www.computerworld.com/mobiletopics/mobile/story/0,10801,74404,00.html?nas=MW-74404&quot;&gt;This story&lt;/A&gt; is noteworthy just because it puts Spokane on the map in a technology rag which is a pretty rare occurrence.&amp;nbsp; I confess, however, I have never connected to the &lt;A href=&quot;http://www.newsalert.com/bin/story?StoryId=Cqf_eubKbmdGZyJe4mdK&amp;amp;FQ=Vivato&amp;amp;Nav=na-search-&amp;amp;StoryTitle=Vivato&quot;&gt;&quot;city-wide&quot; wireless network&lt;/A&gt; as I rarely go downtown (although it is only 20 minutes drive from my house) and when I do it is usually for recreational purposes and my laptop doesn&apos;t accompany me.&lt;/P&gt;
&lt;P&gt;As it turns out, I am more likely to use the &lt;A href=&quot;http://www.suntimes.com/output/business/cst-fin-wifi10.html&quot;&gt;wireless networks in Chicago&apos;s airports&lt;/A&gt; than the ones in Spokane as I travel there and through relatively frequently and I really like to connect when I travel.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/04/23.html#a591</guid>
			<pubDate>Fri, 23 Apr 2004 11:15:38 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=591&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F04%2F23.html%23a591</comments>
			</item>
		<item>
			<title>RSS and SourceSafe</title>
			<link>http://www.rassoc.com/gregr/weblog/archive.aspx?post=615</link>
			<description>Today I updated the &lt;A href=&quot;http://www.michaelis.net/SourceSafe/Faq.htm&quot;&gt;Source Safe FAQ&lt;/A&gt; with information about the &lt;A href=&quot;http://www.rassoc.com/gregr/weblog/archive.aspx?post=615&quot;&gt;RSS Feed for Source Safe&lt;/A&gt; that Greg Reinacker posted.</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/04/23.html#a590</guid>
			<pubDate>Fri, 23 Apr 2004 11:01:29 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=590&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F04%2F23.html%23a590</comments>
			</item>
		<item>
			<title>Slow shutdown of Windows 2003 Server after installing Exchange 2003 Server</title>
			<link>http://support.microsoft.com/default.aspx?scid=kb;en-us;555025</link>
			<description>&lt;P&gt;&lt;A href=&quot;http://support.microsoft.com/default.aspx?scid=kb;en-us;555025&quot;&gt;KB article 555025&lt;/A&gt;&amp;nbsp;and&amp;nbsp;&lt;A href=&quot;http://support.microsoft.com/default.aspx?scid=kb;en-us;829361&quot;&gt;829361&lt;/A&gt; describe a way to decrease the shutdown time of Windows 2003 Server with Exchange 2003.&amp;nbsp; What amazes me is that there is no way to configure the dependency between services so that this happens automagically (they seem to be configured already but the delay still exists.)&amp;nbsp; Neither does there appear to be any Windows support for auto-starting a process at Shutdown time (to automatically do as the KB article suggests.)&amp;nbsp; By the way, Exchange 5.0/5.5 appear to have the same problem as described &lt;A href=&quot;http://support.microsoft.com/default.aspx?scid=kb;en-us;246287&quot;&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I was also frustrated again by the fact that the dependency tree between services is read-only in the Services dialog.&amp;nbsp; However, as the &lt;A href=&quot;http://www.jsiinc.com/SUBA/tip0000/rh0069.htm&quot;&gt;JSI FAQ&amp;nbsp;TIP 0069&lt;/A&gt; indicates, you can modify the dependency tree from registry key HKEY_LOCAL_MACHINESystemCurrentControlSetServices and modifying the DependsOnService key of the particular service you want to modify.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/04/23.html#a588</guid>
			<pubDate>Fri, 23 Apr 2004 09:29:31 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=588&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F04%2F23.html%23a588</comments>
			</item>
		<item>
			<title>Rename Files to Match Date/Time Stamp with Batch File</title>
			<link>http://www.pcmag.com/article2/0,1759,1386947,00.asp</link>
			<description>&lt;P&gt;&lt;A href=&quot;http://www.pcmag.com/article2/0,1759,1386947,00.asp&quot;&gt;This article&lt;/A&gt; provided some interesting insight into the power of the Windows XP FOR command that I appreciated as I was trying to do some renaming to a name that included the file date myself.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/04/23.html#a587</guid>
			<pubDate>Fri, 23 Apr 2004 09:22:09 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=587&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F04%2F23.html%23a587</comments>
			</item>
		<item>
			<title>Synchronizing Folders Revisited</title>
			<link>http://www.secondcopy.com/index.html</link>
			<description>Some time ago now I commented on my need for synchronizing folders between computers and the fact that I was unable to find the ideal solution.&amp;nbsp; Ted Kekatos pointed me to &lt;A href=&quot;http://www.secondcopy.com&quot;&gt;Second Copy&lt;/A&gt; which look promising.</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/04/02.html#a584</guid>
			<pubDate>Fri, 02 Apr 2004 12:36:22 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=584&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F04%2F02.html%23a584</comments>
			</item>
		<item>
			<title>ASUS WL-330 Pocket Wireless Access Point </title>
			<link>http://usa.asus.com/products/communication/wireless/wl-330/overview.htm</link>
			<description>&lt;P&gt;I have been wanting a portable access point for some time now and I happened to run across this one while browsing the ASUS site.&amp;nbsp; The description is as follows:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style=&quot;MARGIN-RIGHT: 0px&quot;&gt;
&lt;P&gt;As small as a deck of cards, the Pocket Wireless AP WL-330 is not only a wireless access point (AP) but also a wireless bridge/ repeater and wireless Ethernet adapter.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Seems just about perfect except that it still requires the AC Adapter rather than charging off of USB.&amp;nbsp; Now that would be ideal.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/04/02.html#a583</guid>
			<pubDate>Fri, 02 Apr 2004 12:27:33 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=583&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F04%2F02.html%23a583</comments>
			</item>
		<item>
			<title>SharePoint Customization Site</title>
			<link>http://www.sharepointcustomization.com</link>
			<description>The SharePoint customization site seems like a useful resource if you are looking to do that type of thing.&amp;nbsp; The key tool is FrontPage 2003.&amp;nbsp; The site includes a bunch of &lt;A href=&quot;http://www.sharepointcustomization.com/wss/articles.htm&quot;&gt;How-To articles&lt;/A&gt;&amp;nbsp;and &lt;A href=&quot;http://www.sharepointcustomization.com/resources/codesamples.htm#ShowHideAnswers&quot;&gt;Code Samples&lt;/A&gt;&amp;nbsp;(Next time I am board I will switch the &lt;A href=&quot;http://www.michaelis.net/SourceSafe&quot;&gt;VSS FAQ&lt;/A&gt; to use &lt;A href=&quot;http://www.sharepointcustomization.com/resources/codesamples/faqshowhide/faq_example.htm&quot;&gt;this code&lt;/A&gt;).&amp;nbsp; I am intrigued by the &lt;A href=&quot;http://www.sharepointcustomization.com/features/default.htm#XML_and_the_New_XSLT_Editor&quot;&gt;XML/XSLT&lt;/A&gt; editor that can be done on live data as my team previously had trouble with accessing data except via web services.</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/03/04.html#a579</guid>
			<pubDate>Thu, 04 Mar 2004 15:16:37 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=579&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F03%2F04.html%23a579</comments>
			</item>
		<item>
			<title>What&apos;s New in Microsoft Office Outlook 2003 for Developers?</title>
			<link>http://msdn.microsoft.com/office/default.aspx?pull=/library/en-us/odc_ol2003_ta/html/odc_olwhatsnew2k3.asp</link>
			<description>&lt;P&gt;Informative&amp;nbsp;&lt;A href=&quot;http://msdn.microsoft.com/office/default.aspx?pull=/library/en-us/odc_ol2003_ta/html/odc_olwhatsnew2k3.asp&quot;&gt;article&lt;/A&gt; on developing against new Outlook 2003 features.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/03/04.html#a578</guid>
			<pubDate>Thu, 04 Mar 2004 13:37:46 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=578&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F03%2F04.html%23a578</comments>
			</item>
		<item>
			<title>Google Stuff You Might Not Know About</title>
			<link>http://www.google.com/help/features.html</link>
			<description>&lt;P&gt;Ted Kekatos (founder of &lt;A href=&quot;http://www.sysadminday.com/&quot;&gt;sysadminday.com&lt;/A&gt;) pointed out to me some of the not-so-well known features of Google such as the calculator, dictionary, &lt;A href=&quot;http://www.google.com/help/features.html#number&quot;&gt;search by number&lt;/A&gt;&amp;nbsp;(support VIN, package tracking, area codes, etc), and more.&amp;nbsp; Also, if you wish to modify your Google search preferences such as number of items returned and default language go &lt;A href=&quot;http://www.google.com/preferences&quot;&gt;here&lt;/A&gt;.&lt;/P&gt;</description>
			<guid>http://mark.michaelis.net/weblog/categories/softwareEngineering/2004/03/03.html#a576</guid>
			<pubDate>Thu, 04 Mar 2004 04:27:28 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114349&amp;amp;p=576&amp;amp;link=http%3A%2F%2Fmark.michaelis.net%2Fweblog%2F2004%2F03%2F03.html%23a576</comments>
			</item>
		</channel>
	</rss>
