<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">
  <channel>
    <title>ondrejsv</title>
    <description> Blog by Ondrej Svacina</description>
    <link>http://blog.ondrejsv.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 2.0.0.56</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://blog.ondrejsv.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>My name</dc:creator>
    <dc:title>ondrejsv</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Ondrejsv" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="ondrejsv" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Getting rid of The current page has been customized warning in SharePoint 2010</title>
      <description>&lt;p&gt;New WikiEditPage’s in SharePoint 2010 are great. Users finally may place web parts anywhere on the page and they don’t need any cumbersome ContentEditorWebPart’s with odd “Edit RTF” buttons.&lt;/p&gt;  &lt;p&gt;There are times, however, when developers (or even power users from SPD) customize the page, to include some javascripts or other goodies. After customization of a &lt;strong&gt;WikiEditPage&lt;/strong&gt; SharePoint shows a yellow warning (more precisely called status) in the display mode:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_82.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_82.png" width="573" height="96" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Not pretty. How to get rid of it? SharePoint supports an undocumented file property called “HidePageUnghostMessageV4”. Based on its name I suppose its sole purpose is to hide the message when the page is unghosted (i.e. customized). There seems to be a bug in the rendering code because when I set the property to “true”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_83.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_83.png" width="444" height="94" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;only the hyperlink for reverting disappears:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_84.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_84.png" width="465" height="68" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It’s possible that it’s not a bug but a feature but I would more appreciate if the flag worked by completely disabling the warning and not only the hyperlink.&lt;/p&gt;  &lt;p&gt;The only way I know to turn off the warning now is to write a custom derived subclass of the SharePoint’s &lt;strong&gt;WikiEditPage&lt;/strong&gt; that does not render the JavaScript for rendering the status warning (these messages are inserted in the status bar by calling the &lt;a href="http://msdn.microsoft.com/en-us/library/ff410028.aspx"&gt;SP.UI.Status.addStatus JS function&lt;/a&gt;). &lt;strong&gt;WikiEditPage&lt;/strong&gt; emits a little JavaScript code in the &lt;strong&gt;PreRender&lt;/strong&gt; method by calling the well-known &lt;strong&gt;ScriptManager&lt;/strong&gt;.&lt;strong&gt;RegisterStartupClientScriptBlock&lt;/strong&gt;. Note that there is no way to unregister such a startup script. I mitigated this little complication by registering a startup script with the same key as &lt;strong&gt;WikiEditPage&lt;/strong&gt; uses and with no body first, before the original PreRender code gets chance:&lt;/p&gt;  &lt;pre&gt;&lt;div class="code"&gt;
&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Ondrejsv.CustomWikiEditPage
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CustomWikiEditPage : WikiEditPage
    {
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnPreRender(EventArgs e)
        {
            ScriptManager.RegisterStartupScript((Page)&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(WikiEditPage), &amp;quot;unghostWarning&amp;quot;, &amp;quot;&amp;quot;, &lt;span class="kwrd"&gt;true&lt;/span&gt;);

            &lt;span class="kwrd"&gt;base&lt;/span&gt;.OnPreRender(e);
        }
    }
}
&lt;/div&gt;&lt;/pre&gt;

&lt;p&gt;The ordering of the statements is crucial here because if the base method call was first then the ScriptManager would emit the original script.&lt;/p&gt;

