﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 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#">
  <channel>
    <title>David Pokluda's blog</title>
    <description>Software development, business apps, and other topics</description>
    <link>http://blog.pokluda.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 2.0.0.36</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://blog.pokluda.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>David Pokluda</dc:creator>
    <dc:title>David Pokluda's blog</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <item>
      <title>Spam comments were deleted</title>
      <description>&lt;p&gt;I have noticed that while I was not posting new posts the blog was filled with spam comments. I have deleted most of the comments. In the future I will monitor the comments more carefully. I have also added reCaptcha and I hope it will block some of the spam comments.&lt;/p&gt;</description>
      <link>http://blog.pokluda.com/post/Spam-comments-were-deleted.aspx</link>
      <comments>http://blog.pokluda.com/post/Spam-comments-were-deleted.aspx#comment</comments>
      <guid>http://blog.pokluda.com/post.aspx?id=4948c7ee-6963-4ff9-b5e3-700826436bc5</guid>
      <pubDate>Thu, 17 Feb 2011 17:14:23 +1100</pubDate>
      <category>Blog</category>
      <dc:publisher>dpokluda</dc:publisher>
      <pingback:server>http://blog.pokluda.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.pokluda.com/post.aspx?id=4948c7ee-6963-4ff9-b5e3-700826436bc5</pingback:target>
      <slash:comments>973</slash:comments>
      <trackback:ping>http://blog.pokluda.com/trackback.axd?id=4948c7ee-6963-4ff9-b5e3-700826436bc5</trackback:ping>
      <wfw:comment>http://blog.pokluda.com/post/Spam-comments-were-deleted.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.pokluda.com/syndication.axd?post=4948c7ee-6963-4ff9-b5e3-700826436bc5</wfw:commentRss>
    </item>
    <item>
      <title>New job and updated blog engine</title>
      <description>&lt;p&gt;I haven’t posted anything new on this blog for over one and half years. During that time I have switched job. I am currently working in Windows organization in Windows Update team. I am working on Windows Update and other technologies and components built on top of Windows Update infrastructure.&lt;/p&gt;  &lt;p&gt;Recently I have also updated the blog engine on this blog to &lt;a href="http://www.dotnetblogengine.net/" target="_blank"&gt;BlogEngine.NET&lt;/a&gt; version 2.&lt;/p&gt;  &lt;p&gt;Expect more news and some posts soon.&lt;/p&gt;</description>
      <link>http://blog.pokluda.com/post/New-job-and-updated-blog-engine.aspx</link>
      <comments>http://blog.pokluda.com/post/New-job-and-updated-blog-engine.aspx#comment</comments>
      <guid>http://blog.pokluda.com/post.aspx?id=a398cbcd-ce11-46c0-bbdf-f8f264024b56</guid>
      <pubDate>Thu, 17 Feb 2011 17:13:33 +1100</pubDate>
      <category>Blog</category>
      <dc:publisher>dpokluda</dc:publisher>
      <pingback:server>http://blog.pokluda.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.pokluda.com/post.aspx?id=a398cbcd-ce11-46c0-bbdf-f8f264024b56</pingback:target>
      <slash:comments>598</slash:comments>
      <trackback:ping>http://blog.pokluda.com/trackback.axd?id=a398cbcd-ce11-46c0-bbdf-f8f264024b56</trackback:ping>
      <wfw:comment>http://blog.pokluda.com/post/New-job-and-updated-blog-engine.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.pokluda.com/syndication.axd?post=a398cbcd-ce11-46c0-bbdf-f8f264024b56</wfw:commentRss>
    </item>
    <item>
      <title>“Mastering” branding of SharePoint</title>
      <description>&lt;p&gt;Ok, I am exaggerating here. This post will not be about “mastering” the branding but rather about branding through master pages. This post is another post in a series of posts where I try to learn SharePoint. When I found out that SharePoint is based on ASP.NET master pages I immediately thought it would be fun to create a SharePoint that would look exactly like my web pages. So, here is my target visual.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; &lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="SP_Master1_Target" border="0" alt="SP_Master1_Target" src="http://blog.pokluda.com/image.axd?picture=WindowsLiveWriter/MasteringbrandingofSharePoint/73782C85/SP_Master1_Target.png" width="690" height="603" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Creating new master page&lt;/h3&gt;  &lt;p&gt;By looking at the default.master page (located at C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\GLOBAL\default.master) I got scared. This page is not simple, let me say it this way. I tried to come up with a clean minimal page. I found a &lt;a href="http://msdn.microsoft.com/en-us/library/aa660698.aspx" target="_blank"&gt;minimal master page on MSDN&lt;/a&gt;. Unfortunately that page didn’t work and I had no clue why (I guess it’s because I don’t have MOSS but just WSS installed on my machine). I then tried to come up with my own minimal master page. Here is the result.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre class="brush: xml; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;&amp;lt;%@Master language=&amp;quot;C#&amp;quot;%&amp;gt;
&amp;lt;%@ Import Namespace=&amp;quot;Microsoft.SharePoint&amp;quot; %&amp;gt; 
&amp;lt;%@ Import Namespace=&amp;quot;Microsoft.SharePoint.ApplicationPages&amp;quot; %&amp;gt;
&amp;lt;%@ Register Tagprefix=&amp;quot;SharePoint&amp;quot; Namespace=&amp;quot;Microsoft.SharePoint.WebControls&amp;quot; 
  Assembly=&amp;quot;Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;quot; %&amp;gt; 
&amp;lt;%@ Register Tagprefix=&amp;quot;Utilities&amp;quot; Namespace=&amp;quot;Microsoft.SharePoint.Utilities&amp;quot; 
  Assembly=&amp;quot;Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;quot; %&amp;gt; 
&amp;lt;%@ Register Tagprefix=&amp;quot;WebPartPages&amp;quot; Namespace=&amp;quot;Microsoft.SharePoint.WebPartPages&amp;quot; 
  Assembly=&amp;quot;Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;quot; %&amp;gt;
&amp;lt;%@ Register TagPrefix=&amp;quot;wssuc&amp;quot; TagName=&amp;quot;Welcome&amp;quot; src=&amp;quot;~/_controltemplates/Welcome.ascx&amp;quot; %&amp;gt;
&amp;lt;%@ Register TagPrefix=&amp;quot;wssuc&amp;quot; TagName=&amp;quot;DesignModeConsole&amp;quot; 
  src=&amp;quot;~/_controltemplates/DesignModeConsole.ascx&amp;quot; %&amp;gt;

&amp;lt;html id=&amp;quot;HTML1&amp;quot; dir=&amp;quot;&amp;lt;%$Resources:wss,multipages_direction_dir_value%&amp;gt;&amp;quot; runat=&amp;quot;server&amp;quot; 
  xmlns:o=&amp;quot;urn:schemas-microsoft-com:office:office&amp;quot;&amp;gt;

&amp;lt;head id=&amp;quot;HEAD1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
    &amp;lt;META Name=&amp;quot;progid&amp;quot; Content=&amp;quot;SharePoint.WebPartPage.Document&amp;quot;&amp;gt;
    &amp;lt;META HTTP-EQUIV=&amp;quot;Content-Type&amp;quot; CONTENT=&amp;quot;text/html; charset=utf-8&amp;quot;&amp;gt;
    &amp;lt;META HTTP-EQUIV=&amp;quot;Expires&amp;quot; content=&amp;quot;0&amp;quot;&amp;gt;
    &amp;lt;SharePoint:RobotsMetaTag ID=&amp;quot;RobotsMetaTag1&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    
    &amp;lt;Title ID=&amp;quot;onetidTitle&amp;quot;&amp;gt;
        &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderPageTitle&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;/Title&amp;gt;
    
    &amp;lt;SharePoint:CssLink ID=&amp;quot;CssLink1&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;!-- remove support for themes &amp;lt;SharePoint:Theme ID=&amp;quot;Theme1&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt; --&amp;gt;
    &amp;lt;SharePoint:ScriptLink ID=&amp;quot;ScriptLink1&amp;quot; language=&amp;quot;javascript&amp;quot; name=&amp;quot;core.js&amp;quot; Defer=&amp;quot;true&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;SharePoint:CustomJSUrl ID=&amp;quot;CustomJSUrl1&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;SharePoint:SoapDiscoveryLink ID=&amp;quot;SoapDiscoveryLink1&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderAdditionalPageHead&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;SharePoint:DelegateControl ID=&amp;quot;DelegateControl1&amp;quot; runat=&amp;quot;server&amp;quot; ControlId=&amp;quot;AdditionalPageHead&amp;quot; AllowMultipleControls=&amp;quot;true&amp;quot;/&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body scroll=&amp;quot;yes&amp;quot; onload=&amp;quot;javascript:if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();&amp;quot;&amp;gt;

    &amp;lt;form id=&amp;quot;Form1&amp;quot; runat=&amp;quot;server&amp;quot; onsubmit=&amp;quot;return _spFormOnSubmitWrapper();&amp;quot;&amp;gt;
        &amp;lt;WebPartPages:SPWebPartManager id=&amp;quot;m&amp;quot; runat=&amp;quot;Server&amp;quot; /&amp;gt;

        &amp;lt;!-- MAIN CONTENT --&amp;gt;
        &amp;lt;div id=&amp;quot;main&amp;quot;&amp;gt;
            &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderMain&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
        &amp;lt;/div&amp;gt;

	
