<?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:dc="http://purl.org/dc/elements/1.1/" 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Geekswithblogs.net</title><link>http://geekswithblogs.net/mainfeed.aspx</link><description>Geekswithblogs.net</description><generator>Subtext Version 0.0.0.0</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/geekswithblogs" /><feedburner:info uri="geekswithblogs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Get Detailed Build Test Results using the TFS API</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/_CrL_WrNr38/get-detailed-build-test-results-using-the-tfs-api.aspx</link><pubDate>Wed, 16 May 2012 21:37:00 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/TarunArora/archive/2012/05/16/get-detailed-build-test-results-using-the-tfs-api.aspx</guid><wfw:comment>http://geekswithblogs.net/TarunArora/comments/149669.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/TarunArora/comments/commentRss/149669.aspx</wfw:commentRss><comments>http://geekswithblogs.net/TarunArora/archive/2012/05/16/get-detailed-build-test-results-using-the-tfs-api.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/TarunArora/services/trackbacks/149669.aspx</trackback:ping><source url="http://geekswithblogs.net/TarunArora/rss.aspx">Get Detailed Build Test Results using the TFS API</source><description>&lt;p&gt; &lt;/p&gt;  &lt;p&gt;It’s a Friday evening and you have just checked in that last bit of code, you are waiting for the build to go all green so that you could call it a day. Just then the build summary page comes back red on the test results section. The build summary page tells you that 1 of the test namely &lt;em&gt;HelloWorld.Tests.UnitTest1.Sum_TwoIntNumbers_IncorrectResult_TestMethod&lt;/em&gt; has failed… &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/TarunArora/WindowsLiveWriter/GetDetailedBuildTestResultsusingtheTFSAP_6C6/image_6.png"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/TarunArora/WindowsLiveWriter/GetDetailedBuildTestResultsusingtheTFSAP_6C6/image_thumb_2.png" width="477" height="390" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To know why the test has failed, you have no option but to click on &lt;em&gt;&lt;font color="#0000ff"&gt;View Test Results&lt;/font&gt;&lt;/em&gt; link which in turn downloads the trx file from the server so that you can see the error message and possibly identify the root cause of failure from the description error message. If the test list contains more than a 1000 tests you will notice that it takes a lot of time in downloading the test results locally. That’s probably not what you would want to do on a Friday evening… &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/TarunArora/WindowsLiveWriter/GetDetailedBuildTestResultsusingtheTFSAP_6C6/image_10.png"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/TarunArora/WindowsLiveWriter/GetDetailedBuildTestResultsusingtheTFSAP_6C6/image_thumb_4.png" width="482" height="251" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In this blog post I’ll show you how to use the TFS API to write a simple utility to pull down the test result details programmatically and a bonus power tool for those who read the complete post, let’s get started… &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A peek at what we will get to…&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/TarunArora/WindowsLiveWriter/GetDetailedBuildTestResultsusingtheTFSAP_6C6/image_12.png"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/TarunArora/WindowsLiveWriter/GetDetailedBuildTestResultsusingtheTFSAP_6C6/image_thumb_5.png" width="692" height="308" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;1. Connecting to TFS using the API &lt;/h3&gt;  &lt;p&gt;If you are new to the TFS API, refer to this blog post on &lt;a href="http://geekswithblogs.net/TarunArora/archive/2011/06/18/tfs-2010-sdk-connecting-to-tfs-2010-programmaticallyndashpart-1.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;getting started with the Visual Studio SDK&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The below snippet will help present a connect to tfs pop up to the user&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; TfsTeamProjectCollection _tfs;
&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _selectedTeamProject;

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ConnectToTfs()
{
       TeamProjectPicker tfsPP = &lt;span class="kwrd"&gt;new&lt;/span&gt; TeamProjectPicker(TeamProjectPickerMode.SingleProject, &lt;span class="kwrd"&gt;false&lt;/span&gt;);
       tfsPP.ShowDialog();
       &lt;span class="kwrd"&gt;this&lt;/span&gt;._tfs = tfsPP.SelectedTeamProjectCollection;
       &lt;span class="kwrd"&gt;this&lt;/span&gt;._selectedTeamProject = tfsPP.SelectedProjects[0].Name;
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;2. Get All Build Definitions for the selected Team Project&lt;/h3&gt;

&lt;p&gt;By using the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.build.client.ibuildserver.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;IBuildService&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; you can get access to the QueryBuildDefinition method which takes team project and returns the build definitions associated to the team project.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; IBuildDefinition[] GetAllBuildDefinitionsFromTheTeamProject(_selectTeamProject)
{
      _bs = _tfs.GetService&amp;lt;IBuildServer&amp;gt;();
      &lt;span class="kwrd"&gt;return&lt;/span&gt; _bs.QueryBuildDefinitions(_selectedTeamProject);
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h3&gt;3. Get All Builds Associated to the Build Definition&lt;/h3&gt;

&lt;p&gt;Get All Builds in the build definition for specific build Definition specifications programmatically, this helps you narrow down the search and get the selected few filtered results, like in the snippet below, we specify the maximum number of builds to return, what build quality builds to return, etc.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// Get All Builds for the selected build definition &lt;/span&gt;
&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; cbBuildDef_SelectionChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, SelectionChangedEventArgs e)
{
       var bdef = (((ComboBox)sender).SelectedItem) &lt;span class="kwrd"&gt;as&lt;/span&gt; IBuildDefinition;
       var def = _bs.CreateBuildDetailSpec(_selectedTeamProject);
       def.MaxBuildsPerDefinition = 10;
       def.QueryOrder = BuildQueryOrder.FinishTimeDescending;
       def.DefinitionSpec.Name = bdef.Name;
       def.Status = BuildStatus.All;
       var builds = _bs.QueryBuilds(def).Builds;

        cbBuild.ItemsSource = _bs.QueryBuilds(def).Builds;
        cbBuild.DisplayMemberPath = &lt;span class="str"&gt;"BuildNumber"&lt;/span&gt;;
        cbBuild.SelectedValuePath = &lt;span class="str"&gt;"Uri"&lt;/span&gt;;
        cbBuild.SelectedIndex = 0;
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;4. Get all the Test Results associated to a Build&lt;/h3&gt;

&lt;p&gt;I’ll be using the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.testmanagement.client.itestmanagementservice.aspx"&gt;&lt;font color="#0000ff"&gt;ITestManagementService&lt;/font&gt;&lt;/a&gt; to pull all test runs associated to a build. As you can see below by using the QueryResultsByOutcome I can query for tests that passed or failed or tests that errored. You could also use the QueryResultsByOwner to get test results by individual tfs users.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetTestResult(Uri buildUri)
{
       _tms = _tfs.GetService&amp;lt;ITestManagementService&amp;gt;();
       var testRuns = _tms.GetTeamProject(_selectedTeamProject).TestRuns.ByBuild(buildUri);

        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var testRun &lt;span class="kwrd"&gt;in&lt;/span&gt; testRuns)
        {
             lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}"&lt;/span&gt;, testRun.Title));
             lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"TestRunId: {0} | TestPlanId: {1}"&lt;/span&gt;, testRun.Id, testRun.TestPlanId));
             lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"TestSettingsId: {0} | TestEnvironmentId {1} "&lt;/span&gt;, testRun.TestSettingsId, testRun.TestEnvironmentId));

             var totalTests = testRun.Statistics.TotalTests;

              &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var et &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Error))
              {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, et.Outcome, et.TestCaseTitle, et.ErrorMessage));
              }

              &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var tp &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Passed))
              {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} "&lt;/span&gt;, tp.Outcome, tp.TestCaseTitle));
               }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var tf &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Failed))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, tf.Outcome, tf.TestCaseTitle, tf.ErrorMessage));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var tw &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Warning))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, tw.Outcome, tw.TestCaseTitle, tw.ErrorMessage));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var ta &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Aborted))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, ta.Outcome, ta.TestCaseTitle, ta.ErrorMessage));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var tb &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Blocked))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, tb.Outcome, tb.TestCaseTitle, tb.ErrorMessage));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var ti &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Inconclusive))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, ti.Outcome, ti.TestCaseTitle, ti.ErrorMessage));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var to &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Timeout))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, to.Outcome, to.TestCaseTitle, to.ErrorMessage));
                }

                &lt;span class="rem"&gt;// Get the test results by user by passing in the Test Foundation Identity&lt;/span&gt;
                &lt;span class="rem"&gt;// testRun.QueryResultsByOwner(TeamFoundationIdentity);&lt;/span&gt;
            }

            &lt;span class="kwrd"&gt;if&lt;/span&gt;(testRuns.Count() == 0)
                lstTestRunDetails.Items.Add(&lt;span class="str"&gt;"No Test Results have been associated with the selected build"&lt;/span&gt;);
 }&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;5. Putting it all together&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://skydrive.live.com/?cid=61D0A67D27B527D3&amp;amp;id=61D0A67D27B527D3%21152#cid=61D0A67D27B527D3&amp;amp;id=61D0A67D27B527D3%21653"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Download the sample application&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; – wpf, .net 4, you need to have &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=2680"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;vs sdk&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; installed on your machine to run it. &lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Controls;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Documents;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Input;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Media;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Media.Imaging;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Navigation;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Shapes;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.TeamFoundation.Build.Client;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.TeamFoundation.Client;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.TeamFoundation.TestManagement.Client;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.TeamFoundation.VersionControl.Client;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; TfsApiGetTestResultsAndDetailsByStatus
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Interaction logic for MainWindow.xaml&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MainWindow : Window
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; MainWindow()
        {
            InitializeComponent();
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; TfsTeamProjectCollection _tfs;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _selectedTeamProject;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; IBuildServer _bs;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; VersionControlServer _vcs;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; ITestManagementService _tms;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ConnectToTfs()
        {
            TeamProjectPicker tfsPP = &lt;span class="kwrd"&gt;new&lt;/span&gt; TeamProjectPicker(TeamProjectPickerMode.SingleProject, &lt;span class="kwrd"&gt;false&lt;/span&gt;);
            tfsPP.ShowDialog();
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._tfs = tfsPP.SelectedTeamProjectCollection;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._selectedTeamProject = tfsPP.SelectedProjects[0].Name;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnConnect_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
        {
            ConnectToTfs();
            _vcs = _tfs.GetService&amp;lt;VersionControlServer&amp;gt;();
            cbBuildDef.ItemsSource = GetAllBuildDefinitionsFromTheTeamProject();
            cbBuildDef.DisplayMemberPath = &lt;span class="str"&gt;"Name"&lt;/span&gt;;
            cbBuildDef.SelectedValuePath = &lt;span class="str"&gt;"Uri"&lt;/span&gt;;
            cbBuildDef.SelectedIndex = 0;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; IBuildDefinition[] GetAllBuildDefinitionsFromTheTeamProject()
        {
            _bs = _tfs.GetService&amp;lt;IBuildServer&amp;gt;();
            &lt;span class="kwrd"&gt;return&lt;/span&gt; _bs.QueryBuildDefinitions(_selectedTeamProject);
        }

        &lt;span class="rem"&gt;// Get All Builds for the selected build definition &lt;/span&gt;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; cbBuildDef_SelectionChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, SelectionChangedEventArgs e)
        {
            var bdef = (((ComboBox)sender).SelectedItem) &lt;span class="kwrd"&gt;as&lt;/span&gt; IBuildDefinition;
            var def = _bs.CreateBuildDetailSpec(_selectedTeamProject);
            def.MaxBuildsPerDefinition = 10;
            def.QueryOrder = BuildQueryOrder.FinishTimeDescending;
            def.DefinitionSpec.Name = bdef.Name;
            def.Status = BuildStatus.All;
            var builds = _bs.QueryBuilds(def).Builds;

            cbBuild.ItemsSource = _bs.QueryBuilds(def).Builds;
            cbBuild.DisplayMemberPath = &lt;span class="str"&gt;"BuildNumber"&lt;/span&gt;;
            cbBuild.SelectedValuePath = &lt;span class="str"&gt;"Uri"&lt;/span&gt;;
            cbBuild.SelectedIndex = 0;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; cbBuild_SelectionChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, SelectionChangedEventArgs e)
        {
            var build = (((ComboBox)sender).SelectedItem) &lt;span class="kwrd"&gt;as&lt;/span&gt; IBuildDetail;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (build == &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; ((ComboBox)sender).Items.Count != 0)
            {
                build = ((ComboBox)sender).Items[0] &lt;span class="kwrd"&gt;as&lt;/span&gt; IBuildDetail;
                var def = _bs.CreateBuildDetailSpec(_selectedTeamProject);
                GetTestResult(build.Uri);
            }
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetTestResult(Uri buildUri)
        {
            _tms = _tfs.GetService&amp;lt;ITestManagementService&amp;gt;();
            var testRuns = _tms.GetTeamProject(_selectedTeamProject).TestRuns.ByBuild(buildUri);

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var testRun &lt;span class="kwrd"&gt;in&lt;/span&gt; testRuns)
            {
                lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}"&lt;/span&gt;, testRun.Title));
                lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"TestRunId: {0} | TestPlanId: {1}"&lt;/span&gt;, testRun.Id, testRun.TestPlanId));
                lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"TestSettingsId: {0} | TestEnvironmentId {1} "&lt;/span&gt;, testRun.TestSettingsId, testRun.TestEnvironmentId));

                var totalTests = testRun.Statistics.TotalTests;

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var et &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Error))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, et.Outcome, et.TestCaseTitle, et.ErrorMessage));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var tp &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Passed))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} "&lt;/span&gt;, tp.Outcome, tp.TestCaseTitle));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var tf &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Failed))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, tf.Outcome, tf.TestCaseTitle, tf.ErrorMessage));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var tw &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Warning))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, tw.Outcome, tw.TestCaseTitle, tw.ErrorMessage));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var ta &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Aborted))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, ta.Outcome, ta.TestCaseTitle, ta.ErrorMessage));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var tb &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Blocked))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, tb.Outcome, tb.TestCaseTitle, tb.ErrorMessage));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var ti &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Inconclusive))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, ti.Outcome, ti.TestCaseTitle, ti.ErrorMessage));
                }

                &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var to &lt;span class="kwrd"&gt;in&lt;/span&gt; testRun.QueryResultsByOutcome(TestOutcome.Timeout))
                {
                    lstTestRunDetails.Items.Add(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}: {1} - {2}"&lt;/span&gt;, to.Outcome, to.TestCaseTitle, to.ErrorMessage));
                }

                &lt;span class="rem"&gt;// Get the test results by user by passing in the Test Foundation Identity&lt;/span&gt;
                &lt;span class="rem"&gt;// testRun.QueryResultsByOwner(TeamFoundationIdentity);&lt;/span&gt;
            }

            &lt;span class="kwrd"&gt;if&lt;/span&gt;(testRuns.Count() == 0)
                lstTestRunDetails.Items.Add(&lt;span class="str"&gt;"No Test Results have been associated with the selected build"&lt;/span&gt;);
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;6. And the Bonus Power tool…&lt;/h3&gt;

&lt;p&gt;Thank you for reading this far. If you haven’t already download the Community TFS Build Manager extension from the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/16bafc63-0f20-4cc3-8b67-4e25d150102c"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;visual studio extension gallery&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; do so now. The Community TFS Build Manager (TBM) is an open source build management solution developed by the ALM rangers, the build manager simplifies the management of builds in medium to large Team Foundation Server environments. Some common limitations you may run into while dealing with builds through the Visual Studio Build Explorer are not being able to perform bulk operations on builds, create a relationship diagram of the build controller/agents, managing build process templates, etc. The community TFS build manager address that and many other such gaps you may encounter while managing builds through the visual studio build explorer. You can grab the source and read more about the project on &lt;a href="http://tfsbuildextensions.codeplex.com/"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;CodePlex&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Recently a new feature namely Build Notes has been added to the community TFS Build Manager that let’s you generate an ms word report of the build summary. A sample attached below… Look at the test result section, the trx file is parsed for you to get you a test result list filtered by test result outcome, where failed test also carries the error message. Watch this &lt;a href="http://www.youtube.com/watch?v=7jSP2NvuU8M&amp;amp;feature=player_embedded"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;video&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; or read this &lt;a href="http://geekswithblogs.net/TarunArora/archive/2012/04/27/community-tfs-build-manager-ndash-build-notes-preview.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;post&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; here on what you can achieve with the build notes. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/TarunArora/WindowsLiveWriter/CommunityTFSBuildManagerBuildNotes_8B3F/image_32.png"&gt;&lt;img title="image" border="0" alt="image" align="left" src="http://geekswithblogs.net/images/geekswithblogs_net/TarunArora/WindowsLiveWriter/CommunityTFSBuildManagerBuildNotes_8B3F/image_thumb_15.png" width="490" height="533" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; &lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/TarunArora/WindowsLiveWriter/CommunityTFSBuildManagerBuildNotes_8B3F/image_30.png"&gt;&lt;img title="image" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/TarunArora/WindowsLiveWriter/CommunityTFSBuildManagerBuildNotes_8B3F/image_thumb_14.png" width="487" height="471" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Thank you for taking the time out and reading this blog post. If you enjoyed the post, remember to subscribe to &lt;a href="http://feeds.feedburner.com/TarunArora"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://feeds.feedburner.com/TarunArora&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Check out the other posts on &lt;a href="http://geekswithblogs.net/TarunArora/category/12804.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;cool tools using TFS API&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;. &lt;img alt="In love" src="http://geekswithblogs.net/images/geekswithblogs_net/TarunArora/Windows-Live-Writer/TFS-APIRelease-Notes-From-Build_DFBA/wlEmoticon-Inlove_2.png" /&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/TarunArora/aggbug/149669.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/_CrL_WrNr38" height="1" width="1"/&gt;</description><dc:creator>Tarun Arora</dc:creator><feedburner:origLink>http://geekswithblogs.net/TarunArora/archive/2012/05/16/get-detailed-build-test-results-using-the-tfs-api.aspx</feedburner:origLink></item><item><title>SQL Server 2008 R2 setup fails on a Windows Virtual PC (VPC) with error code 2337</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/jJKwW6EPOXA/149668.aspx</link><pubDate>Wed, 16 May 2012 13:17:04 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/danielh/archive/2012/05/16/149668.aspx</guid><wfw:comment>http://geekswithblogs.net/danielh/comments/149668.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/danielh/comments/commentRss/149668.aspx</wfw:commentRss><comments>http://geekswithblogs.net/danielh/archive/2012/05/16/149668.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/danielh/services/trackbacks/149668.aspx</trackback:ping><source url="http://geekswithblogs.net/danielh/rss.aspx">SQL Server 2008 R2 setup fails on a Windows Virtual PC (VPC) with error code 2337</source><description>&lt;p&gt;When installing SQL Server 2008 R2 (Developer, Standard, or Enterprise) within a Virtual PC you may suffer the following problem:&lt;/p&gt;  &lt;p&gt;“The following error has occurred:  The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2337.”&lt;/p&gt;  &lt;p&gt;The error occurs in the following package: sql_engine_core_shared&lt;/p&gt;  &lt;p&gt;It turns out that this problem is with the DVD/ISO Mounting Feature in Windows Virtual PC.  To workaround the problem you need to expand the ISO with WinRAR – not WinZip and not by copying the contents of the mounted ISO to the VPC’s hard drive.  You need to use WinRAR to extract the ISO; extracting the contents of the ISO with anything else just won’t solve the problem.&lt;/p&gt;  &lt;p&gt;Microsoft have acknowledged the problem here:&lt;/p&gt;  &lt;p&gt;&lt;a title="https://connect.microsoft.com/SQLServer/feedback/details/550502/r2-rc0-install-problem-on-virtual-pc-2007" href="https://connect.microsoft.com/SQLServer/feedback/details/550502/r2-rc0-install-problem-on-virtual-pc-2007"&gt;https://connect.microsoft.com/SQLServer/feedback/details/550502/r2-rc0-install-problem-on-virtual-pc-2007&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;WinRAR can be found here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.win-rar.com/download.html" href="http://www.win-rar.com/download.html"&gt;http://www.win-rar.com/download.html&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/danielh/aggbug/149668.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/jJKwW6EPOXA" height="1" width="1"/&gt;</description><dc:creator>Daniel Hester</dc:creator><feedburner:origLink>http://geekswithblogs.net/danielh/archive/2012/05/16/149668.aspx</feedburner:origLink></item><item><title>Self Host Web Api's for Integration Testing</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/pGCE2Mnqb3c/self-host-web-apis-for-integration-testing.aspx</link><pubDate>Wed, 16 May 2012 09:27:52 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/jdothoffman/archive/2012/05/16/self-host-web-apis-for-integration-testing.aspx</guid><wfw:comment>http://geekswithblogs.net/jdothoffman/comments/149667.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/jdothoffman/comments/commentRss/149667.aspx</wfw:commentRss><comments>http://geekswithblogs.net/jdothoffman/archive/2012/05/16/self-host-web-apis-for-integration-testing.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/jdothoffman/services/trackbacks/149667.aspx</trackback:ping><source url="http://geekswithblogs.net/jdothoffman/rss.aspx">Self Host Web Api's for Integration Testing</source><description>&lt;p&gt;Recently I had a need to write some tests making Web Api calls that would be deployable to the build server without any special configuration.What I did was utilize the Self Hosting feature in the Asp.NetWebApi.  First, I created a simple Api controller .&lt;/p&gt;&lt;p&gt; &lt;/p&gt;
&lt;pre style="padding: 5px; border: 1px dashed rgb(153, 153, 153); width: 100%; color: rgb(0, 0, 0); line-height: 14px; overflow: auto; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; background-color: rgb(238, 238, 238);"&gt;&lt;p&gt;&lt;code&gt;// GET /api/values
    public class ValuesController : ApiController
    {
        public SomeObjects GetByName(string firstName, string lastName)
        {
            var someObjects= new List&amp;lt;SomeObject&amp;gt;()
                               {
                                    new SomeObject
                                    {
                                        FirstName = "Tom",
                                        LastName = "Jones",
                                        Id= 1213
                                    },
                                     new SomeObject
                                    {
                                        FirstName = "Jane",
                                        LastName = "Doe",
                                        Id= 1523
                                    },
                                     new SomeObject
                                    {
                                        FirstName = "John",
                                        LastName = "Doe",
                                        Id= 3123
                                    }
                               };

            return someObjects.Where(x =&amp;gt; x.FirstName == firstName &amp;amp;&amp;amp; x.LastName == lastName).SingleOrDefault();
        }
    }
