<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Vlad Hrybok's Tech Notes</title>
    <link>http://vladsnotes.hrybok.com/</link>
    <description>The future of Internet is &lt;a href='http://httpvpn.com'&gt;HttpVPN&lt;/a&gt;...</description>
    <language>en-us</language>
    <copyright>Vlad Hrybok</copyright>
    <lastBuildDate>Sun, 25 Jul 2010 20:23:48 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>vgribok@dodgeit.com</managingEditor>
    <webMaster>vgribok@dodgeit.com</webMaster>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=13fb0c97-9045-40f5-a28f-f7723ef6ebd3</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,13fb0c97-9045-40f5-a28f-f7723ef6ebd3.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,13fb0c97-9045-40f5-a28f-f7723ef6ebd3.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=13fb0c97-9045-40f5-a28f-f7723ef6ebd3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It appears that a client proxy instance for and out-of-process ServicedComponent expects
the client to have a compile-time reference to the ServicedComponent assembly,
unless ServicedComponent is either of different CLR version or has different bitness
(either client or server is x64 while another one is x86). This creates a bizarre
problem: if the client has no design-time reference to the ServicedComponent, Activator.CreateInstance(compoentClsID)
fails if the component is of the same bitness and CLR version with a cryptic "Cannot
load type" RemotingException, while working perfectly fine when ServicedComponent
is of different bitness or compiled targeting different .NET Framework version.
Google offered no insight, so I started thinking of why matching CLR and bitness would
lead to failure. I started suspecting that when client and server have mismatched
CLR/bitness attributes, runtime must be doing cross-process marshalling in somewhat
different manner than when attributes match. Now what I needed is to ensure that same
"deep proxying" is taking place when client and server have matching CLR/bitness.
On the hunch I decided to use overloaded <strong><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas"><font color="#2b91af" size="2" face="Consolas">Type</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas">.GetTypeFromCLSID(clsID, </font></font><font color="#a31515" size="2" face="Consolas"><font color="#a31515" size="2" face="Consolas"><font color="#a31515" size="2" face="Consolas">"localhost"</font></font></font></strong><font size="2" face="Consolas"><font size="2" face="Consolas"><font color="#000000"><strong>)</strong></font></font></font>,
and lo and behold, it worked! Now I have a client that at design time is only aware
of ServicedComponent's interface, but does not hold a direct reference to it, and
yet it is able to talk to multiple out-of-process ServicedComponent implementing same
interface while having different CLR and bitness attributes. At the end of the day
it turned out to be possible to instantiate ServicedComponent while knowing neither
its CLSID at the design time nor having a hard reference to the assembly implementing
ServicedComponent.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=13fb0c97-9045-40f5-a28f-f7723ef6ebd3" />
      </body>
      <title>Instantiating Proxy for Out-of-Process ServicedComponent/Managed COM+ Component</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,13fb0c97-9045-40f5-a28f-f7723ef6ebd3.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,13fb0c97-9045-40f5-a28f-f7723ef6ebd3.aspx</link>
      <pubDate>Sun, 25 Jul 2010 20:23:48 GMT</pubDate>
      <description>&lt;p&gt;
It appears that a client proxy instance for and out-of-process ServicedComponent expects
the client to have a compile-time&amp;nbsp;reference to the ServicedComponent assembly,
unless ServicedComponent is either of different CLR version or has different bitness
(either client or server is x64 while another one is x86). This creates a bizarre
problem: if the client has no design-time reference to the ServicedComponent, Activator.CreateInstance(compoentClsID)
fails if the component is of the same bitness and CLR version with a cryptic "Cannot
load type" RemotingException, while working perfectly fine when ServicedComponent
is of different bitness or compiled&amp;nbsp;targeting different&amp;nbsp;.NET Framework&amp;nbsp;version.
Google offered no insight, so I started thinking of why matching CLR and bitness would
lead to failure. I started&amp;nbsp;suspecting that when client and server have mismatched
CLR/bitness&amp;nbsp;attributes, runtime must be doing cross-process marshalling in somewhat
different manner than when attributes match. Now what I needed is to ensure that same
"deep proxying" is taking place&amp;nbsp;when client and server have matching CLR/bitness.
On the hunch I decided to use overloaded &lt;strong&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;Type&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font color=#000000 size=2 face=Consolas&gt;.GetTypeFromCLSID(clsID, &lt;/font&gt;&lt;/font&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;"localhost"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;&lt;font color=#000000&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;,
and lo and behold, it worked! Now I have a client that at design time is only aware
of ServicedComponent's interface, but does not hold a direct reference to it, and
yet it is able to talk to multiple out-of-process ServicedComponent implementing same
interface while having different CLR and bitness attributes. At the end of the day
it turned out to be possible to instantiate ServicedComponent while knowing neither
its CLSID at the design time nor having a hard reference to the assembly implementing
ServicedComponent.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=13fb0c97-9045-40f5-a28f-f7723ef6ebd3" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,13fb0c97-9045-40f5-a28f-f7723ef6ebd3.aspx</comments>
      <category>.NET Programming;Sofware Development;x64</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=fdfab71a-a92a-4a4f-823d-23bc1025aeeb</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,fdfab71a-a92a-4a4f-823d-23bc1025aeeb.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,fdfab71a-a92a-4a4f-823d-23bc1025aeeb.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=fdfab71a-a92a-4a4f-823d-23bc1025aeeb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I thought I knew ASP.NET. I started ASP.NET programming in 2001, and I started it