&amp;lt;asp:Panel ID=&amp;quot;HiddenPlaceholders&amp;quot; visible=&amp;quot;false&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderBodyLeftBorder&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderBodyRightMargin&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderCalendarNavigator&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderFormDigest&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderGlobalNavigation&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderGlobalNavigationSiteMap&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderHorizontalNav&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderLeftActions&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderLeftNavBar&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderLeftNavBarBorder&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderLeftNavBarDataSource&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderLeftNavBarTop&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderMiniConsole&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderNavSpacer&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderPageDescription&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderPageImage&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderPageTitleInTitleArea&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderSearchArea&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderSiteName&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderTitleAreaSeparator&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderTitleBreadcrumb&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderTitleLeftBorder&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderTitleRightMargin&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderTopNavBar&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder ID=&amp;quot;SPNavigation&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
    &amp;lt;asp:ContentPlaceHolder ID=&amp;quot;WSSDesignConsole&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
&amp;lt;/asp:Panel&amp;gt;            
            
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;__spDummyText1&amp;quot; style=&amp;quot;display:none;&amp;quot; size=1/&amp;gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;__spDummyText2&amp;quot; style=&amp;quot;display:none;&amp;quot; size=1/&amp;gt;
    &amp;lt;/form&amp;gt;
    
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderUtilityContent&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderBodyAreaClass&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderTitleAreaClass&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;

&lt;p&gt;This minimal master page leads to the following visual.&lt;/p&gt;

&lt;p&gt;&amp;#160; &lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Minimal page" border="0" alt="SP_Master1_Minimal" src="http://blog.pokluda.com/image.axd?picture=WindowsLiveWriter/MasteringbrandingofSharePoint/36E54F4A/SP_Master1_Minimal.png" width="690" height="603" /&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;At this point I took master page from my web server and put it in my minimal SharePoint master page. The trick is to play with SharePoint ContentPlaceHolders. These are all the available placeholders:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;table border="0" cellspacing="0" cellpadding="2" width="770"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td width="238"&gt;&lt;strong&gt;Placeholder&lt;/strong&gt;&lt;/td&gt;

      &lt;td width="530"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderAdditionalPageHead&lt;/td&gt;

      &lt;td width="530"&gt;Additional content that needs to be within the tag of the page, for example, references to script in style sheets&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderBodyAreaClass&lt;/td&gt;

      &lt;td width="530"&gt;Additional body styles in the page header&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderBodyLeftBorder&lt;/td&gt;

      &lt;td width="530"&gt;Border element for the main page body&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderBodyRightMargin&lt;/td&gt;

      &lt;td width="530"&gt;Right margin of the main page body&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderCalendarNavigator&lt;/td&gt;

      &lt;td width="530"&gt;Shows a date picker for navigating in a calendar when a calendar is visible on the page&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderFormDigest&lt;/td&gt;

      &lt;td width="530"&gt;The &amp;quot;form digest&amp;quot; security control&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderGlobalNavigation&lt;/td&gt;

      &lt;td width="530"&gt;The global navigation breadcrumb&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderHorizontalNav&lt;/td&gt;

      &lt;td width="530"&gt;Top navigation menu for the page&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderLeftActions&lt;/td&gt;

      &lt;td width="530"&gt;Bottom of the left navigation area&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderLeftNavBar&lt;/td&gt;

      &lt;td width="530"&gt;Left navigation area&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderLeftNavBarBorder&lt;/td&gt;

      &lt;td width="530"&gt;Border element on the left navigation bar&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderLeftNavBarDataSource&lt;/td&gt;

      &lt;td width="530"&gt;Data source for the left navigation menu&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderLeftNavBarTop&lt;/td&gt;

      &lt;td width="530"&gt;Top of the left navigation area &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderMain&lt;/td&gt;

      &lt;td width="530"&gt;Page's main content&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderMiniConsole&lt;/td&gt;

      &lt;td width="530"&gt;A place to show page-level commands, for example, WIKI commands such as Edit Page, History, and Incoming Links&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderNavSpacer&lt;/td&gt;

      &lt;td width="530"&gt;The width of the left navigation area&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderPageDescription&lt;/td&gt;

      &lt;td width="530"&gt;Description of the page contents&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderPageImage&lt;/td&gt;

      &lt;td width="530"&gt;Page icon in the upper left area of the page&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td width="238"&gt;PlaceHolderPageTitle&lt;/td&gt;

      &lt;td width="530"&gt;The page &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;With this information I have updated the “logo” element:&lt;/p&gt;

&lt;pre class="brush: xml; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;&amp;lt;!-- LOGO --&amp;gt;
&amp;lt;div id=&amp;quot;logo&amp;quot; class=&amp;quot;logo&amp;quot;&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderSiteName&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
        &amp;lt;SharePoint:SPLinkButton runat=&amp;quot;server&amp;quot; NavigateUrl=&amp;quot;~site/&amp;quot; id=&amp;quot;onetidProjectPropertyTitle&amp;quot; CssClass=&amp;quot;whiteLink&amp;quot; &amp;gt;
            David Pokluda's &amp;lt;SharePoint:ProjectProperty ID=&amp;quot;ProjectProperty1&amp;quot; Property=&amp;quot;Title&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
        &amp;lt;/SharePoint:SPLinkButton&amp;gt;
    &amp;lt;/asp:ContentPlaceHolder&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Here is my “main content” element:&lt;/p&gt;

&lt;pre class="brush: xml; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;&amp;lt;!-- MAIN TEXT --&amp;gt;
&amp;lt;div id=&amp;quot;main&amp;quot;&amp;gt;
    &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderMain&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;I have also added the simple “search” element:&lt;/p&gt;

&lt;pre class="brush: xml; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;&amp;lt;div id=&amp;quot;sn1&amp;quot; class=&amp;quot;sidenote&amp;quot;&amp;gt;
    &amp;lt;div id=&amp;quot;sn1header&amp;quot; class=&amp;quot;sidenoteheader&amp;quot;&amp;gt;
        Quick Search
    &amp;lt;/div&amp;gt;
    &amp;lt;div id=&amp;quot;sn1text&amp;quot; class=&amp;quot;sidenotetext&amp;quot;&amp;gt;
        &amp;lt;asp:ContentPlaceHolder id=&amp;quot;PlaceHolderSearchArea&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
          &amp;lt;SharePoint:DelegateControl ID=&amp;quot;DelegateControl5&amp;quot; runat=&amp;quot;server&amp;quot; ControlId=&amp;quot;SmallSearchInputBox&amp;quot; /&amp;gt;
        &amp;lt;/asp:ContentPlaceHolder&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;After updating the CSS file (with styles from my web server) I saw the following visual:&lt;/p&gt;

&lt;p&gt;&amp;#160;&amp;#160; &lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Final page" border="0" alt="SP_Master1_Final" src="http://blog.pokluda.com/image.axd?picture=WindowsLiveWriter/MasteringbrandingofSharePoint/51B40607/SP_Master1_Final.png" width="690" height="603" /&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;I think it is pretty good when you consider that it was a simple modification of the master page. (Ok, it is not as simple as I am trying to say here but it is not a rocket science.) &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h3&gt;Applying the new master page&lt;/h3&gt;

&lt;p&gt;In the previous section I skipped the part of applying the new master page to the site. You have multiple options for that. The easiest is probably to use &lt;a href="http://office.microsoft.com/en-us/sharepointdesigner" target="_blank"&gt;SharePoint Designer&lt;/a&gt; for that – see &lt;a href="http://office.microsoft.com/en-us/sharepointdesigner/HA101009061033.aspx#6" target="_blank"&gt;Apply the new master page&lt;/a&gt;. Another option is to do that programmatically. To do so use the following code:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;public void ApplyCustomBrand() 
{
    SPWeb site = SPContext.Current.Web;

    string MasterUrlPath = site.ServerRelativeUrl;
    if (!MasterUrlPath.EndsWith(@&amp;quot;/&amp;quot;))
    {
        MasterUrlPath += @&amp;quot;/&amp;quot;;
    }
    MasterUrlPath += @&amp;quot;_catalogs/masterpage/Pokluda.master&amp;quot;;
    ApplyCustomBrandToWebs(MasterUrlPath, site);

    Response.Redirect(Request.RawUrl);
}

public void ApplyCustomBrandToWebs(string MasterUrlPath, SPWeb site) 
{
    site.ApplyTheme(&amp;quot;&amp;quot;);
    site.MasterUrl = MasterUrlPath;
    site.AlternateCssUrl = &amp;quot;/_layouts/1033/STYLES/Pokluda/PokludaWebStyle.css&amp;quot;;
    site.SiteLogoUrl = &amp;quot;&amp;quot;;
    site.Update();

    foreach (SPWeb child in site.Webs) 
    {
        ApplyCustomBrandToWebs(MasterUrlPath, child);
    }
}&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The above mentioned code is based on CustomBranding project from Chapter 3 of &lt;a href="http://www.amazon.com/Microsoft-Windows-SharePoint-Services-Developer/dp/0735623201" target="_blank"&gt;Inside Microsoft Windows SharePoint Services 3.0&lt;/a&gt; book from &lt;a href="http://tedpattison.net/" target="_blank"&gt;Ted Pattison&lt;/a&gt; and &lt;a href="http://daniellarson.spaces.live.com" target="_blank"&gt;Daniel Larson&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;More information:&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms467402.aspx" target="_blank"&gt;Windows SharePoint Services Default Master Pages&lt;/a&gt; on MSDN &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa660698.aspx" target="_blank"&gt;How to: Create a Minimal Master Page&lt;/a&gt; on MSDN &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://office.microsoft.com/en-us/sharepointdesigner/HA101009061033.aspx" target="_blank"&gt;Modify the default master page&lt;/a&gt; on Office Online &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.amazon.com/Microsoft-Windows-SharePoint-Services-Developer/dp/0735623201" target="_blank"&gt;Inside Microsoft Windows SharePoint Services 3.0&lt;/a&gt; book from Ted Pattison and Daniel Larson &lt;/li&gt;

  &lt;li&gt;Download &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7c05ca44-869a-463b-84d7-57b053711a96&amp;amp;DisplayLang=en" target="_blank"&gt;Windows SharePoint Services 3.0 Sample: Example Master Pages&lt;/a&gt; from Microsoft Download Center &lt;/li&gt;
