<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://cs.rthand.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>RightHand's community place</title><link>http://cs.rthand.com/blogs/default.aspx</link><description>RightHand's community place</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 (Build: 60809.935)</generator><item><title>Visual Studio 2008 SP1 most peculiar installation known issue</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/08/12/Visual-Studio-2008-SP1-most-peculiar-installation-known-issue.aspx</link><pubDate>Tue, 12 Aug 2008 07:44:19 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:10835</guid><dc:creator>Miha Markic</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;I was reading VS2008 SP1 &lt;a href="http://download.microsoft.com/download/A/2/8/A2807F78-C861-4B66-9B31-9205C3F22252/VS2008SP1Readme.htm" target="_blank"&gt;known issues&lt;/a&gt; file and this issue struck me:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;2.1.4&lt;/strong&gt; Visual Studio 2008 SP1 installation &lt;strong&gt;fails when the Windows Vista sidebar is enabled&lt;/strong&gt;. &lt;br&gt;Visual Studio 2008 SP1 installation fails when the Windows Vista sidebar is on.  &lt;p&gt;To resolve this issue:  &lt;p&gt;1. Right-click the Sidebar icon in the notification area, at the far right of the taskbar.&lt;br&gt;2. Click "Exit". &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;How can Vista sidebar interfere with VS2008 SP1 installation? This has to be the most peculiar installation issue I have seen in a while. Well, it didn't complain when I installed the SP1. &lt;p&gt;Go figure.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=10835" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net+3.5/default.aspx">.net 3.5</category></item><item><title>Visual Studio 2008/.net 3.5 SP1 is out!</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/08/11/Visual-Studio-2008_2F002E00_net-3.5-SP1-is-out_2100_.aspx</link><pubDate>Mon, 11 Aug 2008 18:13:39 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:10796</guid><dc:creator>Miha Markic</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Go get the long awaited &lt;a href="http://msdn.microsoft.com/en-us/vstudio/cc533448.aspx" target="_blank"&gt;SP1&lt;/a&gt; now.&lt;/p&gt; &lt;p&gt;A warning though (make sure you read &lt;strong&gt;IMPORTANT &lt;/strong&gt;paragraph below the links): &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;If you previously installed a Visual Studio 2008 Hotfix, you must run the Hotfix Cleanup Utility before installing Visual Studio 2008 SP1. For more information, see &lt;a href="http://code.msdn.microsoft.com/RemoveKB944899"&gt;Visual Studio 2008 Hotfix Cleanup Utility for Installing Visual Studio 2008 SP1&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=10796" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net+3.5/default.aspx">.net 3.5</category></item><item><title>First signs of Direct3D life on HTC TyTN II!</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/07/23/First-signs-of-Direct3D-life-on-HTC-TyTN-II_2100_.aspx</link><pubDate>Wed, 23 Jul 2008 14:49:24 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:10367</guid><dc:creator>Miha Markic</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Guys at &lt;a href="http://forum.xda-developers.com/" target="_blank"&gt;xda-developers.com&lt;/a&gt; achieved a breakthrough in HTC TyTN II missing (3D) graphics acceleration technology. In fact they achieved to cook up a proof of concept Direct3D driver that is able to accelerate windowed application on HTC's original WM6.1. Now is clear that MSM7200 inside TyTN II is capable of 3D acceleration if nothing else. Excellent work, chefs!&lt;/p&gt; &lt;p&gt;If you are in the mood for "miracles" then read the &lt;a href="http://forum.xda-developers.com/showthread.php?t=359534&amp;amp;page=203" target="_blank"&gt;forum&lt;/a&gt; and download the drivers from &lt;a href="http://www.htcclassaction.org/driverprogress.php#update_20080717_1" target="_blank"&gt;HTCClassAction.org&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=10367" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category></item><item><title>Creating wrappers for sealed and other types for mocking</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/07/22/Creating-wrappers-for-sealed-and-other-types-for-mocking.aspx</link><pubDate>Tue, 22 Jul 2008 15:23:00 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:10366</guid><dc:creator>Miha Markic</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Did you ever wanted to mock a sealed class or non-virtual methods? Unless you are using &lt;a href="http://www.typemock.com/" target="_blank"&gt;TypeMock&lt;/a&gt; you are in for some coding as there is no easy way to mock them just like that (I am fiddling with &lt;a href="http://code.google.com/p/moq/"&gt;MOQ&lt;/a&gt; but AFAIK no mock framework is capable of mocking sealed classes with exception of TypeMock). The general pattern I see is to &lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2008/05/18/mock_statics_without_typemock.aspx" target="_blank"&gt;create a wrapper class&lt;/a&gt; that implements an interface (you have to create that interface, too, most of the times). Let&amp;#39;s see an example with a class Tubo:&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:550f7a1a-a42c-4d6b-9ead-854b85027bf4" style="display:inline;float:none;margin:0px;padding:0px;"&gt;&lt;pre style="overflow:auto;background-color:white;"&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Tubo
{
  &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; SomeMethod() { }
  &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; SomeProperty { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800080;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To be able to mock this class you have to create ITubo interface and a TuboWrapper class like this:&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:c273910a-7a77-4818-90b9-d77de83e48a9" style="display:inline;float:none;margin:0px;padding:0px;"&gt;&lt;pre style="overflow:auto;background-color:white;"&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt;&lt;span style="color:#000000;"&gt; ITubo
{
  &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; SomeMethod();
  &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; SomeProperty { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
}

&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; TuboWrapper: ITubo
{
  &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; Tubo tubo &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; Tubo();

  &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; SomeMethod()
  {
    tubo.SomeMethod();
  }

  &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; SomeProperty
  {
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; tubo.SomeProperty; }
  }
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It sounds like highly boring and time consuming exercise, doesn&amp;#39;t it. Specially if you have to wrap a class rich with methods and properties. One could argue that you should think before creating non-mockable types. True, but one can&amp;#39;t help when dealing with non-user types (i.e. .net framework types).&lt;/p&gt;&lt;p&gt;One solution would be to go &lt;a href="http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx" target="_blank"&gt;duck typing&lt;/a&gt; as Phil Haack explains. There is also a &lt;a href="http://www.deftflux.net/blog/page/Duck-Typing-Project.aspx" target="_blank"&gt;library&lt;/a&gt; that enabled such typing. However, there are two arguments against duck typing:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;slight performance hit&lt;/li&gt;&lt;li&gt;you still have to code the interface&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So, it goes half way to solve the problem.&lt;/p&gt;&lt;p&gt;That&amp;#39;s why I&amp;#39;ve created a &lt;a href="http://www.codesmithtools.com/" target="_blank"&gt;CodeSmith&lt;/a&gt; template that generates both wrapper and interface for you out of a type in an assembly. Note that this is a very raw version that would work with types located in System and System.Core assemblies (and perhaps others that are linked to the template) as I really don&amp;#39;t have too much time right now. I might enhance it in the future.&lt;/p&gt;&lt;p&gt;Here is a sample configuration for creating ReaderWriterLockSlim wrapper:&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:da0d0569-11af-44a9-8069-7aa593d2572d" style="display:inline;float:none;margin:0px;padding:0px;"&gt;&lt;pre style="overflow:auto;background-color:white;"&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;xml version=&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;codeSmith &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.codesmithtools.com/schema/csp.xsd&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;propertySets&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;propertySet &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;output&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;WrapperGenerator.cs&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; template&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;..\CodeSmith Templates\WrapperGenerator.cst&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Postfix&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Wrapper&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;InternalQualifier&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;private&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;IgnoreObjectMethodsAndProperties&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;True&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Types&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;stringList&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;string&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;System.Threading.ReaderWriterLockSlim&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;string&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;stringList&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
      &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;property &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Namespace&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Namespace.Wrappers&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;property&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;propertySet&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
  &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;propertySets&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;codeSmith&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and here is autogenerated code:&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:22096181-18c5-43df-a76c-59d73121c380" style="display:inline;float:none;margin:0px;padding:0px;"&gt;&lt;pre style="overflow:auto;background-color:white;"&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color:#000000;"&gt; Namespace.Wrappers
{
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="color:#000000;"&gt; System;
    
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;#region&lt;/span&gt;&lt;span style="color:#000000;"&gt; ReaderWriterLockSlim wrapper&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt;&lt;span style="color:#000000;"&gt; IReaderWriterLockSlim
    {
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;#region&lt;/span&gt;&lt;span style="color:#000000;"&gt; Properties&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; IsReadLockHeld { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; IsUpgradeableReadLockHeld { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; IsWriteLockHeld { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
        System.Threading.LockRecursionPolicy RecursionPolicy { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; CurrentReadCount { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; RecursiveReadCount { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; RecursiveUpgradeCount { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; RecursiveWriteCount { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; WaitingReadCount { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; WaitingUpgradeCount { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; WaitingWriteCount { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt;; }
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;#endregion&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;#region&lt;/span&gt;&lt;span style="color:#000000;"&gt; Methods&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; EnterReadLock ();
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterReadLock (TimeSpan timeout);
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterReadLock (&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; millisecondsTimeout);
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; EnterWriteLock ();
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterWriteLock (TimeSpan timeout);
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterWriteLock (&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; millisecondsTimeout);
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; EnterUpgradeableReadLock ();
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterUpgradeableReadLock (TimeSpan timeout);
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterUpgradeableReadLock (&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; millisecondsTimeout);
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; ExitReadLock ();
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; ExitWriteLock ();
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; ExitUpgradeableReadLock ();
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Dispose ();
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;#endregion&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    }
    
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; ReaderWriterLockSlimWrapper: IReaderWriterLockSlim
    {
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Threading.ReaderWriterLockSlim core;
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; ReaderWriterLockSlimWrapper()
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;.core &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Threading.ReaderWriterLockSlim();
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; ReaderWriterLockSlimWrapper(System.Threading.ReaderWriterLockSlim core)
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;.core &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; core;
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;#region&lt;/span&gt;&lt;span style="color:#000000;"&gt; Properties&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; IsReadLockHeld
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.IsReadLockHeld; }
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; IsUpgradeableReadLockHeld
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.IsUpgradeableReadLockHeld; }
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; IsWriteLockHeld
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.IsWriteLockHeld; }
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Threading.LockRecursionPolicy RecursionPolicy
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.RecursionPolicy; }
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; CurrentReadCount
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.CurrentReadCount; }
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; RecursiveReadCount
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.RecursiveReadCount; }
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; RecursiveUpgradeCount
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.RecursiveUpgradeCount; }
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; RecursiveWriteCount
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.RecursiveWriteCount; }
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; WaitingReadCount
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.WaitingReadCount; }
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; WaitingUpgradeCount
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.WaitingUpgradeCount; }
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; WaitingWriteCount
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;&lt;span style="color:#000000;"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.WaitingWriteCount; }
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;#endregion&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;#region&lt;/span&gt;&lt;span style="color:#000000;"&gt; Methods&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; EnterReadLock()
        {
            core.EnterReadLock();
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterReadLock(TimeSpan timeout)
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.TryEnterReadLock(timeout);
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterReadLock(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; millisecondsTimeout)
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.TryEnterReadLock(millisecondsTimeout);
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; EnterWriteLock()
        {
            core.EnterWriteLock();
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterWriteLock(TimeSpan timeout)
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.TryEnterWriteLock(timeout);
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterWriteLock(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; millisecondsTimeout)
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.TryEnterWriteLock(millisecondsTimeout);
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; EnterUpgradeableReadLock()
        {
            core.EnterUpgradeableReadLock();
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterUpgradeableReadLock(TimeSpan timeout)
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.TryEnterUpgradeableReadLock(timeout);
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color:#000000;"&gt; TryEnterUpgradeableReadLock(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; millisecondsTimeout)
        {
            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; core.TryEnterUpgradeableReadLock(millisecondsTimeout);
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; ExitReadLock()
        {
            core.ExitReadLock();
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; ExitWriteLock()
        {
            core.ExitWriteLock();
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; ExitUpgradeableReadLock()
        {
            core.ExitUpgradeableReadLock();
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; Dispose()
        {
            core.Dispose();
        }
        
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;#endregion&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        
    }
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;#endregion&lt;/span&gt;&lt;span style="color:#000000;"&gt;
}
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Do you still want to code them by hand? Or do you want to use this template? Rhetoric question? What do you think?&lt;/p&gt;&lt;p&gt;Anyway, go get the &lt;a href="http://cs.rthand.com/files/folders/righthand_downloads/entry10365.aspx" target="_blank"&gt;template here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=10366" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net/default.aspx">.net</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net+3.5/default.aspx">.net 3.5</category></item><item><title>Can't start World Wide Web Publishing Service because of Windows Process Activation Service</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/07/18/Can_2700_t-start-World-Wibe-Web-Publishing-Service-because-of-Windows-Process-Activation-Service.aspx</link><pubDate>Fri, 18 Jul 2008 12:52:00 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:10245</guid><dc:creator>Miha Markic</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Recently I had to check out an asp.net application on my workstation and found out that the &amp;quot;Default Web Site&amp;quot; is stopped for some reason. After trying to start it I&amp;#39;ve got this message:&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="http://cs.rthand.com/images/blogs/CantstartWorldWibeWebPublishingServicebe_D0EC/image.png"&gt;&lt;img alt="image" border="0" height="186" src="http://cs.rthand.com/images/blogs/CantstartWorldWibeWebPublishingServicebe_D0EC/image_thumb.png" style="border:0px;" width="501" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p align="left"&gt;So I&amp;#39;ve tried to start the mentioned services only to get a new error message (WWW PS):&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="http://cs.rthand.com/images/blogs/CantstartWorldWibeWebPublishingServicebe_D0EC/image_3.png"&gt;&lt;img alt="image" border="0" height="201" src="http://cs.rthand.com/images/blogs/CantstartWorldWibeWebPublishingServicebe_D0EC/image_thumb_3.png" style="border:0px;" width="466" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p align="left"&gt;The mentioned dependency is the other stopped service: WAS or better Windows &lt;strong&gt;Process&lt;/strong&gt; Activation Service (the original message has left out the Process word). After trying to start WAS I&amp;#39;ve got another error message:&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="http://cs.rthand.com/images/blogs/CantstartWorldWibeWebPublishingServicebe_D0EC/image_4.png"&gt;&lt;img alt="image" border="0" height="201" src="http://cs.rthand.com/images/blogs/CantstartWorldWibeWebPublishingServicebe_D0EC/image_thumb_4.png" style="border:0px;" width="466" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;And here the error path comes to an end. Which file? I could have used Sysinternals&amp;#39; FileMonitor to find out what file the service is looking for. Rather I&amp;#39;ve decided to Google first as it is faster. After experimenting with search string a bit I&amp;#39;ve found &lt;a href="http://blog.benday.com/archive/2008/01/01/23169.aspx" target="_blank"&gt;this blog entry&lt;/a&gt; which points to this &lt;a href="http://technet2.microsoft.com/windowsserver2008/en/library/0618d6b1-6b0d-4358-a5fd-7d610cbfc0921033.mspx?mfr=true" target="_blank"&gt;solution&lt;/a&gt;. After creating the mentioned folder and applying proper security settings IIS started to work once again.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=10245" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Windows/default.aspx">Windows</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net+3.5/default.aspx">.net 3.5</category></item><item><title>Intel Matrix Storage Manager (RAID) drivers are perfect!</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/06/21/Intel-Matrix-Storage-Manager-_2800_RAID_2900_-drivers-are-perfect_2100_.aspx</link><pubDate>Sat, 21 Jun 2008 07:51:47 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9991</guid><dc:creator>Miha Markic</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;I am using Intel's ICH9R RAID controller integrated on my server's motherboard for a RAID5 configuration of three disks. Since I don't need huge performance the mentioned hardware is enough for me - I assume the driver is bug free. Now, one would think that Intel is a serious company, their RAID controller is good and support is great, right? Wrong.&lt;/p&gt; &lt;p&gt;First, let me mention that this isn't my first problem with this combination, although used for RAID 0+1 with 4 disks. &lt;a href="http://cs.rthand.com/blogs/blog_with_righthand/archive/2007/03/05/iTunes-is-trying-to-destroy-my-RAID-10.aspx" target="_blank"&gt;It corrupted the array&lt;/a&gt; when I was using Apple's software such as iTunes. Intel's support denied any problem with their drivers. They were perfect they said. After a while &lt;a href="http://cs.rthand.com/blogs/blog_with_righthand/archive/2007/05/10/Intel-acknowledges-that-there-is-a-problem-with-Apple-software-and-their-RAID-drivers-in-Vista.aspx" target="_blank"&gt;Intel silently acknowledged the problem&lt;/a&gt; and fixed the drivers.&lt;/p&gt; &lt;p&gt;Present time, my Windows 2003 R2 server went BSOD (it wasn't clear why at that time), I restarted it and immediately after login the RAID software kicked in and started rebuilding the array. It happens sometimes when OS is reset like this. After the rebuild was finished it notified me that one of the drives in array failed and array is running in degraded mode, IOW if another disk fails, say goodbye to data. I also checked the minidump produced by BSOD and go figure:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:82cf338c-62bf-4a39-ba08-64eea5855274" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;CUSTOMER_CRASH_COUNT: &lt;/span&gt;&lt;span style="color:#800080;"&gt;1&lt;/span&gt;&lt;span style="color:#000000;"&gt;
DEFAULT_BUCKET_ID: DRIVER_FAULT_SERVER_MINIDUMP
BUGCHECK_STR: &lt;/span&gt;&lt;span style="color:#800080;"&gt;0x8086&lt;/span&gt;&lt;span style="color:#000000;"&gt;
PROCESS_NAME: Idle
CURRENT_IRQL: &lt;/span&gt;&lt;span style="color:#800080;"&gt;2&lt;/span&gt;&lt;span style="color:#000000;"&gt;
LAST_CONTROL_TRANSFER: from f7b4a79a to 80827c3e
STACK_TEXT:
8089a444 f7b4a79a &lt;/span&gt;&lt;span style="color:#800080;"&gt;00008086&lt;/span&gt;&lt;span style="color:#000000;"&gt; 8b26b1c0 8acf5340 nt&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;KeBugCheck&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#800080;"&gt;0x14&lt;/span&gt;&lt;span style="color:#000000;"&gt;
WARNING: Stack unwind information not available. Following frames may be wrong.
8089a45c f7b4adcd 0000001b 8089a500 f7b13c6f iaStor&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#800080;"&gt;0x3b79a&lt;/span&gt;&lt;span style="color:#000000;"&gt;
8089a468 f7b13c6f 8b266000 808722e0 8b26b1c0 iaStor&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#800080;"&gt;0x3bdcd&lt;/span&gt;&lt;span style="color:#000000;"&gt; 8089a500 f7b14905 8b26b1c0 8b392878 ffdffa40 iaStor&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#800080;"&gt;0x4c6f&lt;/span&gt;&lt;span style="color:#000000;"&gt;
8089a598 f7b511e3 8b26b1c0 &lt;/span&gt;&lt;span style="color:#800080;"&gt;00000000&lt;/span&gt;&lt;span style="color:#000000;"&gt; 8089a600 iaStor&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#800080;"&gt;0x5905&lt;/span&gt;&lt;span style="color:#000000;"&gt;
8089a5a8 808320f0 8b266728 8b266000 &lt;/span&gt;&lt;span style="color:#800080;"&gt;00000000&lt;/span&gt;&lt;span style="color:#000000;"&gt; iaStor&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#800080;"&gt;0x421e3&lt;/span&gt;&lt;span style="color:#000000;"&gt; 8089a600 8088de1f &lt;/span&gt;&lt;span style="color:#800080;"&gt;00000000&lt;/span&gt;&lt;span style="color:#000000;"&gt; 0000000e &lt;/span&gt;&lt;span style="color:#800080;"&gt;00000000&lt;/span&gt;&lt;span style="color:#000000;"&gt; nt&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;KiRetireDpcList&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#800080;"&gt;0xca&lt;/span&gt;&lt;span style="color:#000000;"&gt;
8089a604 &lt;/span&gt;&lt;span style="color:#800080;"&gt;00000000&lt;/span&gt;&lt;span style="color:#000000;"&gt; 0000000e &lt;/span&gt;&lt;span style="color:#800080;"&gt;00000000&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800080;"&gt;00000000&lt;/span&gt;&lt;span style="color:#000000;"&gt; nt&lt;/span&gt;&lt;span style="color:#000000;"&gt;!&lt;/span&gt;&lt;span style="color:#000000;"&gt;KiIdleLoop&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#800080;"&gt;0x37&lt;/span&gt;&lt;span style="color:#000000;"&gt; ##ERIGNORE##
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I am not a great kernel debugging guy but it looks obvious to me that the BSOD was actually caused by iaStor which means Intel Matrix Storage Manager driver. Looks like that a drive failed and RAID driver managed to thrash my OS into BSOD instead of just mark the drive as failed (as later did). So I contacted Intel's support once again. The conversation was something like this (short version):&lt;/p&gt;
&lt;p&gt;Me: "Your driver BSOD my OS due to a drive failure."&lt;br&gt;Intel support: "I am glad that you've found the cause of the problem, just replace the drive and array will be restored."&lt;br&gt;Me: "Yes, but what about BSOD? Your driver really shouldn't thrash my OS even if a drive fails."&lt;br&gt;IS: "These drivers have been rigorously tested and we have not experience such error. If the issue continues or reoccurs, please contact your motherboard manufacturer."&lt;br&gt;Me: "Please, it wouldn't be the first time that these "rigorously tested" drivers would fail miserably instead of protecting the disk content (providing the &lt;a href="http://cs.rthand.com/blogs/blog_with_righthand/archive/2007/03/05/iTunes-is-trying-to-destroy-my-RAID-10.aspx" target="_blank"&gt;link&lt;/a&gt; to earlier problem with iTunes). Now, please, send my minidump information to a serious engineer of Intel."&lt;br&gt;IS: "Then again, we have tested the Intel(R) Matrix Storage Manager and we have not seen this. You need to keep in mind as well that we have not developed or manufactured your motherboard. Even though your board is based on our chipset and RAID controller, the integration of these vary from manufacturer to manufacturer. At this point, we can only recommend that you contact Gigabyte (op.a.: my motherboard manufactures) for further technical assistance."&lt;/p&gt;
&lt;p&gt;Conclusion? It is groundhog day all over again. The story repeats. Intel drivers/hardware is perfect, not a chance that there is an error in there. And if you see an error, it can't be their, since they haven't seen it. Yet. They practically tested all the possibilities and their stuff won't misfire. Great job, Intel. This is support at its best - deny the problems.&lt;br&gt;Granted, there are very minimal chances that the chipset is badly integrated. And so there are chances we are not alone. If you ask me, Intel should treat a BSOD report very seriously and analyze it "rigorously". Sticking their head into the sand won't make the bug disappear. It just won't.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9991" width="1" height="1"&gt;</description></item><item><title>My article about missing HTC TyTN II graphics drivers published on Moj Mikro</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/06/12/My-article-about-missing-HTC-TyTN-II-graphics-drivers-published-on-Moj-Mikro.aspx</link><pubDate>Thu, 12 Jun 2008 12:58:17 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9955</guid><dc:creator>Miha Markic</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;A while ago I wrote an article about HTC TyTN II and its &lt;a href="http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/01/19/HTC-devices-and-lack-of-proper-drivers.aspx" target="_blank"&gt;missing graphics drivers&lt;/a&gt; for Slovene computer magazine &lt;a href="http://www.mojmikro.si/" target="_blank"&gt;Moj Mikro&lt;/a&gt;. Now the article has been published on-line, so check it out if you are interested in why TyTN II's graphics performance is dismal, or how HTC is treating their loyal customers. The article is in Slovene.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.mojmikro.si/v_srediscu/razkritje/dejstva_ki_jih_je_htc_zamolcal" target="_blank"&gt;Read the article here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Update since article has been written: &lt;a href="http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/05/25/HTC-did-it-again-_2D00_-new-ROM-old-story.aspx" target="_blank"&gt;new ROM has been delivered&lt;/a&gt; with Windows Mobile 6.1 and no proper graphics drivers.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9955" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Hardware/default.aspx">Hardware</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Slovenia/default.aspx">Slovenia</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category></item><item><title>Developer Express offers free Silverlight grid: agDataGrid</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/06/10/Developer-Express-offers-free-Silverlight-grid_3A00_-agDataGrid.aspx</link><pubDate>Tue, 10 Jun 2008 07:29:48 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9933</guid><dc:creator>Miha Markic</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;That's a Silverlight 2.0 data grid of course. They won't just ship &lt;a href="http://community.devexpress.com/blogs/thinking/archive/2008/06/09/ag-stands-for-silver-and-agdatagrid-is-free.aspx" target="_blank"&gt;agDataGrid&lt;/a&gt; for free, they'll include full source code, too. Looks like WPF and Silverlight are making companies to give away their grids for free (first Xceed with their &lt;a href="http://xceed.com/Grid_WPF_Intro.html" target="_blank"&gt;DataGrid for WPF&lt;/a&gt;, now this). Nice trend, isn't it. &lt;/p&gt; &lt;p&gt;And no, unfortunately isn't available just yet but it will be soon.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9933" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/DevExpress/default.aspx">DevExpress</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net+3.5/default.aspx">.net 3.5</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Linq to LLBLGen Pro hits the RTM!</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/06/09/Linq-to-LLBLGen-Pro-hits-the-RTM_2100_.aspx</link><pubDate>Mon, 09 Jun 2008 11:17:38 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9932</guid><dc:creator>Miha Markic</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://weblogs.asp.net/fbouma/archive/2008/06/09/llblgen-pro-v2-6-has-been-released.aspx" target="_blank"&gt;LLBLGen Pro v2.6 is released&lt;/a&gt; and a free upgrade to v2.x customers. The major feature of this release is Linq to LLBLGen Pro, as Frans said, "&lt;em&gt;one of the most feature-rich Linq providers available on .net today&lt;/em&gt;".&lt;/p&gt; &lt;p&gt;Having tested beta versions I can only say the this version is a step in right direction. Great work, Frans.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9932" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/LLBLGenPro/default.aspx">LLBLGenPro</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net+3.5/default.aspx">.net 3.5</category></item><item><title>Windows Home Server just saved my day</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/06/04/Windows-Home-Server-just-saved-my-day.aspx</link><pubDate>Wed, 04 Jun 2008 09:10:22 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9905</guid><dc:creator>Miha Markic</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://www.vmware.com/"&gt;VMWare&lt;/a&gt; Virtual Server 1.0.5 ... free&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt; Windows Home Server (running under VS)... $~170&lt;/p&gt; &lt;p&gt;750GB disk used for storing backups ... ~120€&lt;/p&gt; &lt;p&gt;Recovery from WHS backup ... &lt;strong&gt;priceless&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I've been running Windows Home Server for quite some time now. I use it exclusively for doing nightly disk image backups for all computers of mine. WHS' storage mechanism that minimizes the disk space required for backups and its speed are just amazing. Briefly: it doesn't store duplicate data - IOW, if you have two computers with same OS, only one file per computer will be stored as long as they are exactly the same.&lt;/p&gt; &lt;p&gt;And like my bicycle helmet I hoped that I would never actually use it for real (to restore a computer). However, I had to restore my production machine yesterday. An odd thing happened yesterday - my Vista x86 just froze, at least so it seemed but the music from Winamp was still playing thus I deduced there are problems with graphics and the OS is still running non-graphical operations. I tried to connect using Remote Desktop without success. The remote shutdown command didn't help either. The only action remaining at that point was hardware reset switch, which should be used as a last resort. I crossed my fingers and reset the computer. Then, during the boot time (which was kind of slow) Vista started checking NTFS integrity on my disk. Ouch, not a good sign. After a while I was able to log on just to find that there is no network connection anymore and there is a problem with my event log service: "There is a problem with Event Log service. Check event log for more details" - funny, isn't it. Catch 22 by all means. At this point I was left with three options:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Format the disk and reinstall&lt;/li&gt; &lt;li&gt;Try to repair Vista&lt;/li&gt; &lt;li&gt;Restore from most recent nightly backup&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Option 1. is not that bad as it seems. Reinstalling from scratch from time to time isn't a bad idea after all - a lot of mess gets cleaned. The downside is the amount of time required - a day or two at least and constant attention.&lt;/p&gt; &lt;p&gt;Option 2. is more tricky. When there are such problems that I was experiencing the repair is doomed to fail.&lt;/p&gt; &lt;p&gt;So I opted for the most appealing option 3. After few clicks on "Next" button, 10 hours and 400GB files restored, my computer was working like it was the night when the backup was taken. The restore was straightforward and relatively quick - copying 400GB takes time regardless of how you are doing it (my restore was doing something like &amp;gt;11MB/s) So, big kudos to Windows Home Server - it spared me a lot of work and time.&lt;/p&gt; &lt;p&gt;One mystery remains though. My BIOS was downgraded (sometime before restore) somehow - it was version F10 (I upgrade it form time to time) and after computer crashed it was F3. Truth is that I am not sure when it was downgraded, this is first time I noticed it (I noticed because F3 misspelled word RAID to RIAD).&lt;/p&gt; &lt;p&gt;Bottom line: &lt;strong&gt;always have a backup handy&lt;/strong&gt;.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9905" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Windows/default.aspx">Windows</category></item><item><title>SharePoint 2007 training with Sahil in Europe</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/06/04/SharePoint-2007-training-with-Sahil-in-Europe.aspx</link><pubDate>Wed, 04 Jun 2008 06:50:33 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9904</guid><dc:creator>Miha Markic</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Sahil "SharePoint dude" Malik will be doing advanced &lt;a href="http://blah.winsmarts.com/2008-6-Advanced_Developers_SharePoint_2007_Training_in_Norway.aspx" target="_blank"&gt;SharePoint 2007 training in Norway&lt;/a&gt;. Yep, that's the same Sahil that &lt;a href="http://blah.winsmarts.com/" target="_blank"&gt;blogs like mad about SharePoint&lt;/a&gt;. So if you are into SharePoint development you are having a great opportunity to learn from the expert.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9904" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net/default.aspx">.net</category></item><item><title>HTC did it again - new ROM, old story</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/05/25/HTC-did-it-again-_2D00_-new-ROM-old-story.aspx</link><pubDate>Sun, 25 May 2008 08:41:00 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9860</guid><dc:creator>Miha Markic</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;At the beginning of this month &lt;a href="http://msmobiles.com/news.php/7334.html" target="_blank"&gt;news&lt;/a&gt; went out that HTC will release a new ROM featuring Windows Mobile 6.1 and improved graphics drivers for TyTN II device (and improvements/solutions for most of the issues). While the former was clear and confirmed by both &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt; and HTC the later was muddy. What improved graphics drivers exactly? Then &lt;a href="http://forum.xda-developers.com/showpost.php?p=2183808&amp;amp;postcount=1673" target="_blank"&gt;an article&lt;/a&gt; was published in a Dutch online site and translations suggested that HTC had actually bought proper graphics drivers from Qualcomm and it will include them in this same update. Yeah, right.&lt;/p&gt;&lt;p&gt;On Friday, more than two weeks later HTC actually released a new ROM for the TyTN II device (you&amp;#39;ll find it at HTC&amp;#39;s e-Club web site). It features Windows Mobile 6.1 but, of course - &lt;a href="http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/01/26/HTC-is-giving-a-finger-to-its-customers.aspx" target="_blank"&gt;cheap, ignorant and arrogant company&lt;/a&gt; as HTC these days is, no proper graphics drivers at all. Yep, the &lt;a href="http://forum.xda-developers.com/showthread.php?t=394369" target="_blank"&gt;first reports&lt;/a&gt; don&amp;#39;t indicate any significant performance improvements, the device is still unnecessarily sluggish - even worse, new ROM has apparently brought new problems (at least to some users), among them device freezing while typing on keyboard, Internet connection sharing won&amp;#39;t work and Skype won&amp;#39;t work either. Furthermore many old issues are &lt;a href="http://forum.xda-developers.com/showthread.php?t=394360" target="_blank"&gt;still there&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Will I install new ROM? Certainly not at this time.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9860" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category></item><item><title>SLODUG/SLOWUG server experiencing problems</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/05/19/SLODUG_2F00_SLOWUG-server-experiencing-problems.aspx</link><pubDate>Mon, 19 May 2008 14:37:54 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9830</guid><dc:creator>Miha Markic</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;As &lt;a href="http://www.slodug.si" target="_blank"&gt;SLODUG&lt;/a&gt;/&lt;a href="http://www.slowug.si" target="_blank"&gt;SLOWUG&lt;/a&gt; members probably already know, the server is experiencing some problems and it is down most of the time. This is old news. The good news are that the problem is being worked on and it should be fixed as soon as possible.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9830" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/SloDUG/default.aspx">SloDUG</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Slovenia/default.aspx">Slovenia</category></item><item><title>NTKonferenca 2008 Entity Framework slides</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/05/17/NTKonferenca-2008-Entity-Framework-slides.aspx</link><pubDate>Sat, 17 May 2008 08:50:26 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9828</guid><dc:creator>Miha Markic</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;You can &lt;a href="http://cs.rthand.com/files/folders/righthand_downloads/entry9827.aspx" target="_blank"&gt;download the slides&lt;/a&gt; of my Entity Framework presentation from &lt;a href="http://www.ntk.si/" target="_blank"&gt;NTKonferenca 2008&lt;/a&gt;. I hope you've enjoyed the presentation.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9828" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Slovenia/default.aspx">Slovenia</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/ORM/default.aspx">ORM</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net+3.5/default.aspx">.net 3.5</category></item><item><title>.net 3.5 SP1 beta and Visual Studio 2008 SP1 beta are here</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/05/13/.net-3.5-SP1-beta-and-Visual-Studio-2008-SP1-beta-are-here.aspx</link><pubDate>Tue, 13 May 2008 07:03:57 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9821</guid><dc:creator>Miha Markic</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;There are various &lt;a href="http://blogs.msdn.com/somasegar/archive/2008/05/12/visual-studio-2008-and-net-fx-3-5-sp1-beta-available-now.aspx" target="_blank"&gt;enhancements and even changes in SP1&lt;/a&gt;. Perhaps one of the most interesting is the change in security: applications launched from LocalIntranet will get FullTrust by default from now on (&lt;a href="http://blogs.msdn.com/shawnfa/archive/2008/05/12/fulltrust-on-the-localintranet.aspx" target="_blank"&gt;read here&lt;/a&gt;). I guess this is because a lot of people found annoying that they couldn't launch applications (that required FullTrust) from network shares. This move will certainly ease the internal deployment but at the same time it might cause security problems, too.&lt;/p&gt; &lt;p&gt;Here is the list of &lt;a href="http://blogs.msdn.com/vancem/archive/2008/05/12/what-s-coming-in-net-runtime-performance-in-version-v3-5-sp1.aspx" target="_blank"&gt;.net 3.5 SP1 runtime performance enhancements&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/ddperf/archive/2008/05/12/vs2008-sp1-and-net-fx-beta-performance-improvements.aspx" target="_blank"&gt;another list of improvements&lt;/a&gt;. A list of &lt;a href="http://blogs.msdn.com/bharry/archive/2008/04/28/team-foundation-server-2008-sp1.aspx" target="_blank"&gt;changes in TFS&lt;/a&gt;. Brad Abram's &lt;a href="http://blogs.msdn.com/brada/archive/2008/05/05/visual-studio-2008-and-net-framework-3-5-sp1-beta.aspx" target="_blank"&gt;list&lt;/a&gt; and finally Scott Guthrie's &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx" target="_blank"&gt;take&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Download the bits from &lt;a href="http://msdn.microsoft.com/vstudio/products/cc533447.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9821" width="1" height="1"&gt;</description></item><item><title>Developer Express steps into WPF</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/05/07/Developer-Express-steps-into-WPF.aspx</link><pubDate>Wed, 07 May 2008 12:27:54 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9819</guid><dc:creator>Miha Markic</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://www.devexpress.com/"&gt;Developer Express&lt;/a&gt;, my favorite 3rd party .net component vendor, has just made its first public step into Windows Presentation Foundation world. They released a &lt;strong&gt;beta&lt;/strong&gt; version of their charting product DXCharts for WPF (hey, where are those Xtra, Xpress, Express prefixes - "&lt;em&gt;DX for WPF&lt;/em&gt;", shhh, boring ;-)). Anyway, everything is as one would expected in WPF - animations and 3D make it look good. Though it is just a first step and many features (i.e. many chart types), we are used from WinForms world, are missing at this time. But this is normal as they usually concentrate on good foundations at first and only then they add all those additional features.&lt;/p&gt; &lt;p&gt;Here is quick glimpse at the demo that comes with the product:&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://cs.rthand.com/images/blogs/DeveloperExpressstepsintoWPF_CB1E/image.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="484" alt="image" src="http://cs.rthand.com/images/blogs/DeveloperExpressstepsintoWPF_CB1E/image_thumb.png" width="643" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="left"&gt;If you are entitled to &lt;a href="http://www.devexpress.com/"&gt;Developer Express&lt;/a&gt; beta previews, go check &lt;a href="https://www.devexpress.com/ClientCenter/ProductDetails.aspx?product=97bd7736-7995-4442-8e0d-0f6018d5f2e1&amp;amp;i=0" target="_blank"&gt;client center&lt;/a&gt; for the beta bits.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9819" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net/default.aspx">.net</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/DevExpress/default.aspx">DevExpress</category></item><item><title>ASPxGridView, MS Ajax and XYDataSource</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/03/31/ASPxGridView_2C00_-MS-Ajax-and-XYDataSource.aspx</link><pubDate>Mon, 31 Mar 2008 11:59:00 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9593</guid><dc:creator>Miha Markic</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;If you use &lt;a href="http://www.devexpress.com/"&gt;Developer Express&lt;/a&gt; ASPxGridView within MS Ajax&amp;#39; UpdatePanel (ASPxGridView.EnableCallBacks=&amp;quot;False&amp;quot;) you should be aware that you should perform &lt;strike&gt;DataBind() method within OnInit method (Init event). Otherwise editing just won&amp;#39;t work, or better, it works, just the modifications aren&amp;#39;t persisted. It took me some time to pinpoint the problem as ASPxGridView worked just fine outside UpdatePanel.&lt;/strike&gt; I had to put it within UpdatePanel because I needed to refresh other controls as well (otherwise grid refreshes just itself).&lt;/p&gt;&lt;p&gt;Note that when ASPxGridView is hosted in UpdatePanel the nice error reporting feature (see the picture below) won&amp;#39;t work either - instead you&amp;#39;ll get script error reported by browser. IOW you have to handle errors by yourself.&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="http://cs.rthand.com/images/blogs/ASPxGridViewMSAjaxandXYDataSource_C46C/image.png"&gt;&lt;img alt="image" border="0" height="225" src="http://cs.rthand.com/images/blogs/ASPxGridViewMSAjaxandXYDataSource_C46C/image_thumb.png" style="border:0px;" width="504" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p align="center"&gt;Cool automatic error feedback&lt;/p&gt;&lt;p align="left"&gt;See also this &lt;a href="http://www.devexpress.com/Support/Center/p/Q91833.aspx?searchtext=ajax+edit&amp;amp;tid=4b2d6f97-c4ae-48fc-87f6-8c5da6541e40&amp;amp;pid=22713479-a995-45d4-9ed4-72ffa096d83d" target="_blank"&gt;support thread&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9593" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net/default.aspx">.net</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/DevExpress/default.aspx">DevExpress</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/ASP.Net/default.aspx">ASP.Net</category></item><item><title>The time of &quot;Vote for XY product&quot; is here again</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/03/21/The-time-of-_2200_Vote-for-XY-product_2200_-is-here-again.aspx</link><pubDate>Fri, 21 Mar 2008 09:40:47 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9531</guid><dc:creator>Miha Markic</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://www.aspnetpro.com/" target="_blank"&gt;asp.netPRO&lt;/a&gt; started voting process for &lt;a href="http://www.aspnetpro.com/ReadersChoice/" target="_blank"&gt;asp.netPRO Readers' Choice Awards 2008&lt;/a&gt; as they do every year. And all of the 3rd party component vendors are asking for your vote, as usual. Nothing wrong there. But there are two things that I noticed during my voting. First, immediately on the top of first page, I saw this product:&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://cs.rthand.com/images/blogs/ThetimeofVoteforXYproductishereagain_9618/image.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="67" alt="image" src="http://cs.rthand.com/images/blogs/ThetimeofVoteforXYproductishereagain_9618/image_thumb.png" width="388" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="left"&gt;This refactor tool was around at the time of Visual Studio 2002/2003 and died soon after, or better it froze. The web site is still there and you can even download it for free (Order tab). It was a great product at that time, offering refactoring when nobody else did. However the product is dead as the dodo for many years now. So I wonder, why is such product even listed as a choice?&lt;/p&gt; &lt;p align="left"&gt;The other odd thing is the categories. For example, Component Set category lists a lot of different sets. I mean different like apples and hard disks. How can one compare those? Or Utility category where the difference is even huger - looks like basically everything that didn't fit in other categories landed here. Go ahead and compare Aqtime profiler with dtSearch with LLBLGen Pro. Which is better? I think the products with larger client base will get more votes simply because it is natural that you would vote for product you own in such case.&lt;/p&gt; &lt;p align="left"&gt;What gives? The results in at least the two categories mentioned can't be relevant if you ask me, or better, they'll just reflect the client base size of each product.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9531" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net/default.aspx">.net</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/ASP.Net/default.aspx">ASP.Net</category></item><item><title>LLBLGen Pro gets LINQ capability</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/03/12/LLBLGen-Pro-gets-LINQ-capability.aspx</link><pubDate>Wed, 12 Mar 2008 17:51:44 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9508</guid><dc:creator>Miha Markic</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;My favorite ORM tool just got better - &lt;a href="http://weblogs.asp.net/fbouma/" target="_blank"&gt;Frans&lt;/a&gt; implemented &lt;a href="http://weblogs.asp.net/fbouma/archive/2008/03/12/beta-of-linq-to-llblgen-pro-released.aspx" target="_blank"&gt;Linq to LLBLGen Pro&lt;/a&gt;. He really implemented it to the last detail as he writes in a series of &lt;a href="http://weblogs.asp.net/fbouma/archive/2007/09/11/developing-linq-to-llblgen-pro-day-0.aspx" target="_blank"&gt;blog post&lt;/a&gt; (a must read for everybody doing LINQ to an ORM product).&lt;/p&gt; &lt;p&gt;If you are a customer go grab the beta bits. If you are not, well, it is a reason more to become one.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9508" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/ORM/default.aspx">ORM</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/LLBLGenPro/default.aspx">LLBLGenPro</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net+3.5/default.aspx">.net 3.5</category></item><item><title>Building your own Media Center</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/03/10/Building-your-own-Media-Center.aspx</link><pubDate>Mon, 10 Mar 2008 09:35:12 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9504</guid><dc:creator>Miha Markic</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;Since I have IPTV I am really annoyed by not having an option to save programs, like in old video recorder and cable network days. True, one can still save using video recorder, but the problem is that video recorder can't change channels on STB (set top box) and thus you are limited to a single channel. Pretty much useless. The other option is using &lt;em&gt;personal recorder&lt;/em&gt;, a feature provided by my IPTV provider. But again, the drawbacks are enormous: there is a monthly fee, you are limited to 6 hrs of total saved content. Even worse limitation is that your content can be stored for maximum of two days (forget vacation, or drive back to home every two days to watch the saved content). But there's another drawback, in fact mother of all drawbacks: only a few channels and not all shows on those channels are allowed to be saved. Total useless crap.&lt;/p&gt; &lt;p&gt;Hence the idea of my own media center. After all I live by using my development skills, why not use them for this one. So, &lt;strong&gt;RH Media Center&lt;/strong&gt; project was born.&lt;/p&gt; &lt;p&gt;The main objectives:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;ability to save from IPTV  &lt;li&gt;ability to schedule saving  &lt;li&gt;ability to playback saved content  &lt;li&gt;ability to control RH Media Center by remote&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Hardware requirements&lt;/p&gt; &lt;ol&gt; &lt;li&gt;A computer (server which is always on preferably) that will be used to save content&lt;/li&gt; &lt;li&gt;A computer to playback the saved content (possibly attached to TV). In my case this is my laptop.&lt;/li&gt; &lt;li&gt;A PocketPC device (remote control)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;1. and 2. can be the same computer, whatever is feasible for you.&lt;/p&gt; &lt;h4&gt;Implementation&lt;/h4&gt; &lt;p&gt;&lt;a href="http://www.videolan.org/vlc/"&gt;VLC media player&lt;/a&gt; ActiveX control is at the core of RH Media Center. VLC media player is a free, open source, cross platform application that plays just everything out there, including SIOL IPTV streams. And luckily for me, they have an ActiveX control, too. In fact I've build my application around this ActiveX control using Windows Forms UI. Here is how it looks:&lt;/p&gt; &lt;p align="center"&gt;&amp;nbsp;&lt;a href="http://cs.rthand.com/images/blogs/BuildingyourownMediaCenter_859E/image.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="318" alt="image" src="http://cs.rthand.com/images/blogs/BuildingyourownMediaCenter_859E/image_thumb.png" width="644" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Video (both IPTV stream and saved content playback) is rendered and saved by VLC. You can also see a bunch of controls on the top and the channel listing on the right. There is also saved content listing in the docking panel next to channel listing.&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://cs.rthand.com/images/blogs/BuildingyourownMediaCenter_859E/image_3.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="484" alt="image" src="http://cs.rthand.com/images/blogs/BuildingyourownMediaCenter_859E/image_thumb_3.png" width="189" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;h6 align="center"&gt;Test saved contents listing&lt;/h6&gt; &lt;h6&gt;&lt;/h6&gt; &lt;p&gt;Note that UI is pretty rough at this time as prettiness wasn't one of the objectives. Anyway the objectives 1. and 3. are done now.&lt;/p&gt; &lt;h4&gt;Scheduling&lt;/h4&gt; &lt;p&gt;Once the core functionality is done (see above) the scheduling is pretty easy. The application should parse command line arguments and start saving given channel for given time. The content file name should be made of given argument (i.e. name of the show) plus date. Here is an example:&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:bd759de5-010f-4c53-86e1-5026102ca572" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;RhMediaCenter.exe rec &lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Channel&lt;/span&gt;&lt;span style="color:#800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; ShowName &lt;/span&gt;&lt;span style="color:#800080;"&gt;120&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This means that content from "Channel" will be recorded for 120 minutes to a file name &lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:a3dbeabf-4476-4680-b3af-0ddcc3f8c019" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;ShowName_hh_mm__dd_MM_YYYY.ps&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;ps is MPEG-PS extension. You'll note that I didn't specify when should the recording start aka scheduling. This step is done using Task Scheduler - no wonders there, just run that command line at any time you specify and that's it. A bit rough to configure but it works just fine (in future I'll enhance the configuration step).&lt;/p&gt;
&lt;h4&gt;&lt;/h4&gt;
&lt;h4&gt;Remote control&lt;/h4&gt;
&lt;p&gt;Every decent media center has remote control capabilities. How can you skip those commercials otherwise? I've figured out, that I have a bunch of PocketPCs lying around and collecting dust. At the same time I have a Wi-Fi network at home. Get the idea? Yes, I'll use PocketPC over Wi-Fi to control my media center. The technology of choice is &lt;a href="http://blogs.msdn.com/andrewarnottms/archive/2007/08/21/the-wcf-subset-supported-by-netcf.aspx"&gt;WCF which is partially supported with .NET Compact Framework 3.5&lt;/a&gt;. BasicHttpBinding, here we go.&lt;/p&gt;
&lt;p&gt;So I've build a simple Windows Mobile 6 application which looks like this:&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://cs.rthand.com/images/blogs/BuildingyourownMediaCenter_859E/image_4.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="484" alt="image" src="http://cs.rthand.com/images/blogs/BuildingyourownMediaCenter_859E/image_thumb_4.png" width="316" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;It allows to connect to preferred RH Media Center through providing a proper IP, it can get a list of saved content and it allows you to play any of them. It features also a &lt;em&gt;Pause&lt;/em&gt; button and move forward (left group of buttons) or backward (right group of buttons) for a given time span. And after creating a hole in Windows Firewall on computer where RH Media Control runs it just works.&lt;/p&gt;
&lt;p&gt;The only problem is how to build WCF service client code for .net compact framework. This feature is provided by &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c8174c14-a27d-4148-bf01-86c2e0953eab&amp;amp;displaylang=en"&gt;Power Toys for .NET Compact Framework 3.5&lt;/a&gt;'s NetCFSvcUtil utility that does the similar job as Service Metadata Utility (SvcUtil.exe) for .net framework.&lt;/p&gt;
&lt;h4&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;I solved the biggest IPTV issue - saving programs and playback of saved content using a remote control. By using .net 3.5/Windows Forms/WCF/Compact framework and VLC ActiveX control it took me only around 10 hours of total time over the weekend (most of the time I used for plumbing , user interface and figuring out VLC ActiveX oddities). If you wonder why I'd used Windows Forms instead of WPF: because I was experimenting at the beginning (and the project is still an experiment) and I have no 3rd party controls for WPF yet - so it was easier with Windows Forms. In future I'll be definitely using WPF.&lt;/p&gt;
&lt;p&gt;I have to say that .net/VLC made it so easy to build this pet project - the ease of putting pieces together is amazing.&lt;/p&gt;
&lt;p&gt;BTW, Is anybody interested in binaries? (I am not saying I'll provide them nor that I won't provide them :-))&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9504" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Hardware/default.aspx">Hardware</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net+3.5/default.aspx">.net 3.5</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/WCF/default.aspx">WCF</category></item><item><title>&quot;The target assembly contains no service types.  You may need to adjust the Code Access Security policy of this assembly.&quot; annoyance</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/03/10/_2200_The-target-assembly-contains-no-service-types.--You-may-need-to-adjust-the-Code-Access-Security-policy-of-this-assembly_2E002200_-annoyance.aspx</link><pubDate>Mon, 10 Mar 2008 08:45:26 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9503</guid><dc:creator>Miha Markic</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;Did you ever encounter this dialog box when dealing with WCF services? &lt;blockquote&gt; &lt;p&gt;"The target assembly contains no service types.&amp;nbsp; You may need to adjust the Code Access Security policy of this assembly."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;It might happen when you run application at debug time. It is highly annoying and time consuming (it pauses application for more than one minute without any apparent reason). But what does it mean and why does it happen? &lt;p&gt;When you create a project from a WCF project templates Visual Studio knows that this project is a WCF service and thus it offers two debug time helpers: WCF Service Host and WCF Client. These two guys are intended to help you with running and testing WCF services without writing any code - they just appear at debug time. So far so good. But why the annoying dialog? &lt;p&gt;The dialog in question means that you have a project, created using one of the WCF project templates, with an interface marked with ServiceContract attribute and in the same project you don't have a class that implements this interface (perhaps you implemented that interface in another project). So, the WCF Service Host can't find a suitable class to host the service and it complains through that dreaded dialog box. Note that WCF Service Host is pretty dumb and it is incapable of searching through other projects in same solution. OK, the solution is to stop running WCF Service Host or even better, instruct it which class implements the interface in question. Well, AFAIK the later is impossible while the former can be done through project file modification using notepad. Here is how: &lt;p&gt;Delete this line from your project file: &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:47051190-19e1-49f5-af67-df6bffe062e3" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ProjectTypeGuids&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ProjectTypeGuids&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;And you won't see WCF Service Host or dreaded dialog anymore.&lt;/p&gt;
&lt;p&gt;The question is, why didn't &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt; think of these scenarios before?&lt;/p&gt;
&lt;p&gt;BTW, if you just want to stop WCF Client from runing then delete this command line argument: &lt;em&gt;/client:"WcfTestClient.exe"&lt;/em&gt;, created by WCF project template.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9503" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net+3.5/default.aspx">.net 3.5</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/WCF/default.aspx">WCF</category></item><item><title>LINQ to XtraGrid</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/02/23/LINQ-to-XtraGrid.aspx</link><pubDate>Sat, 23 Feb 2008 15:33:42 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9487</guid><dc:creator>Miha Markic</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;If you work with &lt;a href="http://www.devexpress.com/"&gt;Developer Express&lt;/a&gt; XtraGrid's GridView then you know that it provides a relatively cumbersome way to read values of its grid cells: the values aren't strong typed and the method is somehow not very OO oriented. It goes like this:&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:9919c7ea-761f-4a1e-abec-a8d94b47405e" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;span style="color:#008000;"&gt; read an int value from a cell&lt;/span&gt;&lt;span style="color:#008000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; value &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt;)gridView.GetRowCellValue(rowHandle, colAnIntColumn);&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that you can't read the value like this:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:27535910-dd0b-462e-9632-ffce4c3d35ad" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; value &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt;)gridView.Rows[rowHandle].Value(colAnIntValue);
&lt;/span&gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;span style="color:#008000;"&gt; or&lt;/span&gt;&lt;span style="color:#008000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; value &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; gridView.Rows[rowHandle].ColAnIntValue;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;which would be more object oriented but probably the performance would suffer. If Value property would be strong typed it would be just great. But the most important feature would be to access the values through Rows collection. Why? Because one could use LINQ to query them. That is unfortunately impossible out of the box.&lt;/p&gt;
&lt;p&gt;Here is a simplified sample code to find the rowHandle of the row with SOMEVALUE in one of its colAnIntColumn field:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:17228d79-1ff8-4a2f-8025-0275934a3dd8" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; rowHandle;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;for&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; f; f&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;gridView.RowCount; f&lt;/span&gt;&lt;span style="color:#000000;"&gt;++&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
{
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; value &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt;)gridView.GetRowCellValue(rowHandle, intCol);
  &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#000000;"&gt; (value &lt;/span&gt;&lt;span style="color:#000000;"&gt;==&lt;/span&gt;&lt;span style="color:#000000;"&gt; SOMEVALUE)
  {
     rowHandle &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; f;
     &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;break&lt;/span&gt;&lt;span style="color:#000000;"&gt;;
  }
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;It isn't really pretty, right. Hence the idea of using home made LINQ to XtraGrid.&lt;/p&gt;
&lt;p&gt;First, we need a class that will represent a single &lt;em&gt;GridView&lt;/em&gt;'s row:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:3e849cf3-cc19-4935-8a10-2faf65a7a1b0" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; GridViewRow
{
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;internal&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;readonly&lt;/span&gt;&lt;span style="color:#000000;"&gt; GridView GridView;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;internal&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;readonly&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; RowHandle;

    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; GridViewRow(GridView gridView, &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; rowHandle)
    {
        GridView &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; gridView;
        RowHandle &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; rowHandle;
    }

    &lt;/span&gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;span style="color:#008000;"&gt; method that wraps GetRowCellValue method for getting a cell value
    &lt;/span&gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;span style="color:#008000;"&gt; using column name&lt;/span&gt;&lt;span style="color:#008000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; T Field&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;T&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; fieldName)
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; (T)GridView.GetRowCellValue(RowHandle, fieldName);
    }

    &lt;/span&gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;span style="color:#008000;"&gt; overloaded method that wraps GetRowCellValue method for getting a cell value
    &lt;/span&gt;&lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;span style="color:#008000;"&gt; using column reference&lt;/span&gt;&lt;span style="color:#008000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; T Field&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;T&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(GridColumn column)
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; (T)GridView.GetRowCellValue(RowHandle, column);
    }
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The code is pretty trivial. The class has to reference the source &lt;em&gt;GridView&lt;/em&gt; and &lt;em&gt;RowHandle&lt;/em&gt; that represents a row in &lt;em&gt;GridView&lt;/em&gt;'s notion. Note the two &lt;em&gt;Field&amp;lt;T&amp;gt;&lt;/em&gt; overloaded methods that lets you get cell values in OO manner. Next, we need a collection of &lt;em&gt;GridViewRow&lt;/em&gt; objects that implements &lt;em&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/em&gt; (&lt;em&gt;IEnumerable&amp;lt;GridViewRow&amp;gt; &lt;/em&gt;in this case&lt;em&gt;)&lt;/em&gt; interface (which in turn implements &lt;em&gt;IEnumerable&lt;/em&gt; hence the two &lt;em&gt;GetEnumerator()&lt;/em&gt; methods):&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:3ae418c2-4cb0-40b5-8efb-f8a46934c37c" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; EnumerableGridViewRowCollection: IEnumerable&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;GridViewRow&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
{
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;internal&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;readonly&lt;/span&gt;&lt;span style="color:#000000;"&gt; GridView GridView;

    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; EnumerableGridViewRowCollection(GridView gridView)
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;.GridView &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; gridView;
    }

    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; IEnumerator&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;GridViewRow&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; GetEnumerator()
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;for&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; i &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#800080;"&gt;0&lt;/span&gt;&lt;span style="color:#000000;"&gt;; i &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; GridView.RowCount; i&lt;/span&gt;&lt;span style="color:#000000;"&gt;++&lt;/span&gt;&lt;span style="color:#000000;"&gt;)
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;yield&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; GridViewRow(GridView, i);
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; GetEnumerator();
    }
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The core functionality here is &lt;em&gt;public IEnumerator&amp;lt;GridViewRow&amp;gt; GetEnumerator()&lt;/em&gt; method. It uses yield return keyword to create &lt;em&gt;GridViewRow&lt;/em&gt; instances for each row as query progresses through collection. From the perspective of garbage collection this shouldn't be too huge problem because the objects are small and have a short lifetime usually. Thus they are relatively cheaply garbage collected. Furthermore one doesn't work with million or rows in a grid - if you do, reconsider your approach; but rather in range of thousands. This class also holds reference to source &lt;em&gt;GridView.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now we have a &lt;em&gt;GridViewRow&lt;/em&gt; class that represents a &lt;em&gt;GridView&lt;/em&gt;'s row and a collection of row objects that are dynamically generated for each query. The only step left is to build a way to get the &lt;em&gt;EnumerableGridViewRowCollection &lt;/em&gt;out of &lt;em&gt;GridView&lt;/em&gt;. We could use a helper class, pass &lt;em&gt;GridView&lt;/em&gt; to &lt;em&gt;EnumerableGridViewRowCollection &lt;/em&gt;directly, or derive a class out of &lt;em&gt;GridView&lt;/em&gt; and add such a method. However the former aren't really nice and the later is complex and doesn't provide same functionality for other &lt;em&gt;GridView&lt;/em&gt; derived views. Fortunately for us .net 3.5 introduced extension methods which are a perfect way to implement this functionality. Here is how I've built it:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:46660c14-5dc8-4cb5-add0-0ab0b00fce95" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; GridViewEnumerator
{
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; IEnumerable&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;GridViewRow&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; AsRowEnumerable(&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt; GridView gridView)
    {
        &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;return&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; EnumerableGridViewRowCollection(gridView);
    }
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This dude adds method &lt;em&gt;AddRowEnumerable &lt;/em&gt;to &lt;em&gt;GridView&lt;/em&gt; class and to all of derived classes.&lt;/p&gt;
&lt;p&gt;LINQ to XtraGrid is now complete and here is rewritten sample query from above:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:73f5b68e-016a-4e81-a03f-bd0dbfcff7f9" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; rowHandle &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; gridView.AsRowEnumerable().First(
  row &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; row.Field&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(intCol) &lt;/span&gt;&lt;span style="color:#000000;"&gt;==&lt;/span&gt;&lt;span style="color:#000000;"&gt; SOMEVALUE);&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Doesn't it look nicer and more compact than the query above? The beauty of the LINQ to XtraGrid is that it opens a whole LINQ world to XtraGrid's GridView and descendants. Yes, you can use whatever LINQ construct that works on IEnumerable&amp;lt;T&amp;gt; such as:&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:420f8bbc-e4f5-43df-b8fd-430b0d5b211e" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;overflow:auto;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;var query &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; from row &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;this&lt;/span&gt;&lt;span style="color:#000000;"&gt;.AsRowEnumerable()
            &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;where&lt;/span&gt;&lt;span style="color:#000000;"&gt; row.Field&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(intCol) &lt;/span&gt;&lt;span style="color:#000000;"&gt;==&lt;/span&gt;&lt;span style="color:#000000;"&gt; SOMEVALUE
            group row by row.Field&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;(nameCol) into g
            orderby g.Key
            select g;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;So, here it is. A simple LINQ to XtraGrid implementation. It doesn't do everything, but hey, it is a start. Happy?&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9487" width="1" height="1"&gt;</description></item><item><title>My first article published in Moj Mikro, Slovene computer monthly magazine</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/02/16/My-first-article-published-in-Moj-Mikro_2C00_-Slovene-computer-monthly-magazine.aspx</link><pubDate>Sat, 16 Feb 2008 11:15:01 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9468</guid><dc:creator>Miha Markic</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The article is all about &lt;a href="http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/01/26/HTC-is-giving-a-finger-to-its-customers.aspx" target="_blank"&gt;HTC's dirty secrets&lt;/a&gt; behind its line of PocketPC's based on Qualcomm's MSM7x00 CPU/chipset and is my first article being published in such a large scale magazine or in any magazine I guess. &lt;a href="http://www.mojmikro.si/" target="_blank"&gt;Moj Mikro&lt;/a&gt; also brings my memories back; I remember when I was young and I was eagerly waiting for the magazine each month. At the time &lt;a href="http://www.mojmikro.si/" target="_blank"&gt;Moj Mikro&lt;/a&gt; was more or less the only Slovene computer magazine and one of the few Yugoslav ones (Slovenia was part of Yugoslavia then and there were a couple of Serb computer magazines, too).&lt;/p&gt; &lt;p&gt;Anyway, the magazine comes out on the first Tuesday in March and I hope you'll enjoy my article titled "Umazane podrobnosti HTC mobilnih naprav – dejstva, ki jih je HTC zamolčal". &lt;/p&gt; &lt;p&gt;Feedback appreciated of course.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9468" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Hardware/default.aspx">Hardware</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Slovenia/default.aspx">Slovenia</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/Announcement/default.aspx">Announcement</category></item><item><title>Is true belief a good attribute of an architect</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/02/12/Is-true-belief-a-good-attribute-of-an-architect.aspx</link><pubDate>Tue, 12 Feb 2008 10:41:00 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9423</guid><dc:creator>Miha Markic</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Recently I've came across this &lt;a href="http://community.devexpress.com/forums/t/61809.aspx" target="_blank"&gt;forum thread&lt;/a&gt; regarding the future of &lt;a href="http://www.devexpress.com/"&gt;Developer Express&lt;/a&gt;' eXpress Persistent Objects for .NET (XPO) ORM product. Customers (actual ones, not potential) are asking whether XPO will someday support n-tier development. They are happily using XPO but they miss a vital part, which is n-tier development. Note that XPO never advertised n-tier support and nobody is arguing that. Perhaps this comment from a customer's post, where the situation is described:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"As Trevor said, I am one whose core is 100% XPO. The future of my application is tied to XPO. Was this a bad decision? Maybe, but probably not. However, XPO lacks in areas (n-tier) where I really need it to start to shine."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Later on Oliver from &lt;a href="http://www.devexpress.com/"&gt;Developer Express&lt;/a&gt; comments that &lt;a href="http://www.devexpress.com/"&gt;Developer Express&lt;/a&gt; is planning to add, among various features, a multi-tier support. No other details, no dates, no nothing:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"The architectural changes we are planning will result in the potential to support a variety of layered application architectures, including multi-tier ones. So this is good news for you and everybody else waiting for this kind of functionality."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;And crowd goes cheering and applauding. Can this be defined as a true belief? From the point of &lt;a href="http://www.devexpress.com/"&gt;Developer Express&lt;/a&gt; such a comment in current situation makes sense (I won't question whether XPO is good or bad and if it is going n-tier or not at this point). What I fail to understand is the crowd. How can it be that you use a product that misses a very important feature for you (from the beginning!) and you are prepared to wait for years to get it? We aren't talking about a cosmetic feature. No, we are talking about core functionality. And you are happy that somebody is planning someday to deliver that feature, which might suite you or not, without any obligation to deliver (again, I am not questioning &lt;a href="http://www.devexpress.com/"&gt;Developer Express&lt;/a&gt;). &lt;/p&gt; &lt;p&gt;Generally speaking, is such a belief and faith that the feature will be what you've asked for, a good attribute of an architect? Would you choose a product that doesn't support a core functionality and it might never support it. Knowing that competition is stiff and you have plenty of choices out there that support this feature and more, you are a bad architect if you don't look around. At least one I wouldn't trust. This is simply bad practice. If you are basing a core part of your application on something, it should work from the start. Gambling on future is not an option.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9423" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/DevExpress/default.aspx">DevExpress</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/ORM/default.aspx">ORM</category></item><item><title>Visual Studio 2008 web-design related hotfix</title><link>http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/02/09/Visual-Studio-2008-web_2D00_design-related-hotfix.aspx</link><pubDate>Sat, 09 Feb 2008 12:40:47 GMT</pubDate><guid isPermaLink="false">20ec5e80-32dc-4b10-81e7-24de002b7736:9421</guid><dc:creator>Miha Markic</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt; relased &lt;a href="http://www.google.com/reader/view/#stream/feed%2Fhttp%3A%2F%2Fweblogs.asp.net%2Fscottgu%2FRss.aspx" target="_blank"&gt;Visual Studio 2008 hotfix&lt;/a&gt; that should eliminate some web-design annoyances, particularly the slowness of the IDE, according to the specs.&lt;/p&gt; &lt;p&gt;Get the &lt;a href="https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=10826&amp;amp;wa=wsignin1.0" target="_blank"&gt;hotfix here&lt;/a&gt;. I hope that we'll see more hotfixes like this in the future as service packs really take just too much time.&lt;/p&gt;&lt;img src="http://cs.rthand.com/aggbug.aspx?PostID=9421" width="1" height="1"&gt;</description><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://cs.rthand.com/blogs/blog_with_righthand/archive/tags/.net+3.5/default.aspx">.net 3.5</category></item></channel></rss>