&lt;/code&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;
&lt;br /&gt;

Next, I created a simple utility class to execute tests against the hosted service&lt;/p&gt;&lt;p&gt; &lt;/p&gt;
&lt;pre style="padding: 5px; border: 1px dashed rgb(153, 153, 153); width: 100%; color: rgb(0, 0, 0); line-height: 14px; overflow: auto; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; background-color: rgb(238, 238, 238);"&gt;&lt;code&gt;public static class TestHostingUtil
    {
        public static void ExecuteHostedTest(Action&amp;lt;Task&amp;gt; continuationAction, string routeTemplate = null)
        {
            var routeTempl = "api/{controller}/{id}";
            if (!string.IsNullOrEmpty(routeTemplate))
            {
                routeTempl = routeTemplate;
            }

            var serverConfig = new HttpSelfHostConfiguration("http://localhost:8080/");
            serverConfig.Routes.MapHttpRoute("default", routeTempl, new { id = RouteParameter.Optional, folder = "TestApiControllers" });

            var server = new HttpSelfHostServer(serverConfig);
            
            server.OpenAsync().ContinueWith(continuationAction).Wait();
            server.CloseAsync();
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;
&lt;br /&gt;Note the "folder" param in the HttpRoute registration. In the test project this is the folder under which I added the Api controllers, if they were not in a seperate folder you would leave this blank.&lt;/p&gt;&lt;p&gt;Finally, the usuage for your tests:&lt;/p&gt;
&lt;pre style="padding: 5px; border: 1px dashed rgb(153, 153, 153); width: 100%; color: rgb(0, 0, 0); line-height: 14px; overflow: auto; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; background-color: rgb(238, 238, 238);"&gt;&lt;code&gt;[TestMethod]
        public void Should_Perform_Get()
        {
            TestHostingUtil.ExecuteHostedTest(task =&amp;gt;
                                  {

                                      // Arrange
                                      var webUtil=
                                          new WebUtil
                                              &amp;lt;SomeObject, SomeObject&amp;gt;(
                                              "http://localhost:8080/api/values?firstName=Tom&amp;amp;lastName=Jones");

                                      // Act
                                      var result = webUtil.Get();

                                      // Assert
                                      result.FirstName.Should().Be("Tom");
                                  });
        }
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt; &lt;img src="http://geekswithblogs.net/jdothoffman/aggbug/149667.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/pGCE2Mnqb3c" height="1" width="1"/&gt;</description><dc:creator>Justin Hoffman</dc:creator><feedburner:origLink>http://geekswithblogs.net/jdothoffman/archive/2012/05/16/self-host-web-apis-for-integration-testing.aspx</feedburner:origLink></item><item><title>Microsoft Test Manager&amp;ndash;Test Cases Not in a Test Plan</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/RtfZ3nm7t3I/microsoft-test-managerndashtest-cases-not-in-a-test-plan.aspx</link><pubDate>Wed, 16 May 2012 06:21:13 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/BobHardister/archive/2012/05/16/microsoft-test-managerndashtest-cases-not-in-a-test-plan.aspx</guid><wfw:comment>http://geekswithblogs.net/BobHardister/comments/149666.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/BobHardister/comments/commentRss/149666.aspx</wfw:commentRss><comments>http://geekswithblogs.net/BobHardister/archive/2012/05/16/microsoft-test-managerndashtest-cases-not-in-a-test-plan.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/BobHardister/services/trackbacks/149666.aspx</trackback:ping><source url="http://geekswithblogs.net/BobHardister/rss.aspx">Microsoft Test Manager&amp;ndash;Test Cases Not in a Test Plan</source><description>&lt;p&gt;Visual Studio and Team Foundation Server (TFS) 2010 provided support for system testing. Test cases were added as a work item type. But test plans and suites are not work items and this greatly limits the visibility into the management of test artifacts.  For example, there is no easy way out-of-the-box to find test cases that don’t belong to a test plan.&lt;/p&gt;  &lt;p&gt;Here’s the SQL that creates a list of test cases providing the test case:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ID&lt;/li&gt;    &lt;li&gt;Title&lt;/li&gt;    &lt;li&gt;State&lt;/li&gt;    &lt;li&gt;Assigned To&lt;/li&gt;    &lt;li&gt;Area Path&lt;/li&gt;    &lt;li&gt;Iteration Path&lt;/li&gt;    &lt;li&gt;Plan and Suite Path&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can use the output to identify what test cases are in what plan and suite; and more to the point, which test cases are not in a plan.&lt;/p&gt;  &lt;p&gt;Using the &lt;a href="http://www.amrein.com/apps/page.asp?Q=5753" target="_blank"&gt;Amrein SQL Viewer Web Part&lt;/a&gt; you can easily throw this up as a web part on the project portal site where users can globally access, sort and filter the data.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="2"&gt;SELECT tco.System_Id as ID        &lt;br /&gt;,tco.System_Title as Title         &lt;br /&gt;,tco.System_State as State         &lt;br /&gt;,ISNULL(p.Name,'null') as Assigned         &lt;br /&gt;,tco.AreaPath as Area         &lt;br /&gt;,tco.IterationPath as Iteration         &lt;br /&gt;,ISNULL(s.SuitePath,'null') as 'Plan'         &lt;br /&gt;FROM Tfs_01Warehouse.dbo.vDimTestCaseOverlay tco inner join Tfs_01Warehouse.dbo.DimPerson p         &lt;br /&gt;ON tco.System_AssignedTo__PersonSK=p.PersonSK left outer join Tfs_{&lt;em&gt;collection DB&lt;/em&gt;}.dbo.tbl_SuiteEntry se ON tco.System_Id=se.TestCaseId left outer join Tfs_01Warehouse.dbo.vDimTestSuiteOverlay s         &lt;br /&gt;ON se.SuiteId=s.TestSuiteID         &lt;br /&gt;WHERE tco.TeamProjectSK={#} /* team project */        &lt;br /&gt;ORDER BY tco.System_Id DESC &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;img src="http://geekswithblogs.net/BobHardister/aggbug/149666.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/RtfZ3nm7t3I" height="1" width="1"/&gt;</description><dc:creator>Bob Hardister</dc:creator><feedburner:origLink>http://geekswithblogs.net/BobHardister/archive/2012/05/16/microsoft-test-managerndashtest-cases-not-in-a-test-plan.aspx</feedburner:origLink></item><item><title>Mobile responsive site design in Expression Web</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/u5X76GDw9Qg/mobile-responsive-site-design-in-expression-web.aspx</link><pubDate>Wed, 16 May 2012 08:35:12 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/ihaynes/archive/2012/05/15/mobile-responsive-site-design-in-expression-web.aspx</guid><wfw:comment>http://geekswithblogs.net/ihaynes/comments/149665.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/ihaynes/comments/commentRss/149665.aspx</wfw:commentRss><comments>http://geekswithblogs.net/ihaynes/archive/2012/05/15/mobile-responsive-site-design-in-expression-web.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/ihaynes/services/trackbacks/149665.aspx</trackback:ping><source url="http://geekswithblogs.net/ihaynes/rss.aspx">Mobile responsive site design in Expression Web</source><description>&lt;p style="margin: 0pt 0pt 10pt;" class="MsoNormal"&gt;&lt;font size="2"&gt;&lt;font face="Tahoma"&gt;&lt;span style="color: black; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-weight: bold;"&gt;Although it doesn’t have any
specific tools to help responsive or mobile site design this is still possible in
Expression Web and &lt;/span&gt;&lt;span style="color: black; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-weight: bold;"&gt;I’ve created a number of
snippets to help the process.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font size="2" face="Tahoma"&gt;

&lt;/font&gt;&lt;p style="margin: 0pt 0pt 10pt;" class="MsoNormal"&gt;&lt;span style="color: black; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-weight: bold;"&gt;&lt;font size="2"&gt;&lt;font face="Tahoma"&gt;HTML5 and CSS3 are the key
to responsive design, so the snippets cover the new HTML5 layout elements, form
input types and microdata tags, and the CSS3 snippets cover box-radius,
box-shadow, gradients etc. The mobile snippets include the CSS3 media queries,
mobile meta tags and the responsd.js shim that enables older non-HTML5/CSS3
browsers to use the media queries.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;font size="2" face="Tahoma"&gt;

&lt;/font&gt;&lt;p style="margin: 0pt 0pt 10pt;" class="MsoNormal"&gt;&lt;span style="color: black; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-weight: bold;"&gt;&lt;font size="2"&gt;&lt;font face="Tahoma"&gt;The snippets are downloadable
from the Expression Gallery:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;font size="2" face="Tahoma"&gt;

&lt;/font&gt;&lt;p style="margin: 0pt 0pt 10pt;" class="MsoNormal"&gt;&lt;span style="color: black; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-weight: bold;"&gt;&lt;a href="http://gallery.expression.microsoft.com/HTML5Snippets" target="_blank"&gt;&lt;font color="#0000ff" size="2" face="Tahoma"&gt;http://gallery.expression.microsoft.com/HTML5Snippets&lt;/font&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;font size="2" face="Tahoma"&gt;

&lt;/font&gt;&lt;p style="margin: 0pt 0pt 10pt;" class="MsoNormal"&gt;&lt;span style="color: black; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-weight: bold;"&gt;&lt;a href="http://gallery.expression.microsoft.com/CSS3Snippets" target="_blank"&gt;&lt;font color="#0000ff" size="2" face="Tahoma"&gt;http://gallery.expression.microsoft.com/CSS3Snippets&lt;/font&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;font size="2" face="Tahoma"&gt;

&lt;/font&gt;&lt;p style="margin: 0pt 0pt 10pt;" class="MsoNormal"&gt;&lt;span style="color: black; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-weight: bold;"&gt;&lt;a href="http://gallery.expression.microsoft.com/MobileSnippets" target="_blank"&gt;&lt;font color="#0000ff" size="2" face="Tahoma"&gt;http://gallery.expression.microsoft.com/MobileSnippets&lt;/font&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;font size="2" face="Tahoma"&gt;

&lt;/font&gt;&lt;p style="margin: 0pt 0pt 10pt;" class="MsoNormal"&gt;&lt;font face="Tahoma"&gt;&lt;span style="color: black; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-weight: bold;"&gt;&lt;font size="2"&gt;I’ve also created a sample
mobile-friendly responsive template for EW.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;

&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin: 0pt 0pt 10pt;" class="MsoNormal"&gt;&lt;span style="color: black; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-weight: bold;"&gt;&lt;a href="http://gallery.expression.microsoft.com/MobileTemplate" target="_blank"&gt;&lt;font color="#0000ff" size="2" face="Tahoma"&gt;http://gallery.expression.microsoft.com/MobileTemplate&lt;/font&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;font size="2" face="Tahoma"&gt;

&lt;/font&gt;&lt;p style="margin: 0pt 0pt 10pt;" class="MsoNormal"&gt;&lt;span style="color: black; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-weight: bold;"&gt;&lt;font size="2"&gt;&lt;font face="Tahoma"&gt;One caveat about using the
CSS3 media queries with a &lt;u&gt;mobile-first layout&lt;/u&gt; (the preferred way to use
them) is that the Design view in Expression Web doesn’t recognise the queries
and therefore displays the mobile view rather than the appropriate wide screen
view. You may therefore have to reply more on browser preview when laying out pages.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

 &lt;img src="http://geekswithblogs.net/ihaynes/aggbug/149665.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/u5X76GDw9Qg" height="1" width="1"/&gt;</description><dc:creator>ihaynes</dc:creator><feedburner:origLink>http://geekswithblogs.net/ihaynes/archive/2012/05/15/mobile-responsive-site-design-in-expression-web.aspx</feedburner:origLink></item><item><title>SharePoint Saturday NYC Update from the Trenches</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/spJKNWNRVdM/sharepoint-saturday-nyc-update-from-the-trenches.aspx</link><pubDate>Tue, 15 May 2012 23:49:04 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/MOSSLover/archive/2012/05/16/sharepoint-saturday-nyc-update-from-the-trenches.aspx</guid><wfw:comment>http://geekswithblogs.net/MOSSLover/comments/149664.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/MOSSLover/comments/commentRss/149664.aspx</wfw:commentRss><comments>http://geekswithblogs.net/MOSSLover/archive/2012/05/16/sharepoint-saturday-nyc-update-from-the-trenches.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/MOSSLover/services/trackbacks/149664.aspx</trackback:ping><source url="http://geekswithblogs.net/MOSSLover/rss.aspx">SharePoint Saturday NYC Update from the Trenches</source><description>&lt;p&gt;So as you know I am yet again involved in SPS NYC with my awesome teammates, Greg Hurlman, Jason Gallicchio, Tasha Scott, and Tom Daly.  The speakers have finally been picked and a first draft schedule has been posted at &lt;a href="http://www.sharepointsaturday.org/ny"&gt;http://www.sharepointsaturday.org/ny&lt;/a&gt;.  We are also still looking for sponsors if you guys are interested you can also click on the link to grab the form, sign it, and send it to &lt;a href="mailto:sponsors@spsnyc.com"&gt;sponsors@spsnyc.com&lt;/a&gt;.  We are also looking for volunteers and you can fill out the form at the same place listed above.  We are offering a t-shirt and a gift card for those who dedicate a couple hours of service to the event.  I believe this year will be the best event yet.  I am also considering wearing a Viking Helmut with horns if at least one other person will wear a similar item.  I would consider dressing up if I could get another person to dress up, but I think that’s asking for too much.  Also, I need to run around and help the others put out fires, so I’m not so sure full on dress attire would work out.&lt;/p&gt;  &lt;p&gt;Anyway, registration is not yet posted for those of you guys who wish to attend.  We might post it more towards the end of June.  I am not yet sure what the decision was on the exact date, but normally we post about 6 weeks prior to the event.  I hope to see you all this year at the event.  Yet again my dad is going to show up, so stop by, attend a few sessions, and say hi to everyone.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a36b1e19-a32b-434a-a7e0-2d7bf69077ad" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SPS+NYC" rel="tag"&gt;SPS NYC&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SharePoint+Saturday" rel="tag"&gt;SharePoint Saturday&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SharePoint" rel="tag"&gt;SharePoint&lt;/a&gt;&lt;/div&gt; &lt;img src="http://geekswithblogs.net/MOSSLover/aggbug/149664.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/spJKNWNRVdM" height="1" width="1"/&gt;</description><dc:creator>MOSSLover</dc:creator><feedburner:origLink>http://geekswithblogs.net/MOSSLover/archive/2012/05/16/sharepoint-saturday-nyc-update-from-the-trenches.aspx</feedburner:origLink></item><item><title>Integrating SharePoint with Fruity Products</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/f8D5Rq_6Gpc/integrating-sharepoint-with-fruity-products.aspx</link><pubDate>Tue, 15 May 2012 23:42:17 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/MOSSLover/archive/2012/05/16/integrating-sharepoint-with-fruity-products.aspx</guid><wfw:comment>http://geekswithblogs.net/MOSSLover/comments/149663.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/MOSSLover/comments/commentRss/149663.aspx</wfw:commentRss><comments>http://geekswithblogs.net/MOSSLover/archive/2012/05/16/integrating-sharepoint-with-fruity-products.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/MOSSLover/services/trackbacks/149663.aspx</trackback:ping><source url="http://geekswithblogs.net/MOSSLover/rss.aspx">Integrating SharePoint with Fruity Products</source><description>&lt;p&gt;So as you can see this blog has not been the best in the world lately.  Life changes and burn out are killing me lately.  Don’t get me wrong I love my job.  I love writing things in Visual Studio, in fact this week I got to work with MVC3 for the first time ever.  I am completely hooked on MVC3 and will further explore that in the upcoming months.  I have entertaining a completely different idea, because I think it would be fun and interesting.  The downside is it involves me buying an Apple computer.&lt;/p&gt;  &lt;p&gt;I have been fighting buying a Macbook Pro for ages.  I love building Windows PCs from scratch.  I love knowing that I built the computer that I am using.  I guess it stems back from my grandparents teaching me that hard work leads to a more fulfilling accomplishment.  Anyway, I am not switching over to the darkside.  I just built myself a gaming PC (core i7 process, 24 gb of ram-32 when I RMA the last two chips, 4 hard drives – main being an SSD, and an NVIDIA GTX 570 card).  I just want to branch out and learn some new tech, so I figure if I have some spare time (which is like asking for a unicorn), I will start posting more about my new development.  Anyway, I am waiting for the WWDC and then I am going to decide on what flavor of Macbook Pro to purchase.  It turns out a Macbook Air won’t get me what I want programmatically the processor might not be quite up to par for hardcore development.  I wouldn’t want to limit myself to anything softcore right?&lt;/p&gt;  &lt;p&gt;So check back here periodically or on twitter.  I’m sure I will post something about my endeavors.  In the meanwhile I am still working on my personal life and I am happy to say I have friends in the area.  For the first time in a very long time some of them are actually female.  As you all know my friends for the longest time were members of the SharePoint and .Net Community mainly and of the male breed.  So things are working out.  I still love every single day in NYC.  It is the first city I can 100% say I belong in.  If I have my way I will stay in the metro area for a long time.  Anyway, I hope you all are having a good time and goodnight.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5bd54d34-83a8-4fe9-bad0-5700ddc8426f" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint+and+Apple" rel="tag"&gt;SharePoint and Apple&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft+and+Apple" rel="tag"&gt;Microsoft and Apple&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Apple" rel="tag"&gt;Apple&lt;/a&gt;&lt;/div&gt; &lt;img src="http://geekswithblogs.net/MOSSLover/aggbug/149663.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/f8D5Rq_6Gpc" height="1" width="1"/&gt;</description><dc:creator>MOSSLover</dc:creator><feedburner:origLink>http://geekswithblogs.net/MOSSLover/archive/2012/05/16/integrating-sharepoint-with-fruity-products.aspx</feedburner:origLink></item><item><title>Let&amp;rsquo;s MEET Windows Azure</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/6sYV9s1kzbg/letrsquos-meet-windows-azure.aspx</link><pubDate>Wed, 16 May 2012 00:37:18 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/shaunxu/archive/2012/05/16/letrsquos-meet-windows-azure.aspx</guid><wfw:comment>http://geekswithblogs.net/shaunxu/comments/149662.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/shaunxu/comments/commentRss/149662.aspx</wfw:commentRss><comments>http://geekswithblogs.net/shaunxu/archive/2012/05/16/letrsquos-meet-windows-azure.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/shaunxu/services/trackbacks/149662.aspx</trackback:ping><source url="http://geekswithblogs.net/shaunxu/rss.aspx">Let&amp;rsquo;s MEET Windows Azure</source><description>&lt;p&gt;Microsoft had just released a new website &lt;a href="http://www.meetwindowsazure.com/"&gt;http://www.meetwindowsazure.com/&lt;/a&gt; which announced an outstanding event named “MEET Windows Azure”. There will be some awesome new features and releases being published around the Windows Azure Platform, the cloud computing platform and cloud-based technologies Microsoft offers. From what I know, this might be the biggest innovation in Windows Azure till now.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/shaunxu/Windows-Live-Writer/Lets-MEET-Windows-Azure_8443/image_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://geekswithblogs.net/images/geekswithblogs_net/shaunxu/Windows-Live-Writer/Lets-MEET-Windows-Azure_8443/image_thumb.png" width="531" height="498" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The event will be hosted at 1pm PDT, June 7th at the &lt;a href="http://www.madronestudios.com/ie.html" target="_blank"&gt;Madrone Studio&lt;/a&gt; in San Francisco with limited sites. &lt;strong&gt;But it will opened to everyone who is interested in through the live online.&lt;/strong&gt; If you are willing to join the live stream, like me, go to &lt;a title="http://register.meetwindowsazure.com/" href="http://register.meetwindowsazure.com/"&gt;http://register.meetwindowsazure.com/&lt;/a&gt; to register as soon as possible.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Hope this helps,&lt;/p&gt;  &lt;p&gt;Shaun&lt;/p&gt;  &lt;div style="border-bottom: #888888 1px solid; border-left: #888888 1px solid; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; color: #888888; border-top: #888888 1px solid; border-right: #888888 1px solid; padding-top: 10px"&gt;&lt;i&gt;All documents and related graphics, codes are provided "AS IS" without warranty of any kind.      &lt;br /&gt;Copyright © Shaun Ziyan Xu. This work is licensed under the &lt;a title="Creative Commons Attribution License" href="http://creativecommons.org/licenses/by/3.0/" rel="external license"&gt;Creative Commons License&lt;/a&gt;. &lt;/i&gt;&lt;/div&gt;   &lt;font color="#e7e7e7"&gt;&lt;/font&gt; &lt;img src="http://geekswithblogs.net/shaunxu/aggbug/149662.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/6sYV9s1kzbg" height="1" width="1"/&gt;</description><dc:creator>Shaun</dc:creator><feedburner:origLink>http://geekswithblogs.net/shaunxu/archive/2012/05/16/letrsquos-meet-windows-azure.aspx</feedburner:origLink></item><item><title>IQueryable Dynamic Expressions</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/t82ARz1rcW0/iqueryable-dynamic-expressions.aspx</link><pubDate>Tue, 15 May 2012 19:19:42 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/Nettuce/archive/2012/05/15/iqueryable-dynamic-expressions.aspx</guid><wfw:comment>http://geekswithblogs.net/Nettuce/comments/149661.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/Nettuce/comments/commentRss/149661.aspx</wfw:commentRss><comments>http://geekswithblogs.net/Nettuce/archive/2012/05/15/iqueryable-dynamic-expressions.aspx#comment</comments><slash:comments>3</slash:comments><trackback:ping>http://geekswithblogs.net/Nettuce/services/trackbacks/149661.aspx</trackback:ping><source url="http://geekswithblogs.net/Nettuce/rss.aspx">IQueryable Dynamic Expressions</source><description>&lt;pre style="font-family: Consolas; font-size: 13px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(227, 213, 193); background-position: initial initial; background-repeat: initial initial; "&gt;&lt;span style="color:#400080;"&gt;public&lt;/span&gt; &lt;span style="color:#400080;"&gt;static&lt;/span&gt; &lt;span style="color:#400080;"&gt;class&lt;/span&gt; &lt;span style="color:#305fb6;"&gt;QueryableExtensions&lt;/span&gt;
    {
        &lt;span style="color:#400080;"&gt;public&lt;/span&gt; &lt;span style="color:#400080;"&gt;static&lt;/span&gt; &lt;span style="color:#305fb6;"&gt;IQueryable&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#2e53d1;"&gt;&amp;gt;&lt;/span&gt; Filter&lt;span style="color:#2e53d1;"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#2e53d1;"&gt;&amp;gt;&lt;/span&gt;(&lt;span style="color:#400080;"&gt;this&lt;/span&gt; &lt;span style="color:#305fb6;"&gt;IQueryable&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#2e53d1;"&gt;&amp;gt;&lt;/span&gt; queryable, &lt;span style="color:#305fb6;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#305fb6;"&gt;KeyValuePair&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#400080;"&gt;string&lt;/span&gt;, &lt;span style="color:#400080;"&gt;string&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;&amp;gt;&amp;gt;&lt;/span&gt; filters) &lt;span style="color:#400080;"&gt;where&lt;/span&gt; T : &lt;span style="color:#400080;"&gt;class&lt;/span&gt;
        {
            &lt;span style="color:#400080;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#400080;"&gt;var&lt;/span&gt; filter &lt;span style="color:#400080;"&gt;in&lt;/span&gt; filters)
            {
                &lt;span style="color:#400080;"&gt;var&lt;/span&gt; propertyName &lt;span style="color:#2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color:#400080;"&gt;typeof&lt;/span&gt;(T)&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;GetProperties()&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Select(x &lt;span style="color:#2e53d1;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Name)&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;SingleOrDefault(x &lt;span style="color:#2e53d1;"&gt;=&amp;gt;&lt;/span&gt; x&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;ToLower() &lt;span style="color:#2e53d1;"&gt;==&lt;/span&gt; filter&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Key&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;ToLower());
                &lt;span style="color:#400080;"&gt;if&lt;/span&gt; (propertyName&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;IsNullOrWhiteSpace()) &lt;span style="color:#400080;"&gt;continue&lt;/span&gt;;
                &lt;span style="color:#400080;"&gt;var&lt;/span&gt; parameterExpression &lt;span style="color:#2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color:#305fb6;"&gt;Expression&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Parameter(&lt;span style="color:#400080;"&gt;typeof&lt;/span&gt;(T));
                &lt;span style="color:#400080;"&gt;var&lt;/span&gt; propertyExpression &lt;span style="color:#2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color:#305fb6;"&gt;Expression&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Property(parameterExpression, propertyName);
                &lt;span style="color:#400080;"&gt;var&lt;/span&gt; toStringCallExpression &lt;span style="color:#2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color:#305fb6;"&gt;Expression&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Call(propertyExpression, &lt;span style="color:#400080;"&gt;typeof&lt;/span&gt;(T)&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;GetMethod(&lt;span style="color:#259241;"&gt;"ToString"&lt;/span&gt;));
                &lt;span style="color:#400080;"&gt;var&lt;/span&gt; toLowerCallExpression &lt;span style="color:#2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color:#305fb6;"&gt;Expression&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Call(toStringCallExpression, &lt;span style="color:#400080;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#400080;"&gt;string&lt;/span&gt;)&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;GetMethod(&lt;span style="color:#259241;"&gt;"ToLower"&lt;/span&gt;, &lt;span style="color:#305fb6;"&gt;Type&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;EmptyTypes));
                &lt;span style="color:#400080;"&gt;var&lt;/span&gt; constantExpression &lt;span style="color:#2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color:#305fb6;"&gt;Expression&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Constant(filter&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Value&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;ToLower());
                &lt;span style="color:#400080;"&gt;var&lt;/span&gt; equalExpression &lt;span style="color:#2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color:#305fb6;"&gt;Expression&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Equal(toLowerCallExpression, constantExpression);
                &lt;span style="color:#400080;"&gt;var&lt;/span&gt; methodCallExpression &lt;span style="color:#2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color:#305fb6;"&gt;Expression&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Call(&lt;span style="color:#400080;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#305fb6;"&gt;Queryable&lt;/span&gt;), &lt;span style="color:#259241;"&gt;"Where"&lt;/span&gt;, &lt;span style="color:#400080;"&gt;new&lt;/span&gt;[] { &lt;span style="color:#400080;"&gt;typeof&lt;/span&gt;(T) }, queryable&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Expression, &lt;span style="color:#305fb6;"&gt;Expression&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Lambda&lt;span style="color:#2e53d1;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#305fb6;"&gt;Func&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;&amp;lt;&lt;/span&gt;T, &lt;span style="color:#400080;"&gt;bool&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;(equalExpression, &lt;span style="color:#400080;"&gt;new&lt;/span&gt;[] { parameterExpression }));
                queryable &lt;span style="color:#2e53d1;"&gt;=&lt;/span&gt; queryable&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;Provider&lt;span style="color:#2e53d1;"&gt;.&lt;/span&gt;CreateQuery(methodCallExpression) &lt;span style="color:#400080;"&gt;as&lt;/span&gt; &lt;span style="color:#305fb6;"&gt;IQueryable&lt;/span&gt;&lt;span style="color:#2e53d1;"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#2e53d1;"&gt;&amp;gt;&lt;/span&gt;;
            }
            &lt;span style="color:#400080;"&gt;return&lt;/span&gt; queryable;
        }
    }&lt;/pre&gt; &lt;img src="http://geekswithblogs.net/Nettuce/aggbug/149661.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/t82ARz1rcW0" height="1" width="1"/&gt;</description><dc:creator>Jon Canning</dc:creator><feedburner:origLink>http://geekswithblogs.net/Nettuce/archive/2012/05/15/iqueryable-dynamic-expressions.aspx</feedburner:origLink></item><item><title>Old SQL, Top and a Variable</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/-Vb3udFPtTY/old-sql-top-and-a-variable.aspx</link><pubDate>Tue, 15 May 2012 11:48:32 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/Bunch/archive/2012/05/15/old-sql-top-and-a-variable.aspx</guid><wfw:comment>http://geekswithblogs.net/Bunch/comments/149660.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/Bunch/comments/commentRss/149660.aspx</wfw:commentRss><comments>http://geekswithblogs.net/Bunch/archive/2012/05/15/old-sql-top-and-a-variable.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/Bunch/services/trackbacks/149660.aspx</trackback:ping><source url="http://geekswithblogs.net/Bunch/rss.aspx">Old SQL, Top and a Variable</source><description>&lt;p&gt;I came across this the other day. Using SQL 2000 I could 
