<rss version="2.0" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Robotics</title>
        <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/category/50.aspx</link>
        <description>Robotics</description>
        <language>en-US</language>
        <copyright>Shawn Weisfeld</copyright>
        <generator>Subtext Version 2.1.2.2</generator>
        <item>
            <title>Society of Computational Science &amp;amp; Robot Vision: Follow the Leader</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/02/09/society-of-computational-science-amp-robot-vision-follow-the-leader.aspx</link>
            <description>&lt;p&gt;While working on my Masters at FIT I wrote a paper about some vision processing that I did with Microsoft Robotics Studio (&lt;a title="http://msdn.microsoft.com/en-us/robotics/default.aspx" href="http://msdn.microsoft.com/en-us/robotics/default.aspx"&gt;http://msdn.microsoft.com/en-us/robotics/default.aspx&lt;/a&gt;) and and iRobot Create (&lt;a title="http://store.irobot.com/shop/index.jsp?categoryId=3311368" href="http://store.irobot.com/shop/index.jsp?categoryId=3311368"&gt;http://store.irobot.com/shop/index.jsp?categoryId=3311368&lt;/a&gt;). I was asked if I would post it on a new website that one of my colleagues at FIT is putting together Society of Computational Science (&lt;a title="http://www.societycomputationalscience.org" href="http://www.societycomputationalscience.org"&gt;http://www.societycomputationalscience.org&lt;/a&gt;). I thought I would also take the opportunity to post it here (&lt;a title="http://cid-80ce78240aa8df49.skydrive.live.com/self.aspx/.Public/RobotShawnWeisfeld.pdf" href="http://cid-80ce78240aa8df49.skydrive.live.com/self.aspx/.Public/RobotShawnWeisfeld.pdf"&gt;http://cid-80ce78240aa8df49.skydrive.live.com/self.aspx/.Public/RobotShawnWeisfeld.pdf&lt;/a&gt;), as I loose anything that is not on my blog. . . . &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Here is a picture of my robot and I at a presentation that I did at the Orlando Bar Camp a few years back. &lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://public.bay.livefilestore.com/y1pSt4xVrpSSLjW3q0KAU5vKeJbiG0On15C90SdkSxIkDqkM6W1iUbve6n5v8VFMBHDPoRexycWrZXT0RnKTX4HxQ/IMG_0267.JPG" /&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/669.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Shawn Weisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/02/09/society-of-computational-science-amp-robot-vision-follow-the-leader.aspx</guid>
            <pubDate>Tue, 09 Feb 2010 11:22:23 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/669.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/02/09/society-of-computational-science-amp-robot-vision-follow-the-leader.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/669.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/669.aspx</trackback:ping>
        </item>
        <item>
            <title>First Robotics Dallas Regional 2009</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/03/15/first-robotics-dallas-regional-2009.aspx</link>
            <description>&lt;p mce_keep="true"&gt;     My day job is one of the sponsors of the First Robotics Program. The idea behind the program is to get kids interested in technology. I was invited to participate in the Dallas Regional where high schools from all over the south west and even Mexico participated in a competition to build and deploy a robot to play a game called Lunacy. You can read more about First Robotics here (&lt;a href="http://www.usfirst.org/"&gt;http://www.usfirst.org&lt;/a&gt;) and more about the Dallas Regional here (&lt;a href="http://dallas.txfirst.org/"&gt;http://dallas.txfirst.org/&lt;/a&gt;). &lt;br /&gt;     Lockheed sponsored something called 5th Gear. This was a simulator built on XNA that allowed the teams to practice the strategy playing Lunacy without wear and tear on their robots. You can get a copy of 5th Gear and practice yourself here (&lt;a href="http://www.tinyurl.com/5thgear"&gt;http://www.tinyurl.com/5thgear&lt;/a&gt;).&lt;br /&gt;     My task at the event was to stream and capture the video. The organizers had a team that took video and displayed it in the venue but they wanted the ability to share the event LIVE online. Additionally they wanted the ability to record the video so that the teams could watch it later. &lt;br /&gt;     Streaming was done via UStream.tv. This is a free service that has a flash plug-in that allows you to broadcast LIVE video to the internet. This allowed parents, classmates back home, family, and the world to see what was going on at the event. Attendance in the online broadcast fluctuated but we had over 7000 people logged in watching the event. To capture the video we used the Pinnacle Systems - Studio MovieBox Plus (&lt;a href="http://www.bestbuy.com/site/olspage.jsp?skuId=8983816&amp;amp;st=pinnacle&amp;amp;lp=9&amp;amp;type=product&amp;amp;cp=1&amp;amp;id=1218004430057"&gt;http://www.bestbuy.com/site/olspage.jsp?skuId=8983816&amp;amp;st=pinnacle&amp;amp;lp=9&amp;amp;type=product&amp;amp;cp=1&amp;amp;id=1218004430057&lt;/a&gt;).&lt;br /&gt;     Recording was done using the Pinnacle - Video Transfer (&lt;a href="http://www.bestbuy.com/site/olspage.jsp?skuId=8719032&amp;amp;st=pinnacle&amp;amp;lp=8&amp;amp;type=product&amp;amp;cp=1&amp;amp;id=1200702767761"&gt;http://www.bestbuy.com/site/olspage.jsp?skuId=8719032&amp;amp;st=pinnacle&amp;amp;lp=8&amp;amp;type=product&amp;amp;cp=1&amp;amp;id=1200702767761&lt;/a&gt;). This allowed us to capture high quality video direct to a hard drive (i.e. without a computer). We then used the included software to chop up the videos by match. Due to concerns over the length and size of the videos we chose to upload the clips to Veoh. We chose that service again because it was free and because YouTube and MSN Soapbox have size/length limitations. The videos have/will be uploaded here (&lt;a href="http://www.veoh.com/search/videos/q/publisher:DallasFirst"&gt;http://www.veoh.com/search/videos/q/publisher:DallasFirst&lt;/a&gt;#).&lt;br /&gt;     All in all this was a great experience. The only way this country is going to say a leader in the world is if we get the next generation interested in science and technology. Programs like this are a great step in that direction. I would like to thanks the folks at First and my company for sponsoring this event.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/286.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/03/15/first-robotics-dallas-regional-2009.aspx</guid>
            <pubDate>Sun, 15 Mar 2009 16:35:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/286.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2009/03/15/first-robotics-dallas-regional-2009.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/286.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/286.aspx</trackback:ping>
        </item>
        <item>
            <title>Using the CCR for Line of Business Applications</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/01/08/using-the-ccr-for-line-of-business-applications.aspx</link>
            <description>&lt;p&gt;For fun I have been playing around with Microsoft Robotics studio (&lt;a href="http://microsoft.com/robotics" mce_href="http://microsoft.com/robotics"&gt;http://microsoft.com/robotics&lt;/a&gt;) for a long time now and I have listened to Microsoft’s George Chrysanthakopoulos tell us how cool the CCR was in just about every webcast. Well I have decided to see if I can use the CCR in a regular business application and eliminate some of the pains of writing multithreaded code.&lt;/p&gt;
&lt;p&gt;To that end I started with a simple problem, calculating Fibonacci numbers, and like any good developer I started with an easy to implement sequential algorithm. Now that I could sequentially calculate the numbers I wanted to see if I can use the CCR to calculate the same results. This required creation of a new execute method, but note that I was able to reuse the code that I wrote to calculate 1 Fibonacci number, the only thing I am rewriting is the test harness. Finally I rewrote the code using a traditional threading model. &lt;/p&gt;
&lt;p&gt;Calculating 10 Fibonacci numbers sequentially took about 13.7 seconds on my dual core laptop, but as one would expect only one of my cores was actually working the other one just sat there doing nothing. On the other hand when processing the same set of numbers with both the CCR or the traditional threading model it took about 7.3 seconds. This is due to the fact that now I was able to use both cores of my computer.&lt;/p&gt;
&lt;p&gt;I know what you are saying, self, why use the CCR I could just use traditional threading techniques. IMHO the major benefit you get with the use of the CCR is that the delta between the sequential code you write and the CCR enabled code you write is much smaller.&lt;/p&gt;
&lt;p&gt;The CCR makes heavy use of queuing logic. So when you have work to be performed you just shove it in a queue and attach a receive arbiter to tell the CCR what to do with each work item (message). The CCR takes care of all the plumbing required to schedule and coordinate each item. &lt;/p&gt;
&lt;p&gt;When starting to work with the CCR I strongly recommend reading the following articles. All of witch I have shamelessly borrowed ideas from. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MSDN CCR User Guide (&lt;a href="http://msdn2.microsoft.com/en-us/library/bb905447.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/bb905447.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb905447.aspx&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Jeffrey Richter’s MSDN article (&lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/09/concurrentaffairs/default.aspx" mce_href="http://msdn.microsoft.com/msdnmag/issues/06/09/concurrentaffairs/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/06/09/concurrentaffairs/default.aspx&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Nick’s Blog (&lt;a href="http://iodyne.blogspot.com/search/label/CCR" mce_href="http://iodyne.blogspot.com/search/label/CCR"&gt;http://iodyne.blogspot.com/search/label/CCR&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The Code &lt;/p&gt;
&lt;p&gt;This is my entry point where I generate some random numbers and then pass them to each of the test harnesses to get processed. &lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Consolas"&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    1&lt;/span&gt;             &lt;span style="COLOR: green"&gt;//Generate random number to calculate Fibonacci for&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    2&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;int&lt;/span&gt;[] fibonacciCalculations = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt;[10];&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    3&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Random&lt;/span&gt; r = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Random&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    4&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;for&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i = 0; i &amp;lt; fibonacciCalculations.Length; i++)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    5&lt;/span&gt;             {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    6&lt;/span&gt;                 fibonacciCalculations[i] = r.Next(30, 40);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    7&lt;/span&gt;             }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    8&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    9&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;SequentialExample&lt;/span&gt;.Execute(fibonacciCalculations);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   10&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;ThreadPoolExample&lt;/span&gt;.Execute(fibonacciCalculations);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   11&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;CcrExample&lt;/span&gt;.Execute(fibonacciCalculations);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   12&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   13&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR: #a31515"&gt;"Done!"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   14&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.ReadKey();&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Sequential Test Harness&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Consolas"&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    1&lt;/span&gt;     &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    2&lt;/span&gt;     &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Method used to exercise the sequential algorithm&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    3&lt;/span&gt;     &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    4&lt;/span&gt;     &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SequentialExample&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    5&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    6&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Execute(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt;[] fibonacciCalculations)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    7&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    8&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt; start = &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt;.Now;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    9&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   10&lt;/span&gt;             &lt;span style="COLOR: green"&gt;//iterate over the collection, calculate and display the results&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   11&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;for&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i = 0; i &amp;lt; fibonacciCalculations.Length; i++)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   12&lt;/span&gt;             {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   13&lt;/span&gt;                 &lt;span style="COLOR: #2b91af"&gt;SequentialFibonacci&lt;/span&gt; f = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SequentialFibonacci&lt;/span&gt;(fibonacciCalculations[i]);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   14&lt;/span&gt;                 f.Calculate();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   15&lt;/span&gt;                 &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR: #a31515"&gt;"Answer: {0}"&lt;/span&gt;, f.FibOfN);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   16&lt;/span&gt;             }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   17&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   18&lt;/span&gt;             &lt;span style="COLOR: green"&gt;//Display the execution time&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   19&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;TimeSpan&lt;/span&gt; runtime = &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt;.Now.Subtract(start);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   20&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR: #a31515"&gt;"Sequential in {0} milliseconds."&lt;/span&gt;, runtime.TotalMilliseconds);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   21&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   22&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   23&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   24&lt;/span&gt;     &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   25&lt;/span&gt;     &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Calculate a given Fibonacci number&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   26&lt;/span&gt;     &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   27&lt;/span&gt;     &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SequentialFibonacci&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   28&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   29&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   30&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Default constructor&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   31&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   32&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;param name="n"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   33&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; SequentialFibonacci(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; n)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   34&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   35&lt;/span&gt;             _n = n;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   36&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   37&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   38&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   39&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Recursive method that calculates the Nth Fibonacci number.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   40&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   41&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;param name="n"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   42&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   43&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Calculate(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; n)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   44&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   45&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (n &amp;lt;= 1)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   46&lt;/span&gt;             {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   47&lt;/span&gt;                 &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; n;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   48&lt;/span&gt;             }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   49&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   50&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; Calculate(n - 1) + Calculate(n - 2);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   51&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   52&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   53&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   54&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Calculate the fibonacci number for me&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   55&lt;/span&gt;         &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   56&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Calculate()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   57&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   58&lt;/span&gt;             _fibOfN = Calculate(_n);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   59&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   60&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   61&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; N { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _n; } }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   62&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; _n;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   63&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   64&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; FibOfN { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _fibOfN; } }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   65&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; _fibOfN;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   66&lt;/span&gt;     }&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;CCR Test Harness&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Consolas"&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    1&lt;/span&gt; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;CcrExample&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    2&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    3&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Execute(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt;[] fibonacciCalculations)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    4&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    5&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt; start = &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt;.Now;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    6&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    7&lt;/span&gt;             &lt;span style="COLOR: green"&gt;//Create the queues&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    8&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;DispatcherQueue&lt;/span&gt; dq = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;DispatcherQueue&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    9&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Port&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;SequentialFibonacci&lt;/span&gt;&amp;gt; fibPort = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Port&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;SequentialFibonacci&lt;/span&gt;&amp;gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   10&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;SuccessFailurePort&lt;/span&gt; results = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SuccessFailurePort&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   11&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   12&lt;/span&gt;             &lt;span style="COLOR: green"&gt;//Post the work to be completed&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   13&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;for&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i = 0; i &amp;lt; fibonacciCalculations.Length; i++)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   14&lt;/span&gt;             {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   15&lt;/span&gt;                 fibPort.Post(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SequentialFibonacci&lt;/span&gt;(fibonacciCalculations[i]));&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   16&lt;/span&gt;             }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   17&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   18&lt;/span&gt;             &lt;span style="COLOR: green"&gt;//Tell the CCR how to proccess each work item &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   19&lt;/span&gt;             &lt;span style="COLOR: green"&gt;//(scatter the work over avaiable workers)&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   20&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Arbiter&lt;/span&gt;.Activate(dq, &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   21&lt;/span&gt;                 &lt;span style="COLOR: #2b91af"&gt;Arbiter&lt;/span&gt;.Receive(&lt;span style="COLOR: blue"&gt;true&lt;/span&gt;, fibPort,&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   22&lt;/span&gt;                 &lt;span style="COLOR: blue"&gt;delegate&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;SequentialFibonacci&lt;/span&gt; fib)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   23&lt;/span&gt;                 {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   24&lt;/span&gt;                     &lt;span style="COLOR: blue"&gt;try&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   25&lt;/span&gt;                     {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   26&lt;/span&gt;                         fib.Calculate();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   27&lt;/span&gt;                         &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR: #a31515"&gt;"Answer: {0}"&lt;/span&gt;, fib.FibOfN);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   28&lt;/span&gt;                         results.Post(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;SuccessResult&lt;/span&gt;());&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   29&lt;/span&gt;                     }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   30&lt;/span&gt;                     &lt;span style="COLOR: blue"&gt;catch&lt;/span&gt; (&lt;span style="COLOR: #2b91af"&gt;Exception&lt;/span&gt; ex)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   31&lt;/span&gt;                     {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   32&lt;/span&gt;                         results.Post(ex);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   33&lt;/span&gt;                     }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   34&lt;/span&gt;                 }));&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   35&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   36&lt;/span&gt;             &lt;span style="COLOR: green"&gt;//Tell the CCR to wait tell us when it is done&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   37&lt;/span&gt;             &lt;span style="COLOR: green"&gt;//(Gather up all the results)&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   38&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Arbiter&lt;/span&gt;.Activate(dq,&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   39&lt;/span&gt;                 &lt;span style="COLOR: #2b91af"&gt;Arbiter&lt;/span&gt;.MultipleItemReceive(results, fibonacciCalculations.Length,&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   40&lt;/span&gt;                 &lt;span style="COLOR: blue"&gt;delegate&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;ICollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;SuccessResult&lt;/span&gt;&amp;gt; successes, &lt;span style="COLOR: #2b91af"&gt;ICollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;Exception&lt;/span&gt;&amp;gt; failures)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   41&lt;/span&gt;                 {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   42&lt;/span&gt;                     &lt;span style="COLOR: #2b91af"&gt;TimeSpan&lt;/span&gt; runtime = &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt;.Now.Subtract(start);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   43&lt;/span&gt;                     &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR: #a31515"&gt;"CCR in {0} milliseconds."&lt;/span&gt;, runtime.TotalMilliseconds);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   44&lt;/span&gt;                 }));&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   45&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   46&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   47&lt;/span&gt;     }&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Thread Pool Test Harness&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Consolas"&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    1&lt;/span&gt;     &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    2&lt;/span&gt;     &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; Excerpt from How to: Use a Thread Pool (C# Programming Guide)&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    3&lt;/span&gt;     &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; http://msdn2.microsoft.com/en-us/library/3dasc8as(VS.80).aspx&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    4&lt;/span&gt;     &lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    5&lt;/span&gt;     &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ThreadedFibonacci&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    6&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    7&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ThreadedFibonacci(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; n, &lt;span style="COLOR: #2b91af"&gt;ManualResetEvent&lt;/span&gt; doneEvent)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    8&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;    9&lt;/span&gt;             _n = n;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   10&lt;/span&gt;             _doneEvent = doneEvent;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   11&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   12&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   13&lt;/span&gt;         &lt;span style="COLOR: green"&gt;// Wrapper method for use with thread pool.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   14&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ThreadPoolCallback(&lt;span style="COLOR: #2b91af"&gt;Object&lt;/span&gt; threadContext)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   15&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   16&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; threadIndex = (&lt;span style="COLOR: blue"&gt;int&lt;/span&gt;)threadContext;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   17&lt;/span&gt;             _fibOfN = Calculate(_n);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   18&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR: #a31515"&gt;"Answer: {0}"&lt;/span&gt;, _fibOfN);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   19&lt;/span&gt;             _doneEvent.Set();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   20&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   21&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   22&lt;/span&gt;         &lt;span style="COLOR: green"&gt;// Recursive method that calculates the Nth Fibonacci number.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   23&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; Calculate(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; n)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   24&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   25&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (n &amp;lt;= 1)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   26&lt;/span&gt;             {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   27&lt;/span&gt;                 &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; n;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   28&lt;/span&gt;             }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   29&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   30&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; Calculate(n - 1) + Calculate(n - 2);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   31&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   32&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   33&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; N { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _n; } }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   34&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; _n;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   35&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   36&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; FibOfN { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt; { &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _fibOfN; } }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   37&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; _fibOfN;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   38&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   39&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ManualResetEvent&lt;/span&gt; _doneEvent;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   40&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   41&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   42&lt;/span&gt;     &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ThreadPoolExample&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   43&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   44&lt;/span&gt;         &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Execute(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt;[] fibonacciCalculations)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   45&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   46&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt; start = &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt;.Now;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   47&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   48&lt;/span&gt;             &lt;span style="COLOR: green"&gt;// One event is used for each Fibonacci object&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   49&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;ManualResetEvent&lt;/span&gt;[] doneEvents = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ManualResetEvent&lt;/span&gt;[fibonacciCalculations.Length];&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   50&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;ThreadedFibonacci&lt;/span&gt;[] fibArray = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ThreadedFibonacci&lt;/span&gt;[fibonacciCalculations.Length];&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   51&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   52&lt;/span&gt;             &lt;span style="COLOR: green"&gt;// Configure and launch threads using ThreadPool:&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   53&lt;/span&gt;             &lt;span style="COLOR: blue"&gt;for&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i = 0; i &amp;lt; fibonacciCalculations.Length; i++)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   54&lt;/span&gt;             {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   55&lt;/span&gt;                 doneEvents[i] = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ManualResetEvent&lt;/span&gt;(&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   56&lt;/span&gt;                 &lt;span style="COLOR: #2b91af"&gt;ThreadedFibonacci&lt;/span&gt; f = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ThreadedFibonacci&lt;/span&gt;(fibonacciCalculations[i], doneEvents[i]);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   57&lt;/span&gt;                 fibArray[i] = f;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   58&lt;/span&gt;                 &lt;span style="COLOR: #2b91af"&gt;ThreadPool&lt;/span&gt;.QueueUserWorkItem(f.ThreadPoolCallback, i);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   59&lt;/span&gt;             }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   60&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   61&lt;/span&gt;             &lt;span style="COLOR: green"&gt;// Wait for all threads in pool to calculation...&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   62&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;WaitHandle&lt;/span&gt;.WaitAll(doneEvents);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   63&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   64&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;TimeSpan&lt;/span&gt; runtime = &lt;span style="COLOR: #2b91af"&gt;DateTime&lt;/span&gt;.Now.Subtract(start);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   65&lt;/span&gt;             &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR: #a31515"&gt;"Threaded in {0} milliseconds."&lt;/span&gt;, runtime.TotalMilliseconds);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   66&lt;/span&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   67&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: #2b91af"&gt;   68&lt;/span&gt;     }&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/224.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/01/08/using-the-ccr-for-line-of-business-applications.aspx</guid>
            <pubDate>Tue, 08 Jan 2008 18:09:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/224.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2008/01/08/using-the-ccr-for-line-of-business-applications.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/224.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/224.aspx</trackback:ping>
        </item>
        <item>
            <title>Central Florida Tech Fair</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/10/07/central-florida-tech-fair.aspx</link>
            <description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" size="3"&gt;Here you can download my presentations from the CFL Tech Fair.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;a href="http://onetug.net/Documents/CFL_Presentations.zip"&gt;http://onetug.net/Documents/CFL_Presentations.zip&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/212.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/10/07/central-florida-tech-fair.aspx</guid>
            <pubDate>Sun, 07 Oct 2007 17:59:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/212.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/10/07/central-florida-tech-fair.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/212.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/212.aspx</trackback:ping>
        </item>
        <item>
            <title>BarCamp Orlando</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/23/barcamp-orlando.aspx</link>
            <description>&lt;p mce_keep="true"&gt;Here is the powerpoint (&lt;a href="http://www.onetug.org/DNN/Portals/0/member_files/2007_09_23_BarCamp.ppt"&gt;http://www.onetug.org/DNN/Portals/0/member_files/2007_09_23_BarCamp.ppt&lt;/a&gt;) for the presentation that I plan on doing Sunday at BarCamp Orlando. See you there!&lt;br /&gt;In the presenation I will provide an overview of MS Robotics Studio, and then provide 4 demo’s.&lt;br /&gt;Demo #1: iRobot Drive by wire&lt;br /&gt;Demo #2: Physics Simulation &lt;br /&gt;Demo #3: Can you find me?&lt;br /&gt;Demo #4: Robot Sumo!&lt;br /&gt;All the demo’s are avaiable to download along with the MS Robotics Studio from the Microsoft Website &lt;a href="http://www.microsoft.com/robotics"&gt;http://www.microsoft.com/robotics&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/211.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/23/barcamp-orlando.aspx</guid>
            <pubDate>Sun, 23 Sep 2007 06:16:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/211.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/23/barcamp-orlando.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/211.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/211.aspx</trackback:ping>
        </item>
        <item>
            <title>Tallahasse Code Camp</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/22/tallahasse-code-camp.aspx</link>
            <description>&lt;p mce_keep="true"&gt;&lt;br /&gt;Although it was a bit of a drive, Tallahassee Code Camp was great. I have included both presenations and the sample code in the attached zip file. &lt;br /&gt;&lt;a href="http://www.onetug.org/DNN/Portals/0/member_files/2007_09_22_TalCodeCamp.zip"&gt;http://www.onetug.org/DNN/Portals/0/member_files/2007_09_22_TalCodeCamp.zip&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/210.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/22/tallahasse-code-camp.aspx</guid>
            <pubDate>Sat, 22 Sep 2007 22:28:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/210.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/22/tallahasse-code-camp.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/210.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/210.aspx</trackback:ping>
        </item>
        <item>
            <title>Image Processing v2.1</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/17/image-processing-v2-1.aspx</link>
            <description>&lt;p mce_keep="true"&gt;BTW to convert from the byte[] back to an image is simple enough&lt;/p&gt;
&lt;p mce_keep="true"&gt;private Bitmap ConvertBitmap(byte[] frame, int width, int height)&lt;br /&gt;{&lt;br /&gt;    Bitmap bmp = new Bitmap(&lt;br /&gt; width,&lt;br /&gt; height,&lt;br /&gt; PixelFormat.Format24bppRgb);&lt;/p&gt;
&lt;p mce_keep="true"&gt;    BitmapData data = bmp.LockBits(&lt;br /&gt; new Rectangle(0, 0, bmp.Width, bmp.Height),&lt;br /&gt; ImageLockMode.WriteOnly,&lt;br /&gt; PixelFormat.Format24bppRgb);&lt;/p&gt;
&lt;p mce_keep="true"&gt;    System.Runtime.InteropServices.Marshal.Copy(frame, 0, data.Scan0, frame.Length);&lt;/p&gt;
&lt;p mce_keep="true"&gt;    bmp.UnlockBits(data);&lt;br /&gt;    return bmp;&lt;br /&gt;}&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/208.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/17/image-processing-v2-1.aspx</guid>
            <pubDate>Tue, 18 Sep 2007 00:35:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/208.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/17/image-processing-v2-1.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/208.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/208.aspx</trackback:ping>
        </item>
        <item>
            <title>Image Processing v2</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/17/image-processing-v2.aspx</link>
            <description>&lt;p mce_keep="true"&gt;I was tearing into v1.5 of Microsoft Robotics Studio (&lt;a href="http://www.microsoft.com/robotics"&gt;http://www.microsoft.com/robotics&lt;/a&gt;) and came across a novel way to process the pixels in an image. In previous posts I was using unmanaged C# code and pointers to move around the image. This worked well but is hard to manage. They take the approach of just dumping the entire image to a byte[], pure genius, now why did I not think of that. I will be rebuilding my library to utilize this technique but I thought this was so cool that I just had to share it!&lt;/p&gt;
&lt;p mce_keep="true"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Coverts a bitmap to a byte[] then prints out the contents to a file&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public void PrintImage()&lt;br /&gt;{&lt;br /&gt;    string file = "image.bmp";&lt;br /&gt;    Bitmap bitmap = Bitmap.FromFile(file) as Bitmap; &lt;br /&gt;    byte[] frame = ConvertBitmap(bitmap);&lt;br /&gt;    int height = bitmap.Height;&lt;br /&gt;    int width = bitmap.Width;&lt;/p&gt;
&lt;p mce_keep="true"&gt;    using (StreamWriter sWriter = new StreamWriter(file + ".txt"))&lt;br /&gt;    {&lt;br /&gt;        int offset;&lt;/p&gt;
&lt;p mce_keep="true"&gt;        //header&lt;br /&gt;        sWriter.WriteLine(string.Format("({0}, {1}) {2},{3},{4}", "COL", "ROW", "RED", "GREEN", "BLUE"));&lt;/p&gt;
&lt;p mce_keep="true"&gt;        //loop over rows&lt;br /&gt;        for (int y = 0; y &amp;lt; height; y++)&lt;br /&gt;        {&lt;br /&gt;            offset = y * width * 3;&lt;/p&gt;
&lt;p mce_keep="true"&gt;            //loop ober columns&lt;br /&gt;            for (int x = 0; x &amp;lt; width; x++, offset += 3)&lt;br /&gt;            {&lt;br /&gt;                int r, g, b;&lt;/p&gt;
&lt;p mce_keep="true"&gt;                b = frame[offset];&lt;br /&gt;                g = frame[offset + 1];&lt;br /&gt;                r = frame[offset + 2];&lt;/p&gt;
&lt;p mce_keep="true"&gt;                //pixel information&lt;br /&gt;                sWriter.WriteLine(string.Format("({0}, {1}) {2},{3},{4}", x, y, r, g, b));&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;
&lt;p mce_keep="true"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Convert a bitmap to a byte array&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="bitmap"&amp;gt;image to convert&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;returns&amp;gt;image as bytes&amp;lt;/returns&amp;gt;&lt;br /&gt;private byte[] ConvertBitmap(Bitmap bitmap)&lt;br /&gt;{&lt;br /&gt;    //Code excerpted from Microsoft Robotics Studio v1.5&lt;br /&gt;    BitmapData raw = null;  //used to get attributes of the image&lt;br /&gt;    byte[] rawImage = null; //the image as a byte[]&lt;/p&gt;
&lt;p mce_keep="true"&gt;    try&lt;br /&gt;    {&lt;br /&gt;        //Freeze the image in memory&lt;br /&gt;        raw = bitmap.LockBits(&lt;br /&gt;            new Rectangle(0, 0, (int)bitmap.Width, (int)bitmap.Height),&lt;br /&gt;            ImageLockMode.ReadOnly,&lt;br /&gt;            PixelFormat.Format24bppRgb&lt;br /&gt;        );&lt;/p&gt;
&lt;p mce_keep="true"&gt;        int size = raw.Height * raw.Stride;&lt;br /&gt;        rawImage = new byte[size];&lt;/p&gt;
&lt;p mce_keep="true"&gt;        //Copy the image into the byte[]&lt;br /&gt;        System.Runtime.InteropServices.Marshal.Copy(raw.Scan0, rawImage, 0, size);&lt;br /&gt;    }&lt;br /&gt;    finally&lt;br /&gt;    {&lt;br /&gt;        if (raw != null)&lt;br /&gt;        {&lt;br /&gt;            //Unfreeze the memory for the image&lt;br /&gt;            bitmap.UnlockBits(raw);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    return rawImage;&lt;br /&gt;}&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/207.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/17/image-processing-v2.aspx</guid>
            <pubDate>Mon, 17 Sep 2007 22:47:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/207.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/09/17/image-processing-v2.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/207.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/207.aspx</trackback:ping>
        </item>
        <item>
            <title>Jax CodeCamp Presentations</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/08/26/jax-codecamp-presentations.aspx</link>
            <description>&lt;p mce_keep="true"&gt;Here are my two presentations from the Jax CodeCamp.&lt;/p&gt;
&lt;p mce_keep="true"&gt;OOP&lt;br /&gt;&lt;a href="http://www.onetug.org/sf/Files/MemberFiles/JaxCcWeisfeldShawnOOP.ppt"&gt;http://www.onetug.org/sf/Files/MemberFiles/JaxCcWeisfeldShawnOOP.ppt&lt;/a&gt;&lt;/p&gt;
&lt;p mce_keep="true"&gt;Robot Vision&lt;br /&gt;&lt;a href="http://www.onetug.org/sf/Files/MemberFiles/JaxCcWeisfeldShawnRobotVision.ppt"&gt;http://www.onetug.org/sf/Files/MemberFiles/JaxCcWeisfeldShawnRobotVision.ppt&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/204.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/08/26/jax-codecamp-presentations.aspx</guid>
            <pubDate>Sun, 26 Aug 2007 19:09:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/204.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/08/26/jax-codecamp-presentations.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/204.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/204.aspx</trackback:ping>
        </item>
        <item>
            <title>Tampa Code Camp Robot Vision Presentation</title>
            <link>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/07/14/tampa-code-camp-robot-vision-presentation.aspx</link>
            <description>&lt;p mce_keep="true"&gt;Here is the powerpoint for my presentation tomorrow. &lt;/p&gt;
&lt;p mce_keep="true"&gt;&lt;a href="http://www.onetug.org/DNN/Portals/0/member_files/2007_07_14_robot.ppt"&gt;http://www.onetug.org/DNN/Portals/0/member_files/2007_07_14_robot.ppt&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/aggbug/196.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>sweisfeld</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/07/14/tampa-code-camp-robot-vision-presentation.aspx</guid>
            <pubDate>Sat, 14 Jul 2007 08:35:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/196.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2007/07/14/tampa-code-camp-robot-vision-presentation.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/comments/commentRss/196.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/ShawnWeisfeld/services/trackbacks/196.aspx</trackback:ping>
        </item>
    </channel>
</rss>
