<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sankofa &#187; ASP.NET</title>
	<atom:link href="http://blog.ianuy.com/tag/aspnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ianuy.com</link>
	<description>From Script Kiddie to Professional Software Developer</description>
	<lastBuildDate>Fri, 31 Dec 2010 17:42:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ASP.NET 1.X to ASP.NET 2.0 Migration Postback Problem</title>
		<link>http://blog.ianuy.com/2009/05/17/aspnet-1x-to-aspnet-20-migration-postback-problem/</link>
		<comments>http://blog.ianuy.com/2009/05/17/aspnet-1x-to-aspnet-20-migration-postback-problem/#comments</comments>
		<pubDate>Sun, 17 May 2009 15:40:17 +0000</pubDate>
		<dc:creator>Ian Uy</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.ianuy.com/?p=316</guid>
		<description><![CDATA[If you&#8217;ve read my previous blog post, I talked about some of the problems encountered while migrating some of our web applications from .NET 1.1 to .NET 2.0. Well, those products are now handed off to the Test Department for their routine torture.
Just a couple of days after the hand-off (Hand-off to Test or HOTT), [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_317" class="wp-caption aligncenter" style="width: 237px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/7259_bird_cartoon.gif"><img class="size-medium wp-image-317" title="ASP.NET Migration Problem" src="http://blog.ianuy.com/wp-content/uploads/2009/05/7259_bird_cartoon-227x300.gif" alt="ASP.NET Migration Problem" width="227" height="300" /></a><p class="wp-caption-text">ASP.NET Migration Problem</p></div>
<p>If you&#8217;ve read my <a title="Migration: Why Developers Hate Microsoft or Why Developers Hate Vista or My First Encounter how Microsoft can Break your Software " href="http://blog.ianuy.com/2009/05/10/migration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software/" target="_blank">previous blog post</a>, I talked about some of the problems encountered while migrating some of our web applications from .NET 1.1 to .NET 2.0. Well, those products are now handed off to the Test Department for their routine torture.</p>
<p>Just a couple of days after the hand-off (Hand-off to Test or HOTT), the tester who is testing the product filed two (2) Tracks (Incident/Bug/Problem). Since I am the only developer working on the product, all of the tracks will automatically be assigned to me. The said tracks that were filed have the same &#8220;type&#8221; of problem.</p>
<blockquote><p>When browsing for a file (Backup File / File Upload), the value of the Textbox would change back to its default value when the page re-loads.</p></blockquote>
<p><span id="more-316"></span></p>
<p>The web application that I am supporting was originally written in .NET 1.1 using Visual Studio 2003. To migrate it to .NET 2.0, we converted the solutions to VS2005. Aside from some<a title="Migration: Why Developers Hate Microsoft or Why Developers Hate Vista or My First Encounter how Microsoft can Break your Software " href="http://blog.ianuy.com/2009/05/10/migration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software/" target="_blank"> minor problems like RESX incompatibility and broken Calendar Controls</a>, the Web Application worked &#8212; I thought it did.</p>
<p>We have a <em>Backup Restoration Page<strong> </strong></em>to allow the user to restore the web application in-case of Armageddon-like circumstances. The said page basically contain 3 components:</p>
<ol>
<li>A <strong>Read-Only </strong>Textbox that holds the path of the <strong>Backup File</strong> . This Textbox has a default value of <span style="text-decoration: underline;">C:\Backups\Backup.bak</span></li>
<li>A Browse button that will launch a custom page that will allow the user to browse for the <strong>Backup File</strong>. The value selected there will be posted-back to the <em>Backup Restoration Page.</em></li>
<li>A &#8220;Restore&#8221; button to start the restoration process.</li>
</ol>
<p>When I tried to repro (reproduce) the bug on my Virtual Machine setup, I was able to verify that the path of the Backup File is losing its value on postback. To put it more precisely, the Textbox is not retaining the correct path since it is changing back to its default value on postback.</p>
<p>After hours of debugging, I was no where close in determining the cause of the problem. So I did a quick search on Google and found out that this is a common problem during migration from ASP.NET 1.1 to ASP.NET 2.0.</p>
<p>The problem is that Microsoft changed the behavior of read-only textboxes on ASP.NET 2.0.</p>
<blockquote><p>ASP.NET 2.0 had a design change by which a control if marked with its ReadOnly property as true, would ignore client side changes and would lose the same across postback. So if you tried modifying the text box value or add a value to the text box using Javascript you wouldnt be able to retireve the value in the code behind or simply the value will be lost across postback.</p></blockquote>
<p><span style="color: #000000;"><span id="ctl00_ContentPlaceHolder1_lblDescription">This behaviour is by design in ASP.NET 2.0 and it has been designed with the idea that a ReadOnly TextBox shouldnt be modified in the client side by a malicious code.</span></span></p>
<p><span style="color: #000000;"><br />
Microsoft has a point. What&#8217;s the point of using a Textbox if you&#8217;re going to set it to Read-Only? Why not use a Label instead?</span></p>
<p>Fortunately, we have three simple <strong>workarounds</strong> for this problem.</p>
<ol>
<li>Use a Label instead of a Read-Only Textbox. (Heard of Borders?)</li>
<li>Set the Read-Only property of the Textbox to <em>FALSE </em>(If you don&#8217;t really need the Read-Only Property)</li>
<li>But if you are really insisting of using a Read-Only Textbox, then we need to &#8220;fool&#8221; ASP.NET that the Textbox is not Read-Only even if it is.</li>
</ol>
<p>To &#8220;fool&#8221; ASP.NET, you need to set the Read-Only property of the Textbox to <span style="color: #0000ff;">FALSE</span> during design time (Using the Property Pane) then <strong>set it to Read-Only on Page Load during runtime</strong>. <strong>You CANNOT use Textbox1.ReadOnly = true. </strong>You need to set the read-only attribute using the Attribute.Add() method.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">// This is part of the C# code-behind file.</span>
<span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">void</span> Page_Load<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, EventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
     TextBox1.<span style="color: #0000FF;">Attributes</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;readonly&quot;</span>, <span style="color: #666666;">&quot;readonly&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>That will solve your postback problems. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>References:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.readonly.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.readonly.aspx</a></li>
<li><a href="http://www.dotnetspider.com/resources/3120-ASP-NET--TextBox-Ready-Only-losing-client-side-changes-values-across-postback.aspx" target="_blank">http://www.dotnetspider.com/resources/3120-ASP-NET&#8211;TextBox-Ready-Only-losing-client-side-changes-values-across-postback.aspx</a></li>
<li><a href="http://stackoverflow.com/questions/856838/migration-asp-net-1-1-to-asp-net-2-0-broken-postback" target="_blank">http://stackoverflow.com/questions/856838/migration-asp-net-1-1-to-asp-net-2-0-broken-postback</a></li>
</ul>



Share and Enjoy:


	<a rel="nofollow" href="mailto:?subject=ASP.NET%201.X%20to%20ASP.NET%202.0%20Migration%20Postback%20Problem&amp;body=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F17%2Faspnet-1x-to-aspnet-20-migration-postback-problem%2F" title="E-mail this story to a friend!"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F17%2Faspnet-1x-to-aspnet-20-migration-postback-problem%2F&amp;title=ASP.NET%201.X%20to%20ASP.NET%202.0%20Migration%20Postback%20Problem&amp;bodytext=%0A%0D%0AIf%20you%27ve%20read%20my%20previous%20blog%20post%2C%20I%20talked%20about%20some%20of%20the%20problems%20encountered%20while%20migrating%20some%20of%20our%20web%20applications%20from%20.NET%201.1%20to%20.NET%202.0.%20Well%2C%20those%20products%20are%20now%20handed%20off%20to%20the%20Test%20Department%20for%20their%20routine%20torture." title="Digg"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F17%2Faspnet-1x-to-aspnet-20-migration-postback-problem%2F&amp;title=ASP.NET%201.X%20to%20ASP.NET%202.0%20Migration%20Postback%20Problem" title="Reddit"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F17%2Faspnet-1x-to-aspnet-20-migration-postback-problem%2F&amp;title=ASP.NET%201.X%20to%20ASP.NET%202.0%20Migration%20Postback%20Problem&amp;notes=%0A%0D%0AIf%20you%27ve%20read%20my%20previous%20blog%20post%2C%20I%20talked%20about%20some%20of%20the%20problems%20encountered%20while%20migrating%20some%20of%20our%20web%20applications%20from%20.NET%201.1%20to%20.NET%202.0.%20Well%2C%20those%20products%20are%20now%20handed%20off%20to%20the%20Test%20Department%20for%20their%20routine%20torture." title="del.icio.us"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://twitter.com/home?status=ASP.NET%201.X%20to%20ASP.NET%202.0%20Migration%20Postback%20Problem%20-%20http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F17%2Faspnet-1x-to-aspnet-20-migration-postback-problem%2F" title="Twitter"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=ASP.NET%201.X%20to%20ASP.NET%202.0%20Migration%20Postback%20Problem&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F17%2Faspnet-1x-to-aspnet-20-migration-postback-problem%2F" title="Slashdot"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F17%2Faspnet-1x-to-aspnet-20-migration-postback-problem%2F&amp;t=ASP.NET%201.X%20to%20ASP.NET%202.0%20Migration%20Postback%20Problem" title="Facebook"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F17%2Faspnet-1x-to-aspnet-20-migration-postback-problem%2F&amp;t=ASP.NET%201.X%20to%20ASP.NET%202.0%20Migration%20Postback%20Problem" title="MySpace"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F17%2Faspnet-1x-to-aspnet-20-migration-postback-problem%2F&amp;title=ASP.NET%201.X%20to%20ASP.NET%202.0%20Migration%20Postback%20Problem&amp;annotation=%0A%0D%0AIf%20you%27ve%20read%20my%20previous%20blog%20post%2C%20I%20talked%20about%20some%20of%20the%20problems%20encountered%20while%20migrating%20some%20of%20our%20web%20applications%20from%20.NET%201.1%20to%20.NET%202.0.%20Well%2C%20those%20products%20are%20now%20handed%20off%20to%20the%20Test%20Department%20for%20their%20routine%20torture." title="Google Bookmarks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F17%2Faspnet-1x-to-aspnet-20-migration-postback-problem%2F&amp;title=ASP.NET%201.X%20to%20ASP.NET%202.0%20Migration%20Postback%20Problem" title="DotNetKicks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.ianuy.com/2009/05/17/aspnet-1x-to-aspnet-20-migration-postback-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migration: Why Developers Hate Microsoft or Why Developers Hate Vista or My First Encounter how Microsoft can Break your Software</title>
		<link>http://blog.ianuy.com/2009/05/10/migration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software/</link>
		<comments>http://blog.ianuy.com/2009/05/10/migration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software/#comments</comments>
		<pubDate>Sun, 10 May 2009 14:13:29 +0000</pubDate>
		<dc:creator>Ian Uy</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.ianuy.com/?p=262</guid>
		<description><![CDATA[In my previous blog post, I&#8217;ve mentioned that I&#8217;m working on a project to migrate an entire product line to Vista. What I meant by that is that I am responsible for making sure that our current product will run properly on Windows Vista. To guarantee that it is indeed Running Properly it should behave [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_263" class="wp-caption aligncenter" style="width: 546px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/windowsvistalogo.jpg"><img class="size-full wp-image-263" title="Windows Vista Compatible Logo" src="http://blog.ianuy.com/wp-content/uploads/2009/05/windowsvistalogo.jpg" alt="Do you know how much Programmer's Blood it cost to put this tiny sticker in a Software Box?" width="536" height="262" /></a><p class="wp-caption-text">Do you know how much Programmer&#39;s Blood it cost to put this tiny sticker in a Software Box?</p></div>
<p>In my <a title="Coding Horror 01: Readability vs Efficiency " href="http://blog.ianuy.com/2009/04/26/coding-horror-01-readability-vs-efficiency/" target="_blank">previous blog post</a>, I&#8217;ve mentioned that I&#8217;m working on a project to migrate an entire product line to Vista. What I meant by that is that I am responsible for making sure that our current product will run properly on Windows Vista. To guarantee that it is indeed <em>Running Properly</em> it should behave *exactly* like it behaves in Windows XP.  In simple terms, my entire job security is riding on making our products compatible with Microsoft&#8217;s failed attempt at a MAC-ish Operating System and with Microsoft&#8217;s successful attempt (a first in their history) to make their operating system <strong>NOT</strong> backward compatible with older applications. So much for <a title="Raymond Chen's Blog" href="http://blogs.msdn.com/oldnewthing/" target="_blank">Raymond Chen</a>&#8217;s camp <a title="How Microsoft Lost the API War" href="http://joelonsoftware.com/articles/APIWar.html" target="_blank">undying obsession with backward compatibility</a>.</p>
<p>This products that I&#8217;m talking about are a set of Web Applications written in ASP.NET version 1.1. This web applications are as old as Windows XP. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' />  I checked its File Modification History in our TFS repository and the last time that anyone have touched its code base is in 2005 &#8212; and that&#8217;s just for a minor code modification to fix a bug. I believe this apps were written way way back in 2004 &#8212; when I was in Third Year High School! <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>To make this products compatible with Vista, there are a couple of steps that had to be done. I&#8217;ll enumerate each steps and what it takes to accomplish them.</p>
<p><span id="more-262"></span></p>
<h3>.NET Upgrade (.NET 1.1 to .NET 2.0)</h3>
<p>Windows Vista comes pre-installed with .NET 2.0 (and .NET 3.0). Our products are running on .NET 1.1. One approach that most people will suggest is to just install .NET 1.1 on Windows Vista and everything will be perfect. Right? WRONG. Firstly, .NET 1.1 has already reached its end-of-life. Microsoft pulled support for .NET 1.1 last October 14, 2008. Although it was extended, its a sign that this technology is <em>old enough</em> to be replaced. Secondly, installing .NET 1.1 on a Vista machine is not as <a href="http://geekycoder.wordpress.com/2007/10/08/installing-microsoft-net-11-framework-on-windows-vista-without-tears/" target="_blank">easy</a> <a href="http://www.mydigitallife.info/2007/12/27/install-microsoft-net-framework-11-on-windows-vista-fix-regsvcsexe-fails-error/" target="_blank">as</a> <a href="http://searchwindevelopment.techtarget.com/tip/0,289483,sid8_gci1237467,00.html" target="_blank">you</a> <a href="http://www.sharpdeveloper.net/content/archive/2008/10/07/setup-aspnet-11-on-vista.aspx" target="_blank">think</a>. No, we are not lazy programmers, we just don&#8217;t want to introduce unnecessary complications to the system. We are, by the way, <a title="Coding Horror 01: Readability vs Efficiency " href="http://blog.ianuy.com/2009/04/26/coding-horror-01-readability-vs-efficiency/" target="_blank">Software Developers</a>.</p>
<div id="attachment_270" class="wp-caption aligncenter" style="width: 224px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/lazy-programmers.jpg"><img class="size-medium wp-image-270" title="Lazy Programmers" src="http://blog.ianuy.com/wp-content/uploads/2009/05/lazy-programmers-214x300.jpg" alt="Those Lazy Programmers" width="214" height="300" /></a><p class="wp-caption-text">Those Lazy Programmers</p></div>
<p>So the approach we took is to upgrade our Visual Studio 2003 solutions to Visual Studio 2005 solutions. This, in turn, will &#8220;force&#8221; the web application to use .NET 2.0. You might say, &#8220;How hard could it be? Visual Studio 2005 can convert old solutions automatically using its <em>Upgrade Wizard. </em>All you have to do is click next!, You lazy programmer!&#8221;. That&#8217;s correct. Upgrading the solution is no problem. Converting every file to .NET 2.0 compliant code <em>is</em>.</p>
<p>We encountered two conversion problems. The first one is relatively simple to fix. It&#8217;s a problem where the old .NET 1.1 Resource files (*.resx) were not converted to the .NET 2.0 resource files. The two resource file formats are different (the .NET 2.0 have a *.designer.cs component) and in very rare cases, the .NET 1.1 *resx files won&#8217;t work in .NET 2.0. This problem is very hard to catch since the incompatible *.resx files won&#8217;t throw a compile error. The strings just won&#8217;t be detected. But once found it was relatively easy to fix. After a day of investigation, we found out that the XML format for the resource files changed in .NET 2.0. As a simple hack (fix), we manually changed the &lt;string&gt; parameters of each .NET 1.1 strings to match the .NET 2.0 &lt;string&gt; parameters.</p>
<p>The second problem is harder to find and much much harder to fix. The problem is related to ASP.NET&#8217;s datetime picker control.</p>
<div id="attachment_274" class="wp-caption aligncenter" style="width: 282px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/workingaspnet.jpg"><img class="size-full wp-image-274" title="ASP.NET 1.1 Calendar Control" src="http://blog.ianuy.com/wp-content/uploads/2009/05/workingaspnet.jpg" alt="Our Calendar Control before upgrading to .NET 2.0" width="272" height="214" /></a><p class="wp-caption-text">Our Calendar Control before upgrading to .NET 2.0</p></div>
<p>On our previous version running .NET 1.1, there is no problem with the datetime picker. But when we installed the .NET 2.0 version, the calendar objects are all over the place.</p>
<div id="attachment_275" class="wp-caption aligncenter" style="width: 1034px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/brokencontrol.jpg"><img class="size-large wp-image-275" title="Broken ASP.NET Calendar Control" src="http://blog.ianuy.com/wp-content/uploads/2009/05/brokencontrol-1024x211.jpg" alt="Broken ASP.NET Calendar Control" width="1024" height="211" /></a><p class="wp-caption-text">The Migrated .NET 2.0 Calendar Control</p></div>
<p style="text-align: left;">Two days of investigation later, we found out that the previous developer made this custom Calendar control by inheriting from .NET 1.1&#8217;s System.Web.Controls. During pre-render, he reads the rendered Calendar Control&#8217;s HTML and then does something funny with it. What he wanted to achieve is to replace the &#8220;Month&#8221; from the Calendar header (gray part) with a drop down box that contains a list of the months. So what he did is he &#8220;catch&#8221; the HTML stream from the Calendar Control and perform a String.Replace on it!</p>
<p style="text-align: left;">
<div id="attachment_278" class="wp-caption aligncenter" style="width: 586px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/design.jpg"><img class="size-full wp-image-278" title="Design Goal" src="http://blog.ianuy.com/wp-content/uploads/2009/05/design.jpg" alt="His Design Goal" width="576" height="207" /></a><p class="wp-caption-text">His Design Goal</p></div>
<p style="text-align: left;">The actual String.Replace command is something like this:</p>
<p style="text-align: left;">

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//szHTML = Get current HTML stream</span>
<span style="color: #008080; font-style: italic;">//szCurrentMonth = Get current month from HTML</span>
szHTML.<span style="color: #0000FF;">Replace</span><span style="color: #000000;">&#40;</span>szCurrentMonth, <span style="color: #666666;">&quot;
&lt;select&gt;&lt;option value=&quot;</span>January<span style="color: #666666;">&quot;&gt;January&lt;/option&gt;
       &lt;option value=&quot;</span>February<span style="color: #666666;">&quot;&gt;February&lt;/option&gt;
       &lt;option value=&quot;</span>March<span style="color: #666666;">&quot;&gt;March&lt;/option&gt;
       &lt;option value=&quot;</span>April<span style="color: #666666;">&quot;&gt;April&lt;/option&gt;
       &lt;option value=&quot;</span>May<span style="color: #666666;">&quot;&gt;May&lt;/option&gt;
       &lt;option value=&quot;</span>June<span style="color: #666666;">&quot;&gt;June&lt;/option&gt;
       &lt;option value=&quot;</span>July<span style="color: #666666;">&quot;&gt;July&lt;/option&gt;
       &lt;option value=&quot;</span>August<span style="color: #666666;">&quot;&gt;August&lt;/option&gt;
       &lt;option value=&quot;</span>September<span style="color: #666666;">&quot;&gt;September&lt;/option&gt;
       &lt;option value=&quot;</span>October<span style="color: #666666;">&quot;&gt;October&lt;/option&gt;
       &lt;option value=&quot;</span>November<span style="color: #666666;">&quot;&gt;November&lt;/option&gt;
       &lt;option value=&quot;</span>December<span style="color: #666666;">&quot;&gt;December&lt;/option&gt;
&lt;/select&gt;
&nbsp;
&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>It worked fine before the migration, but somehow we broke it during migration to .NET 2.0. A further investigation of the &#8220;emitted&#8221; HTML stream from the .NET 2.0 control shows this:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;table style=&quot;border-style: solid; border-width: 1px; border-collapse: collapse;&quot; title=&quot;Calendar&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: Silver;&quot; colspan=&quot;7&quot;&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse;&quot; border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15%;&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;Go to the previous month&quot; href=&quot;javascript:__doPostBack('ctl01','V3378')&quot;&gt;&amp;lt;&lt;/a&gt;&lt;/td&gt;
&lt;!-- THIS WILL BE THE PART THAT WILL BE REPLACED BY A DROP DOWN BOX --&gt;
&lt;td style=&quot;width: 70%;&quot; align=&quot;center&quot;&gt;May 2009&lt;/td&gt;
&lt;td style=&quot;width: 15%;&quot; align=&quot;right&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;Go to the next month&quot; href=&quot;javascript:__doPostBack('ctl01','V3439')&quot;&gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Sun&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Mon&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Tue&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Wed&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Thu&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Fri&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Sat&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: black;&quot; title=&quot;April 26&quot; href=&quot;javascript:__doPostBack('ctl01','3403')&quot;&gt;26&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;April 27&quot; href=&quot;javascript:__doPostBack('ctl01','3404')&quot;&gt;27&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;April 28&quot; href=&quot;javascript:__doPostBack('ctl01','3405')&quot;&gt;28&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;April 29&quot; href=&quot;javascript:__doPostBack('ctl01','3406')&quot;&gt;29&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;April 30&quot; href=&quot;javascript:__doPostBack('ctl01','3407')&quot;&gt;30&lt;/a&gt;&lt;/td&gt;
&lt;!-- THE TITLE ATTRIBUTE WAS ALSO REPLACED ACCIDENTALLY --&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;May 01&quot; href=&quot;javascript:__doPostBack('ctl01','3408')&quot;&gt;1&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;May 02&quot; href=&quot;javascript:__doPostBack('ctl01','3409')&quot;&gt;2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
.....&lt;/tbody&gt;&lt;/table&gt;</pre></div></div>

<p>A comparison with the &#8220;emitted&#8221; .NET 1.1 control shows this:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;table style=&quot;border-style: solid; border-width: 1px; border-collapse: collapse;&quot; title=&quot;Calendar&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: Silver;&quot; colspan=&quot;7&quot;&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse;&quot; border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15%;&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;Go to the previous month&quot; href=&quot;javascript:__doPostBack('ctl01','V3378')&quot;&gt;&amp;lt;&lt;/a&gt;&lt;/td&gt;
&lt;!-- THIS WILL BE THE PART THAT WILL BE REPLACED BY A DROP DOWN BOX --&gt;
&lt;td style=&quot;width: 70%;&quot; align=&quot;center&quot;&gt;May 2009&lt;/td&gt;
&lt;td style=&quot;width: 15%;&quot; align=&quot;right&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;Go to the next month&quot; href=&quot;javascript:__doPostBack('ctl01','V3439')&quot;&gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Sun&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Mon&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Tue&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Wed&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Thu&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Fri&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Sat&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: black;&quot; href=&quot;javascript:__doPostBack('ctl01','3403')&quot;&gt;26&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3404')&quot;&gt;27&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3405')&quot;&gt;28&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3406')&quot;&gt;29&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3407')&quot;&gt;30&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3408')&quot;&gt;1&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3409')&quot;&gt;2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
.....&lt;/tbody&gt;&lt;/table&gt;</pre></div></div>

<p>Executing the String.Replace command in the .NET 1.1 code will produce the proper output. However, Microsoft decided to <em>upgrade</em> the Calendar control in .NET 2.0 by adding a <strong>tooltip</strong> for each date!</p>
<div id="attachment_287" class="wp-caption aligncenter" style="width: 282px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/tooltip1.jpg"><img class="size-full wp-image-287" title="Tool Tip in .NET 2.0" src="http://blog.ianuy.com/wp-content/uploads/2009/05/tooltip1.jpg" alt="Tool Tip in .NET 2.0" width="272" height="216" /></a><p class="wp-caption-text">Tool Tip in .NET 2.0</p></div>
<p>Since the String.Replace has no <em>checking</em> (this is not REGEX afterall), it also replaced the &#8220;Month&#8221; in the tooltip with the drop down box (&lt;select&gt; command), thus generating the broken control shown above. This is not, in anyway, the fault of the original developer. Can you anticipate what will Microsoft do?</p>
<p><strong>This is my first encounter on how Microsoft can break your products. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /><br />
</strong></p>
<h3>MSDE to Microsoft SQL Server 2005 Express</h3>
<p>Our web applications were written before the release of SQL Server 2005 Express. The only *free* choice back then is Microsoft SQL Server Desktop Engine, a free scaled-down version of Microsoft SQL Server 2000. Since the support for MSDE officially ended last April 8, 2008, we are then forced to upgrade to Microsoft SQL Server 2005 express.</p>
<p>Our previous MSDE setup runs on <strong>default instance</strong>. In migrating to SQL Server 2005, we run the risk of &#8220;conflicting&#8221; with our other products that runs on <strong>default instance</strong> of SQL 2005. So the decision was made to migrate from <strong>default instance </strong>to <strong>named instance</strong>.</p>
<p>Migrating to SQL Server 2005 Express is straightforward at first look. The first and the most obvious thing to do is to modify the installer (InstallShield) so that it will install SQL 2005 instead of MSDE.  To compensate with the instance problem, the second thing to do is to modify each and every <strong>connection string</strong> in the entire app to point to the proper named instance. Making sure that each and every connection string in your entire app has been changed is a monumental task&#8230; especially if different version of connection strings were used. After that, you also need to modify the Service Query String so that it will point to the proper SQL Service ($MSSQLSERVER to $Instance_Name). There are also minor modifications here and there, but its not worth the mention.</p>
<p>After three days of manual modification, we got to the point where we were able to install the product. We tested it and everything seems to work fine. We then got to the part where are going to test for the database backup. Lo and behold, it failed. But no error message was given. We looked for the bug for an entire day but our search proved futile. We called it a day and went home. The next day, my brilliant manager excitedly told us the problem.</p>
<blockquote>
<h3 style="text-align: center;">Microsoft SQL Server 2005 Express does not have SQL Server Agent.</h3>
</blockquote>
<p>Our backup routine uses SQL Server Agent. When a user request for a backup, the SQL Server will &#8220;schedule&#8221; that backup request and the SQL Server Agent will &#8220;execute&#8221; the request when the schedule parameter is met.</p>
<p>Simply put, No SQL Server Agent, No Backup.</p>
<p>We have three solutions to the problem:</p>
<ol>
<li>Ship the product with Microsoft SQL Server 2005 standard or enterprise edition (Instead of the Express edition)</li>
<li>Remove the &#8220;scheduled&#8221; backup. Instead, just provide a &#8220;one shot&#8221; backup</li>
<li>Create our own custom &#8220;Backup Scheduler&#8221; using Windows Task Scheduler</li>
</ol>
<p>We talked to the marketing folks and they eliminated option 1 because, according to them, we can&#8217;t make our customer pay for something that was free before. Option 2 was eliminated due to the simple fact that we can&#8217;t ship an upgraded version of our product with downgraded features (But this was actually done to one of the product that had missed its deadline). So Option 3 was our only choice.</p>
<p>The plan in creating Option 3 is simple. Create a &#8220;scheduled task&#8221; using <strong>schtasks.exe </strong>that will invoke <strong>sqlcmd.exe</strong> that will invoke the <strong>sql command</strong> to invoke the <strong>stored procedure</strong> that was doing the backups. The <strong>schtasks</strong> will then be invoked by the ASP.NET page using Process.Start();. So I created a wrapper class that will simplify this process. The class was created in 2 hours and I had it running and compiled to the ASP.NET page in just 3 hours. <strong>BUT IT DIDN&#8217;T WORK.</strong></p>
<p>Further investigation revealed that IIS 6.0 has a different security model than IIS 5.1 (which XP uses). Spawning a process from within IIS 6.0 will have a credential of NETWORK SERVICE. Yes, we can impersonate since we are using Windows Authentication, but it won&#8217;t work unless we force the user to type-in the credentials again. Which is bad in a usability point of view.</p>
<p>The workaround was to put the scheduler on a Windows Service that will then be run with proper credentials. The problem then was the communication between the ASP.NET page and the Windows Service. How will the Service know when to invoke the backup? Our solution is a little crude but simple. We did it old-skul UNIX style! The ASP.NET page will create a &#8220;marker&#8221; file in a certain, defined location. The Windows Service will then monitor that location&#8230; waiting for the &#8220;marker&#8221; file. If the marker file is found, the service will then invoke the backup procedure. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Fortunately for us, all the data needed for the backup is in the database, so we don&#8217;t need to pass anything between the ASP.NET page and the Service. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  We could have used sockets or mutex, but its overkill for our purpose.</p>
<p><strong>This</strong> are just the major steps that had to be done in order to make our web applications compatible with Windows Vista. There are a couple of minor steps that also needs attention like the IIS 5.1 to IIS 7.0 migration and the new Vista Security Model.</p>
<p>The next time you see the &#8220;Vista Compatible&#8221; sticker on a Software Box, think of the programmers who nearly died in making your software run on a &#8220;cuter&#8221; operating system.</p>
<h2>Windows 7, we are ready! <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' /> </h2>



Share and Enjoy:


	<a rel="nofollow" href="mailto:?subject=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software&amp;body=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F" title="E-mail this story to a friend!"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software&amp;bodytext=%0A%0D%0AIn%20my%20previous%20blog%20post%2C%20I%27ve%20mentioned%20that%20I%27m%20working%20on%20a%20project%20to%20migrate%20an%20entire%20product%20line%20to%20Vista.%20What%20I%20meant%20by%20that%20is%20that%20I%20am%20responsible%20for%20making%20sure%20that%20our%20current%20product%20will%20run%20properly%20on%20Windows%20Vista.%20To%20guaran" title="Digg"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software" title="Reddit"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software&amp;notes=%0A%0D%0AIn%20my%20previous%20blog%20post%2C%20I%27ve%20mentioned%20that%20I%27m%20working%20on%20a%20project%20to%20migrate%20an%20entire%20product%20line%20to%20Vista.%20What%20I%20meant%20by%20that%20is%20that%20I%20am%20responsible%20for%20making%20sure%20that%20our%20current%20product%20will%20run%20properly%20on%20Windows%20Vista.%20To%20guaran" title="del.icio.us"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://twitter.com/home?status=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software%20-%20http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F" title="Twitter"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F" title="Slashdot"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;t=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software" title="Facebook"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;t=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software" title="MySpace"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software&amp;annotation=%0A%0D%0AIn%20my%20previous%20blog%20post%2C%20I%27ve%20mentioned%20that%20I%27m%20working%20on%20a%20project%20to%20migrate%20an%20entire%20product%20line%20to%20Vista.%20What%20I%20meant%20by%20that%20is%20that%20I%20am%20responsible%20for%20making%20sure%20that%20our%20current%20product%20will%20run%20properly%20on%20Windows%20Vista.%20To%20guaran" title="Google Bookmarks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software" title="DotNetKicks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.ianuy.com/2009/05/10/migration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