with customer/server control development and was cranking them out with no problem.
So theoretically I should not have struggled for six hours with a CompositeControl
not being able to save nested controls' state between postbacks. 
</p>
        <p>
All it came down to is calling EnsureChildControls() from the OnInit().
</p>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
            <p>
[
</p>
          </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">ToolboxData</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">(</font>
        </font>
        <font color="#a31515" size="2" face="Consolas">
          <font color="#a31515" size="2" face="Consolas">
            <font color="#a31515" size="2" face="Consolas">"&lt;{0}:BogusCustomControl
runat=server&gt;&lt;/{0}:BogusCustomControl&gt;"</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">)]<br /></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">public</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">class</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">BogusCustomControl</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> : </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">CompositeControl<br /></font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">{<br />
    </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">Button</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> btn
= </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">new</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">Button</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">();
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">    </font>protected</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">override</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">void</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> OnInit(</font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">EventArgs</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> e)<br />
    {<br />
        </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">base</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.OnInit(e);
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">        </font>
              <span style="BACKGROUND-COLOR: yellow">
                <strong>this</strong>
              </span>
            </font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
            <strong>.EnsureChildControls();</strong>
            <font color="#008000" size="2" face="Consolas">
              <font color="#008000" size="2" face="Consolas">
                <font color="#008000" size="2" face="Consolas">//
&lt;&lt; This is it! This makes ViewState work for a CompositeControl</font>
              </font>
            </font>
            <br />
    }
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">    </font>protected</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">override</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">void</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> OnLoad(</font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">EventArgs</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> e)<br />
    {<br /></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">        </font>if</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> (!</font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">this</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.Page.IsPostBack)<br />
        {<br /><font color="#008000" size="2" face="Consolas"><font color="#008000" size="2" face="Consolas"><font color="#008000" size="2" face="Consolas">           
// Set value once to test whether it's preserved between postbacks</font></font></font><br />
            </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">this</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.btn.Text
= </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">DateTime</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.Now.ToLongTimeString();<br />
        }
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">        </font>base</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.OnLoad(e);<br />
    }
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">    </font>protected</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">override</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">void</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> CreateChildControls()<br />
    {<br />
        </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">this</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.btn.ID
= </font>
        </font>
        <font color="#a31515" size="2" face="Consolas">
          <font color="#a31515" size="2" face="Consolas">
            <font color="#a31515" size="2" face="Consolas">"whatever"</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">;<br />
        </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">this</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.Controls.Add(</font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">this</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.btn);
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">        </font>base</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.CreateChildControls();<br />
    }<br />
}
</font>
        </font>
        <p>
 
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=fdfab71a-a92a-4a4f-823d-23bc1025aeeb" />
      </body>
      <title>Preserving ViewState in ASP.NET CompositeControl</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,fdfab71a-a92a-4a4f-823d-23bc1025aeeb.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,fdfab71a-a92a-4a4f-823d-23bc1025aeeb.aspx</link>
      <pubDate>Fri, 16 Jul 2010 15:33:00 GMT</pubDate>
      <description>&lt;p&gt;