&lt;p&gt;Don’t forget to place an entry into the SafeControl list, too. I created a Visual Studio solution for all of this and &lt;a href="http://blog.ondrejsv.com/file.axd?file=samples/Ondrejsv.CustomWikiEditPage.zip"&gt;you may download it and deploy to your farm.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now open your page in the SharePoint Designer and change the &lt;strong&gt;Inherits&lt;/strong&gt; attribute in the &lt;strong&gt;Page&lt;/strong&gt; directive from &lt;em&gt;Microsoft.SharePoint.WebPartPages.WikiEditPage&lt;/em&gt; to &lt;em&gt;Ondrejsv.CustomWikiEditPage.CustomWikIEditPage&lt;/em&gt;&amp;#160; (or whatever you call your custom class) and add a new &lt;strong&gt;Assembly&lt;/strong&gt; directive for SharePoint to find the class (you may omit this directive if you place the full name in the Inherits attribute, of course):&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_85.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_85.png" width="918" height="103" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No more the yellow pesky warning:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_86.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_86.png" width="478" height="74" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that any other warnings get displayed correctly:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_87.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_87.png" width="548" height="89" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.ondrejsv.com/file.axd?file=samples/Ondrejsv.CustomWikiEditPage.zip"&gt;Download the VS solution&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G7RFxsge2eHRuXD7gEKzC7vUIXc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G7RFxsge2eHRuXD7gEKzC7vUIXc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G7RFxsge2eHRuXD7gEKzC7vUIXc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G7RFxsge2eHRuXD7gEKzC7vUIXc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blog.ondrejsv.com/post/Getting-rid-of-The-current-page-has-been-customized-warning-in-SharePoint-2010.aspx</link>
      <comments>http://blog.ondrejsv.com/post/Getting-rid-of-The-current-page-has-been-customized-warning-in-SharePoint-2010.aspx#comment</comments>
      <guid>http://blog.ondrejsv.com/post.aspx?id=51745dcf-15be-4520-bf86-97fe6b892bf0</guid>
      <pubDate>Mon, 26 Dec 2011 18:18:51 +0200</pubDate>
      <dc:publisher>ondrej</dc:publisher>
      <pingback:server>http://blog.ondrejsv.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.ondrejsv.com/post.aspx?id=51745dcf-15be-4520-bf86-97fe6b892bf0</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.ondrejsv.com/trackback.axd?id=51745dcf-15be-4520-bf86-97fe6b892bf0</trackback:ping>
      <wfw:comment>http://blog.ondrejsv.com/post/Getting-rid-of-The-current-page-has-been-customized-warning-in-SharePoint-2010.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.ondrejsv.com/syndication.axd?post=51745dcf-15be-4520-bf86-97fe6b892bf0</wfw:commentRss>
    </item>
    <item>
      <title>On efficiency loss with JavaScript</title>
      <description>&lt;p&gt;With the hype of Windows 8 HTML5/JS apps I’m again and again rediscovering some of the pitfalls of the JavaScript language which bring issues we never have with strongly-typed languages like C#.&lt;/p&gt;  &lt;p&gt;The first scenario is going to be quite common not only when using the new &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh464924(v=vs.85).aspx#asynchronous_patterns_in_metro_style_apps_with_javascript"&gt;promise/then feature&lt;/a&gt;. (Snippet is taken from one the tutorials on the MSDN.) Look at the &lt;em&gt;processPosts&lt;/em&gt; function that gets called when the &lt;em&gt;xhr&lt;/em&gt; promise gets asynchronously fulfilled. There is no way the IDE would know the type (more precisely available methods and fields) of the argument and thus providing IntelliSense because the function could be called from everywhere:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_78.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_78.png" width="644" height="389" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If we write the code to run when the promise is fulfilled as an anonymous function and Visual Studio would be way smarter, it could theoretically provide IntelliSense on the &lt;em&gt;result&lt;/em&gt; argument by parsing and processing the &lt;em&gt;xhr&lt;/em&gt; promise but it does not so:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_79.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_79.png" width="644" height="231" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The second pitfall comes from the fact that any code could be run in a context of any HTML file. When you reference a .js file from an HTML page, some of the global variables get alive by getting references of the screen elements with variables of the same &lt;em&gt;id&lt;/em&gt;. If you make a typo in the name of a variable, you would not find it out until you run the page. Of course, there is no IntelliSense either because the variable could be of any dynamic type at run-time. This pitfall is really a feature of all dynamic languages but for a programmer used to program user interfaces in ASP.NET and Silverlight which have concepts of code-behind coded in strongly-typed C# it represents a loss in efficiency, indeed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_80.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_80.png" width="644" height="399" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_81.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_81.png" width="644" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ps0GfFbr_HNrYnbc9sRbEOsIGrk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ps0GfFbr_HNrYnbc9sRbEOsIGrk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ps0GfFbr_HNrYnbc9sRbEOsIGrk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ps0GfFbr_HNrYnbc9sRbEOsIGrk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blog.ondrejsv.com/post/On-efficiency-loss-with-JavaScript.aspx</link>
      <comments>http://blog.ondrejsv.com/post/On-efficiency-loss-with-JavaScript.aspx#comment</comments>
      <guid>http://blog.ondrejsv.com/post.aspx?id=936c6e80-c79d-4f1c-a74b-0c29aecfe5de</guid>
      <pubDate>Thu, 15 Sep 2011 22:34:23 +0200</pubDate>
      <dc:publisher>ondrej</dc:publisher>
      <pingback:server>http://blog.ondrejsv.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.ondrejsv.com/post.aspx?id=936c6e80-c79d-4f1c-a74b-0c29aecfe5de</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.ondrejsv.com/trackback.axd?id=936c6e80-c79d-4f1c-a74b-0c29aecfe5de</trackback:ping>
      <wfw:comment>http://blog.ondrejsv.com/post/On-efficiency-loss-with-JavaScript.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.ondrejsv.com/syndication.axd?post=936c6e80-c79d-4f1c-a74b-0c29aecfe5de</wfw:commentRss>
    </item>
    <item>
      <title>Some observations on managed Windows 8 metro applications</title>
      <description>&lt;p&gt;This is an unstructured list of interesting things I found when playing with the new metro applications.&lt;/p&gt;  &lt;p&gt;While HTML5/JS metro applications always run in a host process WWAHost.exe (Windows Web Application Host?), .NET apps does not, they run directly in its own process:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_72.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_72.png" width="644" height="391" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_73.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_73.png" width="526" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When deployed locally from the Visual Studio, applications (both HTML5/JS and .NET) are stored within the folder &lt;em&gt;AppxLayouts&lt;/em&gt; in the user folder. It is interesting that XAML and content files are not embedded as resources in the executable but they are left alone:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_74.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_74.png" width="644" height="424" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As the WinRT is native, every external event such as Click comes from the blackbox:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_75.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_75.png" width="644" height="188" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If we look at modules currently loaded when a managed application is running:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_76.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_76.png" width="644" height="361" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;we’ll find some interesting things:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;despite the fact that in a Metro app you may use only a subset of the full .NET, it looks like some of the full .NET modules are loaded (mscorlib.dll, System.Runtime.dll, System.Linq.dll, System.Core.dll, System.dll, System.Xml.dll and others), so a managed application obviously does not only forward calls to the native WinRT,&lt;/li&gt;    &lt;li&gt;of course, a number of WinRT modules are loaded (with .winmd extensions) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;.NET 4.5 assembly references are evident if we look at the application from the Reflector:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_77.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_77.png" width="407" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/70OgKrUiE03a6kPscVNOs7lz9mw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/70OgKrUiE03a6kPscVNOs7lz9mw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/70OgKrUiE03a6kPscVNOs7lz9mw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/70OgKrUiE03a6kPscVNOs7lz9mw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blog.ondrejsv.com/post/Some-observations-on-managed-Windows-8-metro-applications.aspx</link>
      <comments>http://blog.ondrejsv.com/post/Some-observations-on-managed-Windows-8-metro-applications.aspx#comment</comments>
      <guid>http://blog.ondrejsv.com/post.aspx?id=437efbd2-5097-4e9a-8abd-8dd0c1a5242f</guid>
      <pubDate>Thu, 15 Sep 2011 20:20:43 +0200</pubDate>
      <dc:publisher>ondrej</dc:publisher>
      <pingback:server>http://blog.ondrejsv.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.ondrejsv.com/post.aspx?id=437efbd2-5097-4e9a-8abd-8dd0c1a5242f</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.ondrejsv.com/trackback.axd?id=437efbd2-5097-4e9a-8abd-8dd0c1a5242f</trackback:ping>
      <wfw:comment>http://blog.ondrejsv.com/post/Some-observations-on-managed-Windows-8-metro-applications.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.ondrejsv.com/syndication.axd?post=437efbd2-5097-4e9a-8abd-8dd0c1a5242f</wfw:commentRss>
    </item>
    <item>
      <title>List of Windows 8 Metro applications in DevPreview</title>
      <description>&lt;p&gt;We all know that that there are two main approaches to develop new “Metro” style applications in Windows 8: HTML5/JavaScript and .NET (predominantly C# and VB.NET) and one complementary approach (C++/XAML). What technologies did Microsoft choose to write demo applications coming in the Developer Preview?&lt;/p&gt;  &lt;p&gt;Here’s a short list containing all applications packed up in the Windows 8 Developer Preview together with technologies they are build on and other comments.&lt;/p&gt;  &lt;p&gt;So what would be a management summary? 29 applications, 5 of which are written in .NET/XAML, 2 probably in C++/XAML and the rest are HTML5/JS.&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="669"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="111"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="115"&gt;&lt;strong&gt;Technology&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="159"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="282"&gt;&lt;strong&gt;Immersive tile&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="111"&gt;Alarms&lt;/td&gt;        &lt;td valign="top" width="115"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="159"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="282"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_46.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_46.png" width="242" height="115" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="117"&gt;Piano (audiotagpiano)&lt;/td&gt;        &lt;td valign="top" width="120"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="161"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="286"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_47.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_47.png" width="117" height="120" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="121"&gt;BitBox&lt;/td&gt;        &lt;td valign="top" width="121"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="158"&gt;sound loops sequencer&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_48.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_48.png" width="120" height="117" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="124"&gt;BUILD&lt;/td&gt;        &lt;td valign="top" width="121"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="156"&gt;just a little app showing BUILD sessions&lt;/td&gt;        &lt;td valign="top" width="289"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_49.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_49.png" width="244" height="118" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="126"&gt;Copper&lt;/td&gt;        &lt;td valign="top" width="120"&gt;C++/XAML ???&lt;/td&gt;        &lt;td valign="top" width="155"&gt;simple 3D demo&lt;/td&gt;        &lt;td valign="top" width="289"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_50.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_50.png" width="119" height="116" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="128"&gt;Five in row&lt;/td&gt;        &lt;td valign="top" width="120"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="154"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="289"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_51.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_51.png" width="124" height="123" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="129"&gt;Flashcards&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="154"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="289"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_52.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_52.png" width="244" height="119" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="130"&gt;News (hermes)&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="154"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_53.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_53.png" width="244" height="121" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Chess (checkm8)&lt;/td&gt;        &lt;td valign="top" width="119"&gt;.NET/XAML&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_54.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_54.png" width="121" height="121" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Ink Pad&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_55.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_55.png" width="122" height="119" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Labyrinth&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_56.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_56.png" width="122" height="115" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Measure It&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_57.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_57.png" width="124" height="122" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Memories&lt;/td&gt;        &lt;td valign="top" width="119"&gt;.NET/XAML&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_58.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_58.png" width="244" height="114" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Mopod&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_59.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_59.png" width="119" height="120" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Air Craft (myplane)&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_60.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_60.png" width="118" height="121" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Near Me&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_61.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_61.png" width="116" height="115" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Notespace&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_62.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_62.png" width="119" height="117" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;PaintPlay&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_63.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_63.png" width="239" height="111" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Picture Stream (picstream)&lt;/td&gt;        &lt;td valign="top" width="119"&gt;.NET/XAML&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&amp;nbsp;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Socialite&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&amp;nbsp;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Stock&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_64.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_64.png" width="244" height="112" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Sudoku&lt;/td&gt;        &lt;td valign="top" width="119"&gt;.NET/XAML&lt;/td&gt;        &lt;td valign="top" width="153"&gt;includes Tim Heuer’s code&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_65.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_65.png" width="119" height="119" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Tile Puzzle&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_66.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_66.png" width="123" height="116" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Treehouse Stampede!&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_67.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_67.png" width="244" height="121" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Tube Rider&lt;/td&gt;        &lt;td valign="top" width="119"&gt;C++/XAML ???&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_68.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_68.png" width="242" height="117" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Tweet@rama&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&amp;nbsp;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Weather&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_69.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_69.png" width="244" height="108" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Word Hunt&lt;/td&gt;        &lt;td valign="top" width="119"&gt;HTML5/JS&lt;/td&gt;        &lt;td valign="top" width="153"&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_70.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_70.png" width="126" height="122" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Zero Gravity&lt;/td&gt;        &lt;td valign="top" width="119"&gt;.NET/XAML&lt;/td&gt;        &lt;td valign="top" width="153"&gt;Ported Windows Phone 7 application&lt;/td&gt;        &lt;td valign="top" width="288"&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_71.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_71.png" width="121" height="124" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A2h2ZqMmv-0JNKBEoNL0G5Am7yA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A2h2ZqMmv-0JNKBEoNL0G5Am7yA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A2h2ZqMmv-0JNKBEoNL0G5Am7yA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A2h2ZqMmv-0JNKBEoNL0G5Am7yA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blog.ondrejsv.com/post/List-of-Windows-8-Metro-applications-in-DevPreview.aspx</link>
      <comments>http://blog.ondrejsv.com/post/List-of-Windows-8-Metro-applications-in-DevPreview.aspx#comment</comments>
      <guid>http://blog.ondrejsv.com/post.aspx?id=3dc82791-a372-4340-86c1-0402e62864bf</guid>
      <pubDate>Wed, 14 Sep 2011 23:13:33 +0200</pubDate>
      <dc:publisher>ondrej</dc:publisher>
      <pingback:server>http://blog.ondrejsv.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.ondrejsv.com/post.aspx?id=3dc82791-a372-4340-86c1-0402e62864bf</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://blog.ondrejsv.com/trackback.axd?id=3dc82791-a372-4340-86c1-0402e62864bf</trackback:ping>
      <wfw:comment>http://blog.ondrejsv.com/post/List-of-Windows-8-Metro-applications-in-DevPreview.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.ondrejsv.com/syndication.axd?post=3dc82791-a372-4340-86c1-0402e62864bf</wfw:commentRss>
    </item>
    <item>
      <title>Visual Studio and Resharper snippet for MSTest method</title>
      <description>&lt;p&gt;Visual Studio comes with an OOTB MSTest method snippet accessible via the &lt;em&gt;testm&lt;/em&gt; shortcut. Two thing missing in it for me:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;standard naming convention as mentioned also in the &lt;a href="http://www.amazon.com/gp/product/1933988274?ie=UTF8&amp;amp;tag=ondrejsv-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1933988274"&gt;The Art of Unit Testing by Roy Oshrove&lt;/a&gt; (&lt;em&gt;TestedMethod_StateUnderTest_ExpectedResult&lt;/em&gt;)&lt;em&gt;,&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;separation of &lt;em&gt;Arrange, Act &lt;/em&gt;and &lt;em&gt;Assert&lt;/em&gt; parts of the code by clearly visible comments. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I’ve been observing that VS code snippets are for not widely used some reason. Perhaps the clunky Snippet Manager in Visual Studio or &lt;a href="http://msdn.microsoft.com/en-us/library/ms165394.aspx"&gt;necessity to edit snippets in XML by hand&lt;/a&gt;… who knows…&lt;/p&gt;  &lt;p&gt;So here’s how looks my new snippet:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_45.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_45.png" width="644" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Trivial as it is but useful very much.&lt;/p&gt;  &lt;p&gt;Download clean &lt;a href="http://blog.ondrejsv.com/file.axd?file=samples/extended_mstestmethod.snippet"&gt;VS version&lt;/a&gt; or &lt;a href="http://blog.ondrejsv.com/file.axd?file=samples/testm_livetemplate.xml"&gt;ReSharper snippet (aka Live Template).&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4SfVbT7AM3gmii9GMUFEPurcmS8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4SfVbT7AM3gmii9GMUFEPurcmS8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4SfVbT7AM3gmii9GMUFEPurcmS8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4SfVbT7AM3gmii9GMUFEPurcmS8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blog.ondrejsv.com/post/Visual-Studio-and-Resharper-snippet-for-MSTest-method.aspx</link>
      <comments>http://blog.ondrejsv.com/post/Visual-Studio-and-Resharper-snippet-for-MSTest-method.aspx#comment</comments>
      <guid>http://blog.ondrejsv.com/post.aspx?id=41f2644e-1a19-45f7-a68d-b1bdcc713199</guid>
      <pubDate>Wed, 18 May 2011 22:28:21 +0200</pubDate>
      <dc:publisher>ondrej</dc:publisher>
      <pingback:server>http://blog.ondrejsv.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.ondrejsv.com/post.aspx?id=41f2644e-1a19-45f7-a68d-b1bdcc713199</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.ondrejsv.com/trackback.axd?id=41f2644e-1a19-45f7-a68d-b1bdcc713199</trackback:ping>
      <wfw:comment>http://blog.ondrejsv.com/post/Visual-Studio-and-Resharper-snippet-for-MSTest-method.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.ondrejsv.com/syndication.axd?post=41f2644e-1a19-45f7-a68d-b1bdcc713199</wfw:commentRss>
    </item>
    <item>
      <title>Fighting the spam II</title>
      <description>&lt;p&gt;I was running on BlogEngine 1.5 with Askimet antispam protection until today. BlogEngine became notoriously infamous for allowing spammers post fake comments. Just make an image yourself:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_43.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_43.png" width="217" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;More than 8500 comments waiting for approval and 225 automatically approved comments – among these approved comments majority is successful spam that got through antispam filter.&lt;/p&gt;  &lt;p&gt;It is above human forces to go through all these thousands of comments so I ‘m going to write a script against BlogEngine API to delete it all – sorry if any of your comment is there.&lt;/p&gt;  &lt;p&gt;I upgraded to BlogEngine 2.0 and enabled TypePadFilter together with Askimet. Also I enabled SimpleCaptcha which asks you a simple equation before it allows to post your comment. And I was forced to automatically close posting new comments after 90 days just for sure. Sorry for any inconvenience. If you want to write me about an article posted 90 days ago you may do so by using the contact form directly.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;UPDATE: &lt;/strong&gt;Clearing unapproved comments was not difficult at all – BlogEngine has even a built-in method for that in its web services API&amp;#160; -- it’s well hidden in the &lt;em&gt;api/Comments.asmx&lt;/em&gt; service and it’s name is &lt;em&gt;DeleteAll&lt;/em&gt; (don’t get confused by its name; it deletes only unapproved comments as you can see from source codes).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_44.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_44.png" width="642" height="125" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vAdUVLm4Y6dJ0asaiaokyRiIFyU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vAdUVLm4Y6dJ0asaiaokyRiIFyU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vAdUVLm4Y6dJ0asaiaokyRiIFyU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vAdUVLm4Y6dJ0asaiaokyRiIFyU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blog.ondrejsv.com/post/Fighting-the-spam-II.aspx</link>
      <comments>http://blog.ondrejsv.com/post/Fighting-the-spam-II.aspx#comment</comments>
      <guid>http://blog.ondrejsv.com/post.aspx?id=b1c6b432-eedc-4af9-b6ed-d421ffd65066</guid>
      <pubDate>Sun, 15 May 2011 19:51:43 +0200</pubDate>
      <dc:publisher>ondrej</dc:publisher>
      <pingback:server>http://blog.ondrejsv.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.ondrejsv.com/post.aspx?id=b1c6b432-eedc-4af9-b6ed-d421ffd65066</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://blog.ondrejsv.com/trackback.axd?id=b1c6b432-eedc-4af9-b6ed-d421ffd65066</trackback:ping>
      <wfw:comment>http://blog.ondrejsv.com/post/Fighting-the-spam-II.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.ondrejsv.com/syndication.axd?post=b1c6b432-eedc-4af9-b6ed-d421ffd65066</wfw:commentRss>
    </item>
    <item>
      <title>N2CMS, NHibernate, SqlCommandSet and medium trust</title>
      <description>&lt;p&gt;Recently I installed the current version of the N2CMS to power my personal homepage. I’m running on shared webhosting so you may imagine how poor performance is. To speed up the thing a little I decided to switch from SqlCe database to the full blown SQL Server.&lt;/p&gt;  &lt;p&gt;However, after changing the connection string the N2CMS does not even install itself:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Attempt by method 'NHibernate.AdoNet.SqlClientSqlCommandSet..ctor()' to access method 'System.Data.SqlClient.SqlCommandSet..ctor()' failed.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;If you carefully look at the &lt;a href="http://www.symbolsource.org/Public/Metadata/Default/Project/NHibernate/3.0.0.GA/Release/All/NHibernate/NHibernate/AdoNet/SqlClientSqlCommandSet.cs"&gt;source code of the NHibernate.AdoNet.SqlClientSqlCommandSet&lt;/a&gt;&lt;em&gt;&lt;/em&gt;, you will discover the ugly reflection:&lt;/p&gt;  &lt;pre&gt;&lt;div class="code"&gt;
    &lt;span class="rem"&gt;/// &lt;summary&gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Expose the batch functionality in ADO.Net 2.0&lt;/span&gt;
    &lt;span class="rem"&gt;/// Microsoft in its wisdom decided to make my life hard and mark it internal.&lt;/span&gt;
    &lt;span class="rem"&gt;/// Through the use of Reflection and some delegates magic, I opened up the functionality.&lt;/span&gt;
    &lt;span class="rem"&gt;///     &lt;/span&gt;
    &lt;span class="rem"&gt;/// Observable performance benefits are 50%+ when used, so it is really worth it.&lt;/span&gt;
    &lt;span class="rem"&gt;/// &lt;/summary&gt;    &lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; SqlClientSqlCommandSet 
...
&lt;/div&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;div class="code"&gt;
        &lt;span class="kwrd"&gt;static&lt;/span&gt; SqlClientSqlCommandSet()
        {
            Assembly sysData = Assembly.Load(&amp;quot;System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot;);
            sqlCmdSetType = sysData.GetType(&amp;quot;System.Data.SqlClient.SqlCommandSet&amp;quot;);
            Debug.Assert(sqlCmdSetType != &lt;span class="kwrd"&gt;null&lt;/span&gt;, &amp;quot;Could not find SqlCommandSet!&amp;quot;);
        }
&lt;/div&gt;&lt;/pre&gt;

&lt;p&gt;To continue installing, either make the reflection work by switching your application to full trust (provided your hosting company will allow this):&lt;/p&gt;

&lt;p&gt;or disable NHibernate batching feature (and you will lose “observable performance benefirst 50%+” as the author of the NHibernate comment claims &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blog.ondrejsv.com/image.axd?picture=wlEmoticon-smile_1.png" /&gt;) by following the commit message:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Enabling batching is done by defining (the new) property &amp;quot;hibernate.batch_size&amp;quot; to a size greater than zero. This way require an explicit action to enable it, but this is probably a good thing.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Kkk1Q88jWJYrS1ufKVNPzkHxLb8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kkk1Q88jWJYrS1ufKVNPzkHxLb8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Kkk1Q88jWJYrS1ufKVNPzkHxLb8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kkk1Q88jWJYrS1ufKVNPzkHxLb8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blog.ondrejsv.com/post/N2CMS-NHibernate-SqlCommandSet-and-medium-trust.aspx</link>
      <comments>http://blog.ondrejsv.com/post/N2CMS-NHibernate-SqlCommandSet-and-medium-trust.aspx#comment</comments>
      <guid>http://blog.ondrejsv.com/post.aspx?id=eb06d5c7-86d8-4951-867c-3f5da8fd7624</guid>
      <pubDate>Sun, 15 May 2011 13:14:44 +0200</pubDate>
      <dc:publisher>ondrej</dc:publisher>
      <pingback:server>http://blog.ondrejsv.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.ondrejsv.com/post.aspx?id=eb06d5c7-86d8-4951-867c-3f5da8fd7624</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.ondrejsv.com/trackback.axd?id=eb06d5c7-86d8-4951-867c-3f5da8fd7624</trackback:ping>
      <wfw:comment>http://blog.ondrejsv.com/post/N2CMS-NHibernate-SqlCommandSet-and-medium-trust.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.ondrejsv.com/syndication.axd?post=eb06d5c7-86d8-4951-867c-3f5da8fd7624</wfw:commentRss>
    </item>
    <item>
      <title>Visual Studio 2010 SP1 reapplication fails</title>
      <description>&lt;p&gt;My first attempt to install VS 2010 SP1 failed as the setup hanged (see Visual &lt;a href="http://blogs.msdn.com/b/heaths/archive/2011/03/02/visual-studio-2010-service-pack-1-installing-for-over-2-hours-could-be-a-sign-of-a-problem.aspx"&gt;Studio 2010 Service Pack 1 installing for over 2 hours could be a sign of a problem&lt;/a&gt;). The real problem was the rollback also hanged and this is always a sign of big trouble. &lt;/p&gt;  &lt;p&gt;After reboot I started SP1 setup again and chose to reapply SP1. In a while I was prompted to find &lt;em&gt;silverlight_sdk.msi&lt;/em&gt; because the installer could not have found it. It is located in the &lt;em&gt;Silverligh4/1033&lt;/em&gt; folder on the installation media. The installer seemed to be happy with my choice and continued. Almost at the end of the installation I was prompted again – now for the &lt;em&gt;vc_runtime_x86.msi&lt;/em&gt;&amp;#160; - twice and then again twice for &lt;em&gt;vc_runtime_x64.msi&lt;/em&gt;. However, the message at the end of the installation was not what I wanted to see: &lt;em&gt;Reapplication did not succeed&lt;/em&gt;. The very same a few times I tried it again and again.&lt;/p&gt;  &lt;p&gt;VS 2010 SP1 log reads:&lt;/p&gt;  &lt;p&gt;Final Result: Installation failed with error code: (0x80070643), &amp;quot;Fatal error during installation. &amp;quot; (Elapsed time: 0 00:33:06).&lt;/p&gt;  &lt;p&gt;The big SP1 log contains links to logs of all setup it runs, including setup for Silverlight 4 SDK and VC++ runtimes.&lt;/p&gt;  &lt;p&gt;The log for Silverlight 4 SDK:&lt;/p&gt;  &lt;pre&gt;MSI (c) (DC:98) [16:40:02:132]: SOURCEMGMT: Trying source E:\Silverlight4\1033.
MSI (c) (DC:98) [16:40:02:231]: Cloaking enabled.
MSI (c) (DC:98) [16:40:02:232]: Attempting to enable all disabled privileges before calling Install on Server
MSI (c) (DC:98) [16:40:02:232]: Connected to service.
MSI (c) (DC:14) [16:40:02:253]: SOURCEMGMT: Resolved source to: 'E:\Silverlight4\1033\'
MSI (s) (EC:10) [16:40:02:259]: Product: Microsoft Silverlight 4 SDK -- Error 1706.No valid source could be found for product Microsoft Silverlight 4 SDK.  The Windows Installer cannot continue.

Error 1706.No valid source could be found for product Microsoft Silverlight 4 SDK.  The Windows Installer cannot continue.&lt;/pre&gt;

&lt;p&gt;The solution is to &lt;strong&gt;manually uninstall Silverlight 4 SDK and Visual C++ runtimes (both 32- and 64-bit flavors) from the &lt;em&gt;Programs and Features&lt;/em&gt; Control Panel applet (aka &lt;em&gt;Add Remove Programs&lt;/em&gt;).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And then &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blog.ondrejsv.com/image.axd?picture=wlEmoticon-smile.png" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_42.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_42.png" width="518" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bdBn_MFmGDbo3ZK4wQ9dIWlB-Ms/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bdBn_MFmGDbo3ZK4wQ9dIWlB-Ms/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bdBn_MFmGDbo3ZK4wQ9dIWlB-Ms/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bdBn_MFmGDbo3ZK4wQ9dIWlB-Ms/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blog.ondrejsv.com/post/Visual-Studio-2010-SP1-reapplication-fails.aspx</link>
      <comments>http://blog.ondrejsv.com/post/Visual-Studio-2010-SP1-reapplication-fails.aspx#comment</comments>
      <guid>http://blog.ondrejsv.com/post.aspx?id=f94170d5-dbf4-4494-8407-5578f4fad5ec</guid>
      <pubDate>Fri, 06 May 2011 18:16:25 +0200</pubDate>
      <dc:publisher>ondrej</dc:publisher>
      <pingback:server>http://blog.ondrejsv.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.ondrejsv.com/post.aspx?id=f94170d5-dbf4-4494-8407-5578f4fad5ec</pingback:target>
      <slash:comments>7</slash:comments>
      <trackback:ping>http://blog.ondrejsv.com/trackback.axd?id=f94170d5-dbf4-4494-8407-5578f4fad5ec</trackback:ping>
      <wfw:comment>http://blog.ondrejsv.com/post/Visual-Studio-2010-SP1-reapplication-fails.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.ondrejsv.com/syndication.axd?post=f94170d5-dbf4-4494-8407-5578f4fad5ec</wfw:commentRss>
    </item>
    <item>
      <title>NHibernate lowercase and underscore automap convention</title>
      <description>&lt;p&gt;Today just a small snippet of code. If you unlucky one inherited some &lt;a href="http://en.wikipedia.org/wiki/Brownfield_%28software_development%29"&gt;brownfield database&lt;/a&gt; with awkward lowercase_and_underscores naming convention (I really hate it):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.ondrejsv.com/image.axd?picture=image_41.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.ondrejsv.com/image.axd?picture=image_thumb_41.png" width="230" height="285" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;and you are using &lt;a href="http://nhforge.org/Default.aspx"&gt;NHibernate&lt;/a&gt; with &lt;a href="http://wiki.fluentnhibernate.org/Auto_mapping"&gt;Fluent automapping configuration&lt;/a&gt;, just use this property convention:&lt;/p&gt;  &lt;pre&gt;&lt;div class="code"&gt;
&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ColumnConvention : IPropertyConvention
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Apply(FluentNHibernate.Conventions.Instances.IPropertyInstance instance)
    {
        var regexString = @&amp;quot;([A-Z][\w^[A-Z]]*)([A-Z][\w^[A-Z]]*)*&amp;quot;;

        var newName = Regex.Replace(instance.Name, regexString, (m =&amp;gt; (m.Index != 0 ? &amp;quot;_&amp;quot; : &amp;quot;&amp;quot;) + m.Value.ToLower()));

        instance.Column(newName);
    }
}
&lt;/div&gt;&lt;/pre&gt;

&lt;p&gt;Of course, the real gem here is the regex itself (days without writing regexes are awesome).&lt;/p&gt;

&lt;p&gt;If you forgot how to apply a custom convention, here you go:&lt;/p&gt;

&lt;pre&gt;&lt;div class="code"&gt;
SessionFactory =
    Fluently.Configure().Database(
        MsSqlConfiguration.MsSql2008.ConnectionString(c =&amp;gt; c.FromConnectionStringWithKey(&amp;quot;SugarCrmDb&amp;quot;))).
        Mappings(
            m =&amp;gt; m.AutoMappings.Add(AutoMap.
                                        AssemblyOf&lt;account&gt;(cfg).
                                        Override&lt;account&gt;(am =&amp;gt; am.Table(&amp;quot;accounts&amp;quot;)).
                                        &lt;strong&gt;&lt;u&gt;Conventions.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ColumnConvention())&lt;/u&gt;&lt;/strong&gt;
                        )
        ).
        BuildSessionFactory();