&lt;/ul&gt;</description>
      <link>http://blog.pokluda.com/post/e2809cMasteringe2809d-branding-of-SharePoint.aspx</link>
      <comments>http://blog.pokluda.com/post/e2809cMasteringe2809d-branding-of-SharePoint.aspx#comment</comments>
      <guid>http://blog.pokluda.com/post.aspx?id=edbd031f-cafd-458f-8cc0-53ae90ff3afc</guid>
      <pubDate>Thu, 16 Apr 2009 17:45:08 +1100</pubDate>
      <category>SharePoint</category>
      <dc:publisher>dpokluda</dc:publisher>
      <pingback:server>http://blog.pokluda.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.pokluda.com/post.aspx?id=edbd031f-cafd-458f-8cc0-53ae90ff3afc</pingback:target>
      <slash:comments>757</slash:comments>
      <trackback:ping>http://blog.pokluda.com/trackback.axd?id=edbd031f-cafd-458f-8cc0-53ae90ff3afc</trackback:ping>
      <wfw:comment>http://blog.pokluda.com/post/e2809cMasteringe2809d-branding-of-SharePoint.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.pokluda.com/syndication.axd?post=edbd031f-cafd-458f-8cc0-53ae90ff3afc</wfw:commentRss>
    </item>
    <item>
      <title>Pulse virtual machines programmatically</title>
      <description>&lt;p&gt;I use &lt;a href="http://www.microsoft.com/windowsserver2008/en/us/hyperv-main.aspx" target="_blank"&gt;Hyper-V&lt;/a&gt; frequently for testing purposes. Virtualization has a lot of advantages. There is one thing (ok, there is more but let’s concentrate on a particular one today) that bothers me. All my machines joined our company Active Directory. The problem is that if a machine doesn’t run for a certain time (I guess something like 2 weeks) the machine account will be removed from Active Directory. It’s not a huge deal, you just have to:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;login as administrator &lt;/li&gt;    &lt;li&gt;remove your computer from the domain &lt;/li&gt;    &lt;li&gt;restart &lt;/li&gt;    &lt;li&gt;join the domain again &lt;/li&gt;    &lt;li&gt;restart &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Even thought it’s not such a big deal it annoys me every time I need to do that. I thought that if I would be able to automatically start each machine (let’s say at night when I’m not using the computer) it would solve this problem. Since I use PowerShell I wanted to be able to leverage PowerShell for this. &lt;/p&gt;  &lt;h4&gt;Retrieve all available VMs&lt;/h4&gt;  &lt;p&gt;To retrieve all available VMs we need to execute a &lt;a href="http://msdn.microsoft.com/en-us/library/aa394582.aspx" target="_blank"&gt;WMI&lt;/a&gt; query. The trick with this query is that it will retrieve all machines including your host machine. That’s why you need to add additional filter where you ask to retrieve only machines which caption starts with “Virtual”.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;function get-vms
{
    $query = &amp;quot;SELECT * FROM MsVM_ComputerSystem WHERE Caption Like 'Virtual%' &amp;quot;
    get-wmiobject -query $query -namespace &amp;quot;root\virtualization&amp;quot; -computername &amp;quot;.&amp;quot; 
}&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h4&gt;Retrieve a particular VM&lt;/h4&gt;

&lt;p&gt;Once we have a collection of all available VMs, we will execute some actions on them. As a helper I will also create a function that will retrieve VM object when provided a machine name:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;function get-vm([string] $name)
{
    #Get the VM Object
    $query = &amp;quot;SELECT * FROM Msvm_ComputerSystem WHERE ElementName='&amp;quot; + $name + &amp;quot;'&amp;quot;
    get-wmiobject -query $query -namespace &amp;quot;root\virtualization&amp;quot; -computername &amp;quot;.&amp;quot;
}&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h4&gt;Starting VM&lt;/h4&gt;

&lt;p&gt;To start a VM, we just need to set &lt;a href="http://msdn.microsoft.com/en-us/library/cc723874(VS.85).aspx" target="_blank"&gt;RequestStateChange&lt;/a&gt; to value 2. The code to do so is very simple.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;function start-vm([string] $name)
{
    $VM = get-vm $name
    
    #Request a state change on the VM
    $result = $VM.RequestStateChange(2)
}&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h4&gt;Shutting down VM&lt;/h4&gt;

&lt;p&gt;To shutdown a VM, we need to get a special &lt;a href="http://msdn.microsoft.com/en-us/library/cc136893(VS.85).aspx" target="_blank"&gt;ShutdownComponent&lt;/a&gt; and call &lt;a href="http://msdn.microsoft.com/en-us/library/cc703625(VS.85).aspx" target="_blank"&gt;InitiateShutdown&lt;/a&gt; method. The code might seem complex but it isn’t. Most of the code bellow is just error handling code.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;function shutdown-vm([string] $name)
{
    #Get the Shutdown Component for the VM
    $vm = get-vm $name
    $query = &amp;quot;SELECT * FROM Msvm_ShutdownComponent WHERE SystemName='&amp;quot; + $vm.name + &amp;quot;'&amp;quot;
    $Shutdown = get-wmiobject -query $query -namespace &amp;quot;root\virtualization&amp;quot; -computername &amp;quot;.&amp;quot; 
    
    if ($Shutdown -ne $null)
    {
        #Request a forced shutdown
        $result = $Shutdown.InitiateShutdown($true,&amp;quot;Shutdown initiated from PowerShell script&amp;quot;)
        if ($result.returnValue -eq 0) 
        {
            write-host &amp;quot;Shutdown of '$name' started.&amp;quot;
        } 
        else 
        {
            write-host &amp;quot;Attempt to shutdown 'name' failed with code $($result.returnValue).&amp;quot;
        } 
    }
    else  
    {
        write-host &amp;quot;Could not get shutdown component for '$name'.&amp;quot;
    }
}&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h4&gt;Final script&lt;/h4&gt;