I thought I knew ASP.NET. I started ASP.NET programming in 2001, and I started it
with customer/server control development and was cranking them out with no problem.
So&amp;nbsp;theoretically I should not have struggled for six hours with a CompositeControl
not being able to save nested controls' state&amp;nbsp;between postbacks. 
&lt;/p&gt;
&lt;p&gt;
All it came down to is calling EnsureChildControls() from the OnInit().
&lt;/p&gt;
&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; 
&lt;p&gt;
[
&lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;ToolboxData&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;"&amp;lt;{0}:BogusCustomControl
runat=server&amp;gt;&amp;lt;/{0}:BogusCustomControl&amp;gt;"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;)]&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;class&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;BogusCustomControl&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; : &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;CompositeControl&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;Button&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; btn
= &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;new&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;Button&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;();&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;protected&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;override&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; OnInit(&lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;EventArgs&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; e)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;base&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.OnInit(e);&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="BACKGROUND-COLOR: yellow"&gt;&lt;strong&gt;this&lt;/strong&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;&lt;strong&gt;.EnsureChildControls()&gt;;&lt;/strong&gt; &lt;font color=#008000 size=2 face=Consolas&gt;&lt;font color=#008000 size=2 face=Consolas&gt;&lt;font color=#008000 size=2 face=Consolas&gt;//
&amp;lt;&amp;lt; This is it! This makes ViewState work for a CompositeControl&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;protected&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;override&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; OnLoad(&lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;EventArgs&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; e)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; (!&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.Page.IsPostBack)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&lt;font color=#008000 size=2 face=Consolas&gt;&lt;font color=#008000 size=2 face=Consolas&gt;&lt;font color=#008000 size=2 face=Consolas&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
// Set value once to test whether it's preserved between postbacks&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.btn.Text
= &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;DateTime&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.Now.ToLongTimeString();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;base&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.OnLoad(e);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;protected&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;override&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; CreateChildControls()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.btn.ID
= &lt;/font&gt;&lt;/font&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;"whatever"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.Controls.Add(&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.btn);&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;base&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.CreateChildControls();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&gt;
&lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=fdfab71a-a92a-4a4f-823d-23bc1025aeeb" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,fdfab71a-a92a-4a4f-823d-23bc1025aeeb.aspx</comments>
      <category>.NET Programming;ASP.NET;Sofware Development</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=18aea458-8fdc-4cbc-8b9a-90268aa28dbf</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,18aea458-8fdc-4cbc-8b9a-90268aa28dbf.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,18aea458-8fdc-4cbc-8b9a-90268aa28dbf.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=18aea458-8fdc-4cbc-8b9a-90268aa28dbf</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://support.microsoft.com/kb/954958">http://support.microsoft.com/kb/954958</a>
        </p>
        <p>
BTW, Windows 7 and Server 2008 R2 have Hyper-V HAL drivers in them, so when those
two are installed as guest OSes, they take advantage of hardware virtualization even
during installation, which makes the installation process go much faster compared
to other guest OSes, and at the end of the installation one does not need to
install Hyper-V integration services.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=18aea458-8fdc-4cbc-8b9a-90268aa28dbf" />
      </body>
      <title>Guest Operating Systems Supported by Microsoft Hyper-V</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,18aea458-8fdc-4cbc-8b9a-90268aa28dbf.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,18aea458-8fdc-4cbc-8b9a-90268aa28dbf.aspx</link>
      <pubDate>Sat, 24 Oct 2009 21:32:20 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://support.microsoft.com/kb/954958"&gt;http://support.microsoft.com/kb/954958&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
BTW, Windows 7 and Server 2008 R2 have Hyper-V HAL drivers in them, so when those
two are installed as guest OSes, they take advantage of hardware virtualization even
during installation, which makes the installation process go much faster compared
to other guest OSes, and at the end of&amp;nbsp;the installation one does not need to
install Hyper-V integration services.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=18aea458-8fdc-4cbc-8b9a-90268aa28dbf" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,18aea458-8fdc-4cbc-8b9a-90268aa28dbf.aspx</comments>
      <category>Software Testing;Virtual Server;Windows 7</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=8af2d8da-0825-49b5-8158-dbf0b977f903</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,8af2d8da-0825-49b5-8158-dbf0b977f903.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,8af2d8da-0825-49b5-8158-dbf0b977f903.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=8af2d8da-0825-49b5-8158-dbf0b977f903</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Software RAID-1 in Windows server has a pitfall worth remembering: redundancy is working
only when Windows is booted and is up &amp; running. When machine is booting, it loads
the OS from whichever drive is selected as first in the boot order in BIOS. <strong>If
failing drive happens to be the first - the one from which Windows Server boots up</strong>,
then two things needs to be done: 
<br />
- BIOS settings have to be changed so that healthy secondary drive is used for booting,
and 
<br />
- Secondary Plex has to be selected as a default boot drive in Windows Startup &amp;
Recovery configuration.
</p>
        <p>
Having Hyper-V adds even one more step. Hyper-V does something as the boot time, and
is apparently enabled only on the first drive in the boot sequence. After you
have made healthy secondary drive the first in boot sequence, secondary drive's boot
routine needs to be manually adjusted to include loading Hyper-V, or you will get
the dreaded, useless "Virtual machine could not be started because the hypervisor
is not running" error when starting a virtual machine. To update your newly-selected
boot drive for loading Hyper-V, run a Command Prompt <strong>as Administrator</strong> and
execute following command:
</p>
        <p>
          <font face="Courier New">bcdedit /set hypervisorlaunchtype auto</font>
        </p>
        <p>
Reboot the server again - this time your secondary drive is bootable as far as BIOS
concerned, secondary plex is used to boot windows, and Hyper-V is made to be loaded
from the secondary drive too.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=8af2d8da-0825-49b5-8158-dbf0b977f903" />
      </body>
      <title>Re-enabling Hyper-V after replacing software RAID-1 (mirrored) drive on Windows 2008 Server</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,8af2d8da-0825-49b5-8158-dbf0b977f903.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,8af2d8da-0825-49b5-8158-dbf0b977f903.aspx</link>
      <pubDate>Sun, 11 Oct 2009 01:24:54 GMT</pubDate>
      <description>&lt;p&gt;
Software RAID-1 in Windows server has a pitfall worth remembering: redundancy is working
only when Windows is booted and is up &amp;amp; running. When machine is booting, it loads
the OS from whichever drive is selected as first in the boot order in BIOS. &lt;strong&gt;If
failing drive happens to be the first - the one from which Windows Server boots up&lt;/strong&gt;,
then two things needs to be done: 
&lt;br&gt;
- BIOS settings have to be changed so that healthy secondary drive is used for booting,
and 
&lt;br&gt;
- Secondary Plex has to be selected as a default boot drive in Windows Startup &amp;amp;
Recovery configuration.
&lt;/p&gt;
&lt;p&gt;
Having Hyper-V adds even one more step. Hyper-V does something as the boot time, and
is apparently enabled only on the first drive in the&amp;nbsp;boot sequence. After you
have made healthy secondary drive the first in boot sequence, secondary drive's boot
routine needs to be manually adjusted to include loading Hyper-V, or you will get
the dreaded,&amp;nbsp;useless "Virtual machine could not be started because the hypervisor
is not running" error when starting a virtual machine. To update your newly-selected
boot drive for loading Hyper-V, run a Command Prompt &lt;strong&gt;as Administrator&lt;/strong&gt; and
execute following command:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;bcdedit /set hypervisorlaunchtype auto&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Reboot the server again - this time your secondary drive is bootable as far as BIOS
concerned, secondary plex is used to boot windows, and Hyper-V is made to be loaded
from the secondary drive&amp;nbsp;too.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=8af2d8da-0825-49b5-8158-dbf0b977f903" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,8af2d8da-0825-49b5-8158-dbf0b977f903.aspx</comments>
      <category>Backup/Restore;Hardware;Virtual Server</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=b337fd48-7f00-4633-a31a-2a22352fbf90</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,b337fd48-7f00-4633-a31a-2a22352fbf90.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,b337fd48-7f00-4633-a31a-2a22352fbf90.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=b337fd48-7f00-4633-a31a-2a22352fbf90</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Update: here's a very good <a href="http://www.ocztechnologyforum.com/forum/showthread.php?t=52912">walk-through</a> of
setting up BIOS on Intel chipset motherboard for OCZ SSD RAID array. 
</p>
        <p>
Since I was about to clean up my system anyway, I decided not only to install Windows
7, but also bite the bullet and get two SSD drives and put them into striped RAID
configuration. I did it last weekend and yes, rumors are true: the performance boost
you get from SSDs, especially from RAID-0 SSDs is by far the most noticeable and exciting
in a generation. (From this point on, spindle hard drives are entering their twilight
years, and pretty soon they will be where CRT displays are now.) It's kind
of perverse, but perf improvement is so drastic that it now takes less time for Windows
to boot than for the motherboard to finish the POST!
</p>
        <p>
Here are points that might be useful for those trying to do similar setup.
</p>
        <p>
- Not every SSD drive can be used in RAID configuration. At this point you need to
stick with SSD drives having <strong>Indilinx controller</strong>. 60GB MLC drives
like <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820227394">OCZ
Vertex</a>, <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820233090">Corsair
Extreme</a>, and <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820227461">OCZ
Agility</a> (the one I got, <a href="http://www.cdrinfo.com/Sections/Reviews/Print.aspx?ArticleId=25727">see
the review</a>) - are all reasonably priced and will work well with mainstream motherboards-based
RAID controllers, like Intel Matrix RAID. Two of these drives cost just a little over
what <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820227395">single
128GB drive costs</a>, but two 64GB drives give you two controllers, twice the amount
of on the drive cache, and connection to two separate SATA channels, all of which delivers much
better performance than a single 128GB drive for about the same amount of money.
</p>
        <p>
- Windows 7 does have Intel Matrix RAID driver, so <strong>no need to do the F6</strong> thing
to load it during windows installation.
</p>
        <p>
- If you are putting your drives into a desktop machine, you will need <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16817994072">mounting
brackets</a> to fit 2.5" drives into 3.5" bays.
</p>
        <p>
- Since both Windows 7 and SSD drives are relatively new products, <strong>load the
latest BIOS</strong> for your motherboard before you even connect your drives for
the first time. It's also a good idea to get a relatively recent motherboard
and ensure your mobo does indeed have RAID functionality. For example, if your motherboard
has Intel chipset, letter "R" in ICH10<strong>R</strong> "south bridge" chip name seems
to indicate presence of RAID support.
</p>
        <p>
- If your motherboard has Intel Matrix RAID, <strong>change BIOS</strong> settings
to make sure you put your on-board SATA controller into RAID mode. It actually
should be called AHCI+RAID, because RAID is still AHCI. Non-RAID SATA drives may
still be used when SATA controller in RAID mode with no problem at all.
</p>
        <p>
- Even though Windows 7 comes ready for SSD drives, tweaks like <a href="http://www.ocztechnologyforum.com/forum/attachment.php?attachmentid=7558&amp;amp;stc=1&amp;amp;d=1228254339">disabling SSD
drive indexing</a> will improve either drives' longevity or system performance.
Also, Windows 7 may not see the RAID group as 100% SSD. What it means is that when
Win7 realizes there is an SSD drive in the system, it's supposed to automatically
turn off superfetch and disk defragmentation. In my case it did turn off disk defrag
for my SSD RAID volume, <a href="http://www.ocztechnologyforum.com/forum/attachment.php?attachmentid=7557&amp;stc=1&amp;d=1228252264">but
didn't turn off superfetch</a> - maybe because I have a couple of regular hard drives
also connected (although not members of the RAID array).
</p>
        <p>
- If you wonder whether ATA Trim command (that helps to maintain SSD drives' performance)
is going to work in RAID configuration, then the answer is not yet. Currently, the
choices for SSDs connected to Intel matrix raid controller are either
RAID, or TRIM, but not both together. The reason for that is Intel Matrix Storage
Manager (MSM) driver does not pass through TRIM command - only MS SATA and IDE drivers
for Windows 7 do. So for TRIM one needs to use Microsoft drivers, which do not
support MSM RAID. So if you do RAID, you will need to use Intel MSM driver, and wait
for some future version of MSM that can support TRIM in at least in RAID-0 and
RAID-1 configurations.
</p>
        <p>
- Next version of OCZ firmware for Agility and Vertex SSD drives is expected to have
background "garbage collection" built in, which is supposed to reset NAND cells while
drives are idling.
</p>
        <p>
Here's a <a href="http://blogs.msdn.com/e7/archive/2009/05/05/support-and-q-a-for-solid-state-drives-and.aspx">very
good post about SSDs on Windows 7</a>, plus an<strong> </strong><a href="http://www.anandtech.com/printarticle.aspx?i=3607"><strong>absolute
must-read article</strong></a> about most popular SSD drives from AnandTech.com.
</p>
        <p>
ATTO benchmarks:<br />
Take a look a all-important 4KB transfer rates (most common case for non-server
scenarios) - it does astonishing 178MB/s writes and 180MB/s reads:<br /><img border="0" src="http://vladsnotes.hrybok.com/content/binary/2x%20OCZ%20Agility%2060GB%20SSD%20drives%20in%20RAID-0%20on%20Windows%207%20-%20ATTO%20benchmark%20results.png" /></p>
        <p>
Compare it with <a href="http://hothardware.com/image_popup.aspx?image=big_vertex-turbo-atto.jpg&amp;articleid=10402&amp;t=n">53MB/s
writes and 35MB/s reads</a> of $440-worth, fastest 120GB MLC drive - <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820227470">OCZ
Vertex Turbo</a>:<br /><a href="http://hothardware.com/image_popup.aspx?image=big_vertex-turbo-atto.jpg&amp;articleid=10402&amp;t=n"><img src="http://hothardware.com/newsimages/item10402/big_vertex-turbo-atto.jpg" /></a><br /><br />
...or with arguably the best SSD drive there is - <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820167014">$800</a> Intel
X-25E SLC drive - it does <a href="http://www.clunk.org.uk/reviews/kingston-technology-ssdnow-e-series-intel-x25-e-solid-state-drive-review/Page-6.html">104MB/s
writes and 120MB/s reads</a> on 4KB block size:<br /><a href="http://www.clunk.org.uk/reviews/kingston-technology-ssdnow-e-series-intel-x25-e-solid-state-drive-review/Page-6.html"><img src="http://www.images.clunk.org.uk/reviews/Kingston/results/atto/atto-ahci/atto-ahci-matrix.png" /></a></p>
        <p>
 
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=b337fd48-7f00-4633-a31a-2a22352fbf90" />
      </body>
      <title>Budget SSD RAID-0 on Windows 7</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,b337fd48-7f00-4633-a31a-2a22352fbf90.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,b337fd48-7f00-4633-a31a-2a22352fbf90.aspx</link>
      <pubDate>Tue, 18 Aug 2009 15:52:47 GMT</pubDate>
      <description>&lt;p&gt;
Update: here's a very good &lt;a href="http://www.ocztechnologyforum.com/forum/showthread.php?t=52912"&gt;walk-through&lt;/a&gt; of
setting up BIOS on Intel chipset motherboard for OCZ SSD RAID array. 
&lt;/p&gt;
&lt;p&gt;
Since I was about to clean up my system anyway, I decided not only to install Windows
7, but also bite the bullet and get two SSD drives and put them into striped RAID
configuration. I did it last weekend and yes, rumors are true: the performance boost
you get from SSDs, especially from RAID-0 SSDs is by far the most noticeable and exciting
in a generation. (From this point on, spindle hard drives are entering their twilight
years, and&amp;nbsp;pretty soon they&amp;nbsp;will be where CRT displays are now.) It's kind
of perverse, but perf improvement is so drastic that it now takes less time for Windows
to boot than for the motherboard to finish the POST!
&lt;/p&gt;
&lt;p&gt;
Here are points that might be useful for those trying to do&amp;nbsp;similar setup.
&lt;/p&gt;
&lt;p&gt;
- Not every SSD drive can be used in RAID configuration. At this point you need to
stick with SSD drives having &lt;strong&gt;Indilinx controller&lt;/strong&gt;. 60GB MLC drives
like &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820227394"&gt;OCZ
Vertex&lt;/a&gt;, &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820233090"&gt;Corsair
Extreme&lt;/a&gt;, and &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820227461"&gt;OCZ
Agility&lt;/a&gt;&amp;nbsp;(the one I got, &lt;a href="http://www.cdrinfo.com/Sections/Reviews/Print.aspx?ArticleId=25727"&gt;see
the review&lt;/a&gt;) - are all reasonably priced and will work well with mainstream motherboards-based
RAID controllers, like Intel Matrix RAID. Two of these drives cost just a little over
what &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820227395"&gt;single
128GB drive costs&lt;/a&gt;, but two 64GB drives give you two controllers, twice the amount
of on the drive cache, and&amp;nbsp;connection to two separate SATA channels, all of which&amp;nbsp;delivers&amp;nbsp;much
better performance than a single 128GB drive for about the same amount of money.
&lt;/p&gt;
&lt;p&gt;
- Windows 7 does have Intel Matrix RAID driver, so &lt;strong&gt;no need to do the F6&lt;/strong&gt; thing
to load it during windows installation.
&lt;/p&gt;
&lt;p&gt;
- If you are putting your drives into a desktop machine, you will need &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16817994072"&gt;mounting
brackets&lt;/a&gt; to fit 2.5" drives into 3.5" bays.
&lt;/p&gt;
&lt;p&gt;
- Since both Windows 7 and SSD drives are relatively new products, &lt;strong&gt;load the
latest BIOS&lt;/strong&gt; for your motherboard before you even connect your drives for
the first time. It's also a good idea to&amp;nbsp;get a&amp;nbsp;relatively recent motherboard
and ensure your mobo does indeed have RAID functionality. For example, if your motherboard
has Intel chipset, letter "R" in ICH10&lt;strong&gt;R&lt;/strong&gt; "south bridge" chip name&amp;nbsp;seems
to indicate presence of RAID support.
&lt;/p&gt;
&lt;p&gt;
- If your motherboard has Intel Matrix RAID, &lt;strong&gt;change BIOS&lt;/strong&gt; settings
to make sure you put your on-board&amp;nbsp;SATA controller into RAID mode. It actually
should be called AHCI+RAID, because&amp;nbsp;RAID is still AHCI. Non-RAID SATA drives&amp;nbsp;may
still be used when SATA controller in RAID mode with no problem at all.
&lt;/p&gt;
&lt;p&gt;
- Even though Windows 7 comes ready for SSD drives, tweaks like &lt;a href="http://www.ocztechnologyforum.com/forum/attachment.php?attachmentid=7558&amp;amp;amp;stc=1&amp;amp;amp;d=1228254339"&gt;disabling&amp;nbsp;SSD
drive&amp;nbsp;indexing&lt;/a&gt;&amp;nbsp;will improve either drives' longevity or system performance.
Also, Windows 7 may not see the RAID group as 100% SSD. What it means is that when
Win7 realizes there is an SSD drive in the system, it's supposed to automatically
turn off superfetch and disk defragmentation. In my case it did turn off disk defrag
for my SSD RAID volume, &lt;a href="http://www.ocztechnologyforum.com/forum/attachment.php?attachmentid=7557&amp;amp;stc=1&amp;amp;d=1228252264"&gt;but
didn't turn off superfetch&lt;/a&gt; - maybe because I have a couple of regular hard drives
also connected (although not members of the RAID array).
&lt;/p&gt;
&lt;p&gt;
- If you wonder whether ATA Trim command (that helps to maintain SSD drives' performance)
is going to work in RAID configuration, then the answer is not yet. Currently, the
choices for SSDs&amp;nbsp;connected to Intel&amp;nbsp;matrix raid controller&amp;nbsp;are either
RAID, or TRIM, but not both together. The reason for that is Intel Matrix Storage
Manager (MSM) driver does not pass through TRIM command - only MS SATA and IDE drivers
for Windows 7 do. So for TRIM one needs to use&amp;nbsp;Microsoft drivers, which do not
support MSM RAID. So if you do RAID, you will need to use Intel MSM driver, and wait
for some future version of MSM that can support TRIM&amp;nbsp;in at least in RAID-0 and
RAID-1 configurations.
&lt;/p&gt;
&lt;p&gt;
- Next version of OCZ firmware for Agility and Vertex SSD drives is expected to have
background "garbage collection" built in, which is supposed to reset NAND cells while
drives are idling.
&lt;/p&gt;
&lt;p&gt;
Here's a &lt;a href="http://blogs.msdn.com/e7/archive/2009/05/05/support-and-q-a-for-solid-state-drives-and.aspx"&gt;very
good&amp;nbsp;post about SSDs on Windows 7&lt;/a&gt;, plus an&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;a href="http://www.anandtech.com/printarticle.aspx?i=3607"&gt;&lt;strong&gt;absolute
must-read&amp;nbsp;article&lt;/strong&gt;&lt;/a&gt; about most popular SSD drives from AnandTech.com.
&lt;/p&gt;
&lt;p&gt;
ATTO benchmarks:&lt;br&gt;
Take a look a all-important 4KB transfer rates (most common case for&amp;nbsp;non-server
scenarios) - it does&amp;nbsp;astonishing 178MB/s writes and 180MB/s reads:&lt;br&gt;
&lt;img border=0 src="http://vladsnotes.hrybok.com/content/binary/2x%20OCZ%20Agility%2060GB%20SSD%20drives%20in%20RAID-0%20on%20Windows%207%20-%20ATTO%20benchmark%20results.png"&gt;
&lt;/p&gt;
&lt;p&gt;
Compare it with &lt;a href="http://hothardware.com/image_popup.aspx?image=big_vertex-turbo-atto.jpg&amp;amp;articleid=10402&amp;amp;t=n"&gt;53MB/s
writes and 35MB/s reads&lt;/a&gt; of&amp;nbsp;$440-worth, fastest 120GB MLC drive - &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820227470"&gt;OCZ
Vertex Turbo&lt;/a&gt;:&lt;br&gt;
&lt;a href="http://hothardware.com/image_popup.aspx?image=big_vertex-turbo-atto.jpg&amp;amp;articleid=10402&amp;amp;t=n"&gt;&lt;img src="http://hothardware.com/newsimages/item10402/big_vertex-turbo-atto.jpg"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
...or with arguably the best SSD drive there is -&amp;nbsp;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820167014"&gt;$800&lt;/a&gt; Intel
X-25E SLC drive - it does &lt;a href="http://www.clunk.org.uk/reviews/kingston-technology-ssdnow-e-series-intel-x25-e-solid-state-drive-review/Page-6.html"&gt;104MB/s
writes and 120MB/s reads&lt;/a&gt; on 4KB block size:&lt;br&gt;
&lt;a href="http://www.clunk.org.uk/reviews/kingston-technology-ssdnow-e-series-intel-x25-e-solid-state-drive-review/Page-6.html"&gt;&lt;img src="http://www.images.clunk.org.uk/reviews/Kingston/results/atto/atto-ahci/atto-ahci-matrix.png"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=b337fd48-7f00-4633-a31a-2a22352fbf90" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,b337fd48-7f00-4633-a31a-2a22352fbf90.aspx</comments>
      <category>Hardware;Performance;Windows 7;x64</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=10c17b62-dc64-45d1-a175-50482baaa9b2</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,10c17b62-dc64-45d1-a175-50482baaa9b2.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,10c17b62-dc64-45d1-a175-50482baaa9b2.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=10c17b62-dc64-45d1-a175-50482baaa9b2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Whenever I setup a new Windows PC, I always forget which virutal CD/DVD software I
use. So this is a note to myself: it's <a href="http://www.magiciso.com/tutorials/miso-magicdisc-overview.htm">MagicISO</a>.
It allows to mount an ISO image right after the software is installed, without requiring
a reboot, and it works with both x64 and 32-bit version of Windows, including Vista
and Win 7. Great tool!
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=10c17b62-dc64-45d1-a175-50482baaa9b2" />
      </body>
      <title>MagicISO (MagicDIsk) is a Superb Free Virtual CD/DVD Drive Emulator</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,10c17b62-dc64-45d1-a175-50482baaa9b2.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,10c17b62-dc64-45d1-a175-50482baaa9b2.aspx</link>
      <pubDate>Mon, 17 Aug 2009 15:42:59 GMT</pubDate>
      <description>&lt;p&gt;
Whenever I setup a new Windows PC, I always forget which virutal CD/DVD software I
use. So this is a note to myself: it's &lt;a href="http://www.magiciso.com/tutorials/miso-magicdisc-overview.htm"&gt;MagicISO&lt;/a&gt;.
It allows to mount an ISO image right after the software is installed, without requiring
a reboot, and it works with both x64 and 32-bit version of Windows, including Vista
and Win 7. Great tool!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=10c17b62-dc64-45d1-a175-50482baaa9b2" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,10c17b62-dc64-45d1-a175-50482baaa9b2.aspx</comments>
      <category>Sofware Development;Vista;Windows 7</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=16dae195-a52d-4977-9e57-5d8242c1569d</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,16dae195-a52d-4977-9e57-5d8242c1569d.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,16dae195-a52d-4977-9e57-5d8242c1569d.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=16dae195-a52d-4977-9e57-5d8242c1569d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
HttpVPN™, a redistributable component for hosting web applications targeting home
users and small businesses, is <a href="http://ultidev.com/products/httpvpn/">released</a> as
Beta. It makes web applications accessible on the web at <a href="https://MyOwnSecureWeb.com">MyOwnSecureWeb.com</a> right
after the installation and does not require users to fiddle with routers, set up DMZ,
etc. Just a consumer-friendly, secure self-hosting of web apps.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=16dae195-a52d-4977-9e57-5d8242c1569d" />
      </body>
      <title>HttpVPN is Released - First Public Beta is Launched</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,16dae195-a52d-4977-9e57-5d8242c1569d.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,16dae195-a52d-4977-9e57-5d8242c1569d.aspx</link>
      <pubDate>Fri, 31 Jul 2009 04:35:58 GMT</pubDate>
      <description>&lt;p&gt;
HttpVPN™, a redistributable component for hosting web applications targeting home
users and small businesses, is &lt;a href="http://ultidev.com/products/httpvpn/"&gt;released&lt;/a&gt;&amp;nbsp;as
Beta. It makes web applications accessible on the web at &lt;a href="https://MyOwnSecureWeb.com"&gt;MyOwnSecureWeb.com&lt;/a&gt; right
after the installation and does not require users to fiddle with routers, set up DMZ,
etc. Just a consumer-friendly, secure self-hosting of web apps.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=16dae195-a52d-4977-9e57-5d8242c1569d" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,16dae195-a52d-4977-9e57-5d8242c1569d.aspx</comments>
      <category>ASP.NET;Digital Home;HttpVPN;Sofware Development</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=868a8d58-6ea6-4285-9fe7-2f30c9e8bca6</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,868a8d58-6ea6-4285-9fe7-2f30c9e8bca6.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,868a8d58-6ea6-4285-9fe7-2f30c9e8bca6.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=868a8d58-6ea6-4285-9fe7-2f30c9e8bca6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In general, I love Microsoft development tools. The reason I never felt compelled
to venture far into either Java or LAMP world is because combination of the Visual
Studio, .NET Framework runtime, SQL Server and other MS tools has always been
an extremely strong development platform, both for the value delivery for
end users, and for something as prosaic as having fun programming 8 hours day in and day
out. Therefore, it's borderline pathological that Microsoft HTML editing tools
have not evolved beyond "D-" grade since their first tool I tried over a decade ago,
Front Page 98. Consider this, I am taking a short break (to vent my dissatisfaction) from
writing content for a web site because when I edit an HTML file using Visual Studio
2008 SP1, it mangles the HTML by cutting up closing tags, turning "&lt;/a&gt;", "&lt;/h3&gt;", "&lt;/span&gt;" and
others into "&gt;". I thought, alright, Expression Web 2 is going to save
the day. I open the page in the Expression Web, and what I found is that it doesn't
handle keyboard key strokes well, ranging from failing to respond to arrow keys,
to Ctrl+V shortcut for Paste simply not working, rendering Expression Web
unusable. I use Microsoft keyboard and their drivers. I am a developer, not a designer,
but if getting such basic functions as arrow keys in their editor is impossible for
MS, what chances do they have with professional designers? And don't get me even started
with Expression suite not supporting MS own source controls for two versions. Microsoft's
inability to get HTML design tools right for such a long time creates a fear that
MS is losing it.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=868a8d58-6ea6-4285-9fe7-2f30c9e8bca6" />
      </body>
      <title>Microsoft Visual Studio 2008 and Expression Web 2 are Still Horrible at HTML Editing</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,868a8d58-6ea6-4285-9fe7-2f30c9e8bca6.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,868a8d58-6ea6-4285-9fe7-2f30c9e8bca6.aspx</link>
      <pubDate>Sun, 28 Jun 2009 21:04:41 GMT</pubDate>
      <description>&lt;p&gt;
In general, I love Microsoft development tools. The&amp;nbsp;reason I never felt compelled
to&amp;nbsp;venture far into either Java or LAMP world is because combination of the Visual
Studio, .NET Framework&amp;nbsp;runtime, SQL Server&amp;nbsp;and other MS tools&amp;nbsp;has always&amp;nbsp;been
an extremely&amp;nbsp;strong development platform, both for the&amp;nbsp;value delivery for
end users, and for something as prosaic as having fun programming 8 hours day in and&amp;nbsp;day
out. Therefore,&amp;nbsp;it's borderline pathological that Microsoft HTML editing tools
have not evolved beyond "D-" grade since their first tool I tried over a decade ago,
Front Page 98. Consider this, I am taking a short break (to vent my dissatisfaction)&amp;nbsp;from
writing content for a web site because when I edit an HTML file using Visual Studio
2008 SP1, it mangles the HTML by cutting up closing tags, turning "&amp;lt;/a&amp;gt;", "&amp;lt;/h3&amp;gt;",&amp;nbsp;"&amp;lt;/span&amp;gt;"&amp;nbsp;and
others&amp;nbsp;into "&amp;gt;". I thought, alright, Expression&amp;nbsp;Web 2 is going to save
the day. I open the page in the Expression Web, and what I found is that it doesn't
handle keyboard key strokes well, ranging&amp;nbsp;from failing to respond to arrow keys,
to&amp;nbsp;Ctrl+V shortcut for Paste simply&amp;nbsp;not working, rendering Expression Web
unusable. I use Microsoft keyboard and their drivers. I am a developer, not a designer,
but if getting such basic functions as arrow keys in their editor is impossible for
MS, what chances do they have with professional designers? And don't get me even started
with Expression suite not supporting MS own source controls for two versions.&amp;nbsp;Microsoft's
inability to get HTML design tools right for such a long time creates a fear that
MS is losing it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=868a8d58-6ea6-4285-9fe7-2f30c9e8bca6" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,868a8d58-6ea6-4285-9fe7-2f30c9e8bca6.aspx</comments>
      <category>ASP.NET;Rants;Sofware Development;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=922290d7-441a-4acc-b63f-1f02085e8b36</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,922290d7-441a-4acc-b63f-1f02085e8b36.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,922290d7-441a-4acc-b63f-1f02085e8b36.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=922290d7-441a-4acc-b63f-1f02085e8b36</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today I downloaded both iTunes 8.2 and iPhone OS 3.0. After installing everything,
syncing the iPhone with my 64-bit Vista failed at the end of the process with this
message "The iPhone cannot be synced. An unknown error occurred (13019)." I had to
read through several pages of Apple forums to find <a href="http://discussions.apple.com/message.jspa?messageID=9644370#9644370">the
solution</a>, which turned out to be <strong>unsyncing the music and then re-syncing
it back again</strong>.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=922290d7-441a-4acc-b63f-1f02085e8b36" />
      </body>
      <title>Fixing iPhone error 13019 when syncing with iTunes 8.2</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,922290d7-441a-4acc-b63f-1f02085e8b36.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,922290d7-441a-4acc-b63f-1f02085e8b36.aspx</link>
      <pubDate>Thu, 18 Jun 2009 02:40:28 GMT</pubDate>
      <description>&lt;p&gt;
Today I downloaded both iTunes 8.2 and iPhone OS 3.0. After installing everything,
syncing the iPhone with my 64-bit Vista failed at the end of the process with this
message "The iPhone cannot be synced. An unknown error occurred (13019)." I had to
read through several pages of Apple forums to find &lt;a href="http://discussions.apple.com/message.jspa?messageID=9644370#9644370"&gt;the
solution&lt;/a&gt;, which turned out to be &lt;strong&gt;unsyncing the music and then re-syncing
it back again&lt;/strong&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=922290d7-441a-4acc-b63f-1f02085e8b36" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,922290d7-441a-4acc-b63f-1f02085e8b36.aspx</comments>
      <category>iPhone;Mobile Devices;Vista;x64</category>
    </item>
  </channel>
</rss>