not get a Top statement to work with a variable. I had forgotten that only with 
SQL 2005 and higher could you do this trick. I found a good way around it, you 
can &lt;a href="http://sqlserver2000.databases.aspfaq.com/how-do-i-use-a-variable-in-a-top-clause-in-sql-server.html"&gt;read 
about it here&lt;/a&gt;. Anyway this works on SQL 2000:&lt;/p&gt;
&lt;p&gt;declare @top int&lt;br /&gt;set @top = 5 &lt;/p&gt;
&lt;p&gt;BEGIN&lt;br /&gt;set rowcount @top&lt;br /&gt; select Some_ID&lt;br /&gt; from tblStuff&lt;br /&gt;set 
rowcount 0&lt;br /&gt;END&lt;/p&gt;
&lt;p&gt;The code above would return the first five records from tblStuff. For any of 
the newer SQL Server version you can simply use the @top variable in Top 
like:&lt;/p&gt;
&lt;p&gt;select top (@top) Some_ID&lt;br /&gt;from tblStuff&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/SQL" rel="tag"&gt;SQL&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/Bunch/aggbug/149660.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/-Vb3udFPtTY" height="1" width="1"/&gt;</description><dc:creator>Bunch</dc:creator><feedburner:origLink>http://geekswithblogs.net/Bunch/archive/2012/05/15/old-sql-top-and-a-variable.aspx</feedburner:origLink></item><item><title>Sass vs Less</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/9E-JEYL1k3Y/sass-vs-less.aspx</link><pubDate>Tue, 15 May 2012 08:42:24 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/renso/archive/2012/05/15/sass-vs-less.aspx</guid><wfw:comment>http://geekswithblogs.net/renso/comments/149659.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/renso/comments/commentRss/149659.aspx</wfw:commentRss><comments>http://geekswithblogs.net/renso/archive/2012/05/15/sass-vs-less.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/renso/services/trackbacks/149659.aspx</trackback:ping><source url="http://geekswithblogs.net/renso/rss.aspx">Sass vs Less</source><description>I know there are afew places where you can check out the differences between Sass or Less, but I thought it may be helpful for others to know why I chose one over the other.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are some of my sources:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;http://sass-lang.com/&lt;/li&gt;&lt;li&gt;http://www.dotlesscss.org/&lt;/li&gt;&lt;li&gt;http://stackoverflow.com/questions/8411066/less-vs-sass-vs&lt;/li&gt;&lt;li&gt;http://coding.smashingmagazine.com/2011/09/09/an-introduction-to-less-and-comparison-to-sass/&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since my main decision was affected by my IDE I need to mention my development environment:&lt;/div&gt;&lt;div&gt;Visual Studio 2010 with Mindscape's Web Workbench&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In short I chose Sass (Syntactically Awesome Style Sheet). My main reason was that when you save the file in VS, it automatically regenerates the CSS file for SCSS on the fly, so you are able to see right away what CSS is being generated and can run your app right away. I am not in the favor of Less in this regard, as although you can specify set of handlers etc to interpret the less file on the fly, I would never use it to interpret on the fly, especially not on production servers.&lt;br /&gt;&lt;br /&gt;Also the Ruby team now ships officially with CoffeeScript and Sass by default and will be included by default in the gems when you deploy your Ruby app. Maybe another reason to use it if you're in the Rails framework.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Any comments very welcome as I am am not sure if my assumptions and assertions are true.&lt;/div&gt; &lt;img src="http://geekswithblogs.net/renso/aggbug/149659.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/9E-JEYL1k3Y" height="1" width="1"/&gt;</description><dc:creator>Renso</dc:creator><feedburner:origLink>http://geekswithblogs.net/renso/archive/2012/05/15/sass-vs-less.aspx</feedburner:origLink></item><item><title>Passing in report parameters to TFS 2010 OLAP Web Parts on the Team Portal</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/UHZAvsAY7aI/passing-in-report-parameters-to-tfs-2010-olap-web-parts.aspx</link><pubDate>Tue, 15 May 2012 06:48:00 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/BobHardister/archive/2012/05/15/passing-in-report-parameters-to-tfs-2010-olap-web-parts.aspx</guid><wfw:comment>http://geekswithblogs.net/BobHardister/comments/149635.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/BobHardister/comments/commentRss/149635.aspx</wfw:commentRss><comments>http://geekswithblogs.net/BobHardister/archive/2012/05/15/passing-in-report-parameters-to-tfs-2010-olap-web-parts.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/BobHardister/services/trackbacks/149635.aspx</trackback:ping><source url="http://geekswithblogs.net/BobHardister/rss.aspx">Passing in report parameters to TFS 2010 OLAP Web Parts on the Team Portal</source><description>&lt;p&gt;There is some helpful &lt;a href="http://www.ewaldhofman.nl/post/2009/06/01/Add-SSRS-report-as-dashboard-to-sharepoint.aspx"&gt;information&lt;/a&gt; from Ewald Hofman on passing in parameters to the TFS SQL Server Analysis Services OLAP reports.&lt;/p&gt;
&lt;p&gt;But, the 2010 schema has changed. You can use the SQL Server Mgmgt Studio to access the metadata and query the tables to seee the new schema and record values. &lt;/p&gt;
&lt;p&gt;As an example of the Task Burndown report on the TFS 2010 Project Portal, here's the URL that worked in a browser:&lt;/p&gt;
&lt;p&gt;http://{your tfs server}/Reports/Pages/Report.aspx?ItemPath=%2fTfsReports%2fDefaultCollection%2fCcMsd1.0%2fDashboards%2fBurndown&amp;amp;rc%3atoolbar=false&amp;amp;rs%3aCommand=Render&amp;amp;IterationParam=[IterationName].[ParentIterationSK].%26[{the IterationSK value}]&lt;/p&gt;
&lt;p&gt;Here's the URL that was accepted in the web part:&lt;/p&gt;
&lt;p&gt;/sites/DefaultCollection/CcMsd1.0/_layouts/TfsRedirect.aspx?tf:Type=Report&amp;amp;tf:ReportName=Dashboards%2fBurndown&amp;amp;tf:ShowToolbar=0&amp;amp;Width=381pt&amp;amp;Height= 180pt&amp;amp;tf:Command=Render&amp;amp;tf:Parameters=IterationParam=[IterationName].[ParentIterationSK].%26[17]&lt;/p&gt;
&lt;p&gt;To-date though, &lt;strong&gt;even though the report processes without error, the passed in parameters don't make any difference/change in the report. So, I gave up on this approach and was somewhat successful with &lt;a href="http://agilescmtalk.com/node/24"&gt;this approach (see my subsequent blog article).&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/BobHardister/aggbug/149635.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/UHZAvsAY7aI" height="1" width="1"/&gt;</description><dc:creator>Bob Hardister</dc:creator><feedburner:origLink>http://geekswithblogs.net/BobHardister/archive/2012/05/15/passing-in-report-parameters-to-tfs-2010-olap-web-parts.aspx</feedburner:origLink></item><item><title>How I Customized Report Parameters for Team Foundation Server 2010</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/b-nQ0MYCqUE/how-i-customized-report-parameters-for-team-foundation-server-2010.aspx</link><pubDate>Tue, 15 May 2012 06:46:27 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/BobHardister/archive/2012/05/15/how-i-customized-report-parameters-for-team-foundation-server-2010.aspx</guid><wfw:comment>http://geekswithblogs.net/BobHardister/comments/149634.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/BobHardister/comments/commentRss/149634.aspx</wfw:commentRss><comments>http://geekswithblogs.net/BobHardister/archive/2012/05/15/how-i-customized-report-parameters-for-team-foundation-server-2010.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/BobHardister/services/trackbacks/149634.aspx</trackback:ping><source url="http://geekswithblogs.net/BobHardister/rss.aspx">How I Customized Report Parameters for Team Foundation Server 2010</source><description>&lt;p&gt;My goal was to have &lt;strong&gt;the burndown chart &lt;/strong&gt;on the team project portal main page &lt;strong&gt;display the current iteration.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The default report displays the tasks for the entire team project starting 5 days before the current date and ending 25 days after the current date. FRUSTRATING, to say the least! I mean, what a useless report! Who's Agile book did they get that one from?&lt;/p&gt;
&lt;p&gt;What I wanted was to see the burndown for the current iteration. That is, &lt;strong&gt;tasks for that iteration only &lt;/strong&gt;and that iteration starting on a &lt;strong&gt;fixed start date &lt;/strong&gt;and stopping on a &lt;strong&gt;fixed finish date.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;First, I tried to implement this by passing in the parameters in the web part link url. I talked to about 4 different Microsoft people at PDC; specialist in VS ALM, SSRS, SharePoint. No one knew how to do this. See my original article on this &lt;a href="http://agilescmtalk.com/node/20"&gt;here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have yet to be successful on the first approach. Which seems the most obvious way to approach it. I hope that this secret makes its way into the TFS community at some point. No wonder so few use TFS SSRS reporting! Can you sense the frustration?&lt;/p&gt;
&lt;p&gt;Then, I came across at article by John Socha-Leialoha on &lt;a href="http://www.socha.com/blogs/john/"&gt;Customizing Report Parameters for Team Foundation Server 2010.&lt;/a&gt; This article describes how I used his approach to be successful.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First, save a copy of the report definition so you can restore it if things get messed up. 
&lt;/li&gt;&lt;li&gt;To access the report definition, from the team project main page, select Reports from the left column and then navigate through the SQl Server Reporting Services (SSRS) location hierarchy to find the report. Click on it to open it. Go to the Properties tab and select the General panel. Click Edit to save a copy of the report definition file. You will need to click the Update button to browse, select and then apply the file to restore the definition 
&lt;/li&gt;&lt;li&gt;Now, to the point: select the Properties panel and set the iteration path on the report parameters page as John's blog specifies. &lt;strong&gt;Note: &lt;/strong&gt;the parameter string for iteration path [Work Item].[Iteration Hierarchy].[All] must be changed to [Work Item].[Iteration Hierarchy].[Iteration1].&amp;amp;[{ParentIterationSK}]&amp;amp;[{IterationSK}]. I had to use the MS SQL Server Mgmgt Studio (SSMS) to find out what these were. I connected to my TFS server using the SSMS, opened the Tfs_Warehouse Database and queried the rows in the dbo.DimIteration table. From here you can see what the SK values are based on the IterationPath you are interested in. &lt;strong&gt;Note2: &lt;/strong&gt;I don't know what "[Iteration1]" means for sure. It may have to do with the depth of the IterationPath Hierarchy. In my case, I'm only one level down from the root of the iteration path. So, in this case, I must use "[Iteration1]" regardless of the real iteration I want to report on. So, if the full parameter for my first iteration is: [Work Item].[Iteration Hierarchy].[Iteration1].&amp;amp;[14]&amp;amp;[17] and the SK for my second iteration is 18, my parameter for my project's second iteration looks like this: [Work Item].[Iteration Hierarchy].[Iteration1].&amp;amp;[14]&amp;amp;[18] 
&lt;/li&gt;&lt;li&gt;Next, click the "Override Default" for StartDateParam and EndDateParam. &lt;strong&gt;Note: &lt;/strong&gt;I think this is permanent for the active defintion. I think you can restore the original defintion to reset the default. Type in the start and end date you want (mm/dd/yyyy). The time will default to 12 AM, but you can change this after you have applied the first explicit date values. 
&lt;/li&gt;&lt;li&gt;Now view and display the report. You should see the report you want :) 
&lt;/li&gt;&lt;li&gt;Next, rename the report to reflect the iteration it's for 
&lt;/li&gt;&lt;li&gt;Now create the linked reports as described by John in his blog 
&lt;/li&gt;&lt;li&gt;Finally, you can easily modify the web part link url to containt the correct report name. &lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; &lt;br /&gt;In subsequent work I confirmed the syntax of the IterationParm string. For example, take - &lt;/p&gt;
&lt;p&gt;[Work Item].[Iteration Hierarchy].[Iteration1].&amp;amp;[14]&amp;amp;[18]&lt;/p&gt;
&lt;p&gt;The [Iteration1] node does prescribe the depth of the hierarchy. [Iteration1] means root to 1st level. [Iteration2] means root to 1st level to 2nd level] and so forth. The node IDs correspond to the nodes at each level.&lt;/p&gt;
&lt;p&gt;So [Work Item].[Iteration Hierarchy].[Iteration4].&amp;amp;[14]&amp;amp;[18]&amp;amp;[54]&amp;amp;[72] specifies an iteration path node at the root&amp;gt;1st&amp;gt;2nd&amp;gt;3rd level.&lt;/p&gt;
&lt;p&gt;You can obtain the SSRS report properties IterationParm value using SQL Server Management Studio. Connect using SQL Server Analysis Services and create an MDX query of the work item.iteration hiearchy path node you want to report on. See &lt;a href="http://www.socha.com/blogs/john/2009/10/customizing-report-parameters-for-team.html"&gt;this&lt;/a&gt; great article by John Socha-Leiloha for more details.&lt;/p&gt;
&lt;p&gt;Good hunting!&lt;/p&gt; &lt;img src="http://geekswithblogs.net/BobHardister/aggbug/149634.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/b-nQ0MYCqUE" height="1" width="1"/&gt;</description><dc:creator>Bob Hardister</dc:creator><feedburner:origLink>http://geekswithblogs.net/BobHardister/archive/2012/05/15/how-i-customized-report-parameters-for-team-foundation-server-2010.aspx</feedburner:origLink></item><item><title>Using a TFS 2010 custom bug work item definition with the MTLM Test Runner</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/kR4TGQGAVnc/using-a-tfs-2010-custom-bug-work-item-definition-with.aspx</link><pubDate>Tue, 15 May 2012 06:44:29 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/BobHardister/archive/2012/05/15/using-a-tfs-2010-custom-bug-work-item-definition-with.aspx</guid><wfw:comment>http://geekswithblogs.net/BobHardister/comments/149633.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/BobHardister/comments/commentRss/149633.aspx</wfw:commentRss><comments>http://geekswithblogs.net/BobHardister/archive/2012/05/15/using-a-tfs-2010-custom-bug-work-item-definition-with.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/BobHardister/services/trackbacks/149633.aspx</trackback:ping><source url="http://geekswithblogs.net/BobHardister/rss.aspx">Using a TFS 2010 custom bug work item definition with the MTLM Test Runner</source><description>&lt;p&gt;We don’t use the term “Bug,” rather we use “Software Action Request” or “SAR.” I renamed the Bug WI definition from Bug to SAR. I added a few custom fields to our SAR WI definition, but all the Microsoft fields are used and unchanged.&lt;/p&gt;
&lt;p&gt;What I want is for the MTLM client to be configured to open a SAR rather than a Bug. In other words, out-of-the-box when a user is manually executing a test case with the MTLM Test Runner client and one of the steps fail, the user clicks a button to create a Bug or link to an existing Bug. &lt;/p&gt;
&lt;p&gt;The answer was provided by Rubel Singal in &lt;a href="http://blogs.msdn.com/rubel/archive/2009/12/15/how-can-i-configure-mtlm-to-use-my-custom-bug-test-case-type.aspx"&gt;this blog article.&lt;/a&gt; It works! Thank you Rubel!&lt;/p&gt;
&lt;p&gt;Happy trails!&lt;/p&gt; &lt;img src="http://geekswithblogs.net/BobHardister/aggbug/149633.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/kR4TGQGAVnc" height="1" width="1"/&gt;</description><dc:creator>Bob Hardister</dc:creator><feedburner:origLink>http://geekswithblogs.net/BobHardister/archive/2012/05/15/using-a-tfs-2010-custom-bug-work-item-definition-with.aspx</feedburner:origLink></item><item><title>Updating an incorrect reason code after a state transition</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/JlX2vYiE0EE/updating-an-incorrect-reason-code-after-a-state-transition.aspx</link><pubDate>Tue, 15 May 2012 06:32:11 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/BobHardister/archive/2012/05/15/updating-an-incorrect-reason-code-after-a-state-transition.aspx</guid><wfw:comment>http://geekswithblogs.net/BobHardister/comments/149632.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/BobHardister/comments/commentRss/149632.aspx</wfw:commentRss><comments>http://geekswithblogs.net/BobHardister/archive/2012/05/15/updating-an-incorrect-reason-code-after-a-state-transition.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/BobHardister/services/trackbacks/149632.aspx</trackback:ping><source url="http://geekswithblogs.net/BobHardister/rss.aspx">Updating an incorrect reason code after a state transition</source><description>&lt;p&gt;When using TFS work items you may find that when you transition from one state to another that you selected the wrong reason code, or you found out shortly afterwards that the reason code you selected is incorrect.&lt;/p&gt;
&lt;p&gt;Well, you may be surprised to find that reason codes (System.Reason) cannot be updated within the same state.&lt;/p&gt;
&lt;p&gt;After some looking into, I came to understand the intent of reason code is to document the "reason" the state changed. As opposed to indicate within state changes. However, it was also clear that no out-of-the-box provision is made for correcting the reason code when the wrong one was used. I did find two different approaches that used a custom field:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/forums/en-US/tfsworkitemtracking/thread/45f060c6-a7d5-4997-9607-714d89c1c6ab/"&gt;One&lt;/a&gt; replaces System.Reason with a custom field. &lt;a href="http://blogs.msdn.com/teams_wit_tools/archive/2009/03/31/work-item-rules-workaround-saving-the-resolved-reason.aspx"&gt;Another&lt;/a&gt; uses a custom field that gets populated from System.Reason and can then be updated. &lt;/p&gt;
&lt;p&gt;I appreciate the approach of using a custom field, as shown in the article. However, wanting to minimize custom code, I took the following approach:&lt;/p&gt;
&lt;p&gt;Using the Process Editor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I simply created an "Update [state] Reason Code" state 
&lt;/li&gt;&lt;li&gt;The transition reason to this state is "Current reason code is incorrect." 
&lt;/li&gt;&lt;li&gt;The transition back provides the list of reason codes to chose from &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;This was easy and leverages the existing fields and functionality. It also provides a nice, concise history and allows the application of permissions to limit who can do this. I found I didn't need to use this on most of my states because many of them can already go back to the immediately prior state and so it amounts to the same thing. Using it on the initial state (Submitted) and Close will be very helpful.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/BobHardister/aggbug/149632.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/JlX2vYiE0EE" height="1" width="1"/&gt;</description><dc:creator>Bob Hardister</dc:creator><feedburner:origLink>http://geekswithblogs.net/BobHardister/archive/2012/05/15/updating-an-incorrect-reason-code-after-a-state-transition.aspx</feedburner:origLink></item><item><title>Azure Presentation at VS Live!</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/v6lrnElcX3w/azure-presentation-at-vs-live.aspx</link><pubDate>Tue, 15 May 2012 06:20:14 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/michelotti/archive/2012/05/15/azure-presentation-at-vs-live.aspx</guid><wfw:comment>http://geekswithblogs.net/michelotti/comments/149631.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/michelotti/comments/commentRss/149631.aspx</wfw:commentRss><comments>http://geekswithblogs.net/michelotti/archive/2012/05/15/azure-presentation-at-vs-live.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/michelotti/services/trackbacks/149631.aspx</trackback:ping><source url="http://geekswithblogs.net/michelotti/rss.aspx">Azure Presentation at VS Live!</source><description>&lt;p&gt;Tomorrow I will be presenting “&lt;a href="http://vslive.com/Events/New-York-2012/Sessions/Wednesday/W07-Building-Scalable-Apps-in-Windows-Azure.aspx"&gt;Building Scalable Apps in Windows Azure&lt;/a&gt;” at &lt;a href="http://vslive.com/events/new-york-2012/home.aspx"&gt;VS Live in New York City&lt;/a&gt;. I will be co-presenting with my colleague &lt;a href="http://vlele.wordpress.com/"&gt;Vishwas Lele&lt;/a&gt; of Azure fame. Should be a great event!&lt;/p&gt; &lt;img src="http://geekswithblogs.net/michelotti/aggbug/149631.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/v6lrnElcX3w" height="1" width="1"/&gt;</description><dc:creator>Steve Michelotti</dc:creator><feedburner:origLink>http://geekswithblogs.net/michelotti/archive/2012/05/15/azure-presentation-at-vs-live.aspx</feedburner:origLink></item><item><title>"Read It Later Pro" has been ruined into Pocket, but RIL Free is still usable.</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/Q-n9RB4WkQA/read-it-later-pro-has-been-ruined-into-pocket-but.aspx</link><pubDate>Tue, 15 May 2012 11:13:17 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/mnf/archive/2012/05/15/read-it-later-pro-has-been-ruined-into-pocket-but.aspx</guid><wfw:comment>http://geekswithblogs.net/mnf/comments/149630.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/mnf/comments/commentRss/149630.aspx</wfw:commentRss><comments>http://geekswithblogs.net/mnf/archive/2012/05/15/read-it-later-pro-has-been-ruined-into-pocket-but.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/mnf/services/trackbacks/149630.aspx</trackback:ping><source url="http://geekswithblogs.net/mnf/rss.aspx">"Read It Later Pro" has been ruined into Pocket, but RIL Free is still usable.</source><description>&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;I loved RIL Pro for iPad and used it every day, but about a month ago I was forced to upgrade to new version, named &lt;a href="http://help.getpocket.com/"&gt;Pocket&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;The new version has so many problems, that it's almost unusable.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;div&gt;The main issue is that iPad app doesn't show many of the saved links. &lt;/div&gt;&lt;div&gt;I've posted my opinion that it would be better to have  Pocket as a new separate application and recommend users to install it side by side with RIL Pro and try before replace&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;span&gt;at Pocket forum &lt;/span&gt; APR 20, 2012 &lt;/div&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;&lt;a href="http://help.getpocket.com/customer/portal/questions/290569-auto-update-to-pocket-wasn-t-a-god-idea" data-mce-href="http://help.getpocket.com/customer/portal/questions/290569-auto-update-to-pocket-wasn-t-a-god-idea"&gt;http://help.getpocket.com/customer/portal/questions/290569-auto-update-to-pocket-wasn-t-a-god-idea&lt;/a&gt; .It's still unanswered.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;I found that there a many other threads that report different issues with a new version and I've posted a few comments, supporting suggestions to fix the issues, that were broken by the Pocket.(e.g. &lt;a href="http://help.getpocket.com/customer/portal/questions/286093-i-ve-lost-items"&gt;here&lt;/a&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt; Pocket agents answered only a  small number of questions, and many of their answers&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;were unreasonable- like "We removed this feature because it is not convenient for our future plans"&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;Example of this is still stored in &lt;a href="http://webcache.googleusercontent.com/search?q=cache:d82fRjlYWLYJ:help.getpocket.com/customer/portal/questions/282273-refund-required-for-digest-+&amp;amp;cd=2&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=au"&gt;Google cache &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;24Apr I've &lt;a href="http://webcache.googleusercontent.com/search?q=cache:OdgkHRhtq0MJ:help.getpocket.com/customer/portal/questions/300216-please-restore-ril-pro-in-appstore+&amp;amp;cd=1&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=au"&gt;posted a request&lt;/a&gt; to restore RIL Pro in AppStore until they will fix the problems in pocket.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;&lt;/span&gt;From 27 April they introduced moderation on the public forum and stopped show new posts.&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;Actually &lt;span&gt;"moderation" is not a correct work, it's converted the &lt;/span&gt;&lt;span&gt;forum into Q&amp;amp;A site, where they show only posts with answers that they like.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;&lt;/span&gt;Furthermore they removed many discussion threads that existed on the forum before the "moderation".&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;When I pointed to this in email, the answer was un-reasonable-that their forum is actually not a forum, but "a &lt;span&gt;helpful support site where users can get their questions answered"&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;In fact users post public questions and do not see them posted for a week or forever.&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;For couple of my questions I received email starting with the words&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;    "An agent has responded to your question (Link to Question&amp;lt;&lt;/span&gt;&lt;a href="http://readitlater.assistly.com/customer/portal/questions/306173-sync-in-ril-free-stopped-working" target="_blank" data-mce-href="http://readitlater.assistly.com/customer/portal/questions/306173-sync-in-ril-free-stopped-working"&gt;http://readitlater.assistly.com/customer/portal/questions/306173-sync-in-ril-free-stopped-working&lt;/a&gt;&lt;span&gt;&amp;gt;)."&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;But the link is not working, because they deleted the discussion from the forum.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;At the beginning of May Pocket support answered that the  "&lt;span&gt;known issue with a partial list sync" is addressed and will be in the next upgrade.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span&gt;Despite the statement in upgrade notes, &lt;/span&gt;next upgrade didn't help with the problem(at least for me).&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;Support  replied to me, that  "&lt;span&gt;it seems as though a&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;em&gt;&lt;strong&gt;small&lt;/strong&gt;&lt;/em&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;handful of users are still experiencing this sync discrepancy."&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;27Apr I've reported that "&lt;a href="http://webcache.googleusercontent.com/search?q=cache:XgM0LfwwlVkJ:help.getpocket.com/customer/portal/questions/306173-sync-in-ril-free-stopped-working+&amp;amp;cd=1&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=au"&gt;Sync in RIL Free stopped working&lt;/a&gt;" and it was on forum at least until 6 May(according Google cache)&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;span class="il"&gt;10 May I received a reply via email(but post has been removed from the forum)&lt;/span&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;font color="#006400"&gt;&lt;strong&gt;&lt;span class="il"&gt;"The&lt;/span&gt;&lt;span&gt; fix is &lt;/span&gt;&lt;span class="il"&gt;to&lt;/span&gt;&lt;span&gt; log out of Read It Later Free, and then log back in. Although your local cache will be cleared, &lt;/span&gt;&lt;span class="il"&gt;the&lt;/span&gt;&lt;span&gt; app will go through your list and re-download your items."&lt;/span&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;div dir="ltr"&gt; It was the first useful advice after introducing Pocket. Now I am able to use RIL Free. With all it's limitation RIL Free is in much more workable conditions, than Pocket. It shows all articles that I've saved and it allowed to rename titles. The only feature from RIL Pro, that I really missing, is the ability to filter only untagged articles.&lt;/div&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" dir="ltr"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" dir="ltr"&gt;So now I can read all my saved articles in &lt;font color="#006400"&gt;&lt;strong&gt;RIL Free&lt;/strong&gt; &lt;/font&gt;and wait until they will fix the Pocket.&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" dir="ltr"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" dir="ltr"&gt;The conclusion I've had is that the Pocket company doesn't respect their customers, and I should not rely on their products too much. However the application is quite convenient, and I am familiar with it, so I will continue to use it. &lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" dir="ltr"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" dir="ltr"&gt;The company's  behaviour reminds me how Google changed layout of iGoogle tabs and&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://groups.google.com/group/google_web_search_help-personalizing/browse_thread/thread/dad1756deccbae18/24fe849f9ce936eb?hl=en#24fe849f9ce936eb" data-mce-href="http://groups.google.com/group/google_web_search_help-personalizing/browse_thread/thread/dad1756deccbae18/24fe849f9ce936eb?hl=en#24fe849f9ce936eb"&gt;ignored hundreds of complains&lt;/a&gt;. Note that recently (4 years later) Google returned to layout similar to original.&lt;/div&gt;&lt;br class="Apple-interchange-newline" /&gt; &lt;img src="http://geekswithblogs.net/mnf/aggbug/149630.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/Q-n9RB4WkQA" height="1" width="1"/&gt;</description><dc:creator>Michael Freidgeim</dc:creator><feedburner:origLink>http://geekswithblogs.net/mnf/archive/2012/05/15/read-it-later-pro-has-been-ruined-into-pocket-but.aspx</feedburner:origLink></item><item><title>2012 Transit of Venus - First Web Camera located.</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/xX4D7qnJrQk/2012-transit-of-venus---first-web-camm-located.aspx</link><pubDate>Tue, 15 May 2012 10:18:40 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/TATWORTH/archive/2012/05/15/2012-transit-of-venus---first-web-camm-located.aspx</guid><wfw:comment>http://geekswithblogs.net/TATWORTH/comments/149629.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/TATWORTH/comments/commentRss/149629.aspx</wfw:commentRss><comments>http://geekswithblogs.net/TATWORTH/archive/2012/05/15/2012-transit-of-venus---first-web-camm-located.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/TATWORTH/services/trackbacks/149629.aspx</trackback:ping><source url="http://geekswithblogs.net/TATWORTH/rss.aspx">2012 Transit of Venus - First Web Camera located.</source><description>Since the 2012 Transit of Venus is the last transit of Venus across the face of the Sun as viewed from Earth, for many years, being able to locate a web cam feed that will be in clear daylight for the whole of the transit period. So far I have only located one. &lt;br /&gt;&lt;br /&gt;This is at:  &lt;a target="_blank" href="http://www.transitofvenus.com.au/HOME.html"&gt;http://www.transitofvenus.com.au/HOME.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Historically the transit of Venus was very important for determining the absolute size of the solar system, however high power radar has allowed direct measurement of distance at any time.&lt;br /&gt; &lt;img src="http://geekswithblogs.net/TATWORTH/aggbug/149629.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/xX4D7qnJrQk" height="1" width="1"/&gt;</description><dc:creator>TATWORTH</dc:creator><feedburner:origLink>http://geekswithblogs.net/TATWORTH/archive/2012/05/15/2012-transit-of-venus---first-web-camm-located.aspx</feedburner:origLink></item><item><title>Debugging Castle WcfFacility installers</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/XagVPF9HT8M/debugging-castle-wcffacility-installers.aspx</link><pubDate>Tue, 15 May 2012 08:00:59 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/jeremyj/archive/2012/05/15/debugging-castle-wcffacility-installers.aspx</guid><wfw:comment>http://geekswithblogs.net/jeremyj/comments/149628.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/jeremyj/comments/commentRss/149628.aspx</wfw:commentRss><comments>http://geekswithblogs.net/jeremyj/archive/2012/05/15/debugging-castle-wcffacility-installers.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/jeremyj/services/trackbacks/149628.aspx</trackback:ping><source url="http://geekswithblogs.net/jeremyj/rss.aspx">Debugging Castle WcfFacility installers</source><description>&lt;div&gt;Stepping through IWindsorInstaller implementations in web services created using the WcfFacility&lt;sup&gt;[1]&lt;/sup&gt;
 is not as immediately accessible compared to debugging 
