<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://drowningintechnicaldebt.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Scott Roycraft</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/default.aspx</link><description>Red meat is NOT bad for you. Now blue-green meat, THAT&amp;#39;S bad for you! ~ Tommy Smothers</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Dangeling Balls and a Gust of Air</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/09/21/dangeling-balls-and-a-gust-of-air.aspx</link><pubDate>Sat, 22 Sep 2007 02:50:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:456</guid><dc:creator>sroycraft</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=456</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/09/21/dangeling-balls-and-a-gust-of-air.aspx#comments</comments><description>&lt;div&gt;Suppose you have a pair of dangeling balls and you blow a strong gust of air between them. What happens to the balls?&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;For the answer check out &lt;a href="http://www.youtube.com/watch?v=KCcZyW-6-5o" target="_blank"&gt;&lt;font color="#4563b9"&gt;Julius Sumner Miller - Physics - Bernoulli video&lt;/font&gt;&lt;/a&gt;&amp;nbsp;(3:25). I really wish I had him as physics instructor.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;I suspect the Bernoulli also applies with geopolitics -- a common enemy forms odd alliances.&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=456" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Tips-n-Tricks/default.aspx">Tips-n-Tricks</category></item><item><title>A Superfluity of IIS Tools</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/07/05/a-superfluity-of-iis-tools.aspx</link><pubDate>Fri, 06 Jul 2007 01:31:38 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:381</guid><dc:creator>sroycraft</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=381</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/07/05/a-superfluity-of-iis-tools.aspx#comments</comments><description>&lt;p&gt;Ever need to debug an IIS memory leak? Parse a logfile like it was a SQL table? How about see the raw request\response to a web service?&lt;/p&gt; &lt;p&gt;A plethora of IIS tools, blogs and webcasts can be found at &lt;a href="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=29"&gt;http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=29&lt;/a&gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=381" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Tips-n-Tricks/default.aspx">Tips-n-Tricks</category></item><item><title>Comparing XML Files</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/05/06/comparing-xml-files.aspx</link><pubDate>Mon, 07 May 2007 03:19:12 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:306</guid><dc:creator>sroycraft</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=306</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/05/06/comparing-xml-files.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Arial" color="#000000" size="2"&gt;Sometimes a simple&amp;nbsp;way to compare a source simple&amp;nbsp;XML file to a target XML file without the benefit of a schema is needed. While solutions using XSLT and even Microsoft’s &lt;/font&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa302294.aspx"&gt;&lt;u&gt;&lt;font face="Arial" color="#606420" size="2"&gt;XmlDiff&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font color="#000000"&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt; exist it seems like the simplest way out is to use the DataSet’s ReadXml() method and a couple of loops&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;:&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;static&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;List&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;&amp;gt; Compare(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt; sourceFileName, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt; targetFileName)&lt;br /&gt;{&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataSet&lt;/font&gt;&lt;font size="2"&gt; dsSource = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DataSet&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Source&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;);&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataSet&lt;/font&gt;&lt;font size="2"&gt; dsTarget = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DataSet&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Target&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;);&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;&amp;gt; changeLog = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;List&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;&amp;gt;();&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;try&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;{&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;// load sourceFileName into a dataset&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;dsSource.ReadXml(sourceFileName);&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataColumn&lt;/font&gt;&lt;font size="2"&gt;[] sourcePrimarykeys = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DataColumn&lt;/font&gt;&lt;font size="2"&gt;[1];&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;sourcePrimarykeys[0] = dsSource.Tables[0].Columns[&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Id&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;];&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;dsSource.Tables[0].PrimaryKey = sourcePrimarykeys;&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;// load targetFileName into a dataset&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;dsTarget.ReadXml(targetFileName);&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataColumn&lt;/font&gt;&lt;font size="2"&gt;[] targetPrimarykeys = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DataColumn&lt;/font&gt;&lt;font size="2"&gt;[1];&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;targetPrimarykeys[0] = dsTarget.Tables[0].Columns[&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Id&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;];&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;dsTarget.Tables[0].PrimaryKey = targetPrimarykeys;&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;}&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;catch&lt;/font&gt;&lt;font size="2"&gt; (&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;Exception&lt;/font&gt;&lt;font size="2"&gt; ex)&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;{&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console&lt;/font&gt;&lt;font size="2"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Error: &amp;quot;&lt;/font&gt;&lt;font size="2"&gt; + ex.Message);&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;// Loop through the rows in the source file and see if it exists in the target&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;foreach&lt;/font&gt;&lt;font size="2"&gt; (&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DataRow&lt;/font&gt;&lt;font size="2"&gt; sourceRow &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;in&lt;/font&gt;&lt;font size="2"&gt; dsSource.Tables[0].Rows)&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;{&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;changeLog.Add(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Comaring Source Row &amp;quot;&lt;/font&gt;&lt;font size="2"&gt; + sourceRow[&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Id&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;].ToString());&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataRow&lt;/font&gt;&lt;font size="2"&gt; targetRow = dsTarget.Tables[0].Rows.Find(sourceRow[&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Id&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;].ToString());&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;if&lt;/font&gt;&lt;font size="2"&gt; (targetRow != &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt;&lt;font size="2"&gt;)&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;{&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;// compare each column in the source file to the target file&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;foreach&lt;/font&gt;&lt;font size="2"&gt; (&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DataColumn&lt;/font&gt;&lt;font size="2"&gt; sourceColumn &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;in&lt;/font&gt;&lt;font size="2"&gt; dsSource.Tables[0].Columns)&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;{&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;if&lt;/font&gt;&lt;font size="2"&gt; (sourceRow[sourceColumn.ColumnName].ToString() !=&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;&lt;span&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;targetRow[sourceColumn.ColumnName].ToString())&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;{&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;changeLog.Add(sourceColumn.ColumnName.ToString() + &lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot; has changed from: &amp;quot;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;+ sourceRow[sourceColumn.ColumnName].ToString() + &lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot; to &amp;quot;&lt;/font&gt;&lt;font size="2"&gt; +&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&amp;nbsp;targetRow[sourceColumn.ColumnName].ToString());&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;}&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;}&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;}&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;else&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;{&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;changeLog.Add(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;the row cannot be found in the target&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;);&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;}&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;// determine if there are any rows in target that don&amp;#39;t exist in source&lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;foreach&lt;/font&gt;&lt;font size="2"&gt; (&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;DataRow&lt;/font&gt;&lt;font size="2"&gt; targetRow &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;in&lt;/font&gt;&lt;font size="2"&gt; dsTarget.Tables[0].Rows)&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;{&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataRow&lt;/font&gt;&lt;font size="2"&gt; sourceRow = dsSource.Tables[0].Rows.Find(targetRow[&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;Id&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;].ToString());&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;if&lt;/font&gt;&lt;font size="2"&gt; (sourceRow == &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt;&lt;font size="2"&gt;)&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;{&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;changeLog.Add(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&amp;quot;A row was found in target that doesn&amp;#39;t exist in source&amp;quot;&lt;/font&gt;&lt;font size="2"&gt;);&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;}&lt;br /&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;return&lt;/font&gt;&lt;font size="2"&gt; changeLog;&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=306" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Tips-n-Tricks/default.aspx">Tips-n-Tricks</category></item><item><title>A Better Command Prompt Format For Long Path Names</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/25/a-better-command-prompt-format-for-long-path-names.aspx</link><pubDate>Thu, 26 Apr 2007 03:08:16 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:278</guid><dc:creator>sroycraft</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=278</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/25/a-better-command-prompt-format-for-long-path-names.aspx#comments</comments><description>&lt;p&gt;Have you ever opened up a command prompt and navigated to a deeply nested folder to find you could only type a few letters of the command before it word wrapped?&lt;/p&gt; &lt;p&gt;With a simple environment setting you can reformat the command prompt to display the full path and automatically move the cursor to next line thus giving you more room to enter your command.&lt;/p&gt; &lt;p&gt;Right mouse click on your My Computer and then take the Properties menu item and open the Advanced tab. Click the Environment Variables button and add a new variable:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Variable: PROMPT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value: $p$_$+$g&lt;br /&gt; &lt;p&gt;You can also set colors, display UNC names and many other display settings. I was pleased to find my old DOS prompt settings still worked!&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=278" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Tips-n-Tricks/default.aspx">Tips-n-Tricks</category></item><item><title>Extend Visual Studio with Custom Toolbars</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/25/extend-visual-studio-with-custom-toolbars.aspx</link><pubDate>Thu, 26 Apr 2007 02:14:16 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:277</guid><dc:creator>sroycraft</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=277</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/25/extend-visual-studio-with-custom-toolbars.aspx#comments</comments><description>&lt;p&gt;I determined that the three most common&amp;nbsp;reasons that cause me to have to leave Visual Studio IDE is to open a VS2005 command prompt, open the Entlib Configuration Editor and to open the MMC. I decided that I would address this by creating my own Visual Studio toolbar and adding three icons to launch these external applications.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Register the external tools with Visual Studio &lt;br /&gt;Launch the Tools\External Tools dialog and add the external tools.&lt;/p&gt; &lt;p&gt;For the VS2005 Command Prompt I specified the following values:&lt;br /&gt;&lt;font face="Arial" size="2"&gt;&amp;nbsp;Title:&amp;nbsp;&amp;nbsp;Command &amp;amp;Shell in Project Directory&lt;br /&gt;&amp;nbsp;Command:&amp;nbsp;C:\WINNT\system32\cmd.exe&lt;br /&gt;&amp;nbsp;Arguments:&amp;nbsp;/k &amp;quot;C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat&amp;quot; x86&lt;br /&gt;&amp;nbsp;Initial Directory:&amp;nbsp;$(ProjectDir)&lt;/font&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;For the EntLib Configuration Editor:&lt;br /&gt;&lt;font face="Arial" size="2"&gt;&amp;nbsp;Title:&amp;nbsp;&amp;nbsp;EntLib Config Editor&lt;br /&gt;&amp;nbsp;Command:&amp;nbsp;C:\Program Files\Microsoft Enterprise Library January 2006\bin\EntLibConfig.exe&lt;br /&gt;&amp;nbsp;Arguments:&amp;nbsp;&amp;lt;left it blank&amp;gt;&lt;br /&gt;&amp;nbsp;Initial Directory:&amp;nbsp;$(ProjectDir)&lt;/font&gt;  &lt;p&gt;For the Computer Management Console:&lt;br /&gt;&lt;font face="Arial" size="2"&gt;&amp;nbsp;Title:&amp;nbsp;&amp;nbsp;Computer Management Console&lt;br /&gt;&amp;nbsp;Command:&amp;nbsp;mmc.exe&lt;br /&gt;&amp;nbsp;Arguments:&amp;nbsp;c:\winnt\system32\compmgmt.msc&lt;br /&gt;&amp;nbsp;Initial Directory:&amp;nbsp;&amp;lt;left it blank&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;NOTE: keep track of position these commands are listed in the Menu Contents listbox. In my case my VS2005 command prompt was the second in the list. Therefore it will become my External Command 2. Likewise EntLib Config Editor was External Command 3 and the MMC was External Command 4.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Create a new toolbar &lt;br /&gt;Right mouse clicking in the toolbar area and select the Customize menu item at the bottom of the context menu. On the Customize dialog click the New button and give it a meaningful name. It will create the new toolbar without any items right next to the dialog. Switch tabs to the Commands tab and then select the Tools category. In the Commands listbox scroll down to the “External Commands” commands. Click and drag the proper external command to your new toolbar (in my case that would be External Commands 2, 3 and 4).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Customize the new toolbar items.&lt;br /&gt;Your new toolbar is functional but probably doesn’t look very nice. By default the toolbar buttons display the title of the external command. While the Customize dialog is open, right click the first toolbar button to select it and to display a new context menu. Select the Default Style menu item and then you will be able to Copy, Paste, Reset, Edit or pick an toolbar image from a list. I have a hard enough time drawing a stickman let alone a nice looking icon. So I found a few nice 16x16 icons, cut them into my clipboard and then pasted them into my toolbar item. After closing the Customize dialog&amp;nbsp;then position&amp;nbsp;the new toolbar up next to the existing toolbars and you are all set!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Share your external commands&lt;br /&gt;If you find other helpful external commands to make development easier please share! I recently read how one guy wired in subsonic and another svn commands.&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=277" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Tips-n-Tricks/default.aspx">Tips-n-Tricks</category></item><item><title>SQL Query To Determine User Login Information</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/19/SQL-Query-To-Determine-User-Login-Information.aspx</link><pubDate>Fri, 20 Apr 2007 02:55:38 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:274</guid><dc:creator>sroycraft</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=274</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/19/SQL-Query-To-Determine-User-Login-Information.aspx#comments</comments><description>&lt;p style="margin-left:0.5in;"&gt;&lt;span style="mso-ansi-language:en;"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;I was asked to put together a query that would allow management to know how many users used one of our internal application per week. Since we deploy our apps via ClickOnce my first stop was to view our WebTrends reports. While it contained lots of useful and interesting data it showed the number of hits and visits but the numbers seemed to be too&amp;nbsp;high and I made a mental note to research their definition of a visit.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left:0.5in;"&gt;&lt;span style="mso-ansi-language:en;"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;The application has a SQL Server 2005 LoginHistory table that gets populated each time the user launches the application. It records their LoginId char(7) and LoginDate (datetime). There were thousands of rows in this table and with a couple of quick queries I was able to see that the users were launching the application several times a day practically every day.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left:0.5in;"&gt;&lt;span style="mso-ansi-language:en;"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;I need to determine how many users used the application per week not the number of connections per day. So the first thing to do was to figure how to determine the first day of the week for the given LoginDate: &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left:0.5in;"&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:7.5pt;font-family:a;mso-ansi-language:en;"&gt;&lt;font color="#000000"&gt;LoginDate &lt;/font&gt;&lt;span style="color:gray;"&gt;-&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;DATEPART&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;font color="#000000"&gt;DW&lt;/font&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;font color="#000000"&gt; LoginDate&lt;/font&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:gray;"&gt;-&lt;/span&gt;&lt;font color="#000000"&gt; 1&lt;/font&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:en;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin-left:0.5in;"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:10pt;mso-ansi-language:en;"&gt;LoginDate is a datetime and all I was interested in was the date part so I converted the date into a string in the "mm/dd/yyyy" format:&lt;/span&gt;&lt;span style="mso-ansi-language:en;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin-left:0.5in;"&gt;&lt;span style="font-size:7.5pt;color:fuchsia;font-family:arial;mso-ansi-language:en;"&gt;CONVERT&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:arial;mso-ansi-language:en;"&gt;( &lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:arial;mso-ansi-language:en;"&gt;varchar&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:arial;mso-ansi-language:en;"&gt;,&lt;/span&gt;&lt;span style="font-size:7.5pt;font-family:arial;mso-ansi-language:en;"&gt;&lt;font color="#000000"&gt;LoginDate &lt;/font&gt;&lt;span style="color:gray;"&gt;-&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;DATEPART&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;font color="#000000"&gt;DW&lt;/font&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;font color="#000000"&gt; LoginDate&lt;/font&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:gray;"&gt;-&lt;/span&gt;&lt;font color="#000000"&gt; 1 &lt;/font&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;&lt;font color="#000000"&gt;101&lt;/font&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;as&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:red;"&gt;'FirstOfWeek'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left:0.5in;"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:10pt;mso-ansi-language:en;"&gt;Next I needed to return one row for each user along with a weekly login count:&lt;/span&gt;&lt;span style="mso-ansi-language:en;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin-left:0.5in;"&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:7.5pt;font-family:a;mso-ansi-language:en;"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;DISTINCT&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Times New Roman"&gt;&lt;span style="mso-ansi-language:en;"&gt;&lt;font color="#000000" size="3"&gt; &lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:7.5pt;color:fuchsia;font-family:a;mso-ansi-language:en;"&gt;CONVERT&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;(&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;varchar&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;,&lt;/span&gt;&lt;span style="font-size:7.5pt;font-family:a;mso-ansi-language:en;"&gt;&lt;font color="#000000"&gt;LoginDate &lt;/font&gt;&lt;span style="color:gray;"&gt;-&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;DATEPART&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;font color="#000000"&gt;DW&lt;/font&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;font color="#000000"&gt; LoginDate&lt;/font&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:gray;"&gt;-&lt;/span&gt;&lt;font color="#000000"&gt; 1&lt;/font&gt;&lt;span style="color:gray;"&gt;),&lt;/span&gt;&lt;font color="#000000"&gt;101&lt;/font&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;as&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:red;"&gt;'FirstOfWeek'&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Times New Roman"&gt;&lt;span style="mso-ansi-language:en;"&gt;&lt;font color="#000000" size="3"&gt; &lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;,&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:7.5pt;font-family:a;mso-ansi-language:en;"&gt;&lt;font face="Times New Roman" color="#000000"&gt; LoginId&lt;/font&gt;&lt;span style="color:gray;"&gt;&lt;br&gt;&lt;font face="Times New Roman"&gt;,&lt;/font&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;&lt;font color="#000000"&gt; 1 &lt;/font&gt;&lt;span style="color:blue;"&gt;as&lt;/span&gt;&lt;font color="#000000"&gt; WeeklyLoginAttempt&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;&lt;span style="mso-ansi-language:en;"&gt;&lt;font color="#000000" size="3"&gt; &lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;FROM&lt;/span&gt;&lt;font color="#000000"&gt;&lt;span style="font-size:7.5pt;font-family:a;mso-ansi-language:en;"&gt; LoginHistory&lt;/span&gt;&lt;span style="font-size:10pt;mso-ansi-language:en;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin-left:0.5in;"&gt;&lt;span style="mso-ansi-language:en;"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;Lastly, I needed to sum up the attempts so I made my SELECT&amp;nbsp;a sub-query, added&amp;nbsp;a sum, group by and order by statements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left:0.5in;"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;&lt;font face="Times New Roman"&gt;SELECT&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;mso-ansi-language:en;"&gt;&lt;br&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;P1&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;.&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;FirstOfWeek&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;,&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;&lt;br&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:7.5pt;color:fuchsia;font-family:a;mso-ansi-language:en;"&gt;SUM&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;(&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;P1&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;.&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;WeeklyLoginAttempt&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;)&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt; as WeeklyLogins&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:7.5pt;color:blue;mso-ansi-language:en;"&gt;&lt;br&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;FROM&lt;/span&gt;&lt;span style="font-size:7.5pt;color:black;font-family:a;mso-ansi-language:en;"&gt; &lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;(&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;&lt;br&gt;&lt;font face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT DISTINCT &lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:7.5pt;color:fuchsia;font-family:a;mso-ansi-language:en;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONVERT&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;(&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;varchar&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;,&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;LoginDate &lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;-&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt; &lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;(&lt;/span&gt;&lt;span style="font-size:7.5pt;color:fuchsia;font-family:a;mso-ansi-language:en;"&gt;DATEPART&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;(&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;DW&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;,&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt; LoginDate&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;)&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt; &lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;-&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt; 1&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;),&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;101&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;)&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt; as &lt;/span&gt;&lt;span style="font-size:7.5pt;color:red;font-family:a;mso-ansi-language:en;"&gt;'FirstOfWeek'&lt;/span&gt;&lt;/font&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt; LoginId&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;&lt;br&gt;&lt;font face="Times New Roman"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;&lt;font face="Times New Roman"&gt; 1 as WeeklyLoginAttempt &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM LoginHistory&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;mso-ansi-language:en;"&gt;&lt;br&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt; as P1&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:7.5pt;color:blue;mso-ansi-language:en;"&gt;&lt;br&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;GROUP&lt;/span&gt;&lt;span style="font-size:7.5pt;color:black;font-family:a;mso-ansi-language:en;"&gt; &lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;BY&lt;/span&gt;&lt;span style="font-size:7.5pt;color:black;font-family:a;mso-ansi-language:en;"&gt; P1&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;.&lt;/span&gt;&lt;span style="font-size:7.5pt;color:black;font-family:a;mso-ansi-language:en;"&gt;FirstOfWeek&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:7.5pt;color:blue;mso-ansi-language:en;"&gt;&lt;br&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;ORDER&lt;/span&gt;&lt;span style="font-size:7.5pt;color:black;font-family:a;mso-ansi-language:en;"&gt; &lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;BY&lt;/span&gt;&lt;span style="font-size:7.5pt;color:black;font-family:a;mso-ansi-language:en;"&gt; &lt;/span&gt;&lt;span style="font-size:7.5pt;color:fuchsia;font-family:a;mso-ansi-language:en;"&gt;CONVERT&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;(&lt;/span&gt;&lt;span style="font-size:7.5pt;color:blue;font-family:a;mso-ansi-language:en;"&gt;datetime&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;,&lt;/span&gt;&lt;span style="font-size:7.5pt;color:black;font-family:a;mso-ansi-language:en;"&gt;FirstOfWeek&lt;/span&gt;&lt;span style="font-size:7.5pt;color:gray;font-family:a;mso-ansi-language:en;"&gt;)&lt;/span&gt;&lt;span style="font-size:10pt;color:gray;mso-ansi-language:en;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;p style="margin-left:0.5in;"&gt;&lt;span style="mso-ansi-language:en;"&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;This resulted in a nice result set that took the raw log of login attempts and converted into a user&amp;nbsp;login by week report that made the boss happy which is always a good thing!&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:10pt;mso-ansi-language:en;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=274" width="1" height="1"&gt;</description></item><item><title>Quickly Create Folder Tree Structures</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/17/Quickly-Create-Folder-Tree-Structures.aspx</link><pubDate>Wed, 18 Apr 2007 03:39:14 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:269</guid><dc:creator>sroycraft</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=269</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/17/Quickly-Create-Folder-Tree-Structures.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;MKDIR [drive:]path&lt;br&gt;MD [drive:]path  &lt;p&gt;If Command Extensions are enabled MKDIR changes as follows:  &lt;p&gt;MKDIR creates any intermediate directories in the path, if needed.&lt;br&gt;For example, assume \a does not exist then:  &lt;p&gt;&lt;strong&gt;mkdir \a\b\c\d&lt;/strong&gt;  &lt;p&gt;is the same as doing all of the following:  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir \a&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chdir \a&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir b&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chdir b&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir c&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chdir c&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir d&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=269" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Tips-n-Tricks/default.aspx">Tips-n-Tricks</category></item><item><title>BPEL Activities for WF</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/10/BPEL-Activities-for-WF.aspx</link><pubDate>Wed, 11 Apr 2007 02:19:11 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:263</guid><dc:creator>sroycraft</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=263</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/10/BPEL-Activities-for-WF.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;The &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6d0daf00-f689-4e61-88e6-cbe6f668e6a3&amp;amp;displaylang=en"&gt;BPEL for Windows Workflow Foundation March CTP&lt;/a&gt;&amp;nbsp;provides developers with support for building applications using Windows Workflow Foundation and BPEL.  &lt;p&gt;BPEL for Windows Workflow Foundation (WF) is an add on for Windows Workflow Foundation in the .NET Framework 3.0. BPEL is the Business Process Execution Language and this download is an unsupported Community Technology Preview (CTP) for using this technology with WF. The download, which is aimed at software developers, provides import and export tools for BPEL and includes WF activities representing BPEL for the WF designer in Visual Studio 2005.&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=263" width="1" height="1"&gt;</description></item><item><title>MSDN WF Nuggets</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/10/MSDN-WF-Nuggets.aspx</link><pubDate>Wed, 11 Apr 2007 02:17:30 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:262</guid><dc:creator>sroycraft</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=262</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2007/04/10/MSDN-WF-Nuggets.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Mike Taulty has put together several excellent short WF videos (nuggets). I hope he creates a series of WCF and WPF nuggets too!  &lt;p&gt;Here's the list and the suggested running order:  &lt;p&gt;01 Workflow Foundation Hello World &lt;a href="http://go.microsoft.com/?linkid=4654512"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/1/9/c19a65d7-6c83-47c3-9969-7b038baf04c5/WF_Hello_World.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;02 Dealing with Exceptions &lt;a href="http://go.microsoft.com/?linkid=4654511"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/1/9/c19a65d7-6c83-47c3-9969-7b038baf04c5/WF_Exceptions.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;03 Conditional Logic &lt;a href="http://go.microsoft.com/?linkid=4685596"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/b/b/e/bbe7bc51-bb78-4510-9540-46e46929129d/WF_Conditions.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;04 The Conditioned Activity Group &lt;a href="http://go.microsoft.com/?linkid=4685595"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/b/b/e/bbe7bc51-bb78-4510-9540-46e46929129d/WF_ConditionedActivityGroup.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;05 Working in Parallel &lt;a href="http://go.microsoft.com/?linkid=4685598"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/b/b/e/bbe7bc51-bb78-4510-9540-46e46929129d/WF_Parallel.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;06 Dealing with Cancellation &lt;a href="http://go.microsoft.com/?linkid=4685594"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/b/b/e/bbe7bc51-bb78-4510-9540-46e46929129d/WF_Cancellation.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;07 Listening for Events &lt;a href="http://go.microsoft.com/?linkid=4685597"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/b/b/e/bbe7bc51-bb78-4510-9540-46e46929129d/WF_Listening.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;08 Passing Parameters to Workflow &lt;a href="http://go.microsoft.com/?linkid=4685599"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/b/b/e/bbe7bc51-bb78-4510-9540-46e46929129d/WF_Parameters.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;09 Working with Transactions &lt;a href="http://go.microsoft.com/?linkid=4732204"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/1/5/7/1571de83-1efe-4821-b426-b600ac27ae8e/WF_Transactions.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;10 Communications from Workflow to Host &lt;a href="http://go.microsoft.com/?linkid=4732201"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/1/5/7/1571de83-1efe-4821-b426-b600ac27ae8e/WF_WorkflowToHostComms.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;11 Communications from Host to Workflow &lt;a href="http://go.microsoft.com/?linkid=4732202"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/1/5/7/1571de83-1efe-4821-b426-b600ac27ae8e/WF_HostToWorkflowComms.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;12 Bidirectional Communications (Host &amp;lt;-&amp;gt; Workflow) &lt;a href="http://go.microsoft.com/?linkid=4732205"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/1/5/7/1571de83-1efe-4821-b426-b600ac27ae8e/WF_TwoWayComms.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;13 State Machine Workflows &lt;a href="http://go.microsoft.com/?linkid=4732203"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/1/5/7/1571de83-1efe-4821-b426-b600ac27ae8e/WF_StateMachineWorkflow.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;14 Building a Simple Workflow Activity &lt;a href="http://go.microsoft.com/?linkid=4756247"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/0/e/9/0e94a2a6-1fa5-4677-806b-514a4ea740e8/WF_CustomActivity.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;15 Building Declarative Workflows &lt;a href="http://go.microsoft.com/?linkid=5151524"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/8/9/c89a7128-eec4-44af-a8de-82bdfb8f3d55/WF_DeclarativeWorkflows.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;16 Modifying Workflows whilst Running &lt;a href="http://go.microsoft.com/?linkid=5151525"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/8/9/c89a7128-eec4-44af-a8de-82bdfb8f3d55/WF_ModifyingWorkflows.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;17 Using a Persistence Service &lt;a href="http://go.microsoft.com/?linkid=5151527"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/8/9/c89a7128-eec4-44af-a8de-82bdfb8f3d55/WF_Using%20Persistence.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;18 Building a Persistence Service &lt;a href="http://go.microsoft.com/?linkid=5151520"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/8/9/c89a7128-eec4-44af-a8de-82bdfb8f3d55/WF_BuildingPersistence.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;19 Using a Tracking Service &lt;a href="http://go.microsoft.com/?linkid=5151519"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/8/9/c89a7128-eec4-44af-a8de-82bdfb8f3d55/WF_AddingTracking.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;20 Building a Tracking Service &lt;a href="http://go.microsoft.com/?linkid=5151522"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/8/9/c89a7128-eec4-44af-a8de-82bdfb8f3d55/WF_BuildingTracking.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;21 Using a Scheduling Service &lt;a href="http://go.microsoft.com/?linkid=5151528"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/8/9/c89a7128-eec4-44af-a8de-82bdfb8f3d55/WF_UsingScheduling.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;22 Building a Scheduling Service &lt;a href="http://go.microsoft.com/?linkid=5151521"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/8/9/c89a7128-eec4-44af-a8de-82bdfb8f3d55/WF_BuildingScheduling.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;23 Calling a Web Service from a Workflow &lt;a href="http://go.microsoft.com/?linkid=5151523"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/8/9/c89a7128-eec4-44af-a8de-82bdfb8f3d55/WF_CallingAWebService.zip"&gt;Download&lt;/a&gt;  &lt;p&gt;24 Using the Synchronization Activity &lt;a href="http://go.microsoft.com/?linkid=5151526"&gt;Watch&lt;/a&gt; &lt;a href="http://download.microsoft.com/download/c/8/9/c89a7128-eec4-44af-a8de-82bdfb8f3d55/WF_Synchronization.zip"&gt;Download&lt;/a&gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=262" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>Hype Cycle</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2006/10/29/Hyper-Cycle.aspx</link><pubDate>Sun, 29 Oct 2006 23:41:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:71</guid><dc:creator>sroycraft</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=71</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2006/10/29/Hyper-Cycle.aspx#comments</comments><description>&lt;DIV id=msgcns!B26F6945D2FD4AD3!148&gt;
&lt;P&gt;While researching web service best practices I came across &lt;A href="http://www.gartner.com/pages/story.php.id.8795.s.8.jsp"&gt;&lt;FONT color=#4563b9&gt;Gartner’s Hype Cycle&lt;/FONT&gt;&lt;/A&gt; and was immediately impressed with its simplicity and clarity. It summed up in a simple graph the wild technological rollercoaster ride I’ve (and probably you too) have been on for most of my career. Early on I used to fall for the “coolest” gadgets, the “hot” languages and the “latest” architectures. I’d spend a lot of money and time on books, courses and software in an effort to get up to speed. Aggravatingly, it seemed, I was just in time to see the coolest gadgets cool-off and the hot languages fall by the wayside and replaced by a new wave. Early out of college this was self-inflicted because I wanted to make an impact with my employer. Which lead to enough successes to justify the effort. But then in the early nineties something strange happened. My employer started bringing me the cutting edge technologies to see if there was any business value. And sadly, the same cycle reoccurred. But this time the amount of money, effort and time were exponentially growing with each project. I was amazed at how easy it was for them to drop a million on software license and then in a blink of an eye drop it like yesterday’s dishwater. Yet after the dust settled we did seem to gain from the experience and our technologies matured. &lt;/P&gt;
&lt;P&gt;For me the Hype Cycle was in full swing through most of the nineties (until the bubble burst). Consultants would come in and tell us we were too centralized and that we needed to be more distributed. Projects would kick off, we’d ramp up the staff, buy new hardware\software and get either deep into the requirements gathering or development phase when a new consultant or magazine article would say we were too distributed and should be more centralized. Now looking at the Hype Cycle it is clear that the &lt;STRONG&gt;Technology Trigger&lt;/STRONG&gt; was the catalyst that spurred management to finance these projects based on perceived benefits. But at the &lt;STRONG&gt;Peak of Inflated Expectations&lt;/STRONG&gt; it would dawn on them they fell for the sales-speak or another technology trigger just popped up on their radar. Projects would either die right there or they gasp for life during the &lt;STRONG&gt;Trough of Disillusionment&lt;/STRONG&gt;. During this phase it took brave heroes who had the vision to see there was merit directly or indirectly in the technology and if they were able to persuade management to reconsider the technology the &lt;STRONG&gt;Slope of Enlightenment&lt;/STRONG&gt; would begin which would lead to actual benefits and to the &lt;STRONG&gt;Plateau of Productivity&lt;/STRONG&gt;. I don’t know if any of these cycles could have been avoided but certainly the range of the wild swings and silly slope of enlightenment battles could have been managed better. &lt;/P&gt;
&lt;P&gt;To summarize the five phases of the Hype Cycle: &lt;/P&gt;&lt;STRONG&gt;&lt;U&gt;Technology Trigger&lt;/U&gt;&lt;/STRONG&gt;&lt;BR&gt;The first phase of a Hype Cycle is the "technology trigger" or breakthrough, product launch or other event that generates significant press and interest. 
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Peak of Inflated Expectations&lt;/U&gt;&lt;/STRONG&gt; &lt;BR&gt;In the next phase, a frenzy of publicity typically generates over-enthusiasm and unrealistic expectations. There may be some successful applications of a technology, but there are typically more failures. 
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Trough of Disillusionment&lt;/U&gt;&lt;/STRONG&gt; &lt;BR&gt;Technologies enter the "trough of disillusionment" because they fail to meet expectations and quickly become unfashionable. Consequently, the press usually abandons the topic and the technology. 
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Slope of Enlightenment&lt;/U&gt;&lt;/STRONG&gt;&lt;BR&gt;Although the press may have stopped covering the technology, some businesses continue through the "slope of enlightenment" and experiment to understand the benefits and practical application of the technology. 
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Plateau of Productivity&lt;/U&gt;&lt;/STRONG&gt; &lt;BR&gt;A technology reaches the "plateau of productivity" as the benefits of it become widely demonstrated and accepted. The technology becomes increasingly stable and evolves in second and third generations. The final height of the plateau varies according to whether the technology is broadly applicable or benefits only a niche market. 
&lt;P&gt;&lt;/P&gt;&lt;A title="Photo Sharing" href="http://www.flickr.com/photos/43794097@N00/282953540/"&gt;&lt;IMG height=209 alt=HypeCycle src="http://static.flickr.com/118/282953540_b5d715b28b_o.jpg" width=350&gt;&lt;/A&gt; &lt;/DIV&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=71" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Spy On Window Forms</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2006/08/09/Spy-On-Windows-Forms.aspx</link><pubDate>Thu, 10 Aug 2006 01:58:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:73</guid><dc:creator>dbottjer</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=73</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2006/08/09/Spy-On-Windows-Forms.aspx#comments</comments><description>&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;I woke up in the middle of the night with the answer to a problem that I was fighting for most of the day. I was having a problem with tabbing in a&amp;nbsp;winform&amp;nbsp;where I couldn’t see which control(s) were getting the focus. But I was sure that if I could just see which events were being fired I could figure out the cause this &lt;/FONT&gt;&lt;A href="http://dictionary.reference.com/browse/idiopathic"&gt;&lt;FONT face=Arial size=2&gt;idiopathic&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt; condition.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;Suddenly I could see the &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/06/04/ManagedSpy/default.aspx"&gt;&lt;FONT face=Arial size=2&gt;MSDN Magazine article&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt; that I briefly glanced at a few months ago. Incredibly I could recall the exact issue and&amp;nbsp;article layout including the screenshot of a utility that could spy on managed applications. I always wanted a photographic memory!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;The &lt;/FONT&gt;&lt;A href="http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/ManagedSpy.exe"&gt;&lt;FONT face=Arial size=2&gt;ManagedSpy utility&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt; allows you to not only see events of a managed application but also you can drill down to individual controls on the screen and set their properties! What power! I bet with this you could create your own WinRunner type or custom UI regression tester.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;If you are a Premium MSDN subscriber you can get a &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/Subscribe.aspx"&gt;&lt;FONT face=Arial size=2&gt;free subscription&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;!&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=73" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Smart Client and No-Touch Deployment Virtual Labs</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2006/01/02/Smart-Client-and-No_2D00_Touch-Deployment-Virtual-Labs.aspx</link><pubDate>Tue, 03 Jan 2006 03:03:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:74</guid><dc:creator>dbottjer</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=74</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2006/01/02/Smart-Client-and-No_2D00_Touch-Deployment-Virtual-Labs.aspx#comments</comments><description>&lt;P&gt;Smart clients are easily deployed and managed client applications that provide an adaptive, responsive and rich interactive experience by leveraging local resources and intelligently connecting to distributed data sources.&lt;/P&gt;
&lt;H4&gt;Step into the Smart Client Virtual Lab for Free&lt;/H4&gt;
&lt;P&gt;It's simple — no complex setup or installation is required to try out Smart Client running in the full-featured MSDN Virtual Lab. As part of the MSDN Virtual Lab, you will have full access to Smart Client through the following modules:&lt;/P&gt;
&lt;UL&gt;
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267411"&gt;Creating Windows Applications with C# -Part 1&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267316"&gt;Creating Windows Applications with C# -Part 2&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267317"&gt;Creating Windows Applications with C# -Part 3&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267412"&gt;Creating Windows Applications with J# - Part 1&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267320"&gt;Creating Windows Applications with J# - Part 2&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267321"&gt;Creating Windows Applications with J# - Part 3&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267410"&gt;Creating Windows Applications with VB -Part 1&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267474"&gt;Creating Windows Applications with VB -Part 2&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267475"&gt;Creating Windows Applications with VB -Part 3&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267307"&gt;No-Touch Deployment with the Microsoft .NET Framework with C#&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267479"&gt;No-Touch Deployment with the Microsoft .NET Framework with VB&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267334"&gt;Soup to Nuts Lab 4: Object-Oriented Concepts in Microsoft .NET Winforms Applications - Part 1&lt;/A&gt; 
&lt;LI class=gray&gt;&lt;A href="http://go.microsoft.com/?linkid=4267346"&gt;Soup to Nuts Lab 4: Object-Oriented Concepts in Microsoft .NET Winforms Applications - Part 2&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;You get a downloadable manual and a 90-minute block of time for each module. You can sign up for additional 90-minute blocks at any time.&lt;/P&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=74" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Smart+Client/default.aspx">Smart Client</category></item><item><title>Office Depot Deals and Queuing Theory</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2005/12/12/Office-Depot-Deals-and-Queuing-Theory.aspx</link><pubDate>Tue, 13 Dec 2005 03:06:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:75</guid><dc:creator>dbottjer</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=75</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2005/12/12/Office-Depot-Deals-and-Queuing-Theory.aspx#comments</comments><description>&lt;P&gt;At the crack of dawn on black Friday I went to Office Depot to pickup a deeply discounted HP computer system. I got in line at the “technology” counter and waited and waited and waited. Finally it was my turn to find out that I was in the wrong line. Luckily, the smiling informative face turned out to be the store manager. He walked me over to the proper line that was now snaked around the display shelves in a very odd shape*. He must have taken pity on me because he then walked me over to another terminal and proceeded to enter the order himself. It turns out they don’t actually carry the computer in the store but rather it has to be custom-built by HP. He made sure I had all the rebate forms (at least 10) and then we went over to the copy center counter where another very helpful person rang me up. Other than initially getting into the wrong line I had a pleasant shopping experience. Unfortunately that didn’t last…&lt;/P&gt;
&lt;P&gt;I got a phone call a from a friend a few hours later. He had been over at Wally-Mart for five hours to get the $300 laptop deal. He was furious when he found out that the store only had 30 units and they had already passed the claim slips out to the first 30 people in line before the sale even started. He complained to no avail at the unhappy face in the Santa hat that they could have at least let everyone in line know that they had already unloaded all the laptops. Getting no satisfaction he headed over to another Office Depot to pick up the same computer system I did. He also had a pleasant shopping experience but didn’t actually purchase the system. He discovered that there was a hidden $99 shipping fee. He called me to make sure that I knew about the shipping.&lt;/P&gt;
&lt;P&gt;I looked at all my receipts, rebates and system descriptions and sure enough it listed in small print that shipping was $99. That and all the rebates convinced me that I could get a better system without all the stinking rebates and hidden fees. So I headed back to Office Depot to get a refund. The smiling face soon turned upside down. I was informed that while they can place the order they can’t canceled the order. I asked to speak to the manager. He was no where to be found. They directed me to their technology guy and he took about 45 minutes poking around on HP’s web site to find where he could cancel the order. The cashier&amp;nbsp;credited my credit card and after about 1.5 hours I finally had satisfaction. So I thought…&lt;/P&gt;
&lt;P&gt;When I got home I confirmed that my credit card was indeed credited with the proper amount (it was). A couple of days later I received an email from Office Depot that my order was canceled. Good! Then about a week later I got a second email from Office Depot that my order was being filled! Not Good! I called their 1-800 number to see what was going on. The no-customer service representative was angry at me for asking him why they are filling a canceled order. He verified the status was canceled and had no explanation but was sure that it was my fault. I informed him that as far as I was concerned the deal was done and that there was no order. He said that he would get back with me if there anything I needed to do. Last Saturday night about 9:30 the FedEx guy shows up with a box! Office Depot had sent me the DeskJet printer from the order. I jumped on their web site and confirmed that the order still was canceled and then confirmed that they hadn’t charge my credit card. Now I am waiting to see if any other boxes show up. So what do I do with the DeskJet? I don’t want to take it to the store and start another mess of tracking the printer and I don’t want to pay the shipping to ship it back to Office Depot.&lt;/P&gt;
&lt;P&gt;*The shape of the winding line of customers had struck odd. It immediately took me back a few years to a queuing theory course. Part of the course covered when there was a high demand for a limited resource and the queue's shape on performance. I’ll have to dig my old textbook out and refresh my memory. I remember the queues being straight or winding back and forth like at Disneyland. These people had formed a strange hybrid of the two with no apparent reason for changing the shape of the queue.&lt;/P&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=75" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Wanna Play Planning Poker?</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2005/11/14/Wanna-Play-Planning-Poker.aspx</link><pubDate>Tue, 15 Nov 2005 03:13:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:77</guid><dc:creator>dbottjer</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=77</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2005/11/14/Wanna-Play-Planning-Poker.aspx#comments</comments><description>&lt;P&gt;Mike Cohn, of &lt;A href="http://www.mountaingoatsoftware.com/"&gt;Mountain Goat Software&lt;/A&gt;, has a new agile book out that focuses upon planning and estimating. He has made some of it &lt;A href="http://www.mountaingoatsoftware.com/agileplanning"&gt;downloadable&lt;/A&gt;. In the &lt;U&gt;Techniques For Estimating&lt;/U&gt; chapter he describes why estimates are usually way off the mark. I found the accuracy curve kind of interesting. The accuracy of the estimate increases as the effort put forth to come up with the estimate increases (I know... no sh&amp;amp;* Sherlock). But the unexpected part was that accuracy peaks and then declines with increased effort. I guess it is like over studying for a test kind of a thing. So the author came up with a fun way to increase the effort to the sweet spot that results in a&amp;nbsp;more accurate estimate -- Planning Poker.&lt;/P&gt;
&lt;P&gt;Collaborative estimates being more accurate, you begin by bringing together a team of subject matter experts from various parts of the application. These experts should range in job roles covering all aspects from business analysts, developers, testers, database administrators etc. Each player will need their own deck of cards. The cards have numbers (1, 2, 3, 4...) written on one side. The dealer will explain to the players what the number means. For instance it may represent 1 hour or 1 day or 1 week or on a scale of 1 to N with a simple (1) to complex (N) effort etc.They hold the deck face down and listen to the dealer. The dealer reads a brief but succinct description of the problem. Each player then selects a card from their deck that represents the estimate. Each player places the cards face down in front of them until all players have selected the card they feel best represents the estimate. Then each player flips the card over. The dealer examines the values. The dealer will ask the lowest and highest estimate player to explain why they feel that way. The dealer will make use of a 2-minute sand timer to keep the answers short. Then the cards are returned to the deck and the process is repeated until the players have clumped around some value. He says 2 or 3 rounds per problem is about right.&lt;/P&gt;
&lt;P&gt;The author&amp;nbsp;explains that by getting estimates from the various view points&amp;nbsp;to converge you get a highly accurate estimate. And by using a fun team activity like playing Planning Poker the effort is not too light and not too heavy ~ just right!&lt;/P&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=77" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Project+Management/default.aspx">Project Management</category></item><item><title>Jacksonville Code Camp a huge success!</title><link>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2005/08/27/Jacksonville-Code-Camp-a-huge-success.aspx</link><pubDate>Sun, 28 Aug 2005 02:17:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:78</guid><dc:creator>dbottjer</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/scottroycraft/rsscomments.aspx?PostID=78</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/2005/08/27/Jacksonville-Code-Camp-a-huge-success.aspx#comments</comments><description>&lt;P&gt;This was the first MSDN Code Camp that I've attended and was blown away! &lt;A href="http://http://cs.jaxdug.com/blogs/davidstrommer/default.aspx"&gt;David Strommer&lt;/A&gt; and team did a wonderful job in setting up this &lt;A href="http://codecamp.jaxdug.com/"&gt;event &lt;/A&gt;and I think it definitely put Jaxdug on the map. The bar is set so high now I don't know how they will be able to top it next year, but I am sure they will find away.&lt;BR&gt;&lt;BR&gt;I'm still gathering my thoughts and will post some of the things I learned a little later. Especially about Reporting Services,&amp;nbsp;ACT and WINDBG. My advice to you is to try to make the next MSDN Code Camp in your area. I was a little disappointed not to see &lt;A href="http://cs.jaxdug.com/blogs/dennisbottjer/default.aspx"&gt;Dennis&lt;/A&gt; in blue tights wearing the MSDN butterfly costume. Perhaps next year!&lt;BR&gt;&lt;/P&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=78" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/scottroycraft/archive/tags/Community/default.aspx">Community</category></item></channel></rss>