&lt;p&gt;To put it all together we need to retrieve all VMs and call start and shutdown in a loop for each of the retrieved VMs. &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;$VMs = get-vms
foreach ($VM in $VMs)
{
    $name = $VM.ElementName
    write-host $name
    
    write-host &amp;quot;`tStarting....&amp;quot;
    start-vm $name
    
    write-host &amp;quot;`tWaiting to fully load for 7 minutes...&amp;quot;
    start-sleep -seconds 420
    
    write-host &amp;quot;`tShutdown...&amp;quot;
    shutdown-vm $name
}

write-host &amp;quot;Finished.&amp;quot;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Let me note that in the previous script I added a sleep for 7 minutes. Why do I do that? I want to give the VM enough time to completely start all the services. &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h4&gt;&lt;/h4&gt;

&lt;h4&gt;Remarks&lt;/h4&gt;

&lt;p&gt;Let me add that I found that shutdown can also be done using “associators”. In the above code we use the following query:&lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;    $vm = get-vm $name
    $query = &amp;quot;SELECT * FROM Msvm_ShutdownComponent WHERE SystemName='&amp;quot; + $vm.name + &amp;quot;'&amp;quot;
    $Shutdown = get-wmiobject -query $query -namespace &amp;quot;root\virtualization&amp;quot; -computername &amp;quot;.&amp;quot; &lt;/pre&gt;

&lt;p&gt;The same can be done using “associators”.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;    $vm = get-vm $name
    $query = &amp;quot;Associators of {$vm} Where AssocClass=Msvm_SystemDevice ResultClass=Msvm_ShutdownComponent&amp;quot;
    $Shutdown = get-wmiobject -query $query -namespace &amp;quot;root\virtualization&amp;quot; -computername &amp;quot;.&amp;quot; &lt;/pre&gt;

&lt;p&gt;I don’t know which one is better but both of them seems to work just fine on my machine. If you do know the difference then please let me know.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h4&gt;More information&lt;/h4&gt;

&lt;p&gt;More information can be found at:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa394582.aspx" target="_blank"&gt;Windows Management Instrumentation&lt;/a&gt; – on MSDN &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/virtual_pc_guy" target="_blank"&gt;Ben Armstrong’s blog&lt;/a&gt; – aka Virtual PC Guy’s WebLog &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/taylorb" target="_blank"&gt;Taylor Brown’s blog&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.technet.com/jamesone" target="_blank"&gt;James O’Neill’s blog&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.codeplex.com/PSHyperv" target="_blank"&gt;PowerShell management Library for Hyper-V&lt;/a&gt; – complete set of functions to manage Hyper-V from PowerShell &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Attachments:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://blog.pokluda.com/file.axd?file=pulse-vm.ps1" target="_blank"&gt;pulse-vm.ps1&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;</description>
      <link>http://blog.pokluda.com/post/Pulse-virtual-machines-programmatically.aspx</link>
      <comments>http://blog.pokluda.com/post/Pulse-virtual-machines-programmatically.aspx#comment</comments>
      <guid>http://blog.pokluda.com/post.aspx?id=5071d272-3478-459c-97c6-5c5672daaafe</guid>
      <pubDate>Wed, 08 Apr 2009 04:51:36 +1100</pubDate>
      <category>PowerShell</category>
      <dc:publisher>dpokluda</dc:publisher>
      <pingback:server>http://blog.pokluda.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.pokluda.com/post.aspx?id=5071d272-3478-459c-97c6-5c5672daaafe</pingback:target>
      <slash:comments>978</slash:comments>
      <trackback:ping>http://blog.pokluda.com/trackback.axd?id=5071d272-3478-459c-97c6-5c5672daaafe</trackback:ping>
      <wfw:comment>http://blog.pokluda.com/post/Pulse-virtual-machines-programmatically.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.pokluda.com/syndication.axd?post=5071d272-3478-459c-97c6-5c5672daaafe</wfw:commentRss>
    </item>
    <item>
      <title>Windows Live Writer Source Code plug-in</title>
      <description>&lt;p&gt;I use &lt;a href="http://www.windowslive.com/Desktop/writer" target="_blank"&gt;Windows Live Writer&lt;/a&gt; for authoring my blog posts. It is very user friendly application that allows you to forget about the ugly web interface your blog engine has for authoring posts. As a developer I wanted to be able to paste source code samples into my posts and be able to format them accordingly. Fortunately &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter" target="_blank"&gt;Alex Gorbatchev&lt;/a&gt; wrote a simple JavaScript application that will format source code according to parameters in the &lt;strong&gt;PRE&lt;/strong&gt; element in which the code is placed. All we need to do is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;add support for Alex Gorbatchev&amp;rsquo;s &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter" target="_blank"&gt;SyntaxHighlighter&lt;/a&gt; to your blog (server) &lt;/li&gt;
&lt;li&gt;teach Windows Live Writer to enter the right parameters whenever you insert a source code snippet in one of your posts &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are solutions for all of these but none of them suited my needs (I will try to cover the reasons for that later). Rather than complain I thought I would try to solve my problems.&lt;/p&gt;
&lt;h3&gt;Source Code Plug-in on CodePlex&lt;/h3&gt;
&lt;p&gt;I have created &lt;a href="http://sourcecodeplugin.codeplex.com/" target="_blank"&gt;SourceCodePlugin&lt;/a&gt; project on &lt;a href="http://sourcecodeplugin.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt; to include my solution to the above mentioned needs. The project has two parts: &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter" target="_blank"&gt;SyntaxHighligher&lt;/a&gt; for &lt;a href="http://www.dotnetblogengine.net" target="_blank"&gt;BlogEngine.NET&lt;/a&gt; and SourceCode plug-in for Windows Live Writer.&lt;/p&gt;
&lt;h4&gt;SyntaxHighligter for BlogEngine.NET&lt;/h4&gt;
&lt;p&gt;This part of the project allows you to integrate an updated &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter" target="_blank"&gt;SyntaxHighlighter&lt;/a&gt; with the &lt;a href="http://www.dotnetblogengine.net" target="_blank"&gt;BlogEngine.NET&lt;/a&gt; system. The highlighter is based on Alex Gorbatchev's code with a couple of updates:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Product: SyntaxHighlighter&amp;nbsp; &lt;br /&gt;Author: Alex Gorbatchev&amp;nbsp; &lt;br /&gt;Version: 2.0.296&amp;nbsp; &lt;br /&gt;Link: &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter" target="_blank"&gt;http://alexgorbatchev.com/wiki/SyntaxHighlighter&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Updates from Alex's code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;added PowerShell script &lt;/li&gt;
&lt;li&gt;added FSharp script &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why did I have to code it myself?&lt;/strong&gt; I had to update SyntaxHighlighter to add support for PowerShell and F# because I am used them frequently. Support for other my languages is already part of the product (C#, C++, SQL, XML, JavaScript, etc.). I found an integration into BlogEngine.NET but the extension was not compatible with the latest release of SyntaxHighlighter.&lt;/p&gt;
&lt;p&gt;I have decided to update SyntaxHightlighter scripts library and create a new extension component for BlogEngine.NET compatible with the latest release of SyntaxHighlighter.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h5&gt;Examples&lt;/h5&gt;
&lt;p&gt;Sample F# code (this is a snippet from Tutorial.fs):&lt;/p&gt;
&lt;pre class="brush: fsharp"&gt;// Types: records
// ---------------------------------------------------------------

type Card = { Name  : string;
              Phone : string;
              Ok    : bool }
              
let cardA = { Name = "Alf" ; Phone = "(206) 555-8257" ; Ok = false }
let cardB = { cardA with Phone = "(206) 555-4112"; Ok = true }
let ShowCard c = 
  c.Name + " Phone: " + c.Phone + (if not c.Ok then " (unchecked)" else "")&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Sample PowerShell code (this is a function I use for my nightly job):&lt;/p&gt;
&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;#This method starts Windows service. It doesn't throw in case of an error.
function Start-ServiceNotThrowing($service, [bool]$displayWarning = $true)
{
    start-service $service -ErrorVariable errs 2&amp;amp;gt;$null
    if (($errs -ne $null) -and ($displayWarning))
    {
        set-color "yellow"
        write-host "Warning: Service $service is not installed."
        set-color
    }
}&lt;/pre&gt;
&lt;h4&gt;SourceCode plug-in for Windows Live Writer&lt;/h4&gt;
&lt;p&gt;This part of the project adds a SourceCode plug-in into Windows Live Writer to enable inserting code into your blog posts in a form compatible with SyntaxHighlighter.&lt;/p&gt;
&lt;p&gt;To insert a code, click on &lt;strong&gt;Source code...&lt;/strong&gt; item in &lt;strong&gt;Insert&lt;/strong&gt; section (right side of the Windows Live Writer). The plug-in will use the currently selected text or (when configured accordingly) take the text from the clipboard.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="SourceCodePlugin_MainForm" src="http://blog.pokluda.com/image.axd?picture=SourceCodePlugin_MainForm.png" border="0" alt="SourceCodePlugin_MainForm" width="464" height="292" /&gt;&lt;/p&gt;
&lt;p&gt;You can tweak the behavior of the plug-in by clicking &lt;strong&gt;Options&lt;/strong&gt; button to update plug-in options. All values that you enter in this options dialog will be saved for future use (you don&amp;rsquo;t have to enter the same configuration over and over again).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="SourceCodePlugin_Options" src="http://blog.pokluda.com/image.axd?picture=SourceCodePlugin_Options.png" border="0" alt="SourceCodePlugin_Options" width="378" height="272" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why did I have to code it myself?&lt;/strong&gt; I found several plug-ins for SyntaxHighlighter. One of them was not able to keep option values between invocations that led to a situation where you had to update your options every time you wanted to touch your source code. Another one saved the options but when I was editing source code that was already inserted into a post, the plug-in wouldn&amp;rsquo;t display the currently selected text. Instead I had to select the text, press Ctrl+C, open the plug-in and press Ctrl+V.&lt;/p&gt;
&lt;p&gt;I have decided I will create a simple plug-in that behave the way I expected.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Resources&lt;/h4&gt;
&lt;p&gt;As I mentioned above the whole project is now available at CodePlex: &lt;a href="http://sourceCodePlugin.codeplex.com" target="_blank"&gt;http://sourceCodePlugin.codeplex.com&lt;/a&gt;. Feel free to check it out and if you find a problem, let me know or take the source code and fix it yourself.&lt;/p&gt;</description>
      <link>http://blog.pokluda.com/post/Windows-Live-Writer-Source-Code-plug-in.aspx</link>
      <comments>http://blog.pokluda.com/post/Windows-Live-Writer-Source-Code-plug-in.aspx#comment</comments>
      <guid>http://blog.pokluda.com/post.aspx?id=2f6ac2e6-454a-4f1d-8c32-0c27a9ac96ed</guid>
      <pubDate>Thu, 02 Apr 2009 13:28:00 +1100</pubDate>
      <category>Blog</category>
      <dc:publisher>DPokluda</dc:publisher>
      <pingback:server>http://blog.pokluda.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.pokluda.com/post.aspx?id=2f6ac2e6-454a-4f1d-8c32-0c27a9ac96ed</pingback:target>
      <slash:comments>2732</slash:comments>
      <trackback:ping>http://blog.pokluda.com/trackback.axd?id=2f6ac2e6-454a-4f1d-8c32-0c27a9ac96ed</trackback:ping>
      <wfw:comment>http://blog.pokluda.com/post/Windows-Live-Writer-Source-Code-plug-in.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.pokluda.com/syndication.axd?post=2f6ac2e6-454a-4f1d-8c32-0c27a9ac96ed</wfw:commentRss>
    </item>
    <item>
      <title>Configuring TeamCity with SQL Server</title>
      <description>&lt;p&gt;This is the second post in my two post mini series where I try to describe my &lt;a href="http://blog.pokluda.com/post/Configuring-development-environment.aspx" target="_blank"&gt;development environment&lt;/a&gt;. I have already mentioned that I use &lt;a href="http://www.jetbrains.com/teamcity/index.html" target="_blank"&gt;TeamCity&lt;/a&gt; as my continuous integration and build system. In this post I will describe how to configure &lt;a href="http://www.jetbrains.com/teamcity/index.html" target="_blank"&gt;TeamCity&lt;/a&gt; to use &lt;a href="http://www.microsoft.com/sqlserver/" target="_blank"&gt;SQL Server&lt;/a&gt; as a main configuration repository.&lt;/p&gt;  &lt;h4&gt;Installation of TeamCity&lt;/h4&gt;  &lt;p&gt;Run TeamCity installation to install the build server and build agent on your server. This will give you fully functional build system that is integrated with your development components. It will automatically (when configured appropriately) trigger build when a change is submitted into your VisualSVN Server repository. The build will use MSBuild to build all the artifacts of your project including running unit tests, generating source code documentation, etc. When finished the system will automatically label the source code after a successful build.&lt;/p&gt;  &lt;p&gt;Currently all configuration is written into HSQLDB database.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Microsoft SQL Server as a configuration repository&lt;/h4&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Assumtions:&lt;/strong&gt; You have 64-bit operating system and you have installed TeamCity into &lt;strong&gt;C:\Program Files (x86)\JetBrains\TeamCity&lt;/strong&gt; and your build server configuration is at &lt;strong&gt;C:\BuildServer&lt;/strong&gt; folder.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;JDBC driver&lt;/h5&gt;  &lt;p&gt;TeamCity is written in Java and therefore we need Java drivers for Microsoft SQL Server. Download and install JDBC driver from &lt;a href="http://msdn.microsoft.com/en-us/data/aa937724.aspx" target="_blank"&gt;Microsoft SQL Server JDBC Driver&lt;/a&gt; page. Copy &lt;strong&gt;sqljdbc.jar&lt;/strong&gt; and &lt;strong&gt;auth/x64/sqljdbc_auth.dll&lt;/strong&gt; into &lt;strong&gt;C:\Program Files (x86)\JetBrains\TeamCity\webapps\ROOT\WEB-INF\lib&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;Configure SQL Server for JDBC driver&lt;/h5&gt;  &lt;p&gt;Open &lt;strong&gt;SQL Server Configuration Manager&lt;/strong&gt; and make sure that SQL Server (MSSQLSERVER) is up and running and that &lt;strong&gt;TCP/IP&lt;/strong&gt; protocol is &lt;strong&gt;enabled&lt;/strong&gt; (using port 1433).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="TeamCity_SqlProtocol" border="0" alt="TeamCity_SqlProtocol" src="http://blog.pokluda.com/image.axd?picture=TeamCity_SqlProtocol.png" width="468" height="244" /&gt; &lt;/p&gt;  &lt;h5&gt;Create SQL Server database&lt;/h5&gt;  &lt;p&gt;Open &lt;strong&gt;SQL Server Management Studio&lt;/strong&gt; and add a new Login named &lt;strong&gt;teamcity&lt;/strong&gt;. In this example I will use SQL Server authentication with password &lt;strong&gt;teamcity&lt;/strong&gt; (because I chose such a simple password I need to uncheck &lt;strong&gt;Enforce password policy&lt;/strong&gt;).&lt;/p&gt;  &lt;p&gt;Create a new database named &lt;strong&gt;TeamCity&lt;/strong&gt; and add &lt;strong&gt;teamcity&lt;/strong&gt; user to the newly created database as &lt;strong&gt;db_owner&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;Configure TeamCity migration tool&lt;/h5&gt;  &lt;p&gt;Edit &lt;strong&gt;C:\Program Files (x86)\JetBrains\TeamCity\bin\dbMigration.properties&lt;/strong&gt; file and make sure that &lt;strong&gt;sourceURL&lt;/strong&gt; is set correctly:&lt;/p&gt;  &lt;pre class="brush: plain; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;sourceURL=jdbc:hsqldb:file:C:/BuildServer/system/buildserver&lt;/pre&gt;

&lt;p&gt;Now we need to add &lt;strong&gt;target&lt;/strong&gt; configuration for the migration. This is where we add information about our newly created SQL Server database:&lt;/p&gt;

&lt;pre class="brush: plain; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;# MSSQL 2008 via JDBC 
targetDriver=com.microsoft.sqlserver.jdbc.SQLServerDriver targetURL=jdbc:sqlserver://dpokluda:1433;database=TeamCity; 
targetUser=teamcity 
targetPassword=teamcity&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h5&gt;Configuration migration&lt;/h5&gt;

&lt;p&gt;To execute the migration follow these steps. Start &lt;strong&gt;PowerShell&lt;/strong&gt; (or any other shell but you will need to change the bellow mentioned steps).&lt;/p&gt;

&lt;p&gt;Add Java to your &lt;strong&gt;Path&lt;/strong&gt; variable so that migration tool can run it. This step is only necessary when you don’t have Java installed on your system and you want to use the one that comes with TeamCity.&lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;$env:Path += &amp;quot;;C:\Program Files (x86)\JetBrains\TeamCity\jre\bin&amp;quot;&lt;/pre&gt;

&lt;p&gt;Stop all TeamCity services.&lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;stop-service TCBuildAgent 
stop-service TeamCity&lt;/pre&gt;

&lt;p&gt;Navigate to TeamCity &lt;strong&gt;bin&lt;/strong&gt; folder and start the migration.&lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;cd &amp;quot;C:\Program Files\JetBrains\TeamCity\bin&amp;quot;
migrateDB.bat migrate&lt;/pre&gt;

&lt;p&gt;(It is fine to press just [Enter] key here since we have entered the full path into the &lt;strong&gt;dbMigration.properties&lt;/strong&gt; file - otherwise enter &lt;strong&gt;C:/BuildServer&lt;/strong&gt; path.)&lt;/p&gt;

&lt;p&gt;Start TeamCity services.&lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;start-service TCBuildAgent 
start-service TeamCity&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h5&gt;Verify functionality of the new repository&lt;/h5&gt;

&lt;p&gt;Navigate to your TeamCity web page and add a new user in TeamCity administration named &lt;strong&gt;Test&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Open &lt;strong&gt;TeamCity&lt;/strong&gt; database in &lt;strong&gt;SQL Server Management Studio&lt;/strong&gt; and you should see that there is a new user named &lt;strong&gt;Test&lt;/strong&gt; in &lt;strong&gt;users&lt;/strong&gt; table:&lt;/p&gt;

&lt;pre class="brush: sql; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;SELECT TOP 10 * FROM [TeamCity].[dbo].[users]&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="TeamCity_VerifyUsers" border="0" alt="TeamCity_VerifyUsers" src="http://blog.pokluda.com/image.axd?picture=TeamCity_VerifyUsers.png" width="644" height="478" /&gt; &lt;/p&gt;

&lt;p&gt;For more information see the following resources:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.jetbrains.net/confluence/display/TCD4/Migrating+to+an+External+Database" target="_blank"&gt;http://www.jetbrains.net/confluence/display/TCD4/Migrating+to+an+External+Database&lt;/a&gt; – Migrating to an external database &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.jetbrains.net/confluence/display/TCD4/Setting+up+an+External+Database" target="_blank"&gt;http://www.jetbrains.net/confluence/display/TCD4/Setting+up+an+External+Database&lt;/a&gt; – Setting up an external database (they use different driver and some steps are missing) &lt;/li&gt;
&lt;/ul&gt;</description>
      <link>http://blog.pokluda.com/post/Configuring-TeamCity-with-SQLServer.aspx</link>
      <comments>http://blog.pokluda.com/post/Configuring-TeamCity-with-SQLServer.aspx#comment</comments>
      <guid>http://blog.pokluda.com/post.aspx?id=673a4c58-ce6c-44a0-83a0-2e9cbc838943</guid>
      <pubDate>Wed, 01 Apr 2009 04:10:03 +1100</pubDate>
      <category>Coding</category>
      <dc:publisher>dpokluda</dc:publisher>
      <pingback:server>http://blog.pokluda.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.pokluda.com/post.aspx?id=673a4c58-ce6c-44a0-83a0-2e9cbc838943</pingback:target>
      <slash:comments>624</slash:comments>
      <trackback:ping>http://blog.pokluda.com/trackback.axd?id=673a4c58-ce6c-44a0-83a0-2e9cbc838943</trackback:ping>
      <wfw:comment>http://blog.pokluda.com/post/Configuring-TeamCity-with-SQLServer.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.pokluda.com/syndication.axd?post=673a4c58-ce6c-44a0-83a0-2e9cbc838943</wfw:commentRss>
    </item>
    <item>
      <title>Configuring Development Environment</title>
      <description>&lt;p&gt;As a .NET developer I have a set of development tools I frequently use. As a &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank"&gt;test-driven developer&lt;/a&gt; I prefer to have some kind of a &lt;a href="http://en.wikipedia.org/wiki/Continuous_Integration" target="_blank"&gt;continuous integration&lt;/a&gt; environment available. This is the first part of the two post series. This first post will list components I use. The &lt;a href="http://blog.pokluda.com/post/Configuring-TeamCity-with-SQLServer.aspx" target="_blank"&gt;second post&lt;/a&gt; will describe how to configure &lt;a href="http://www.jetbrains.com/teamcity/index.html" target="_blank"&gt;TeamCity&lt;/a&gt; to use &lt;a href="http://www.microsoft.com/sqlserver/" target="_blank"&gt;SQL Server&lt;/a&gt; as a main configuration repository.&lt;/p&gt;  &lt;h4&gt;Source control system&lt;/h4&gt;  &lt;p&gt;I currently use Subversion as my source control system. I like the fact that I can work on my files (see diffs for example) even when I’m not connected to my source control server. This is a huge advantage for notebook users in my opinion. &lt;/p&gt;  &lt;p&gt;I currently use &lt;a href="http://www.visualsvn.com/server/" target="_blank"&gt;VisualSVN Server&lt;/a&gt;. It comes with a VisualSVN Server Manager (snap-in to the Microsoft Management Console) where you can very easily configure your source server. You don’t need to tweak authz file any more. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Development environment&lt;/h4&gt;  &lt;p&gt;I don’t want to spend too much time in this section because it would make this post way too long. Let me just note that my primary IDE is &lt;a href="http://www.microsoft.com/visualstudio/" target="_blank"&gt;Microsoft Visual Studio&lt;/a&gt; with &lt;a href="http://www.jetbrains.com/resharper/" target="_blank"&gt;JetBrains ReSharper plugin&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;As a unit test framework I use &lt;a href="http://www.codeplex.com/xunit" target="_blank"&gt;xUnit.net&lt;/a&gt; with &lt;a href="http://xunitcontrib.codeplex.com/" target="_blank"&gt;xUnit.net Contrib&lt;/a&gt; integration to ReSharper. Why do I use xUnit.net and not &lt;a href="http://www.nunit.org/" target="_blank"&gt;NUnit&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/MSTest" target="_blank"&gt;MSTest&lt;/a&gt;? The answer is best described by &lt;a href="http://jamesnewkirk.typepad.com" target="_blank"&gt;Jim Newkirk&lt;/a&gt; at &lt;a href="http://xunit.codeplex.com/Wiki/View.aspx?title=WhyDidWeBuildXunit&amp;amp;referringTitle=Home" target="_blank"&gt;Why did we build xUnit&lt;/a&gt;. I like the fact that the framework is very simple. It has a limited number of custom attributes and it’s reasonably fast. Assert methods are generic based which makes the code more precise. I also like the fact that each test is run in it’s own test class instance and therefore it improves individual test isolation. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; My biggest complaint about MSTest was the fact that it was only available in a special suite of Visual Studio. With Visual Studio 2008, MSTest is now part of Professional version of Visual Studio. I think that it is still not enough. Unit testing is such a basic requirement that it should be part of the platform (.NET Framework) or it’s SDK. I should be forced to buy Visual Studio to get MSTest binaries!&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Build scripts&lt;/h4&gt;  &lt;p&gt;I am a long time &lt;a href="http://nant.sourceforge.net/" target="_blank"&gt;NAnt&lt;/a&gt; user. I have a library of snippets I use for my build scripts. I have even created a set of &lt;a href="http://www.codesmithtools.com/" target="_blank"&gt;CodeSmith&lt;/a&gt; templates that help me generate the basic NAnt scripts.&lt;/p&gt;  &lt;p&gt;Even though I like NAnt a lot, I am slowly moving away toward &lt;a href="http://en.wikipedia.org/wiki/MSBuild" target="_blank"&gt;MSBuild&lt;/a&gt; based scripts. Most of my new development is based on MSBuild scripts. Why? I like the fact that Visual Studio shares the same project configuration as my build system.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Continuous integration &amp;amp; Build system&lt;/h4&gt;  &lt;p&gt;I prefer spending my time coding rather than tweaking XML files to configure my environment. That’s why I decided to use &lt;a href="http://www.jetbrains.com/teamcity/" target="_blank"&gt;JetBrains TeamCity&lt;/a&gt;. TeamCity is continuous integration and build management system that is available for free for small teams (details are available at &lt;a href="http://www.jetbrains.com/teamcity/buy/index.jsp" target="_blank"&gt;JetBrains web&lt;/a&gt;). &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Configuration repository&lt;/h4&gt;  &lt;p&gt;As a configuration repository I prefer Microsoft SQL Server database. For very small systems like stand-alone development on a notebook I would stay with &lt;a href="http://hsqldb.org/" target="_blank"&gt;HSQLDB&lt;/a&gt; which is the default configuration repository in TeamCity. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Installation and Configuration&lt;/h4&gt;  &lt;p&gt;First I install Microsoft .NET Framework, Microsoft SQL Server 2008 and Microsoft Visual Studio 2008. After that I install JetBrains ReSharper and xUnit.net. The last component to install is JetBrains TeamCity. Read my next blog post about &lt;a href="http://blog.pokluda.com/post/Configuring-TeamCity-with-SQLServer.aspx" target="_blank"&gt;configuring TeamCity with SQL Server&lt;/a&gt;.&lt;/p&gt;</description>
      <link>http://blog.pokluda.com/post/Configuring-development-environment.aspx</link>
      <comments>http://blog.pokluda.com/post/Configuring-development-environment.aspx#comment</comments>
      <guid>http://blog.pokluda.com/post.aspx?id=a038be74-a616-47f7-9794-92b243bf974a</guid>
      <pubDate>Tue, 31 Mar 2009 11:27:36 +1100</pubDate>
      <category>Coding</category>
      <dc:publisher>dpokluda</dc:publisher>
      <pingback:server>http://blog.pokluda.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.pokluda.com/post.aspx?id=a038be74-a616-47f7-9794-92b243bf974a</pingback:target>
      <slash:comments>467</slash:comments>
      <trackback:ping>http://blog.pokluda.com/trackback.axd?id=a038be74-a616-47f7-9794-92b243bf974a</trackback:ping>
      <wfw:comment>http://blog.pokluda.com/post/Configuring-development-environment.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.pokluda.com/syndication.axd?post=a038be74-a616-47f7-9794-92b243bf974a</wfw:commentRss>
    </item>
    <item>
      <title>Automating installations with PowerShell script</title>
      <description>&lt;p&gt;I am currently testing Windows 7 and therefore I am deploying various builds quite frequently. This is nice because you have a chance to see the product evolving and at the same time you have a chance to send feedback to the product team. On the other hand installing OS frequently means to install all the other applications very often. I have created various &lt;a href="http://en.wikipedia.org/wiki/Windows_PowerShell" target="_blank"&gt;PowerShell&lt;/a&gt; scripts to simplify the deployment process. Today I will try to describe my install-folder script. &lt;/p&gt;  &lt;p&gt;The basic idea of the script is this. I want to put all my installations into a folder and then run the script against this folder. The script will enumerate over all the files in that folder and “run the installation” for each of them. The problem here is that some installations are delivered as &lt;a href="http://en.wikipedia.org/wiki/Windows_Installer" target="_blank"&gt;MSI&lt;/a&gt; files, some are &lt;a href="http://en.wikipedia.org/wiki/EXE" target="_blank"&gt;EXE&lt;/a&gt; files (not build using Windows Installer) and some are &lt;a href="http://en.wikipedia.org/wiki/ISO_image" target="_blank"&gt;ISO&lt;/a&gt; files (those downloaded from &lt;a href="http://msdn.microsoft.com/en-us/default.aspx" target="_blank"&gt;MSDN&lt;/a&gt; usually). &lt;/p&gt;  &lt;h4&gt;MSI File Installation&lt;/h4&gt;  &lt;p&gt;To install an MSI file you run &lt;strong&gt;msiexec&lt;/strong&gt; with &lt;strong&gt;/i msiFileName&lt;/strong&gt;. If you want to run the installation automatically then add also &lt;strong&gt;/passive&lt;/strong&gt;. If you want to prevent Windows Installer from automatically restarting your machine then use &lt;strong&gt;/norestart&lt;/strong&gt;. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Note: &lt;/strong&gt;When you need to troubleshoot MSI installation, it might be a good idea to turn on verbose logging in Windows Installer. To turn the logging on use &lt;strong&gt;/l*v logFilePath&lt;/strong&gt; parameter. More information about this topic can be found at: &lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://robmensching.com/blog/" target="_blank"&gt;&lt;em&gt;Rob Mensching&lt;/em&gt;&lt;/a&gt;&lt;em&gt; on &lt;/em&gt;&lt;a href="http://robmensching.com/blog/posts/2009/3/6/More-on-Haacks-Troubleshooting-Windows-MSI-Installers" target="_blank"&gt;&lt;em&gt;Troubleshooting Windows MSI Installers&lt;/em&gt;&lt;/a&gt;&lt;em&gt; (reply to Phil Haacks post on the same topic)&lt;/em&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://haacked.com/" target="_blank"&gt;&lt;em&gt;Phil Haack&lt;/em&gt;&lt;/a&gt;&lt;em&gt; on &lt;/em&gt;&lt;a href="http://haacked.com/archive/2009/03/05/troubleshooting-installers.aspx" target="_blank"&gt;&lt;em&gt;Troubleshooting Windows MSI Installers&lt;/em&gt;&lt;/a&gt;&lt;em&gt; (in particular troubleshooting ASP.NET MVC RC2 installation)&lt;/em&gt; &lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;h4&gt;EXE File Installation&lt;/h4&gt;  &lt;p&gt;This one is tricky. If it is EXE created using Windows Installer then you might be able to use some of the Windows Installer parameters. On the other hand many other installers are available (like &lt;a href="http://www.jrsoftware.org/isinfo.php" target="_blank"&gt;InnoSetup&lt;/a&gt;, &lt;a href="http://nsis.sourceforge.net/Main_Page" target="_blank"&gt;Nullsoft Install System&lt;/a&gt;, etc.) and the parameters for these are different. That’s why when installing EXE I usually just invoke the EXE file. &lt;/p&gt;  &lt;h4&gt;ISO File Installation&lt;/h4&gt;  &lt;p&gt;ISO file installation is the most difficult because in the OS there is no direct support for these files. There are various utilities available for this purpose (&lt;a href="http://www.slysoft.com/en/virtual-clonedrive.html" target="_blank"&gt;SlySoft Virtual CloneDrive&lt;/a&gt;, &lt;a href="http://www.daemon-tools.cc/home" target="_blank"&gt;Daemon Tools&lt;/a&gt;, &lt;a href="http://download.microsoft.com/download/7/b/6/7b6abd84-7841-4978-96f5-bd58df02efa2/winxpvirtualcdcontrolpanel_21.exe" target="_blank"&gt;Microsoft Virtual CD-ROM&lt;/a&gt;, etc.). I have decided to use &lt;a href="http://www.slysoft.com/en/" target="_blank"&gt;SlySoft&lt;/a&gt; solution because I have had a really good experience with their other tools like &lt;a href="http://www.slysoft.com/en/anydvd.html" target="_blank"&gt;AnyDVD&lt;/a&gt; (this is an awesome tool if you are dealing with DVDs from different regions for example). After you install the tool you can mount an ISO image by calling &lt;strong&gt;VCDMount.exe isoFilePath&lt;/strong&gt;. To unmount the current ISO image execute &lt;strong&gt;VCDMount.exe /u&lt;/strong&gt;. &lt;/p&gt;  &lt;h4&gt;InstallFile function&lt;/h4&gt;  &lt;p&gt;So to install the files from a folder we need to enumerate over all files in that folder and for each of these files execute &lt;strong&gt;InstallFile&lt;/strong&gt; function: &lt;/p&gt;  &lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;    function InstallFile($file)
    {
        if ($file.EndsWith(&amp;quot;.msi&amp;quot;))
        {
            execute-command -wait -command msiexec -parameters &amp;quot;/i $file /passive /norestart&amp;quot;
        }
        elseif ($file.EndsWith(&amp;quot;.exe&amp;quot;))
        {
            execute-command -wait -command &amp;quot;$file&amp;quot;
        }
        elseif ($file.EndsWith(&amp;quot;.iso&amp;quot;))
        {
            execute-command -command &amp;quot;$programFiles32\Elaborate Bytes\VirtualCloneDrive\VCDMount.exe&amp;quot; -parameters &amp;quot;/u&amp;quot;
            execute-command -command &amp;quot;$programFiles32\Elaborate Bytes\VirtualCloneDrive\VCDMount.exe&amp;quot; -parameters &amp;quot;$file&amp;quot;
            Pause &amp;quot;`tPress any key when finished with this installation.&amp;quot;
            execute-command -command &amp;quot;$programFiles32\Elaborate Bytes\VirtualCloneDrive\VCDMount.exe&amp;quot; -parameters &amp;quot;/u&amp;quot;
        }
    }&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;This function references some of my other scripts/functions. First of all it uses &lt;strong&gt;execute-command&lt;/strong&gt; script. The core of that script is the following: &lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;param([string] $command = $(throw &amp;quot;Missing: command parameter&amp;quot;), [string[]] $parameters, [switch] $wait, [switch] $cmd)