the start up of a console application. Just pressing F5 with the web service set as a start up 
project causes the start up code to have already been run before 
the debugger attaches to the IIS worker process. Fortunately there is a 
simple way of causing the start up code to be re-run whilst remaining 
attached to the IIS worker process, so that you can step through your 
Castle installers and access the debugger views.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

&lt;span class="pullout"&gt;Once you've attached to the worker process under the debugger
 you can just rebuild the web service project to force IIS to 
re-initialize the newly built assembly when it is next exercised.&lt;/span&gt;
&lt;div&gt; 
Once you've attached to the worker process under the debugger&lt;sup&gt;[2]&lt;/sup&gt;
 you can just rebuild the web service project to force IIS to 
re-initialize the newly built assembly when it is next exercised.
The 
IDE won't normally let you do this&lt;sup&gt;[3]&lt;/sup&gt; so you have to build 
the web service project outside the IDE that is running the debugger. Of
 the various ways of doing this i'd like to suggest running the .csproj 
file directly in MSBuild.exe on the command line (because it means that 
just pressing the up arrow and enter in the command window will easily 
let you re-build). So with the debugger attached to the IIS worker 
process of your web service, just re-build the web service project on 
the command line e.g. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe My.Web.Service.csproj&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As
 soon as you call any of its operations IIS will re-initialize the 