&lt;/div&gt;&lt;/pre&gt;
If you really don’t know what is this all about, &lt;a href="http://wiki.fluentnhibernate.org/"&gt;take a read here&lt;/a&gt;.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mSfChmk1cQ8hi_gHaVnRafYOoWg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mSfChmk1cQ8hi_gHaVnRafYOoWg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mSfChmk1cQ8hi_gHaVnRafYOoWg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mSfChmk1cQ8hi_gHaVnRafYOoWg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blog.ondrejsv.com/post/NHibernate-lowercase-and-underscore-automap-convention.aspx</link>
      <comments>http://blog.ondrejsv.com/post/NHibernate-lowercase-and-underscore-automap-convention.aspx#comment</comments>
      <guid>http://blog.ondrejsv.com/post.aspx?id=57f02c0b-0c2d-4de7-b6b7-62d415b13062</guid>
      <pubDate>Sun, 20 Feb 2011 00:26:21 +0200</pubDate>
      <dc:publisher>ondrej</dc:publisher>
      <pingback:server>http://blog.ondrejsv.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.ondrejsv.com/post.aspx?id=57f02c0b-0c2d-4de7-b6b7-62d415b13062</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.ondrejsv.com/trackback.axd?id=57f02c0b-0c2d-4de7-b6b7-62d415b13062</trackback:ping>
      <wfw:comment>http://blog.ondrejsv.com/post/NHibernate-lowercase-and-underscore-automap-convention.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.ondrejsv.com/syndication.axd?post=57f02c0b-0c2d-4de7-b6b7-62d415b13062</wfw:commentRss>
    </item>
    <item>
      <title>Exam 70-516 objectives with MSDN links</title>
      <description>&lt;p&gt;As I’m preparing for the 70-516 (TS: Accessing Data with Microsoft .NET Framework 4) I will be publishing and updating the list of the exam objectives together with MSDN links.&lt;/p&gt;  &lt;p&gt;Modeling Data (20%)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb896343.aspx"&gt;Map entities and relationships by using the Entity Data Model&lt;/a&gt;.       &lt;br /&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/cc716685.aspx"&gt;using the Visual Designer&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb399247.aspx"&gt;building an entity data model from an existing database&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/cc716779.aspx"&gt;managing complex entity mappings in EDMX&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/cc982040.aspx"&gt;editing EDM XML&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb896279.aspx"&gt;mapping to stored procedures&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb399734.aspx"&gt;creating user-defined associations between entities&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb738640.aspx"&gt;generating classes with inheritance and mapping them to tables&lt;/a&gt;       &lt;br /&gt;This objective does not include: using MetadataWorkspace &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb386976.aspx"&gt;Map entities and relationships by using LINQ to SQL.&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/Bb384429(v=VS.100).aspx"&gt;using the Visual Designer&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb399337.aspx"&gt;building a LINQ to SQL model from an existing database&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb386946.aspx"&gt;mapping to stored procedures&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb738612.aspx"&gt;Create and customize entity objects.&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: configuring changes to an Entity Framework entity, &lt;a href="http://msdn.microsoft.com/en-us/library/ff477605.aspx"&gt;using the ADO.NET EntityObject Generator (T4)&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ff477604.aspx"&gt;extending, self-tracking entities&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/dd456848.aspx"&gt;snapshot change tracking&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectstatemanager.aspx"&gt;ObjectStateManager&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/dd456844.aspx"&gt;partial classes&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/dd456876.aspx"&gt;partial methods in the Entity Framework&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd456853.aspx"&gt;Connect a POCO model to the Entity Framework.&lt;/a&gt;       &lt;br /&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/dd456853.aspx"&gt;implementing the Entity Framework with persistence ignorance, user-created POCO entities&lt;/a&gt;       &lt;br /&gt;This objective does not include: using the POCO templates &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd456817.aspx"&gt;Create the database from the Entity Framework model.&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/dd560887.aspx"&gt;customizing the Data Definition Language (DDL) (templates) generation process&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/dd456815.aspx"&gt;generating scripts for a database&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb399249.aspx"&gt;Entity Data Model tools&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Create model-defined functions.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/dd456812.aspx"&gt;editing the Conceptual Schema Definition Language CSDL&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/dd456857.aspx"&gt;enabling model-defined functions by using the EdmFunction attribute&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb738472.aspx"&gt;complex types&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Managing Connections and Context (18%)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Configure &lt;a href="http://msdn.microsoft.com/en-us/library/ms254978.aspx"&gt;connection strings&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/data/dd363565"&gt;providers&lt;/a&gt;.       &lt;br /&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/ms254978.aspx"&gt;managing connection strings&lt;/a&gt; including &lt;a href="http://msdn.microsoft.com/en/library/cc716756.aspx"&gt;Entity Framework connection strings&lt;/a&gt;, using the &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx"&gt;ConfigurationManager&lt;/a&gt;, correctly addressing the Microsoft SQL Server instance, &lt;a href="http://msdn.microsoft.com/en-us/library/bb399543.aspx"&gt;implementing connection pooling&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms254504.aspx"&gt;managing User Instance and AttachDBfilename&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/wda6c36e.aspx"&gt;switching providers&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/cfa084cz(v=VS.100).aspx"&gt;implementing multiple active result sets (MARS)&lt;/a&gt;       &lt;br /&gt;This objective does not include: using the ConnectionStringBuilder; Oracle data provider; creating and using a custom provider; using third-party providers &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Create and manage a data connection.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/32c5dh3b.aspx"&gt;connecting to a data source&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms254507.aspx"&gt;closing connections&lt;/a&gt;, maintaining the life cycle of a connection&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;Secure a connection.      &lt;br /&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/ms254494.aspx"&gt;encrypting and decrypting connection strings&lt;/a&gt;, using &lt;a href="http://msdn.microsoft.com/en-us/library/bb669066.aspx"&gt;Security Support Provider Interface (SSPI) or SQL Server authentication&lt;/a&gt;, read only vs. read/write connections       &lt;br /&gt;This objective does not include:&amp;#160; Secure Sockets Layer (SSL) &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Manage the DataContext and ObjectContext.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: managing the life cycle of DataContext and ObjectContext, extending the DataContext and ObjectContext, supporting POCO&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd456846.aspx"&gt;Implement eager loading.&lt;/a&gt;       &lt;br /&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontextoptions.lazyloadingenabled.aspx"&gt;configuring loading strategy by using LazyLoadingEnabled&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/dd456855.aspx"&gt;supporting lazy loading with POCO&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb738449.aspx"&gt;explicitly loading entities&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Cache data.      &lt;br /&gt;This objective may include but is not limited to: &lt;a href="http://blogs.msdn.com/b/dinesh.kulkarni/archive/2008/07/01/linq-to-sql-tips-9-understanding-datacontext-s-internal-caching.aspx"&gt;DataContext&lt;/a&gt; and ObjectContext cache including &lt;a href="http://msdn.microsoft.com/en-us/library/dd627203."&gt;identity map&lt;/a&gt;, local data cache       &lt;br /&gt;This objective does not include: Velocity, SqlCacheDependency &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee358710.aspx"&gt;Configure ADO.NET Data Services&lt;/a&gt;.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/dd728277.aspx"&gt;creating access rules for entities&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/dd728284.aspx"&gt;configuring authorization and authentication&lt;/a&gt; (and &lt;a href="http://blogs.msdn.com/b/astoriateam/archive/tags/authentication/"&gt;WCF Data Services Team Blog&lt;/a&gt;), &lt;a href="http://msdn.microsoft.com/en-us/library/dd728282.aspx"&gt;configuring HTTP verbs&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Querying Data (22%)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;Execute a SQL query.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.common.dbcommand.aspx"&gt;DBCommand&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms254931.aspx"&gt;DataReader, DataAdapters&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ss7fbaez.aspx"&gt;DataSets&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/tyy0sz6b.aspx"&gt;managing data retrieval by using stored procedures&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/yy6y35y8.aspx"&gt;using parameters&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.common.aspx"&gt;System.Data.Common namespace classes&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;Create a LINQ query.      &lt;br /&gt;This objective may include but is not limited to: syntax-based and method-based queries, joining, filtering, sorting, grouping, aggregation, lambda expressions, paging, projection       &lt;br /&gt;This objective does not include: compiling queries       &lt;ul&gt;       &lt;li&gt;         &lt;div align="left"&gt;&lt;a href="http://msdn.microsoft.com/library/bb308959.aspx"&gt;LINQ Overview&lt;/a&gt;&lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="left"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb384065.aspx"&gt;C# Query Expressions Basics (&amp;quot;syntax-based queries&amp;quot;)&lt;/a&gt;&lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb397896.aspx"&gt;Standard LINQ operators&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb397908.aspx"&gt;Joining&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb546161.aspx"&gt;Filtering&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb546145.aspx"&gt;Sorting&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb546139.aspx"&gt;Grouping&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb546138.aspx"&gt;Aggregation&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb546164.aspx"&gt;Paging (Partitioning)&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb546168.aspx"&gt;Projection&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb397687.aspx"&gt;Lambda expressions&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Create an Entity SQL (ESQL) query.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: joining, filtering, sorting, grouping, aggregation, paging, using functions, query plan caching, returning a reference to an entity instance, using parameters with ESQL, functionality related to EntityClient classes&lt;!--StartFragment--&gt;&lt;/p&gt;      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb387145.aspx"&gt;Entity SQL Overview&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb738610.aspx"&gt;Filtering (Where)&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb546164.aspx"&gt;Sorting&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb399764.aspx"&gt;Group by&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ee373877.aspx"&gt;Grouppartition&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb399595.aspx"&gt;Having&lt;/a&gt;&amp;#160; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb546168.aspx"&gt;Paging&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;!--EndFragment--&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb399163.aspx"&gt;Aggregate Functions&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd490950.aspx"&gt;User-defined functions&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb738562.aspx"&gt;Query Plan Caching&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb399743.aspx"&gt;REF keyword - returning a reference to an entity instance&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb399536.aspx"&gt;Parameters in eSQL&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Handle special data types.      &lt;br /&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/87z0hy49.aspx"&gt;querying BLOBs&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/cc716724.aspx"&gt;filestream&lt;/a&gt;, &lt;a href="http://jasonfollas.com/blog/archive/2008/12/11/using-ado.net-with-sql-server-spatial-objects.aspx"&gt;spatial&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/bb675163.aspx"&gt;table-valued parameters&lt;/a&gt;       &lt;br /&gt;This objective does not include: implementing data types for unstructured data, user-defined types, Common Language Runtime (CLR) types &lt;/li&gt;    &lt;li&gt;Query XML.      &lt;br /&gt;This objective may include but is not limited to: LINQ to XML, XmlReader, XmlDocuments, XPath       &lt;br /&gt;This objective does not include: XSLT, XmlWriter &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Query data by using ADO.NET Data Services.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: implementing filtering and entitlement in ADO.NET Data Services, addressing resources, creating a query expression, accessing payload formats, Data Services interceptors&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Manipulating Data (22%)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;Create, update, or delete data by using SQL statements.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: Create/Update/Delete (CUD), using DataSets, calling stored procedures, using parameters&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;Create, update, or delete data by using DataContext.      &lt;br /&gt;This objective may include but is not limited to: CUD, calling stored procedures, using parameters       &lt;br /&gt;This objective does not include: ObjectTrackingEnabled &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Create, update, or delete data by using ObjectContext.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: CUD, calling stored procedures, using parameters, setting SaveOptions&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Manage transactions.        &lt;br /&gt;This objective may include         &lt;br /&gt;but is not limited to: System.Transactions, DBTransaction, rolling back a transaction, Lightweight Transaction Manager (LTM)&lt;/p&gt;      &lt;p&gt;This objective does not include: distributed transactions, multiple updates within a transaction, multiple synchronization of data within an acidic transaction&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Create disconnected objects.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: &lt;a href="http://msdn.microsoft.com/en-us/library/ff407090.aspx"&gt;creating self-tracking entities in the Entity Framework&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb896271.aspx"&gt;attaching objects&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/zb0sdh0b.aspx"&gt;DataSets&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/7zt3ycf2(v=VS.100).aspx"&gt;table adapters&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Developing and Deploying Reliable Applications (18%)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;Monitor and collect performance data.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: logging generated SQL (ToTraceString), collecting response times, implementing performance counters, implementing logging, implementing instrumentation&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Handle exceptions.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: resolving data concurrency issues (handling OptimisticConcurrency exception, Refresh method), handling errors, transaction exceptions, connection exceptions, timeout exceptions, handling an exception from the Entity Framework disconnected object, security exceptions&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Protect data.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: encryption, digital signature, hashing, salting, least privilege&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Synchronize data.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: online/offline Entity Framework, synchronization services, saving locally&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Deploy ADO.NET components.&lt;/p&gt;      &lt;p&gt;This objective may include but is not limited to: packaging and publishing from Visual Studio, &lt;a href="http://msdn.microsoft.com/en-us/library/gg258442.aspx"&gt;deploying an ADO.NET Services application&lt;/a&gt;; packaging and deploying Entity Framework metadata&lt;/p&gt;      &lt;p&gt;This objective does not include: configuring IIS, MSDeploy, MSBuild&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/c7AqrQned1fHNeH6dN8wKf108RQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c7AqrQned1fHNeH6dN8wKf108RQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/c7AqrQned1fHNeH6dN8wKf108RQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c7AqrQned1fHNeH6dN8wKf108RQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://blog.ondrejsv.com/post/Exam-70-516-objectives-with-MSDN-links.aspx</link>
      <comments>http://blog.ondrejsv.com/post/Exam-70-516-objectives-with-MSDN-links.aspx#comment</comments>
      <guid>http://blog.ondrejsv.com/post.aspx?id=2358c9b5-8208-4a91-b59a-6a7685740972</guid>
      <pubDate>Thu, 06 Jan 2011 23:08:53 +0200</pubDate>
      <dc:publisher>ondrej</dc:publisher>
      <pingback:server>http://blog.ondrejsv.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.ondrejsv.com/post.aspx?id=2358c9b5-8208-4a91-b59a-6a7685740972</pingback:target>
      <slash:comments>8</slash:comments>
      <trackback:ping>http://blog.ondrejsv.com/trackback.axd?id=2358c9b5-8208-4a91-b59a-6a7685740972</trackback:ping>
      <wfw:comment>http://blog.ondrejsv.com/post/Exam-70-516-objectives-with-MSDN-links.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.ondrejsv.com/syndication.axd?post=2358c9b5-8208-4a91-b59a-6a7685740972</wfw:commentRss>
    </item>
  </channel>
</rss>