#Main
    if ($cmd.IsPresent)
    {
        cmd /C $command $parameters
    }
    else
    {
        $process = [Diagnostics.Process]::Start($command, $parameters); 
        if ($wait.IsPresent)
        {
            $process.WaitForExit();
        }
    }&lt;/pre&gt;

&lt;p&gt;Save this script as &lt;strong&gt;execute-command.ps1&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The only extra thing we have in our &lt;strong&gt;InstallFile&lt;/strong&gt; folder is reference to &lt;strong&gt;$programFiles32&lt;/strong&gt; folder. This is initialized in my profile script (which I will describe in one of the latter posts). For now I will just define the variables: &lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;    #Define ProgramFiles* variables
    $is64 = $(if([IntPtr]::Size -eq 8) { $true } else { $false })
    if ($is64)
    {
        $programFiles32 =  $(get-item &amp;quot;env:ProgramFiles(x86)&amp;quot;).Value
        $programFiles64 = $env:ProgramFiles
    }
    else
    {
        $programFiles32 = $env:ProgramFiles
        $programFiles64 = $env:ProgramFiles
    }&lt;/pre&gt;

&lt;h4&gt;InstallFolder function&lt;/h4&gt;

&lt;p&gt;Now we have all we need to implement our main &lt;strong&gt;InstallFolder&lt;/strong&gt; function: &lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;    function InstallFolder($folder)
    {
        $files = get-childitem $folder -recurse -force
        foreach($file in $files)
        {
            if ($file -eq $null)
            {
                continue
            }
            $answer = Ask &amp;quot;Do you want to install $($file.FullName)? (y or n)?&amp;quot; &amp;quot;y&amp;quot;
            if ($answer -ne &amp;quot;y&amp;quot;) { continue } 
            set-color &amp;quot;yellow&amp;quot;
            write-host &amp;quot;`tInstalling $file...&amp;quot;
            set-color
            InstallFile $($file.FullName)
        }
    }&lt;/pre&gt;

&lt;p&gt;In this function I am using two additional functions. Function &lt;strong&gt;set-color&lt;/strong&gt; (is defined in profile script) and &lt;strong&gt;Ask&lt;/strong&gt; function. &lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;    function Ask($text, $default)
    {
        $answer = $(read-host &amp;quot;$text [default: $default]&amp;quot;)
        if ($answer -eq &amp;quot;&amp;quot;) { $answer = $default }
        return $answer
    }

    function Set-Color([string] $color)
    {
        if ($color -eq &amp;quot;&amp;quot;)
        {
            # $myDefaultColor initialized in profile script to [Console]::ForeGroundColor
            $color = $myDefaultColor
        }
        $host.UI.RawUI.ForeGroundColor = $color
    }&lt;/pre&gt;

&lt;h4&gt;Final Install-Folder script code&lt;/h4&gt;

&lt;p&gt;With all these we can now create the &lt;strong&gt;install-folder.ps1&lt;/strong&gt; script: &lt;/p&gt;

&lt;pre class="brush: powershell; auto-links: true; collapse: false; first-line: 1; gutter: false; html-script: false; light: true; ruler: false; smart-tabs: false; tab-size: 4; toolbar: true;"&gt;param([string] $path = $(throw &amp;quot;Missing: path parameter&amp;quot;), )

#Internals
    function Ask($text, $default)
    {
        $answer = $(read-host &amp;quot;$text [default: $default]&amp;quot;)
        if ($answer -eq &amp;quot;&amp;quot;) { $answer = $default }
        return $answer
    }

    function Set-Color([string] $color)
    {
        if ($color -eq &amp;quot;&amp;quot;)
        {
            # $myDefaultColor initialized in profile script to [Console]::ForeGroundColor
            $color = $myDefaultColor
        }
        $host.UI.RawUI.ForeGroundColor = $color
    }

    function InstallFolder($folder)
    {
        $files = get-childitem $folder -recurse -force
        foreach($file in $files)
        {
            if ($file -eq $null)
            {
                continue
            }
            $answer = Ask &amp;quot;Do you want to install $($file.FullName)? (y or n)?&amp;quot; &amp;quot;y&amp;quot;
            if ($answer -ne &amp;quot;y&amp;quot;) { continue } 
            set-color &amp;quot;yellow&amp;quot;
            write-host &amp;quot;`tInstalling $file...&amp;quot;
            set-color
            InstallFile $($file.FullName)
        }
    }
    
    function InstallFile($file)
    {
        if ($file.EndsWith(&amp;quot;.msi&amp;quot;))
        {
            execute-command -wait -command msiexec -parameters &amp;quot;/i $file /passive /norestart&amp;quot;
        }
        elseif ($file.EndsWith(&amp;quot;.exe&amp;quot;))
        {
            execute-command -wait -command &amp;quot;$file&amp;quot;
        }
        elseif ($file.EndsWith(&amp;quot;.iso&amp;quot;))
        {
            execute-command -command &amp;quot;$programFiles32\Elaborate Bytes\VirtualCloneDrive\VCDMount.exe&amp;quot; -parameters &amp;quot;/u&amp;quot;
            execute-command -command &amp;quot;$programFiles32\Elaborate Bytes\VirtualCloneDrive\VCDMount.exe&amp;quot; -parameters &amp;quot;$file&amp;quot;
            Pause &amp;quot;`tPress any key when finished with this installation.&amp;quot;
            execute-command -command &amp;quot;$programFiles32\Elaborate Bytes\VirtualCloneDrive\VCDMount.exe&amp;quot; -parameters &amp;quot;/u&amp;quot;
        }
    }

#Main
    #Define ProgramFiles* variables
    $is64 = $(if([IntPtr]::Size -eq 8) { $true } else { $false })
    if ($is64)
    {
        $programFiles32 =  $(get-item &amp;quot;env:ProgramFiles(x86)&amp;quot;).Value
        $programFiles64 = $env:ProgramFiles
    }
    else
    {
        $programFiles32 = $env:ProgramFiles
        $programFiles64 = $env:ProgramFiles
    }

    write-host &amp;quot;Installing $path...&amp;quot;
    InstallFolder $path&lt;/pre&gt;

&lt;p&gt;This is just one of my scripts that I use daily. I will describe more of them in later posts. &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Attachments:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://blog.pokluda.com/file.axd?file=execute-command.ps1" target="_blank"&gt;execute-command.ps1&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blog.pokluda.com/file.axd?file=install-folder.ps1" target="_blank"&gt;install-folder.ps1&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;</description>
      <link>http://blog.pokluda.com/post/Automating-installations-with-PowerShell-script.aspx</link>
      <comments>http://blog.pokluda.com/post/Automating-installations-with-PowerShell-script.aspx#comment</comments>
      <guid>http://blog.pokluda.com/post.aspx?id=138f5522-99a6-4b0a-8822-0689438b2bc8</guid>
      <pubDate>Wed, 18 Mar 2009 04:05:00 +1100</pubDate>
      <category>PowerShell</category>
      <dc:publisher>dpokluda</dc:publisher>
      <pingback:server>http://blog.pokluda.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.pokluda.com/post.aspx?id=138f5522-99a6-4b0a-8822-0689438b2bc8</pingback:target>
      <slash:comments>709</slash:comments>
      <trackback:ping>http://blog.pokluda.com/trackback.axd?id=138f5522-99a6-4b0a-8822-0689438b2bc8</trackback:ping>
      <wfw:comment>http://blog.pokluda.com/post/Automating-installations-with-PowerShell-script.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.pokluda.com/syndication.axd?post=138f5522-99a6-4b0a-8822-0689438b2bc8</wfw:commentRss>
    </item>
    <item>
      <title>Connecting to SharePoint embedded database</title>
      <description>&lt;p&gt;As a new member in Windows SharePoint team I am trying to learn as much as possible. I have installed SharePoint (WSS) version 3.0 on my home computer. I wanted to see what is the database schema in SharePoint. Since I had SQL Server 2008 installed on my machine I started SQL Server Management Studio. &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Connecting to SharePoint SSEE database" border="0" alt="Connecting to SharePoint SSEE database" src="/Blog/image.axd?picture=ConnectingToSharePointDb_SimpleConnString.png" width="337" height="250" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;But when I click Connect I only get the following error: &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="ConnectingToSharePointDb_Error" border="0" alt="ConnectingToSharePointDb_Error" src="/Blog/image.axd?picture=ConnectingToSharePointDb_Error.png" width="493" height="154" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Bummer. After a while of searching on Internet I found the following &lt;a href="http://en.wikipedia.org" target="_blank"&gt;Wikipedia&lt;/a&gt; article - &lt;a href="http://en.wikipedia.org/wiki/Windows_Internal_Database" target="_blank"&gt;Windows Internal Database&lt;/a&gt;. Let me quote some of the text from the article: &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Windows Internal Database (codenamed WYukon, sometimes referred to as SQL Server Embedded Edition) is a variant of &lt;a href="http://en.wikipedia.org/wiki/SQL_Server_Express" target="_blank"&gt;SQL Server Express&lt;/a&gt; 2005 that is included with &lt;a href="http://en.wikipedia.org/wiki/Windows_Server_2008" target="_blank"&gt;Windows Server 2008&lt;/a&gt;, and is included with other free &lt;a href="http://en.wikipedia.org/wiki/Microsoft" target="_blank"&gt;Microsoft&lt;/a&gt; products released after 2007 that require an SQL Server database backend. &lt;a href="http://en.wikipedia.org/wiki/Windows_SharePoint_Services" target="_blank"&gt;Windows SharePoint Services&lt;/a&gt; 3.0 and &lt;a href="http://en.wikipedia.org/wiki/Windows_Server_Update_Services" target="_blank"&gt;Windows Server Update Services&lt;/a&gt; 3.0 both include Windows Internal Database, which can be used as an alternative to using a retail edition of SQL Server. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Ok, now I know that I am not connecting to a SQL Server database but instead to Windows Internal database. How do I do that? Again &lt;a href="http://en.wikipedia.org" target="_blank"&gt;Wikipedia&lt;/a&gt; has the answer: &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/SQL_Server_Management_Studio_Express" target="_blank"&gt;SQL Server Management Studio Express&lt;/a&gt; can be used to connect to an instance of Windows Internal Database using \\.\pipe\mssql$microsoft##ssee\sql\query as server name. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;That means, that I should be able to connect even from SQL Server 2008 Management Studio. &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="ConnectingToSharePointDb_EmbeddedPipeString" border="0" alt="ConnectingToSharePointDb_EmbeddedPipeString" src="/Blog/image.axd?picture=ConnectingToSharePointDb_EmbeddedPipeString.png" width="337" height="250" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;That did the trick. I have now SQL Server Management Studio fully connected to the content database and I can execute queries against the database (I can use the same connection with SQL Profiler).&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="ConnectingToSharePointDb_Connected" border="0" alt="ConnectingToSharePointDb_Connected" src="/Blog/image.axd?picture=ConnectingToSharePointDb_Connected.png" width="382" height="343" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;More information can be found at: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;&lt;a href="http://support.microsoft.com/kb/920277" target="_blank"&gt;Windows Internal Database is not listed in the Add or Remove Programs tool …&lt;/a&gt;&lt;/em&gt;&lt;em&gt; from Microsoft Support &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Windows_Internal_Database" target="_blank"&gt;Windows Internal Database&lt;/a&gt;&lt;/em&gt;&lt;em&gt; from Wikipedia &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;a href="http://www.mssqltips.com/tip.asp?tip=1577" target="_blank"&gt;Administering your Windows Internal Database instance&lt;/a&gt;&lt;/em&gt;&lt;em&gt; from MSSQLTips &lt;/em&gt;&lt;/li&gt; &lt;/ul&gt;</description>
      <link>http://blog.pokluda.com/post/Connecting-to-SharePoint-embedded-database.aspx</link>
      <comments>http://blog.pokluda.com/post/Connecting-to-SharePoint-embedded-database.aspx#comment</comments>
      <guid>http://blog.pokluda.com/post.aspx?id=8a4be50e-45ae-4c29-837b-f2c75c0a98b4</guid>
      <pubDate>Tue, 10 Mar 2009 14:01:00 +1100</pubDate>
      <category>SharePoint</category>
      <dc:publisher>dpokluda</dc:publisher>
      <pingback:server>http://blog.pokluda.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.pokluda.com/post.aspx?id=8a4be50e-45ae-4c29-837b-f2c75c0a98b4</pingback:target>
      <slash:comments>973</slash:comments>
      <trackback:ping>http://blog.pokluda.com/trackback.axd?id=8a4be50e-45ae-4c29-837b-f2c75c0a98b4</trackback:ping>
      <wfw:comment>http://blog.pokluda.com/post/Connecting-to-SharePoint-embedded-database.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.pokluda.com/syndication.axd?post=8a4be50e-45ae-4c29-837b-f2c75c0a98b4</wfw:commentRss>
    </item>
    <item>
      <title>Windows SharePoint Services</title>
      <description>&lt;p&gt;Ok, it’s not even a month since my first post on this blog and things are different already. I have changed teams and now I work in &lt;a href="http://office.microsoft.com/en-us/sharepointserver/default.aspx" target="_blank"&gt;SharePoint Server&lt;/a&gt; organization, in particular in &lt;a href="http://office.microsoft.com/en-us/sharepointtechnology/default.aspx" target="_blank"&gt;Windows SharePoint Services&lt;/a&gt; Storage and Perf team. Since I am new to the team I cannot say for sure what is my primary feature but I hope I will find out soon. &lt;/p&gt;  &lt;p&gt;I’m now also on &lt;a href="http://www.twitter.com/home" target="_blank"&gt;Twitter&lt;/a&gt;, you can &lt;a href="http://www.twitter.com/dpokluda" target="_blank"&gt;follow me&lt;/a&gt;. I have also added a special side bar with my latest updates from &lt;a href="http://www.twitter.com/home" target="_blank"&gt;Twitter&lt;/a&gt;. &lt;/p&gt;</description>
      <link>http://blog.pokluda.com/post/Windows-SharePoint-Services.aspx</link>
      <comments>http://blog.pokluda.com/post/Windows-SharePoint-Services.aspx#comment</comments>
      <guid>http://blog.pokluda.com/post.aspx?id=2ca41f1a-3c05-4255-9e9d-9dc8339340f3</guid>
      <pubDate>Fri, 06 Mar 2009 17:30:00 +1100</pubDate>
      <category>Blog</category>
      <dc:publisher>dpokluda</dc:publisher>
      <pingback:server>http://blog.pokluda.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.pokluda.com/post.aspx?id=2ca41f1a-3c05-4255-9e9d-9dc8339340f3</pingback:target>
      <slash:comments>432</slash:comments>
      <trackback:ping>http://blog.pokluda.com/trackback.axd?id=2ca41f1a-3c05-4255-9e9d-9dc8339340f3</trackback:ping>
      <wfw:comment>http://blog.pokluda.com/post/Windows-SharePoint-Services.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.pokluda.com/syndication.axd?post=2ca41f1a-3c05-4255-9e9d-9dc8339340f3</wfw:commentRss>
    </item>
  </channel>
</rss>