service causing the breakpoints to be hit. I hope this saved you some 
frustration as it took me a while to figure this one out. Happy 
Debugging.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[1] If you are using the Castle WcfFacility your My.Web.Service.svc will probably look something like this -&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;%@ ServiceHost Language="C#" &lt;/div&gt;&lt;div&gt;                Debug="true" &lt;/div&gt;&lt;div&gt;                Service="My.Web.Service" &lt;/div&gt;&lt;div&gt;                Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory, Castle.Facilities.WcfIntegration" %&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[2]  I.e.
 either you've just hit F5 with the web service project as the start up 
project, or you've attached to the worker process by selecting it in the
 processes list (If the worker process isn't showing in the list it 
might be because it isn't yet running, the worker process hosting the 
application pool can be started just by calling one of the web service 
operations. Alternatively you might have to tick the box to include 
processes from all sessions.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[3] I've 
definitely seen a bug in VS2010 SP1 where under rare circumstances it 
will let you, i have been able to do this once but now have no idea how 
to reproduce this issue now...&lt;/div&gt; &lt;img src="http://geekswithblogs.net/jeremyj/aggbug/149628.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/XagVPF9HT8M" height="1" width="1"/&gt;</description><dc:creator>jeremyj</dc:creator><feedburner:origLink>http://geekswithblogs.net/jeremyj/archive/2012/05/15/debugging-castle-wcffacility-installers.aspx</feedburner:origLink></item><item><title>Apache 2.4 and the missing SSL certificate chain issue, my notes.</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/isfOP6KWB7U/apache-2.4-and-the-missing-ssl-certificate-chain-issue-my.aspx</link><pubDate>Mon, 14 May 2012 22:50:10 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/TJ/archive/2012/05/15/apache-2.4-and-the-missing-ssl-certificate-chain-issue-my.aspx</guid><wfw:comment>http://geekswithblogs.net/TJ/comments/149626.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/TJ/comments/commentRss/149626.aspx</wfw:commentRss><comments>http://geekswithblogs.net/TJ/archive/2012/05/15/apache-2.4-and-the-missing-ssl-certificate-chain-issue-my.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/TJ/services/trackbacks/149626.aspx</trackback:ping><source url="http://geekswithblogs.net/TJ/rss.aspx">Apache 2.4 and the missing SSL certificate chain issue, my notes.</source><description>&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;I'm running Mahara in a Windows Server 2008 environment using Apache web server and just for fun I wanted to enable SSL :-).&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;I setup SSL and tested the setup using a self-signed certificate, all good, SSL was working.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;I requested a server certificate from our corporate CA, which is an intermediate CA for GlobalSign, this was done using an online MS certificate server service.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;When the certificate was ready, I revisit the site, and the certificate is installed automagically into the current user certificate store.&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Okay, so now I have a SSL certificate stored in the Windows certificate store, but I want to use it with Apache, s&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;o I'm sort of blending the MS way of doing things with the Apache way of doing things.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Here is what I did once I had the proper certificate.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;First of I needed to export the certificate from the current users certificate store so it can be used by Apache, t&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;o do this.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Fire up an MMC console, and add a certificate snap-in, selecting My users account&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Once opened, browse to the new certificate&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Right click on it and export&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Select, Yes, export the private key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Select, Include all certificates in the certification path if possible and Export all extended properties&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Enter a password &amp;lt;importprivatekeypassword&amp;gt; and confirm&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;An then enter a descriptive filename, I used "&lt;strong&gt;newcert-19-05-2012-with-privte-key.pfx&lt;/strong&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Next I need to convert the certificate to something Apache understands, and at the same time export the private key, as Apache needs the private key in a separate file when running on Windows.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;I copied "newcert-19-05-2012-with-privte-key.pfx" to the same folder as openssl.exe is located, c:\web\apache\bin, just to make it easier.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;I start an elevated command prompt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;CD to the folder where openssl.exe is located&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Run openssl and I get the OpenSSL&amp;gt; prompt.&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Now &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;I'm going to run the following commands&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;To export the private key file from the pfx file&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;pkcs12 -in newcert-19-04-2012-with-privte-key.pfx -nocerts -out key.pem &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;To export the certificate file from the pfx file&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;pkcs12 -in newcert-19-04-2012-with-privte-key.pfx -clcerts -nokeys -out cert.pem &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;To remove the passphrase from the private key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;rsa -in key.pem -out server.key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;This is what it looked like at the OpenSSL&amp;gt; prompt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;OpenSSL&amp;gt; pkcs12 -in newcert-19-04-2012-with-privte-key.pfx -nocerts -out key.pem&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;Enter Import Password:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;MAC verified OK&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;Enter PEM pass phrase:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;Verifying - Enter PEM pass phrase:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;OpenSSL&amp;gt; pkcs12 -in newcert-19-04-2012-with-privte-key.pfx -clcerts -nokeys -out cert.pem&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;Enter Import Password:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;MAC verified OK&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;OpenSSL&amp;gt; rsa -in key.pem -out server.key&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;Enter pass phrase for key.pem:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;writing RSA key&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;OpenSSL&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Now I have a server certificate "cert.pem", and a key file, "server.key"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;I copied these to where I'm storing my certificate files, c:\web\apache\cert&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Next updat &lt;strong&gt;httpd-ssl.conf&lt;/strong&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;SSLCertificateFile "c:/web/apache/cert/cert.pem"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;SSLCertificateKeyFile "c:/web/apache/cert/server.key "&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Restart Apache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;At this point the certificate worked, sort of...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;It was fine in Mozilla Firefox, but Internet Explorer&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;couldn't see the certificate chain. &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;To fix this I had to download the CA chain from the same server the certificate was requested, an then extract each of the 4 certificates in the certificate chain. &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;All the guides I read said I need the certificates as Base-64, and to use the Unix CAT command to copy them to the one file. &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;I tried doing this with a standard text editor, but that didn't work, I ended up using the DOS (Windows?) TYPE command.&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;So download the CA chain file&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Double click on the CA chain file, and then drill down to the CA and intermediate certificates &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Right click on each of the certificates starting from the top level certificate and export them as Base-64 encoded X.509 (.CER) files&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;I exported them as cert1.cer, cert2.cer, cert3.cer, cert4.cer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Now concatenate the certificates into one file using the "type" command&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;&lt;font face="Courier New"&gt;C:&amp;gt;Type cert1.cer cert2.cer cert3.cer cert4.cer &amp;gt;server-ca.crt&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Then I copied "server-ca.crt" to my certificate folder, c:\web\apache\cert&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Update httpd-ssl.conf&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;SSLCertificateChainFile "q:/webroot/apache/cert/server-ca.crt"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Restart Apache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Test, all good...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0cm 0cm 0pt" class="MsoPlainText"&gt;&lt;font size="2" face="Calibri"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;span style="mso-bidi-font-size: 10.5pt"&gt;Hope this helps someone, or me if I try to do this again :-)...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/TJ/aggbug/149626.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/isfOP6KWB7U" height="1" width="1"/&gt;</description><dc:creator>TJ</dc:creator><feedburner:origLink>http://geekswithblogs.net/TJ/archive/2012/05/15/apache-2.4-and-the-missing-ssl-certificate-chain-issue-my.aspx</feedburner:origLink></item><item><title>The Forefront Identity Manager Service cannot connect to the SQL Database Server. </title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/rGD58zcYaJI/the-forefront-identity-manager-service-cannot-connect-to-the-sql.aspx</link><pubDate>Mon, 14 May 2012 16:01:10 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/leonardm/archive/2012/05/14/the-forefront-identity-manager-service-cannot-connect-to-the-sql.aspx</guid><wfw:comment>http://geekswithblogs.net/leonardm/comments/149625.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/leonardm/comments/commentRss/149625.aspx</wfw:commentRss><comments>http://geekswithblogs.net/leonardm/archive/2012/05/14/the-forefront-identity-manager-service-cannot-connect-to-the-sql.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/leonardm/services/trackbacks/149625.aspx</trackback:ping><source url="http://geekswithblogs.net/leonardm/rss.aspx">The Forefront Identity Manager Service cannot connect to the SQL Database Server. </source><description>&lt;p style="margin: 0in 0in 10pt;" class="MsoNormal"&gt;&lt;font face="Calibri"&gt;After configuring user profile you get the correlation id
and in event logs you get &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0in 0in 0pt; line-height: normal; text-autospace: ; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;"&gt;The Forefront Identity Manager
Service cannot connect to the SQL Database Server. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin: 0in 0in 0pt; line-height: normal; text-autospace: ; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin: 0in 0in 0pt; line-height: normal; text-autospace: ; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;"&gt;The SQL Server could not be
contacted. The connection failure may be due to a network failure, firewall
configuration error, or other connection issue. Additionally, the SQL Server
connection information could be configured incorrectly. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin: 0in 0in 0pt; line-height: normal; text-autospace: ; mso-layout-grid-align: none;" class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin: 0in 0in 10pt;" class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;"&gt;Verify that the SQL Server is reachable from the
Forefront Identity Manager Service computer. Ensure that SQL Server is running,
that the network connection is active, and that the firewall is configured
properly. Last, verify the connection information has been configured properly.
This configuration is stored in the Windows Registry.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin: 0in 0in 10pt;" class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin: 0in 0in 10pt;" class="MsoNormal"&gt;&lt;font face="Calibri"&gt;Open central administration &lt;/font&gt;&lt;span style="font-family: Wingdings; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings;"&gt;à&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri"&gt;
security &lt;/font&gt;&lt;span style="font-family: Wingdings; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings;"&gt;à&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri"&gt;
Configure Service Account (On the drop down pick &lt;b style="mso-bidi-font-weight: normal;"&gt;Farm Account) &lt;/b&gt;and ensure that the select and account for the
component is the same as the one you are using to configure FIM (User profiles)
the OK. &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0in 0in 10pt;" class="MsoNormal"&gt;&lt;font face="Calibri"&gt;That should fix that issue. &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p style="margin: 0in 0in 10pt;" class="MsoNormal"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;

&lt;p style="margin: 0in 0in 10pt;" class="MsoNormal"&gt;&lt;font face="Calibri"&gt;Happy FIMing&lt;/font&gt;&lt;/p&gt;

 &lt;img src="http://geekswithblogs.net/leonardm/aggbug/149625.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/rGD58zcYaJI" height="1" width="1"/&gt;</description><dc:creator>Leonard Mwangi</dc:creator><feedburner:origLink>http://geekswithblogs.net/leonardm/archive/2012/05/14/the-forefront-identity-manager-service-cannot-connect-to-the-sql.aspx</feedburner:origLink></item><item><title>Is It Done? Really?</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/OGVkZlIEmBw/is-it-done-really.aspx</link><pubDate>Mon, 14 May 2012 08:29:35 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/jonathanfmills/archive/2012/05/14/is-it-done-really.aspx</guid><wfw:comment>http://geekswithblogs.net/jonathanfmills/comments/149624.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/jonathanfmills/comments/commentRss/149624.aspx</wfw:commentRss><comments>http://geekswithblogs.net/jonathanfmills/archive/2012/05/14/is-it-done-really.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/jonathanfmills/services/trackbacks/149624.aspx</trackback:ping><source url="http://geekswithblogs.net/jonathanfmills/rss.aspx">Is It Done? Really?</source><description>Everyone has done it, you know you have too. When someone asks you for a status update on a new feature you just finished coding, you say "That's Done!" Think about what you just said for a minute, is it really done? Can someone use that feature in production for its intended purpose? That's really what done means, right? To the end user, done means its up and running, in production, providing value. Code complete is just another stage in the pipeline getting us out to really done.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You may say, that is a semantic argument. Your piece is done, so you get to say done. I would argue, its a mindset discussion. As developers, if we think about our piece, and only our piece, we say done when our piece is done. Agile is about picking your head up and looking at more than just your piece. Collaboration and a sense of unity across the entire product team is critical to a successful agile organization. We as developers need to move away from our tasks as "in dev" and "done". We have to get to the point where we think of a feature in development, or in test, or in requirements.  We need to pick our heads up and see the whole picture, not just our piece. Next time your manager or scrum master asks you for a status on a feature you just completed coding, resist the urge. Instead of saying, "that's done", give them the actual status of the feature. Your larger team will thank you for it. &lt;/div&gt; &lt;img src="http://geekswithblogs.net/jonathanfmills/aggbug/149624.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/OGVkZlIEmBw" height="1" width="1"/&gt;</description><dc:creator>Jonathan Mills</dc:creator><feedburner:origLink>http://geekswithblogs.net/jonathanfmills/archive/2012/05/14/is-it-done-really.aspx</feedburner:origLink></item><item><title>Who is Expression Web aimed at and at what market? </title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/eo7dySdGwbo/who-is-expression-web-aimed-at-and-at-what-market.aspx</link><pubDate>Mon, 14 May 2012 09:05:30 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/ihaynes/archive/2012/05/13/who-is-expression-web-aimed-at-and-at-what-market.aspx</guid><wfw:comment>http://geekswithblogs.net/ihaynes/comments/149622.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/ihaynes/comments/commentRss/149622.aspx</wfw:commentRss><comments>http://geekswithblogs.net/ihaynes/archive/2012/05/13/who-is-expression-web-aimed-at-and-at-what-market.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://geekswithblogs.net/ihaynes/services/trackbacks/149622.aspx</trackback:ping><source url="http://geekswithblogs.net/ihaynes/rss.aspx">Who is Expression Web aimed at and at what market? </source><description>&lt;p&gt;&lt;font size="2" face="Tahoma"&gt;In answering this question it helps to look at the overall creation of a website and the processes involved.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Tahoma"&gt;The term 'web design' still in common use, is something of a misnomer. 'Web creation' seems to be a better term and it involves three distinct processes.&lt;/font&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;font size="2" face="Tahoma"&gt;The design of the ‘look and feel’ of the site or the ‘UI’. This is often (and best) done by someone with artistic or graphic design skills, but with an appreciation of what is possible on the web. This is the real ‘design’ activity.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font size="2" face="Tahoma"&gt;The translation of this design into a functioning page template, using HTML, CSS and JavaScript. A process known as ‘front end’ development. An increasingly complex task given the rise of the mobile web.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font size="2" face="Tahoma"&gt;If required, coding in a server-side language of dynamic functionality, possibly with  a connection to a data source of some sort. The process of ‘back end’ development.&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;font size="2" face="Tahoma"&gt;Now obviously there are many scenarios where two or even all three of these are handled by the same individual but these are still the processes involved and all require skill, experience and appropriate tools for the technologies involved.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Tahoma"&gt;It’s clear from these processes where Expression Web sits, as a ‘front end’ development tool and therefore aimed at ‘front end’ developers, not ‘designers’ as such. &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Tahoma"&gt;It also follows that as a tool for this EW needs to keep up to date with the technologies involved, something that sadly hasn’t happened. Nor does Microsoft offer any other solution for front end development.&lt;/font&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/ihaynes/aggbug/149622.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/eo7dySdGwbo" height="1" width="1"/&gt;</description><dc:creator>ihaynes</dc:creator><feedburner:origLink>http://geekswithblogs.net/ihaynes/archive/2012/05/13/who-is-expression-web-aimed-at-and-at-what-market.aspx</feedburner:origLink></item><item><title>Stylecop 4.7.20.0 has been released</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/m3v-y667kQQ/stylecop-4.7.20.0-has-been-released.aspx</link><pubDate>Mon, 14 May 2012 05:46:35 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/TATWORTH/archive/2012/05/14/stylecop-4.7.20.0-has-been-released.aspx</guid><wfw:comment>http://geekswithblogs.net/TATWORTH/comments/149621.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/TATWORTH/comments/commentRss/149621.aspx</wfw:commentRss><comments>http://geekswithblogs.net/TATWORTH/archive/2012/05/14/stylecop-4.7.20.0-has-been-released.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/TATWORTH/services/trackbacks/149621.aspx</trackback:ping><source url="http://geekswithblogs.net/TATWORTH/rss.aspx">Stylecop 4.7.20.0 has been released</source><description>Stylecop 4.7.20.0 has been released at &lt;a target="_blank" href="http://stylecop.codeplex.com/releases/view/79972"&gt;http://stylecop.codeplex.com/releases/view/79972&lt;/a&gt;&lt;br /&gt;Release Notes
    
        &lt;div class="wikidoc"&gt;Compatible with the Visual Studio 11 Preview.&lt;br /&gt;&lt;br /&gt;Install order should be :
&lt;ul&gt;&lt;li&gt;VS10&lt;/li&gt;&lt;li&gt;VS11&lt;/li&gt;&lt;li&gt;R#6.1.1 msi (for VS10)&lt;/li&gt;&lt;li&gt;R#6.1.1 vsix (for VS11)&lt;/li&gt;&lt;li&gt;StyleCop 4.7&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;This version is now compatible with R# 5.1 (5.1.3000.12), R# 6.0 (6.0.2202.688), R# 6.1 (6.1.37.86) and R# 6.1.1 (6.1.1000.82).&lt;br /&gt;&lt;br /&gt;Here are the bug details for &lt;a href="http://stylecop.codeplex.com/workitem/list/advanced?keyword=&amp;amp;status=Fixed&amp;amp;type=All&amp;amp;priority=All&amp;amp;release=4.7&amp;amp;assignedTo=All&amp;amp;component=All&amp;amp;sortField=Id&amp;amp;sortDirection=Ascending&amp;amp;page=0"&gt;fixed in 4.7&lt;/a&gt; and  &lt;a href="http://stylecop.codeplex.com/workitem/list/advanced?keyword=&amp;amp;status=Closed&amp;amp;type=All&amp;amp;priority=All&amp;amp;release=4.7&amp;amp;assignedTo=All&amp;amp;component=All&amp;amp;sortField=Id&amp;amp;sortDirection=Ascending&amp;amp;page=0"&gt;closed in 4.7&lt;/a&gt; issues (over 100 issues fixed since 4.6)&lt;br /&gt;&lt;br /&gt;Here are the bug details for all issues since 4.3.3.0 that have been  &lt;a href="http://stylecop.codeplex.com/workitem/list/advanced?keyword=&amp;amp;status=Fixed&amp;amp;type=All&amp;amp;priority=All&amp;amp;release=All&amp;amp;assignedTo=All&amp;amp;component=All&amp;amp;sortField=Id&amp;amp;sortDirection=Ascending&amp;amp;page=0"&gt;fixed&lt;/a&gt; and  &lt;a href="http://stylecop.codeplex.com/workitem/list/advanced?keyword=&amp;amp;status=Closed&amp;amp;type=All&amp;amp;priority=All&amp;amp;release=All&amp;amp;assignedTo=All&amp;amp;component=All&amp;amp;sortField=Id&amp;amp;sortDirection=Ascending&amp;amp;page=0"&gt;closed&lt;/a&gt; (over 450 fixes).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Release Notes&lt;/b&gt;&lt;br /&gt;Added
 support for cultures into the Settings.StyleCop file. Currently 
supports en-US,en-GB, fr-FR, pl-PL, pt-BR, de-DE and ru-RU.&lt;/div&gt; &lt;img src="http://geekswithblogs.net/TATWORTH/aggbug/149621.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/m3v-y667kQQ" height="1" width="1"/&gt;</description><dc:creator>TATWORTH</dc:creator><feedburner:origLink>http://geekswithblogs.net/TATWORTH/archive/2012/05/14/stylecop-4.7.20.0-has-been-released.aspx</feedburner:origLink></item><item><title>NYC Metro Area Community Dinner</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/IXVjAzOZbYo/nyc-metro-area-community-dinner.aspx</link><pubDate>Sun, 13 May 2012 22:27:23 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/MOSSLover/archive/2012/05/14/nyc-metro-area-community-dinner.aspx</guid><wfw:comment>http://geekswithblogs.net/MOSSLover/comments/149620.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/MOSSLover/comments/commentRss/149620.aspx</wfw:commentRss><comments>http://geekswithblogs.net/MOSSLover/archive/2012/05/14/nyc-metro-area-community-dinner.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/MOSSLover/services/trackbacks/149620.aspx</trackback:ping><source url="http://geekswithblogs.net/MOSSLover/rss.aspx">NYC Metro Area Community Dinner</source><description>&lt;p&gt;So I have decided to hold a community dinner the first week of June.  I invited a bunch of MS community members who run user groups or contribute a lot in the NYC Metro area.  If anyone is interested drop me comment on this blog with your email address.  I won’t publish the comment with your email in case you don’t want everyone to see your address.  I just figured that some people might see this blog that I missed via email.  I am also going to spam the main community list for njny metro area.  Hopefully, we can get a good turn out from the community at large and have some good dialog discussions on events we are running.  I am sure a lot of don’t see each other often so I figured why not.  Anyway hope to see you all at the dinner.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c7f887b8-00aa-435f-b4f1-9f1ad1b0ad60" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Microsoft+Community" rel="tag"&gt;Microsoft Community&lt;/a&gt;,&lt;a href="http://technorati.com/tags/New+York+Metro+Microsoft+Community" rel="tag"&gt;New York Metro Microsoft Community&lt;/a&gt;&lt;/div&gt; &lt;img src="http://geekswithblogs.net/MOSSLover/aggbug/149620.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/IXVjAzOZbYo" height="1" width="1"/&gt;</description><dc:creator>MOSSLover</dc:creator><feedburner:origLink>http://geekswithblogs.net/MOSSLover/archive/2012/05/14/nyc-metro-area-community-dinner.aspx</feedburner:origLink></item><item><title>Project SET Day&amp;ndash;Insights and Observations</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/0NbrAP3fAzw/project-set-dayndashinsights-and-observations.aspx</link><pubDate>Sun, 13 May 2012 18:00:35 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/lorilalonde/archive/2012/05/13/project-set-dayndashinsights-and-observations.aspx</guid><wfw:comment>http://geekswithblogs.net/lorilalonde/comments/149619.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/lorilalonde/comments/commentRss/149619.aspx</wfw:commentRss><comments>http://geekswithblogs.net/lorilalonde/archive/2012/05/13/project-set-dayndashinsights-and-observations.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/lorilalonde/services/trackbacks/149619.aspx</trackback:ping><source url="http://geekswithblogs.net/lorilalonde/rss.aspx">Project SET Day&amp;ndash;Insights and Observations</source><description>&lt;p&gt;&lt;font size="2" face="Calibri"&gt;A few weeks ago, I had the privilege of being able to participate in Conestoga College’s Software Engineering Technology project demo day as a guest judge, along with 4 other members of the IT community. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Calibri"&gt;This event is held every year at the end of April, and provides graduating students the opportunity to present their group projects to those in attendance, discussing the business problem it solved, the challenges they faced, how they addressed those challenges, and the future direction they have planned for their product. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Calibri"&gt;My first impression when walking into the room was a positive one. The students were dressed to the nines and were very enthusiastic about discussing their projects, as well as answering any questions. They stood at their project booths patiently, willing to discuss their projects one-on-one with passers-by, and to provide a working demo of their product.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Calibri"&gt;Projects ranged from a mobile Android app that would serve as a mobile recording studio for guitarists to an inventory tracking application to an educational application with a web site that tracked the child’s progress which parents could log in to view details on. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Calibri"&gt;During the formal presentation rounds, the students not only demonstrated that they had the technical skills necessary to hit the ground running in the workforce, but they also demonstrated collaborative team work, business acumen, and real passion for their work. They handled questions with ease, provided insights into the obstacles they faced, how they learned from them, and how they overcame them.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Calibri"&gt;Along with the other members of the judging panel, I participated in deliberations and we had to make the difficult decision to select a winning team. After much discussion, we chose a team that had not only developed their intended project, a mobile app to serve data from an existing Health &amp;amp; Safety Watch web site, but had gone above and beyond to redesign the website to conform to the look and feel of the mobile app design, making it simple, clean, concise and easy to use. In fact, I have the site bookmarked and check it daily: &lt;/font&gt;&lt;a href="http://www.healthandsafetywatch.com"&gt;&lt;font size="2" face="Calibri"&gt;http://www.healthandsafetywatch.com&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Calibri"&gt;All in all, each student that participated in this event proved that they are all winners who are more than well-equipped to join the workforce and make an impact. If you have the opportunity to mentor a new graduate, I hope you do so wholeheartedly. You may find that, in turn, you will learn from them as well.&lt;/font&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/lorilalonde/aggbug/149619.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/0NbrAP3fAzw" height="1" width="1"/&gt;</description><dc:creator>Lori Lalonde</dc:creator><feedburner:origLink>http://geekswithblogs.net/lorilalonde/archive/2012/05/13/project-set-dayndashinsights-and-observations.aspx</feedburner:origLink></item><item><title>C# Tutorial for log4net</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/MdHkVZg9lXY/c-tutorial-for-log4net-again.aspx</link><pubDate>Sun, 13 May 2012 16:54:59 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/swisscoder/archive/2012/05/13/c-tutorial-for-log4net-again.aspx</guid><wfw:comment>http://geekswithblogs.net/swisscoder/comments/149601.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/swisscoder/comments/commentRss/149601.aspx</wfw:commentRss><comments>http://geekswithblogs.net/swisscoder/archive/2012/05/13/c-tutorial-for-log4net-again.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/swisscoder/services/trackbacks/149601.aspx</trackback:ping><source url="http://geekswithblogs.net/swisscoder/rss.aspx">C# Tutorial for log4net</source><description>Here's a short tutorial on how to use log4net in C#&lt;br /&gt;&lt;br /&gt;1. Get log4net from the &lt;a target="_blank" href="http://logging.apache.org/log4net/download.html"&gt;apache website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;2. Open your project with visual studio.&lt;br /&gt;&lt;br /&gt;3.

 Add the reference to your project: You find the reference in the zip 
that you just downloaded: \bin\net\xxx\release\log4net.dll. xxx is your 
.net version.&lt;br /&gt;&lt;br /&gt;4. Add the &lt;a target="_blank" href="http://logging.apache.org/log4net/release/config-examples.html"&gt;Appender &lt;/a&gt;section to your app.config. The following code uses a file for the logging:&lt;br /&gt;
&lt;br /&gt;
&lt;font color="#000080" face="Courier New" size="2"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;
  &amp;lt;configSections&amp;gt;&lt;br /&gt;
    &amp;lt;section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/&amp;gt;&lt;br /&gt;
  &amp;lt;/configSections&amp;gt;&lt;br /&gt;
  &amp;lt;log4net&amp;gt;&lt;br /&gt;
    &amp;lt;root&amp;gt;&lt;br /&gt;
      &amp;lt;level value="DEBUG" /&amp;gt;&lt;br /&gt;
      &amp;lt;appender-ref ref="LogFileAppender" /&amp;gt;&lt;br /&gt;
    &amp;lt;/root&amp;gt;&lt;br /&gt;
    &amp;lt;appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" &amp;gt;&lt;br /&gt;
      &amp;lt;param name="File" value="log-file.txt" /&amp;gt;&lt;br /&gt;
      &amp;lt;param name="AppendToFile" value="true" /&amp;gt;&lt;br /&gt;
      &amp;lt;rollingStyle value="Size" /&amp;gt;&lt;br /&gt;
      &amp;lt;maxSizeRollBackups value="10" /&amp;gt;&lt;br /&gt;
      &amp;lt;maximumFileSize value="10MB" /&amp;gt;&lt;br /&gt;
      &amp;lt;staticLogFileName value="true" /&amp;gt;&lt;br /&gt;
      &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;br /&gt;
        &amp;lt;param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /&amp;gt;&lt;br /&gt;
      &amp;lt;/layout&amp;gt;&lt;br /&gt;
    &amp;lt;/appender&amp;gt;&lt;br /&gt;
  &amp;lt;/log4net&amp;gt;&lt;br /&gt;
&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
5. Use the following code to use the configuration you just added to app.config:&lt;br /&gt;
&lt;br /&gt;
&lt;font color="#D3D3D3" face="Courier New"&gt;&lt;font color="#000080" size="2"&gt;static void Main()&lt;br /&gt;
{&lt;br /&gt;
      log4net.Config.XmlConfigurator.Configure();&lt;br /&gt;
...&lt;/font&gt;&lt;br /&gt;
&lt;/font&gt;&lt;br /&gt;6. To log use the following code:&lt;br /&gt;&lt;br /&gt;&lt;font color="#000080" face="Courier New" size="2"&gt;using log4net;&lt;br /&gt;
...&lt;br /&gt;
private static readonly ILog log = LogManager.GetLogger(typeof(Bar));&lt;br /&gt;
log.Debug("this is the first log message");&lt;br /&gt;
...&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;7. If Visual studio doesn't recognize log4net. Configure your project like this:&lt;br /&gt;&lt;br /&gt;Visual Studio -&amp;gt; project -&amp;gt; project name properties -&amp;gt; target framework -&amp;gt; .net Framework (not client)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;img src="http://geekswithblogs.net/swisscoder/aggbug/149601.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/MdHkVZg9lXY" height="1" width="1"/&gt;</description><dc:creator>huwyss</dc:creator><feedburner:origLink>http://geekswithblogs.net/swisscoder/archive/2012/05/13/c-tutorial-for-log4net-again.aspx</feedburner:origLink></item><item><title>Mother&amp;rsquo;s Day - To The Forgotten Moms&amp;hellip;</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/IoRJ-RsCO50/149598.aspx</link><pubDate>Sun, 13 May 2012 14:53:34 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/dlussier/archive/2012/05/13/149598.aspx</guid><wfw:comment>http://geekswithblogs.net/dlussier/comments/149598.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/dlussier/comments/commentRss/149598.aspx</wfw:commentRss><comments>http://geekswithblogs.net/dlussier/archive/2012/05/13/149598.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://geekswithblogs.net/dlussier/services/trackbacks/149598.aspx</trackback:ping><source url="http://geekswithblogs.net/dlussier/rss.aspx">Mother&amp;rsquo;s Day - To The Forgotten Moms&amp;hellip;</source><description>&lt;p&gt;Today is a day to celebrate mother’s everywhere. There will be breakfasts cooked, cards opened, gifts given, brunches and dinners shared. There will be church services where mothers are given flowers from their children and sermons will talk of the blessings mothers are. People who aren’t even related will wish others who are mothers a “Happy Mother’s Day”. And all of this will go on without any consideration or thought to the forgotten mothers in our midst.&lt;/p&gt;  &lt;p&gt;For many, mother’s day (and father’s day) isn’t a celebration. It’s a reminder. A reminder of what could have been. I reminder of hope lost, of dreams shattered, of “what if’s”.&lt;/p&gt;  &lt;p align="center"&gt;***&lt;/p&gt;  &lt;p&gt;It’s their first ultrasound. They wait with anticipation to see the little heartbeat on the monitor. Something is wrong though…the doctor furrows his brow. He points to where the fetus is attached, and then delivers words like a sledgehammer to the heart: There’s no heartbeat.&lt;/p&gt;  &lt;p align="center"&gt;***&lt;/p&gt;  &lt;p&gt;She cradles her baby in her arms, singing her a lullaby. There’s a knock on the door. It’s time. She hands her daughter to the social worker along with a bag filled with her toys and clothes. She kisses her daughters forehead and says goodbye, watching the social worker get into her car and drive off into the night. The adoption process had gone well and there was no warning signs. But she knew this was a possibility. 16 days ago her daughter was born, 14 days ago she was brought home, and 2 days ago the birth mother changed her mind and wanted her baby back.&lt;/p&gt;  &lt;p align="center"&gt;***&lt;/p&gt;  &lt;p align="left"&gt;The local high school is getting ready for graduation. Fundraisers are being organized, dresses are being ordered, and plans for parties are being made. She hears over coffee with friends how their kids are getting ready to leave high school and embark on the next phase of life at college. She hears them reminisce on various events of the last 4 years and how their kids have grown into fine young adults. They finish coffee, say goodbye, and she drives to the florist. Thirty minutes later she drives to the cemetery, placing the flowers on her son’s grave. 7 years later, it still feels like that first night when she got that horrible phone call.&lt;/p&gt;  &lt;p align="center"&gt;***&lt;/p&gt;  &lt;p align="left"&gt;So to those moms out there that don’t have a section at Hallmark devoted to them, to those moms who keep their pain hidden and tolerate Mother’s Day, to those moms that never got to meet their children or did for only a short amount of time, and especially to those moms that don’t feel that today applies to them:&lt;/p&gt;  &lt;p align="left"&gt;This is your day to recognize the sacrifices you made, emotionally/physically/spiritually, in giving your heart to another human being. This is your day to acknowledge the care, nurturing, and love that you showered on your child, regardless of how long you had with them. That doesn’t make the pain and memories hurt any less, but please know that in the frenzy of Mother’s Day you are not forgotten.&lt;/p&gt;  &lt;p align="left"&gt;You are a mother. This is your day. Happy Mother’s Day.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/dlussier/aggbug/149598.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/IoRJ-RsCO50" height="1" width="1"/&gt;</description><dc:creator>D'Arcy Lussier</dc:creator><feedburner:origLink>http://geekswithblogs.net/dlussier/archive/2012/05/13/149598.aspx</feedburner:origLink></item><item><title>Quick Analysis of Popular Canon and Nikon DSLR Cameras</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/U1CF-FiJUsw/149597.aspx</link><pubDate>Sun, 13 May 2012 11:31:37 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/kit/archive/2012/05/13/149597.aspx</guid><wfw:comment>http://geekswithblogs.net/kit/comments/149597.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/kit/comments/commentRss/149597.aspx</wfw:commentRss><comments>http://geekswithblogs.net/kit/archive/2012/05/13/149597.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/kit/services/trackbacks/149597.aspx</trackback:ping><source url="http://geekswithblogs.net/kit/rss.aspx">Quick Analysis of Popular Canon and Nikon DSLR Cameras</source><description>&lt;p&gt;Photo quality aside, it seems that Canon DSLRs are more popular than Nikon DSLRs right now based on Flickr stats.&lt;/p&gt;&lt;p&gt;Below is a ranking of popularity based on daily users (taken from Flickr.com)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Canon Camera (Average daily users)&lt;br /&gt;&lt;/strong&gt;EOS 5D Mark II (4350) $2500&lt;br /&gt;EOS REBEL T2i / 550D (3908) $500-$600&lt;br /&gt;EOS 7D (3577) $1500-$1800&lt;br /&gt;EOS REBEL T1i / 500D (2507) $400-$500&lt;br /&gt;EOS 60D (2219) $800-$1300&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Nikon Camera (Average daily users)&lt;br /&gt;&lt;/strong&gt;D90 (3985) $1000-$1200&lt;br /&gt;D7000 (2664) $1200-$1500&lt;br /&gt;D3100 (2173) $500-$700&lt;br /&gt;D700 (1912) $2200-$3000&lt;br /&gt;D5000 (1521) $600-$1000 (superseded by D5100)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Key to below stats:&lt;/p&gt;&lt;p&gt; # of items - This is the total number of photos uploaded per model.&lt;br /&gt;Avg. daily users  - This is the number of Flickr members who uploaded 1 or more photos yesterday.&lt;br /&gt; Activity Factor The "Activity Factor" is a number derived from photos, members and a model's rank to indicate cameras that are used "a lot".&lt;br /&gt;Type Point &amp;amp; Shoot / DSLR / Cameraphone / Camcorder&lt;br /&gt;Rank A model's rank (within its brand) is based on how many people used it yesterday.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Canon Popularity&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://i78.photobucket.com/albums/j95/kit_ong/Camera/CanonPopularity.png" width="813" height="745" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Nikon Popularity&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://i78.photobucket.com/albums/j95/kit_ong/Camera/NikonPopularity.png" width="817" height="755" /&gt;&lt;/p&gt;&lt;p&gt;Canon DSLR&lt;/p&gt;&lt;p&gt;&lt;img style="width: 832px; height: 477px;" src="http://i78.photobucket.com/albums/j95/kit_ong/Camera/CanonDSLR.png" width="901" height="477" /&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Nikon DSLR&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="width: 821px; height: 335px;" src="http://i78.photobucket.com/albums/j95/kit_ong/Camera/NikonDSLR.png" width="772" height="335" /&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;Links for more info.&lt;br /&gt;&lt;a href="http://www.flickr.com/cameras/canon/"&gt;http://www.flickr.com/cameras/canon/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/cameras/nikon/"&gt;http://www.flickr.com/cameras/nikon/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Template:Canon_DSLR_cameras"&gt;http://en.wikipedia.org/wiki/Template:Canon_DSLR_cameras&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Template:Nikon_DSLR_cameras"&gt;http://en.wikipedia.org/wiki/Template:Nikon_DSLR_cameras&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/kit/aggbug/149597.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/U1CF-FiJUsw" height="1" width="1"/&gt;</description><dc:creator>Kit Ong</dc:creator><feedburner:origLink>http://geekswithblogs.net/kit/archive/2012/05/13/149597.aspx</feedburner:origLink></item><item><title>How to do debugging with visual studio 2008/2010 ?</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/pR6EL6GIBF4/how-to-debugging-with-visual-studio-20082010.aspx</link><pubDate>Sat, 12 May 2012 12:51:04 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/Chandradev/archive/2012/05/12/how-to-debugging-with-visual-studio-20082010.aspx</guid><wfw:comment>http://geekswithblogs.net/Chandradev/comments/149593.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/Chandradev/comments/commentRss/149593.aspx</wfw:commentRss><comments>http://geekswithblogs.net/Chandradev/archive/2012/05/12/how-to-debugging-with-visual-studio-20082010.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/Chandradev/services/trackbacks/149593.aspx</trackback:ping><source url="http://geekswithblogs.net/Chandradev/rss.aspx">How to do debugging with visual studio 2008/2010 ?</source><description>Hi&lt;br /&gt;&lt;br /&gt;If you have good debugging skill then you can save lots of time. In visual studio  lots of options are  available for debugging. &lt;br /&gt;&lt;br /&gt;Here are some good URL for debugging. It will be really useful in our daily working project.&lt;br /&gt;&lt;br /&gt;http://www.codeproject.com/Articles/309781/Advanced-Debugging-in-Visual-Studio&lt;br /&gt;http://weblogs.asp.net/scottgu/archive/2010/08/18/debugging-tips-with-visual-studio-2010.aspx&lt;br /&gt;http://www.codeproject.com/Articles/79508/Mastering-Debugging-in-Visual-Studio-2010-A-Beginn&lt;br /&gt;http://www.dotnetperls.com/debugging&lt;br /&gt;http://geekswithblogs.net/sdorman/archive/2009/02/14/visual-studio-2008-debugging-ndash-the-watch-window.aspx&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Debugging in  loop&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;http://www.c-sharpcorner.com/uploadfile/suchit_84/debugging-tips-using-visual-studio/&lt;br /&gt;http://blog.dreamlabsolutions.com/post/2008/12/11/Debugging-tips-and-tricks-for-Visual-Studio.aspx&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Debugging in Store Procedure&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;http://codeasp.net/blogs/chandradev/microsoft-net/1901/how-to-debug-store-procedure-in-sqlserver&lt;br /&gt;&lt;br /&gt;I hope it will help to someone&lt;br /&gt;&lt;br /&gt; &lt;img src="http://geekswithblogs.net/Chandradev/aggbug/149593.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/pR6EL6GIBF4" height="1" width="1"/&gt;</description><dc:creator>Chandradev</dc:creator><feedburner:origLink>http://geekswithblogs.net/Chandradev/archive/2012/05/12/how-to-debugging-with-visual-studio-20082010.aspx</feedburner:origLink></item><item><title>Links about SQL PIVOT</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/1iyQWEHK5BM/links-about-sql-pivot.aspx</link><pubDate>Sat, 12 May 2012 08:34:26 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/mnf/archive/2012/05/12/links-about-sql-pivot.aspx</guid><wfw:comment>http://geekswithblogs.net/mnf/comments/149592.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/mnf/comments/commentRss/149592.aspx</wfw:commentRss><comments>http://geekswithblogs.net/mnf/archive/2012/05/12/links-about-sql-pivot.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/mnf/services/trackbacks/149592.aspx</trackback:ping><source url="http://geekswithblogs.net/mnf/rss.aspx">Links about SQL PIVOT</source><description>&lt;p&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;One of my colleagues asked how to create SQL query to show results as columns of a row, that actually stored in multiple rows in the table. Other co-worker suggested to use cursor to manually generate required rows.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;I’ve found a few links about SQL PIVOT.  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;It is easy to start with&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.kodyaz.com/articles/t-sql-pivot-tables-in-sql-server-tutorial-with-examples.aspx"&gt;&lt;span style="color: rgb(17, 85, 204); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;http://www.kodyaz.com/articles/t-sql-pivot-tables-in-sql-server-tutorial-with-examples.aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;or &lt;/span&gt;&lt;a href="http://programmingsolution.net/post/SQL-Server-Pivot-Converting-Rows-to-Columns-with-Dynamic-Query.aspx"&gt;&lt;span style="color: rgb(17, 85, 204); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;http://programmingsolution.net/post/SQL-Server-Pivot-Converting-Rows-to-Columns-with-Dynamic-Query.aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;More detailed are articles written by &lt;/span&gt;&lt;a href="http://www.sqlmag.com/author/5779340/ItzikBenGan"&gt;&lt;span style="color: rgb(17, 85, 204); font-family: Georgia; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: rgb(255, 255, 255);"&gt;Itzik Ben-Gan&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Georgia; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: rgb(255, 255, 255);"&gt;&lt;/span&gt;&lt;a href="http://www.sqlmag.com/article/tsql3/pivot-or-unpivot-your-data"&gt;&lt;span style="color: rgb(17, 85, 204); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;http://www.sqlmag.com/article/tsql3/pivot-or-unpivot-your-data&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;and&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.sqlmag.com/content1/topic/pivot-or-unpivot-your-data/catpath/tsql3/page/2compaslightly"&gt;&lt;span style="color: rgb(17, 85, 204); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;http://www.sqlmag.com/content1/topic/pivot-or-unpivot-your-data/catpath/tsql3/page/2compaslightly&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;  &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 51); font-family: Georgia; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: rgb(255, 255, 255);"&gt;How to use Pivoting Without Aggregation is described in&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 24px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;&lt;/span&gt;&lt;a href="http://www.sqlmag.com/article/tsql3/pivoting-without-aggregation"&gt;&lt;span style="color: rgb(17, 85, 204); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt;http://www.sqlmag.com/article/tsql3/pivoting-without-aggregation&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; background-color: transparent;"&gt; &lt;/span&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/mnf/aggbug/149592.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/1iyQWEHK5BM" height="1" width="1"/&gt;</description><dc:creator>Michael Freidgeim</dc:creator><feedburner:origLink>http://geekswithblogs.net/mnf/archive/2012/05/12/links-about-sql-pivot.aspx</feedburner:origLink></item><item><title>Promoting BizTalk in your organisation</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/4V7wHHrnwLs/149591.aspx</link><pubDate>Fri, 11 May 2012 20:26:26 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/michaelstephenson/archive/2012/05/11/149591.aspx</guid><wfw:comment>http://geekswithblogs.net/michaelstephenson/comments/149591.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/michaelstephenson/comments/commentRss/149591.aspx</wfw:commentRss><comments>http://geekswithblogs.net/michaelstephenson/archive/2012/05/11/149591.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/michaelstephenson/services/trackbacks/149591.aspx</trackback:ping><source url="http://geekswithblogs.net/michaelstephenson/rss.aspx">Promoting BizTalk in your organisation</source><description>&lt;p&gt;This week I was working with a customer and one of the interesting things in the organisation is that they have a fairly large investment in BizTalk but in general few people in the organisation are knowledgeable about how important a role it plays.  I decided it might be interesting to do a small PR exercise; I would write a little post with 10 bits of information about their BizTalk investment that they might not be aware of.  It was also interesting that I found out a few things that I didn't know myself in terms of the stats.
&lt;/p&gt;&lt;p&gt;The idea of the post was as follows:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It should be written in a not overly technical language so it could be given to business people
&lt;/li&gt;&lt;li&gt;It should talk about some of the business processes
&lt;/li&gt;&lt;li&gt;We would like to talk about some technical things but it must be explained with examples which are not technical
&lt;/li&gt;&lt;li&gt;It might reference things that the organisation does particularly well
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Below is an example of the article for a fictitious company called Acme.
&lt;/p&gt;&lt;h1&gt;10 things you might not know about BizTalk at Acme
&lt;/h1&gt;&lt;p&gt;BizTalk is a black box which plays a very important part in the Acme application architecture. A lot of people have probably heard of it but don't know much about what it does. This article will help to tell you a little more about what it is and its role.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;1.&lt;span style="font-size: 7pt;"&gt;
		&lt;/span&gt;What is BizTalk
&lt;/h2&gt;&lt;p&gt;BizTalk is a product from Microsoft which is a centralised Integration Server platform. It is used to develop solutions to integrate your applications.
&lt;/p&gt;&lt;p&gt;As a platform it allows you to develop solutions from simple application connectivity to complex ESB, hybrid Cloud or B2B scenarios. The platform allows you to host these integration solutions side by side so they can benefit from the investment made in each other.
&lt;/p&gt;&lt;p&gt;BizTalk provides many "quality of service" features such as a scalable hosting environment and administration and management tools which let you support solutions in production.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;2.&lt;span style="font-size: 7pt;"&gt;
		&lt;/span&gt;Where does it fit at Acme
&lt;/h2&gt;&lt;p&gt;At Acme over the years we have developed many integration solutions with BizTalk. Some of the bigger better known solutions include "process a" instances between application A and application B most of the interaction between these applications happens via BizTalk messaging and workflow. BizTalk deals with complex message transformation between the applications, provides durable messaging to handle any server downtime and fault handling in addition to workflow to manage the system to system integration processing.
&lt;/p&gt;&lt;p&gt;In Acme almost all documents which go to customers will go via an application called "application c". BizTalk enables the integration from "application a" into "application c" and BizTalk handles both real time document requests and heavy duty batch processing. BizTalk makes it easier for these two applications to work together to deliver the end customer value.
&lt;/p&gt;&lt;p&gt;In Acme approximately 5000+ "process a" instances are processed per day from B2B partners and loaded into "application a".
&lt;/p&gt;&lt;p&gt;In Acme all payments from customers go through BizTalk in both real time and for monthly payments.
&lt;/p&gt;&lt;p&gt;All orders Acme receives are processed through BizTalk
&lt;/p&gt;&lt;p&gt;BizTalk is also involved in many other processes.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;3.&lt;span style="font-size: 7pt;"&gt;
		&lt;/span&gt;Number of messages processed
&lt;/h2&gt;&lt;p&gt;It is estimated that BizTalk has processed in the region of n messages since it was introduced to Acme.
&lt;/p&gt;&lt;p&gt;[Note: this was an estimate based on the average number of messages per day from HAT queries]
&lt;/p&gt;&lt;h2&gt;4.&lt;span style="font-size: 7pt;"&gt;
		&lt;/span&gt;More Stats
&lt;/h2&gt;&lt;p&gt;Since BizTalk went live it has processed approximately:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;£n worth of customer payments
&lt;/li&gt;&lt;li&gt;n documents have been sent to customers through BizTalk
&lt;/li&gt;&lt;li&gt;n orders from B2B partners have been processed through BizTalk
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;5.&lt;span style="font-size: 7pt;"&gt;
		&lt;/span&gt;Long running transactions
&lt;/h2&gt;&lt;p&gt;BizTalk excels in the area of long running transactions. At Acme we have some processes which can take hours or even days to complete. Because BizTalk is able to maintain the state of a workflow the long running process can do some work and then stay in a dormant state until the next part is due to execute or until an application sends the response message back to trigger the next part of the process.
&lt;/p&gt;&lt;p&gt;This state persistence is also able to withstand failure conditions or even the whole data centre going down and a disaster recover scenario happening.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;6.&lt;span style="font-size: 7pt;"&gt;
		&lt;/span&gt;Load Levelling
&lt;/h2&gt;&lt;p&gt;One of the key features of BizTalk which plays a very important role in the application performance at Acme is a pattern called load levelling. If you imagine that in some areas of the systems you have different amounts of activity at different times. For example overnight from 10pm onwards we get a large spike in the number of "process d" and "process e" instances to support the overnight batch processing. During the day these processes also execute but it is a much smaller volume. Overnight the input into BizTalk is at too high a rate to be passed through to "application e" at the same rate without significant scaling of these applications. In BizTalk we flatten this load and deliver it to the end system at a controlled rate which the application can manage. Imagine pouring water through a funnel.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;7.&lt;span style="font-size: 7pt;"&gt;
		&lt;/span&gt;Fault Handling
&lt;/h2&gt;&lt;p&gt;Typically applications are prone to errors and downtime. One of the most important features of BizTalk is its ability to recover from errors in an application it is trying to integrate with. If for example "application a" threw an error when BizTalk tried to send a message to it then BizTalk can work out what kind of error it is and if an automatic retry can be attempted. The error may persist and indicate a bigger problem. If the number of automatic retries is exhausted then BizTalk will suspend the message but provide a management interface so that the support team can see the problem, workout what went wrong and can start the retry process again when the issue is resolved.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;h2&gt;8..9..10….
&lt;/h2&gt;&lt;p&gt;Ive removed the last few as they were a little too specific to the customer to display on my blog, but hopefully you get the point.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;This communication actually went down really well and I think served as an excellent way to tell people a little about what this expensive black box they occasionally hear about is and why it's important to the organisation.
&lt;/p&gt;&lt;p&gt;Has anyone else done anything similar?
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt; &lt;img src="http://geekswithblogs.net/michaelstephenson/aggbug/149591.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/4V7wHHrnwLs" height="1" width="1"/&gt;</description><dc:creator>Michael Stephenson</dc:creator><feedburner:origLink>http://geekswithblogs.net/michaelstephenson/archive/2012/05/11/149591.aspx</feedburner:origLink></item><item><title>Extension method for outputting formatted JSON in LINQPad</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/XyKePXiyHEk/extension-method-for-outputting-formatted-json-in-linqpad.aspx</link><pubDate>Fri, 11 May 2012 17:29:57 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/EltonStoneman/archive/2012/05/11/extension-method-for-outputting-formatted-json-in-linqpad.aspx</guid><wfw:comment>http://geekswithblogs.net/EltonStoneman/comments/149590.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/EltonStoneman/comments/commentRss/149590.aspx</wfw:commentRss><comments>http://geekswithblogs.net/EltonStoneman/archive/2012/05/11/extension-method-for-outputting-formatted-json-in-linqpad.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://geekswithblogs.net/EltonStoneman/services/trackbacks/149590.aspx</trackback:ping><source url="http://geekswithblogs.net/EltonStoneman/rss.aspx">Extension method for outputting formatted JSON in LINQPad</source><description>&lt;p&gt;Very simple, but a handy way of viewing nicely-formatted JSON in &lt;a href="http://www.linqpad.net/"&gt;LINQPad&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/EltonStoneman/Windows-Live-Writer/83e8741a9008_110D4/clip_image002_2.jpg"&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="clip_image002" alt="clip_image002" src="http://geekswithblogs.net/images/geekswithblogs_net/EltonStoneman/Windows-Live-Writer/83e8741a9008_110D4/clip_image002_thumb.jpg" height="522" width="629" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I use &lt;a href="http://james.newtonking.com/projects/json-net.aspx"&gt;Json.NET&lt;/a&gt; as it does indented formatting, and &lt;a href="http://james.newtonking.com/archive/2012/03/20/json-net-4-5-release-1-iso-dates-async-metro-build.aspx"&gt;represents JSON dates properly&lt;/a&gt;. To add as an extension, &lt;a href="http://json.codeplex.com/releases"&gt;download Json.NET&lt;/a&gt;, add a reference to &lt;strong&gt;Newtonsoft.Json.dll&lt;/strong&gt; to your “My Extensions” query and add the following code to your &lt;strong&gt;MyExtensions&lt;/strong&gt; class:&lt;/p&gt;    &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       &lt;span&gt;&lt;font color="#0028f9"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;static&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;object&lt;/font&gt;&lt;/span&gt; DumpJson(&lt;span&gt;&lt;font color="#0028f9"&gt;this&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;object&lt;/font&gt;&lt;/span&gt; value, &lt;span&gt;&lt;font color="#0028f9"&gt;string&lt;/font&gt;&lt;/span&gt; description = &lt;span&gt;&lt;font color="#0028f9"&gt;null&lt;/font&gt;&lt;/span&gt;)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       {&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;              &lt;span&gt;&lt;font color="#0028f9"&gt;return&lt;/font&gt;&lt;/span&gt; GetJsonDumpTarget(value).Dump(description);&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       }     &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;      &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       &lt;span&gt;&lt;font color="#0028f9"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;static&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;object&lt;/font&gt;&lt;/span&gt; DumpJson(&lt;span&gt;&lt;font color="#0028f9"&gt;this&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;object&lt;/font&gt;&lt;/span&gt; value, &lt;span&gt;&lt;font color="#0028f9"&gt;string&lt;/font&gt;&lt;/span&gt; description, &lt;span&gt;&lt;font color="#0028f9"&gt;int&lt;/font&gt;&lt;/span&gt; depth)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       {&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;              &lt;span&gt;&lt;font color="#0028f9"&gt;return&lt;/font&gt;&lt;/span&gt; GetJsonDumpTarget(value).Dump(description, depth);&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       }     &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;      &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       &lt;span&gt;&lt;font color="#0028f9"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;static&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;object&lt;/font&gt;&lt;/span&gt; DumpJson(&lt;span&gt;&lt;font color="#0028f9"&gt;this&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;object&lt;/font&gt;&lt;/span&gt; value, &lt;span&gt;&lt;font color="#0028f9"&gt;string&lt;/font&gt;&lt;/span&gt; description, &lt;span&gt;&lt;font color="#0028f9"&gt;bool&lt;/font&gt;&lt;/span&gt; toDataGrid)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       {&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;              &lt;span&gt;&lt;font color="#0028f9"&gt;return&lt;/font&gt;&lt;/span&gt; GetJsonDumpTarget(value).Dump(description, toDataGrid);&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       }     &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;      &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       &lt;span&gt;&lt;font color="#0028f9"&gt;private&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;static&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;object&lt;/font&gt;&lt;/span&gt; GetJsonDumpTarget(&lt;span&gt;&lt;font color="#0028f9"&gt;object&lt;/font&gt;&lt;/span&gt; value)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       {&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;              &lt;span&gt;&lt;font color="#0028f9"&gt;object&lt;/font&gt;&lt;/span&gt; dumpTarget = value;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;              &lt;span&gt;&lt;font color="#2c6807"&gt;//if this is a string that contains a JSON object, do a round-trip serialization to format it:&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;              &lt;span&gt;&lt;font color="#0028f9"&gt;var&lt;/font&gt;&lt;/span&gt; stringValue = value &lt;span&gt;&lt;font color="#0028f9"&gt;as&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#0028f9"&gt;string&lt;/font&gt;&lt;/span&gt;;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;              &lt;span&gt;&lt;font color="#0028f9"&gt;if&lt;/font&gt;&lt;/span&gt; (stringValue != &lt;span&gt;&lt;font color="#0028f9"&gt;null&lt;/font&gt;&lt;/span&gt;)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;              {&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;                     &lt;span&gt;&lt;font color="#0028f9"&gt;if&lt;/font&gt;&lt;/span&gt; (stringValue.Trim().StartsWith(&lt;span&gt;&lt;font color="#bf2b23"&gt;"{"&lt;/font&gt;&lt;/span&gt;))&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;                     {&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;                           &lt;span&gt;&lt;font color="#0028f9"&gt;var&lt;/font&gt;&lt;/span&gt; obj = JsonConvert.DeserializeObject(stringValue);&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;                           dumpTarget = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.Indented);&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;                     }&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;                     &lt;span&gt;&lt;font color="#0028f9"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;                     {&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;                           dumpTarget = stringValue;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;                     }&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;              }&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;              &lt;span&gt;&lt;font color="#0028f9"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;              {&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;                     dumpTarget = JsonConvert.SerializeObject(value, Newtonsoft.Json.Formatting.Indented);&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;              }&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;              &lt;span&gt;&lt;font color="#0028f9"&gt;return&lt;/font&gt;&lt;/span&gt; dumpTarget;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;       }&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;font face="Courier New" size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: ; mso-ansi-language: en-us" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Call with &lt;em&gt;.DumpJson()&lt;/em&gt; on any object, and it will serialize to formatted JSON and output it. If you pass a string which is already JSON, it round-trip serializes it to get the formatted version (including converting WCF-formatted JSON dates to ISO 8601).&lt;/p&gt;  &lt;p&gt;Makes for a very handy testing rig for REST services.&lt;/p&gt; &lt;img src="http://geekswithblogs.net/EltonStoneman/aggbug/149590.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/XyKePXiyHEk" height="1" width="1"/&gt;</description><dc:creator>Elton Stoneman</dc:creator><feedburner:origLink>http://geekswithblogs.net/EltonStoneman/archive/2012/05/11/extension-method-for-outputting-formatted-json-in-linqpad.aspx</feedburner:origLink></item><item><title>Work Life Balance</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/Hm_IIHGiQ7s/work-life-balance.aspx</link><pubDate>Fri, 11 May 2012 08:31:34 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/rickpetersen/archive/2012/05/11/work-life-balance.aspx</guid><wfw:comment>http://geekswithblogs.net/rickpetersen/comments/149589.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/rickpetersen/comments/commentRss/149589.aspx</wfw:commentRss><comments>http://geekswithblogs.net/rickpetersen/archive/2012/05/11/work-life-balance.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/rickpetersen/services/trackbacks/149589.aspx</trackback:ping><source url="http://geekswithblogs.net/rickpetersen/rss.aspx">Work Life Balance</source><description>&lt;p&gt;&lt;font color="#400000" size="3" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;font color="#400000" face="Consolas" size="4"&gt;Where’s Daddy?&lt;/font&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;My wife, one year old daughter and I play a game that most other parents have played at some point; my wife will hold her and ask her "Where’s daddy?” and the response is invariably a wide-eyed scan of the room by my daughter, culminating in a big snotty slobbery smile when she locates me.  This is a game and is fun for her but it is an important exercise for linking a name and role with a face for her and for enforcing the idea that when she looks for me, she will find me.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;So what about when we cannot be there?  What about when my six year old daughter asks this question and the answer is “We will see him Friday”?  I read the blogs of techies that travel the country speaking at conferences and user groups.  Other road warriors spend their time attending or leading developer boot camps and still others are meeting with clients and doing marketing and sales work.  Many of these techies have families and my assumption is that they place a high level of importance on their family life.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;So how do you do it?  How do you manage a passion for technology, and near chemical addiction to learning and sharing information with others, alongside the responsibilities you have within your family?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" size="3" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;font color="#400000" face="Consolas" size="4"&gt;Techniques for Balance&lt;/font&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;1. Schedule Time for Life – How much work would you get done if you had absolutely no plan and no schedule?  This is not just a reference to scheduling time for your spouse and/or children if you have them, but it is also important to schedule some time alone for reflection or some time with the girls/guys.  LifeHacker made &lt;a href="http://lifehacker.com/350811/add-worklife-balance-to-your-weekly-review"&gt;reference&lt;/a&gt; to this.  We have smart phones, free calendar services and a habit of scheduling time at work just take advantage of these facts and treat your non-work time like it is just as important as your work time.&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;2. Learn to say “no” at work.  Your bosses love your dedication and would love you to continue to push yourself and outperform all expectations, but they will not be pleased when you burn yourself out.  TalentCulture.com has a good set of suggestions for &lt;a href="http://www.talentculture.com/culture/work-life/the-art-of-saying-no-for-worklife-balance/"&gt;saying no&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" size="3" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;font color="#400000" face="Consolas" size="4"&gt;Technologies to help Balance&lt;/font&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;First, a definition.  I am generically defining technology as the application of tools rather than processes to solve a problem.  It may not be the &lt;em&gt;right&lt;/em&gt; definition but it is &lt;em&gt;my&lt;/em&gt; definition.  Technology should help you manage your time in such a way that you get things done at work and can feel good about having time away for yourself.&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;1. Organize your work-life.  Once upon a time I tried to use the &lt;a href="http://www.43folders.com/"&gt;43 Folders&lt;/a&gt; system but at that time I really did not have much responsibility.  I think now I may benefit from taking another look at it.&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;2. Calendaring.  I mentioned this in point one of the techniques section, but set up a calendar account, or use your work one, and schedule time for yourself and your family; as an extension, do not dismiss those appointments when they come up.  You need time for you and ignoring that fact will diminish what you can do when you are at work.  If you are married, show your spouse how to schedule things on your calendar so that they know they can get your attention.  I use my Google/gmail calendar and find it works well.&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;3. The off button.  Use it.  I am not going to say you need to unplug for a week at a time or commit &lt;a href="http://www.hanselman.com/blog/410GoneThoughtsOnMarkDiveintomarkPilgrimsAndWhysInfosuicides.aspx"&gt;infosuicide&lt;/a&gt; but just unplug long enough to enjoy something else.  Take your wife on a date.  Take your son or daughter out to show them they are special… and turn off the phone.&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font color="#400000" size="3" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;font color="#400000" face="Consolas" size="4"&gt;And then… (AND NO AND THEN!)&lt;/font&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;Technology and our careers are important; some of us are really using our love of technology to &lt;a href="http://technologyforgood.info/"&gt;make a difference&lt;/a&gt; in the world but in the end you are not your job.  If you live to work, you will get to the end of the work and have nothing else to do.  If you work to live, you will get to the end of the work and be excited to more live more fully.  Not only will it be better for your home life, it will be better for your employer; the &lt;a href="http://www.businessweek.com/managing/content/mar2009/ca20090327_734197.htm"&gt;research&lt;/a&gt; supporting this statement is not exactly new.  &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;Work less hours, work harder and more productively during those hours and live a fulfilling life both inside and outside the office.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400000" face="Consolas"&gt; &lt;/font&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/rickpetersen/aggbug/149589.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/Hm_IIHGiQ7s" height="1" width="1"/&gt;</description><dc:creator>rickpetersen</dc:creator><feedburner:origLink>http://geekswithblogs.net/rickpetersen/archive/2012/05/11/work-life-balance.aspx</feedburner:origLink></item><item><title>Pre-Processing Directives for Multi-Platform Support</title><link>http://feedproxy.google.com/~r/geekswithblogs/~3/lhvlvwcr3a8/pre-processing-directives-for-multi-platform-support.aspx</link><pubDate>Fri, 11 May 2012 06:33:53 GMT</pubDate><guid isPermaLink="false">http://geekswithblogs.net/WinAZ/archive/2012/05/11/pre-processing-directives-for-multi-platform-support.aspx</guid><wfw:comment>http://geekswithblogs.net/WinAZ/comments/149588.aspx</wfw:comment><wfw:commentRss>http://geekswithblogs.net/WinAZ/comments/commentRss/149588.aspx</wfw:commentRss><comments>http://geekswithblogs.net/WinAZ/archive/2012/05/11/pre-processing-directives-for-multi-platform-support.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://geekswithblogs.net/WinAZ/services/trackbacks/149588.aspx</trackback:ping><source url="http://geekswithblogs.net/WinAZ/rss.aspx">Pre-Processing Directives for Multi-Platform Support</source><description>&lt;p&gt;Over the last several months, I’ve been modifying &lt;a href="http://linqtotwitter.codeplex.com/" target="_blank"&gt;LINQ to Twitter&lt;/a&gt; to support multiple platforms.  Originally, I had targeted full profile .NET, ASP.NET Web Forms, and ASP.NET MVC apps.  An easy stop along the way was Mono compatibility, but that was simple because Mono is good about running any CLR app.  The code-base was good until I started porting to Silverlight.&lt;/p&gt;  &lt;h4&gt;Porting to Silverlight&lt;/h4&gt;  &lt;p&gt;Silverlight requires a different type of class library, so right-away I couldn’t use the same libraries as the full profile version.  To fix this, I moved the physical files over to the Silverlight library and tried to compile.  This didn’t work because certain .NET libraries were either not present, missing features, or required additional code in Silverlight.  I didn’t want to maintain two separate code bases, so I left the physical files in the Silverlight project and created file links from the full profile library to the Silverlight files.  To create file links, I right-clicked the folder, selected &lt;em&gt;Add Existing Files&lt;/em&gt;, and navigated to and selected the files. Instead of clicking the &lt;em&gt;Add&lt;/em&gt; button, there’s a drop-down arrow on the right side of the &lt;em&gt;Add&lt;/em&gt; button, which has an option named &lt;em&gt;Add As Link&lt;/em&gt;, which I selected.  This still doesn’t fix the problem with differences in libraries.&lt;/p&gt;  &lt;p&gt;To account for the differences in libraries, I used pre-processing directives.  Silverlight has a defined &lt;em&gt;SILVERLIGHT&lt;/em&gt; symbol, that ships with the default project template, which is what I used.  Here’s an example of how I used it:&lt;/p&gt;  &lt;pre class="brush: csharp"&gt;#if SILVERLIGHT
            WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
            WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);
#endif&lt;/pre&gt;

&lt;p&gt;The example above demonstrates a Silverlight-only scenario requiring registration of prefixes for HTTP communication.  It uses &lt;em&gt;#if&lt;/em&gt; and &lt;em&gt;#endif&lt;/em&gt; to block off code that will only compile in the Silverlight project, which defines the &lt;em&gt;SILVERLIGHT&lt;/em&gt; symbol.&lt;/p&gt;

&lt;p&gt;A natural consequence of this strategy is that you only want to use a symbol that is unique to a specific project type if the logic only pertains to that project type.  However, sometimes the lines blur.  After porting to Silverlight, I went on to create a Windows Phone version of LINQ to Twitter. &lt;/p&gt;

&lt;h4&gt;Porting to Windows Phone&lt;/h4&gt;

&lt;p&gt;Since Windows Phone uses Silverlight, I was tempted to use the same define symbol, but that wouldn’t be good because there are situations, like the example above that are unique to Silverlight Web Applications, but not Silverlight for Windows Phone.  Fortunately, Windows Phone has a default &lt;em&gt;WINDOWS_PHONE&lt;/em&gt; symbol that ships with its templates.  Here’s an example for a Silverlight scenario that doesn’t work for Windows Phone:&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;#if SILVERLIGHT &amp;amp;&amp;amp; !WINDOWS_PHONE
            if (!Application.Current.IsRunningOutOfBrowser)
            {
                ProxyUrl =
                        Application.Current.Host.Source.Scheme + "://" +
                        Application.Current.Host.Source.Host + ":" +
                        Application.Current.Host.Source.Port + "/LinqToTwitterProxy.ashx?url="; 
            }
#else
            ProxyUrl = string.Empty;
#endif&lt;/pre&gt;

&lt;p&gt;In the example above, Silverlight Web Apps require a proxy, but Windows Phone doesn’t.  This results in a more sophisticated condition that excludes Windows Phone’s from being configured with a proxy.  Notice the &lt;em&gt;AND&lt;/em&gt; and &lt;em&gt;NOT&lt;/em&gt; operators and the &lt;em&gt;#else&lt;/em&gt; clause for refining this condition.&lt;/p&gt;

&lt;h4&gt;Porting to Client Profile&lt;/h4&gt;

&lt;p&gt;After supporting Silverlight and Windows Phone, I turned my attention to a recurring problem that I saw happening.  It seems that people would try out LINQ to Twitter by starting a new Console app and running a simple query.  The problem is that it wasn’t so simple because the default profile of a Console application is Client Profile.  The conflict occurs because LINQ to Twitter supports ASP.NET Web Forms and MVC, whose libraries are not included in Client Profile.  This prevented the application from building.  Most people figured out that they could move forward by opening &lt;em&gt;Properties&lt;/em&gt; and and switching the &lt;em&gt;Target framework&lt;/em&gt; to one of the non-Client Profile options, but the situation did highlight the usefulness of supporting Client Profile.&lt;/p&gt;

&lt;p&gt;Client Profile doesn’t have any default defined symbols, so I created one for the new library named &lt;em&gt;CLIENT_PROFILE&lt;/em&gt;.  At first, this was very useful because I learned that Client Profile doesn’t include any of the JSON serialization libraries that I was using.  Fortunately, I had recently integrated &lt;a href="http://litjson.sourceforge.net/" target="_blank"&gt;LitJson&lt;/a&gt; into LINQ to Twitter, which I could use with the Client Profile library.  Here’s an example:&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;#if SILVERLIGHT || CLIENT_PROFILE
            var array = dictionary.GetValue&amp;lt;list&amp;lt;object&amp;gt;&amp;gt;(key, null);
#else
            var array = dictionary.GetValue&amp;lt;ArrayList&amp;gt;(key, null);
#endif&lt;/pre&gt;

&lt;p&gt;The example above uses the &lt;em&gt;OR&lt;/em&gt; operator in the pre-processing directive to indicate that both Silverlight and Client Profile need the same code – operating on a generic &lt;em&gt;List&amp;lt;object&amp;gt;&lt;/em&gt; because &lt;em&gt;ArrayList&lt;/em&gt; isn’t part of their profiles.  &lt;/p&gt;

&lt;h4&gt;Porting to Windows 8&lt;/h4&gt;

&lt;p&gt;Most recently, I ported LINQ to Twitter to support Windows 8 Metro Style Class Libraries. The template for Windows 8 libraries ships in Visual Studio 11 and defines the &lt;em&gt;NETFX_CORE&lt;/em&gt; symbol. There are a few significant library changes that I had to account for, but making the code work on multiple platforms, including Windows 8 is doable.  Here’s one example:&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;#if NETFX_CORE
                                            Task.Delay(errorWait);
#else
                                            Thread.Sleep(errorWait);
#endif&lt;/pre&gt;

&lt;p&gt;In Windows 8, you use the Task Parallel library (TPL), instead of the &lt;em&gt;Thread&lt;/em&gt; class and other .NET libraries. Since LINQ to Twitter supports .NET 3.5, but Microsoft doesn’t officially support TPL for .NET 3.5, the &lt;em&gt;Thread&lt;/em&gt; class is still necessary. I encountered more scenarios with various types, reflection, and collections that needed special handling with pre-processing directives, all of which were handled similar to the examples you’ve seen so far.  Moving the code between Visual Studio 11 and Visual Studio 2010 was seamless because I didn’t change the Target frameworks on any of the other class library types.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can view the &lt;a href="http://linqtotwitter.codeplex.com/SourceControl/list/changesets" target="_blank"&gt;LINQ to Twitter Source Code&lt;/a&gt; on CodePlex to see what my check-ins looked like today (5/10/12) to see how I made the &lt;em&gt;LinqToTwitterRT&lt;/em&gt; library changes and merged with the existing code base.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;Summary&lt;/h4&gt;

&lt;p&gt;Porting class libraries to different .NET platforms isn’t always easy.  Each platform adds and removes features that are appropriate in their own context. My approach was to have a common set of physical files, link to those files from other projects, and then use pre-processing directives to manage the differences. You saw examples of how I did this by porting to Silverlight, Windows Phone, Client Profile, and finally Windows 8.  As you can see the code gets a bit fragmented at times, but it isn’t too bad, and most importantly, it works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/#!/JoeMayo" target="_blank"&gt;@JoeMayo&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/WinAZ/aggbug/149588.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekswithblogs/~4/lhvlvwcr3a8" height="1" width="1"/&gt;</description><dc:creator>Joe Mayo</dc:creator><feedburner:origLink>http://geekswithblogs.net/WinAZ/archive/2012/05/11/pre-processing-directives-for-multi-platform-support.aspx</feedburner:origLink></item></channel></rss>

