<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>Code to Live,  Live to Code</title>
  <link rel="alternate" type="text/html" href="http://randypatterson.com/" />
  <link rel="self" href="http://randypatterson.com/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2008-07-03T07:53:00.5208750-04:00</updated>
  <author>
    <name>Randy Patterson</name>
  </author>
  <subtitle>Randy Patterson's BLog</subtitle>
  <id>http://randypatterson.com/</id>
  <generator uri="http://www.dasblog.net" version="1.9.7174.0">DasBlog</generator>
  <entry>
    <title>Top Developer Podcasts Part II</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/06/27/TopDeveloperPodcastsPartII.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,64914677-63f2-4e00-8459-4df93414beb1.aspx</id>
    <published>2008-06-27T17:21:25.7311250-04:00</published>
    <updated>2008-07-03T07:53:00.5208750-04:00</updated>
    <category term="Podcast" label="Podcast" scheme="http://randypatterson.com/CategoryView,category,Podcast.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
It's been six months since my previous article "<a href="http://randypatterson.com/2007/12/05/10PodcastsEveryDeveloperShouldListenTo.aspx" target="_blank">10
Podcasts Every Developer Should Listen To</a>" so I thought I would do a follow up
article outlining some of the new quality podcasts available to developers.
</p>
        <table cellspacing="0" cellpadding="2" width="768" border="1">
          <tbody>
            <tr>
              <td valign="top" width="19">
                <img src="http://randypatterson.com/images/feedButton.gif" align="left" />
              </td>
              <td valign="top" width="232">
                <a href="http://altnetpodcast.com/" target="_blank">Alt.Net Podcast</a>
              </td>
              <td valign="top" width="513">
Good quality weekly podcast covering topics like adopting Agile, Dependency Injection
and Continuous Integration</td>
            </tr>
            <tr>
              <td valign="top" width="19">
                <img src="http://randypatterson.com/images/feedButton.gif" />
              </td>
              <td valign="top" width="232">
                <a href="http://pipes.yahoo.com/pipes/pipe.info?_id=oNnUn0EZ3RGZ6TmZ2h2EvQ" target="_blank">The
Java Pose</a>
              </td>
              <td valign="top" width="510">
Helps to keep me informed of the innovations happening in the Java world and you get
a catchy intro tune for free.  
</td>
            </tr>
            <tr>
              <td valign="top" width="19">
                <img src="http://randypatterson.com/images/feedButton.gif" />
              </td>
              <td valign="top" width="232">
                <a href="http://thirstydeveloper.com/" target="_blank">The Thirsty Developer</a>
              </td>
              <td valign="top" width="507">
A weekly podcast covering a wide variety of .NET topics like SCRUM, Continuous Integration,
Cyclomatic Complexity and Silverlight 2.  
</td>
            </tr>
            <tr>
              <td valign="top" width="19">
                <img src="http://randypatterson.com/images/feedButton.gif" />
              </td>
              <td valign="top" width="232">
                <a href="http://www.parleys.com/" target="_blank">Parlays</a>
              </td>
              <td valign="top" width="509">
Good architecture podcast with a wide variety of topics that focus on Java, Google
and Apple.  
</td>
            </tr>
            <tr>
              <td valign="top" width="19">
                <img src="http://randypatterson.com/images/feedButton.gif" />
              </td>
              <td valign="top" width="232">
                <a href="http://www.radiotfs.com/" target="_blank">Radio TFS</a>
              </td>
              <td valign="top" width="508">
Excellent podcast on all things Team Foundation Server.  Highly recommended if
you use or plan to use TFS</td>
            </tr>
            <tr>
              <td valign="top" width="19">
                <img src="http://randypatterson.com/images/feedButton.gif" />
              </td>
              <td valign="top" width="232">
                <a href="http://thirstydeveloper.com/" target="_blank">ThoughtWorks - IT Matters</a>
              </td>
              <td valign="top" width="506">
Discusses the business and technology issues facing the IT Industry with occasional
appearances from people like Martin Fowler.</td>
            </tr>
            <tr>
              <td valign="top" width="19">
                <img src="http://randypatterson.com/images/feedButton.gif" />
              </td>
              <td valign="top" width="232">
                <a href="http://deepfriedbytes.com/" target="_blank">Deep Fired Bytes</a>
              </td>
              <td valign="top" width="511">
Despite the unhealthy name of this podcast it covers a healthy variety of IT Topics.</td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <p>
If I've missed any developer related podcasts that you find helpful please let me
know.
</p>
        <p>
          <a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2frandypatterson.com%2f2008%2f06%2f27%2fTopDeveloperPodcastsPartII.aspx">
            <img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2frandypatterson.com%2f2008%2f06%2f27%2fTopDeveloperPodcastsPartII.aspx" border="0" />
          </a>
        </p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=64914677-63f2-4e00-8459-4df93414beb1" />
      </div>
    </content>
  </entry>
  <entry>
    <title>I am Speaking at the Next IASA Meeting</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/06/25/IAmSpeakingAtTheNextIASAMeeting.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,4126183c-4443-4927-bf3c-5b28d9d282c2.aspx</id>
    <published>2008-06-25T09:30:20.6146250-04:00</published>
    <updated>2008-06-27T14:08:57.3580000-04:00</updated>
    <category term="Events" label="Events" scheme="http://randypatterson.com/CategoryView,category,Events.aspx" />
    <category term="Unity Application Block" label="Unity Application Block" scheme="http://randypatterson.com/CategoryView,category,Unity%2BApplication%2BBlock.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
 
</p>
        <h3>
          <a href="http://martinfowler.com/articles/injection.html" target="_blank">Dependency
Injection</a> using the Microsoft <a href="http://codeplex.com/unity" target="_blank">Unity
Application Block</a></h3>
        <p>
The Microsoft Unity Application Block is a lightweight Dependency Injection Container
that is currently being incorporated into the latest releases of Enterprise Library
and the Composite Application Library (Prism). This session will give an introduction
to Dependency Injection and Inversion of Control concepts and a brief overview of
how to use the Unity Application Block to build loosely coupled applications.
</p>
        <p>
My goal is to finish by leading a discussion on the pros and cons of Dependency Injection,
Loosely coupled and Tightly coupled components. When we leave I hope everyone will
have a deeper understanding of these principles and how and when to apply them.
</p>
        <p>
          <strong>
            <i>When &amp; Where:</i>
          </strong>
          <br />
Thursday, June 26, 2008 from 06:30 PM - 08:30 PM (ET)<br />
Microsoft Corporation<br />
3000 Bayport Drive<br />
Suite 480<br />
Tampa, FL 33607 
<br /><a href="http://list-manage.com/track/click?u=def661e5fb5b51ddb3bafdd75&amp;id=623dad369a&amp;e=NXdOG97ItE">View
a map</a><br /><a href="http://list-manage.com/track/click?u=def661e5fb5b51ddb3bafdd75&amp;id=dcbf1f84de&amp;e=NXdOG97ItE">View
1-Click Directions</a></p>
        <p>
          <b>Please be aware that the outside doors lock and the elevators need a security key
after 7:00 PM.</b>
        </p>
        <p>
 
</p>
        <p>
          <a href="http://www.eventbrite.com/event/107409264/RRPBlog" target="_blank">Please
Register for the event:</a>
        </p>
        <h3>Update:
</h3>
        <p>
Here are my slides from the presentation:
</p>
        <p>
 <iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-a368b40efafbe8fa.skydrive.live.com/embedrowdetail.aspx/Public/Dependency%20Injection.zip" frameborder="0" scrolling="no"></iframe></p>
        <p>
For additional information I recommend the following 2 part PodCast on Dependency
Injection:
</p>
        <p>
          <a href="http://altnetpodcast.com/episodes/5-di-and-ioc" target="_blank">
            <img height="33" alt="podcast" src="http://randypatterson.com/images/IamSpeakingattheNextIASAMeeting_7E5D/podcast.png" width="32" align="left" border="0" /> <a href="http://altnetpodcast.com/episodes/5-di-and-ioc" target="_blank">Dependency
Injection and Inversion of Control</a></a>
        </p>
        <p>
 
</p>
        <p>
          <a href="http://altnetpodcast.com/episodes/6-more-di-and-ioc" target="_blank">
            <img height="33" alt="podcast" src="http://randypatterson.com/images/IamSpeakingattheNextIASAMeeting_7E5D/podcast.png" width="32" align="left" border="0" /> </a>
          <a href="http://altnetpodcast.com/episodes/6-more-di-and-ioc" target="_blank">More
Dependency Injection and Inversion of Control</a>
        </p>
        <p>
 
</p>
        <p>
Finally, the following book is highly recommended:
</p>
        <table border="0">
          <tbody>
            <tr>
              <td valign="top">
                <a href="http://www.amazon.com/Principles-Patterns-Practices-Robert-Martin/dp/0131857258%3FSubscriptionId%3D0525E2PQ81DD7ZTWTK82%26tag%3Dws%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0131857258">
                  <img src="http://ecx.images-amazon.com/images/I/51Y57BH27TL._SL75_.jpg" border="1" />
                </a>
              </td>
              <td valign="top">
                <b>Agile Principles, Patterns, and Practices in C# (Robert C. Martin Series)</b>
                <br />
by Robert C. Martin, Micah Martin<br /><br /><a href="http://www.amazon.com/Principles-Patterns-Practices-Robert-Martin/dp/0131857258%3FSubscriptionId%3D0525E2PQ81DD7ZTWTK82%26tag%3Dws%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0131857258">Read
more about this book...</a></td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=4126183c-4443-4927-bf3c-5b28d9d282c2" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Alt.NET Podcast Launched!</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/05/19/AltNETPodcastLaunched.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,97db1913-cea4-4f14-8627-cf7a6d93d1a2.aspx</id>
    <published>2008-05-19T16:10:16.8722500-04:00</published>
    <updated>2008-05-19T16:12:26.4035000-04:00</updated>
    <category term="Podcast" label="Podcast" scheme="http://randypatterson.com/CategoryView,category,Podcast.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div id="header">
          <a href="http://altnetpodcast.com/" target="_blank">
            <pre>
              <a href="http://altnetpodcast.com/"> .o.
oooo . ooooo ooo oooooooooooo ooooooooooooo .888. `888 .o8 `888b. `8' `888' `8 8'
888 `8 .8"888. 888 .o888oo 8 `88b. 8 888 888 .8' `888. 888 888 8 `88b. 8 888oooo8
888 .88ooo8888. 888 888 8 `88b.8 888 " 888 .8' `888. 888 888 . .o. 8 `888 888 o 888
o88o o8888o o888o "888" Y8P o8o `8 o888ooooood8 o888o ooooooooo. .o8 . `888 `Y88.
"888 .o8 888 .d88' .ooooo. .oooo888 .ooooo. .oooo. .oooo.o .o888oo 888ooo88P' d88'
`88b d88' `888 d88' `"Y8 `P )88b d88( "8 888 888 888 888 888 888 888 .oP"888 `"Y88b.
888 888 888 888 888 888 888 .o8 d8( 888 o. )88b 888 . o888o `Y8bod8P' `Y8bod88P" `Y8bod8P'
`Y888""8o 8""888P' "888"</a>
            </pre>
          </a>
        </div>
        <p>
The goal of the <a href="http://altnetpodcast.com/" target="_blank">Alt.NET podcast</a> is
to release a new episode every week or two. The first episode is a talk with <a href="http://blowmage.com/" target="_blank">Mike
More</a>, <a href="http://codebetter.com/blogs/david_laribee/">David Laribee</a>, <a href="http://codebetter.com/blogs/jeremy.miller/">Jeremy
D. Miller</a>, and <a href="http://www.lostechies.com/blogs/chad_myers/">Chad Myers</a> about
continuously improving yourself, your code, and your team.  Great episode, give
it a try!
</p>
        <p>
Add this to my <a href="http://randypatterson.com/2007/12/05/10PodcastsEveryDeveloperShouldListenTo.aspx" target="_blank">previous
post</a> of developer podcasts you should listen to.
</p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=97db1913-cea4-4f14-8627-cf7a6d93d1a2" />
      </div>
    </content>
  </entry>
  <entry>
    <title>]InBetween[ Microsoft Community Summit 2008 - Free Weekend of Training</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/05/07/InBetweenMicrosoftCommunitySummit2008FreeWeekendOfTraining.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,8623a115-af05-48f7-8edf-15d04242ea4d.aspx</id>
    <published>2008-05-07T17:48:30.6762500-04:00</published>
    <updated>2008-05-07T17:48:30.6762500-04:00</updated>
    <category term="Events" label="Events" scheme="http://randypatterson.com/CategoryView,category,Events.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
The Orlando Convention Center was not being used between TechEd Developer week and
TechEd ITPro week.  Microsoft has graciously donated the convention center to
be used by the Florida Developer Community!  There are 9 large conference rooms
that will be filled for 2 days with presentations from Local,  Microsoft and
TechEd Speakers.  In addition to the full day tracks listed below there will
also be <a href="http://www.devfish.net/articles/inbetween/certification.aspx" target="_blank">discounts
on MS Certification Exam Tests</a>, an <a href="http://www.devfish.net/articles/inbetween/examcram_mcse.aspx" target="_blank">MCSA/MCSE:
weekend upgrade bootcamp</a>, a <a href="http://www.devfish.net/articles/inbetween/examcram_mcsd.aspx" target="_blank">Developers
Weekend Exam Cram</a> and <a href="http://www.devfish.net/articles/inbetween/TrainTheTrainer.aspx" target="_blank">Train
the Trainer sessions</a>.  ALL FOR FREE!!!
</p>
        <h2>Saturday, June 7th Activities - 830a to 530p
</h2>
        <table cellspacing="0" cellpadding="2" width="649" border="1">
          <tbody>
            <tr>
              <td valign="top" width="124">
                <strong>Full Day Tracks</strong>
              </td>
              <td valign="top" width="523">
                <strong>Description</strong>
              </td>
            </tr>
            <tr>
              <td valign="top" width="126">
SQL Saturday</td>
              <td valign="top" width="523">
Best of the SQLSaturday events with some special product team reps attending.</td>
            </tr>
            <tr>
              <td valign="top" width="127">
Open Space</td>
              <td valign="top" width="523">
Four corners of a room with whiteboards. Sign up for a 30 minute talk on whatever
topic you want</td>
            </tr>
            <tr>
              <td valign="top" width="128">
RoboCamps</td>
              <td valign="top" width="523">
More info coming soon. Until then <a href="http://www.robochamps.com">http://www.robochamps.com</a></td>
            </tr>
            <tr>
              <td valign="top" width="129">
Day of Agile</td>
              <td valign="top" width="523">
Got a passion for Agile? <a href="http://www.jimzimmerman.com/blog">Jim Zimmerman</a> and
Chris Chandler have put together a full day of Agile topics ready to go.</td>
            </tr>
            <tr>
              <td valign="top" width="130">
.NET Code Camp</td>
              <td valign="top" width="523">
Some local speakers, some speakers from the regular TechEd Event and some members
of the Microsoft product teams.</td>
            </tr>
            <tr>
              <td valign="top" width="130">
ITPro Camp</td>
              <td valign="top" width="523">
A first for the state and maybe the country? The very first Microsoft ITPro Camp</td>
            </tr>
          </tbody>
        </table>
        <p>
*Schedule subject to change so check the official web site often (<a title="http://www.devfish.net/articles/inbetween/" href="http://www.devfish.net/articles/inbetween/">http://www.devfish.net/articles/inbetween/</a>)
</p>
        <h2>
          <a href="http://randypatterson.com/images/MicrosoftCommunitySummit2008FreeWeekendo_A030/image.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="106" alt="image" src="http://randypatterson.com/images/MicrosoftCommunitySummit2008FreeWeekendo_A030/image_thumb.png" width="136" align="left" border="0" />
          </a>
        </h2>
        <h2> 
</h2>
        <h2>Party and Social! Saturday, June 7th 6:00PM
</h2>
        <p>
 
</p>
        <p>
 
</p>
        <h2>Sunday, June 8th Activities - 830a to 530p
</h2>
        <table cellspacing="0" cellpadding="2" width="646" border="1">
          <tbody>
            <tr>
              <td valign="top" width="133">
                <strong>Full Day Tracks</strong>
              </td>
              <td valign="top" width="511">
                <strong>Description</strong>
              </td>
            </tr>
            <tr>
              <td valign="top" width="135">
SQL University</td>
              <td valign="top" width="511">
                <a href="http://blogs.sqlservercentral.com/andy_warren/default.aspx">Andy Warren</a> is
putting together some of his <a href="http://www.endtoendtraining.com">very best training</a> on
SQL Server to get you up to speed quick</td>
            </tr>
            <tr>
              <td valign="top" width="136">
Dot Net Nuke University</td>
              <td valign="top" width="511">
A full day of Dot Net Nuke Training</td>
            </tr>
            <tr>
              <td valign="top" width="137">
Open Space</td>
              <td valign="top" width="511">
our corners of a room with whiteboards. Sign up for a 30 minute talk on whatever topic
you want</td>
            </tr>
            <tr>
              <td valign="top" width="137">
ToolShed</td>
              <td valign="top" width="511">
                <a href="http://www.russtoolshed.net">Russ Fustino</a> and <a href="http://www.vbnetexpert.com">Stan
Schultes</a> come together with encores of "Its all about the Tools" episodes 1 and
2, plus all new episodes 3 and 4</td>
            </tr>
            <tr>
              <td valign="top" width="137">
OCS University</td>
              <td valign="top" width="511">
OCS MVP <a href="http://www.ocsmvp.com">Keith Kabza</a> and <a href="http://www.techtionary.com">Tom
Cross</a> will get you up and running on <b>Office Communication Server</b> in a day</td>
            </tr>
            <tr>
              <td valign="top" width="137">
.NET University</td>
              <td valign="top" width="511">
                <p>
                  <a href="http://blogs.msdn.com/dougturn">Doug Turnure</a>'s flagshihp series of structured
courses geared to bring you up to speed on a particular topic.  Three separate
all day courses are being offered, including Sharepoint, Service Oriented Development
in .NET 3.5, and BizTalk. Something for almost everyone!
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="137">
VSTS University</td>
              <td valign="top" width="511">
Tentative - Doug Seven and the Redmond guys hang around to teach you VSTS. Learn from
the VSTS team themselves.</td>
            </tr>
          </tbody>
        </table>
        <p>
*Schedule subject to change so check the official web site often (<a title="http://www.devfish.net/articles/inbetween/" href="http://www.devfish.net/articles/inbetween/">http://www.devfish.net/articles/inbetween/</a>)
</p>
        <p>
This is an incredible opportunity for learning with enough variety for everyone.  
A special thanks goes out to our local Microsoft Developer Evangelist, <a href="http://www.devfish.net/default.aspx" target="_blank">Joe
Healy</a> for organizing the event and creating the effective but very ugly web site.
</p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=8623a115-af05-48f7-8edf-15d04242ea4d" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Unity Application Block Event Broker</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/05/02/UnityApplicationBlockEventBroker.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,053231f3-282c-446d-a3ae-8bda70c8fdb0.aspx</id>
    <published>2008-05-02T01:02:08.0000000-04:00</published>
    <updated>2008-05-01T21:09:42.0354716-04:00</updated>
    <category term="C#" label="C#" scheme="http://randypatterson.com/CategoryView,category,C%23.aspx" />
    <category term="Unity Application Block" label="Unity Application Block" scheme="http://randypatterson.com/CategoryView,category,Unity%2BApplication%2BBlock.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
The <a href="http://www.codeplex.com/unity">Unity Application Block</a><a href="http://www.martinfowler.com/articles/injection.html">IoC
Container</a> comes with a little know extension for creating <a href="http://msdn.microsoft.com/en-us/library/0czwd3tx(VS.80).aspx">loosely
coupled events</a> called the <em>Simple Event Broker</em>.  The Unity Event
Broker supports multiple publishers and multiple subscribers to the same event name. 
The decoupled model prevents subscribers from knowing about publishers and publishers
from knowing about subscribers.
</p>
        <p>
 
</p>
        <p>
          <a href="http://randypatterson.com/images/UnityEventBroker_A692/image.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="129" alt="image" src="http://randypatterson.com/images/UnityEventBroker_A692/image_thumb.png" width="543" border="0" />
          </a>
        </p>
        <p>
 
</p>
        <p>
The Event Broker source code can be found under the Unity Quick Starts normally located
here 
</p>
        <p>
"C:\Program Files\Microsoft Unity Application Block 1.0\UnityQuickStarts.zip\UnityQuickStarts\CS\EventBroker.sln".  
</p>
        <p>
In order to use the Extension make sure you have your project reference the <em>EventBrokerExtension.dll</em> and
the <em>SimpleEventBroker.dll</em>.
</p>
        <p>
Next, you need to configure Unity by adding the Event Broker Extension to the Container.
</p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3b0693e4-8518-4e74-a05c-b5a8770b4d10" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="c#">        private static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            UnityContainer rootContainer = new UnityContainer();

            rootContainer.AddNewExtension&lt;SimpleEventBrokerExtension&gt;();
            
            Application.Run(rootContainer.Resolve&lt;DefaultForm&gt;());
        }</pre>
        </div>
        <p>
 
</p>
        <p>
This gives you two new Attributes recognized by Unity, <font face="Courier New" size="2">[Publishes(<em>eventName</em>)] </font>and <font size="2">[SubscribesTo(<em>eventName</em>)] </font>where <strong><em>eventName </em></strong>is
a string that uniquely identifies the loosely coupled event.
</p>
        <p>
The attribute [<em>Publishes]</em> is applied to an event and lets the event broker
know that when this event is raised, any methods that are subscribed to <strong><em>eventName </em></strong>are
called.  
</p>
        <p>
For Example:
</p>
        <p>
        </p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:cf4d7b1c-4fa0-4855-a031-48c2deb4736c" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="c#">        [Publishes("event://Transaction/Complete")]
        public event EventHandler TransactionComplete;
</pre>
        </div>
        <p>
        </p>
        <table cellspacing="0" cellpadding="2" width="402" border="1">
          <tbody>
            <tr>
              <td valign="top" width="400">
                <p align="center">
                  <font color="#0080ff" size="3">Best Practice:</font>
                </p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="400">
                <p align="left">
                  <br />
It is recommended that you not hard code the Event Name parameter.  Instead use
a class that contains the event names as public string constants.
</p>
                <p align="left">
[SubscribesTo(EventTopicNames.TransactionComplete)]
</p>
                <p>
This prevents typos in the event name string and also allows a Usages Search in Visual
Studio to quickly locate all Publishers and all Subscribers of an event.<br /></p>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <p>
The event broker will create a loosely coupled event named "event://Transaction/Completed"
[1] and link the .NET event <em>TransactionComplete </em>[2]<em> </em>to it<em>. </em>The
following subscriber code 
</p>
        <p>
        </p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:9417ed51-a984-48b1-8a7e-804a7e5dff25" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="c#">        [SubscribesTo("event://Transaction/Complete")]
        public void TransactionCompleteHandler(object sender, EventArgs e)
        {
            //Do Something.....
        }
</pre>
        </div>
        <p>
        </p>
        <p>
informs the Event Broker that method TransactionCompleteHandler [3] needs to be called
whenever the loosely coupled event named "event://Transaction/Completed" is published.
Notice that neither the publisher nor the subscriber is aware of the other. 
</p>
        <h3>Conclusion
</h3>
        <p align="left">
The ability for your application to communicate between controls without resorting
to directly linking one class to another increases the reusability of your code. 
The Unity Event Broker is, as it's name implies, a rather simple implementation of
loosely coupled events but it is a good start none the less.  for example, 
I would like to see a way for subscribers to indicate that methods should be called
on a background thread instead of always on the Publisher's thread. In future posts
I will show how to register events for publication when you cannot add the [<em>Publishes]</em> attribute
directly to an event declaration (useful for Button and Menu Click events or third
part controls)
</p>
        <p>
 
</p>
        <ol>
          <li>
I<font size="1"> use the URL style string to name the decoupled events purely out
of habit.  Obviously, any string will do but I find the URL format to be clean
and easy to read.</font></li>
          <li>
            <font size="1">Events must be scoped public in order for the Event Broker to detect
the Publishes attribute</font>
          </li>
          <li>
            <font size="1">The subscription method must be scoped public in order for the Event
Broker to detect the SubscribesTo attribute</font>
          </li>
        </ol>
        <p>
 
</p>
        <link href="Styles/SyntaxHighlighter.css" type="text/css" rel="stylesheet" />
        <script language="javascript" src="Scripts/shCore.js">
        </script>
        <script language="javascript" src="Scripts/shBrushCSharp.js">
        </script>
        <script language="javascript">
window.onload = function() {
    dp.SyntaxHighlighter.ClipboardSwf = 'Scripts/clipboard.swf';
    dp.SyntaxHighlighter.HighlightAll('code');
};
 </script>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=053231f3-282c-446d-a3ae-8bda70c8fdb0" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Lazy Instantiation with Unity Application Block</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/03/30/LazyInstantiationWithUnityApplicationBlock.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,90df538c-feee-483d-b914-ed2dd54ef119.aspx</id>
    <published>2008-03-29T20:48:37.0568750-04:00</published>
    <updated>2008-03-31T17:59:12.8065854-04:00</updated>
    <category term="Patterns" label="Patterns" scheme="http://randypatterson.com/CategoryView,category,Patterns.aspx" />
    <category term="Unit Tests" label="Unit Tests" scheme="http://randypatterson.com/CategoryView,category,Unit%2BTests.aspx" />
    <category term="Unity Application Block" label="Unity Application Block" scheme="http://randypatterson.com/CategoryView,category,Unity%2BApplication%2BBlock.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Configuring the <a href="http://codeplex.com/unity" target="_blank">Unity Application
Block</a> for just-in-time Instantiation.  
</p>
        <p>
Out of the box, Unity does not provide a way to configure your dependencies so that
they are resolved only if needed.  Lazy Instantiation would be desirable if your
dependency is and required only under certain circumstances or you would like to delay
object creation of a resource intensive dependency until needed.
</p>
        <p>
For <a href="http://en.wikipedia.org/wiki/Lazy_initialization_pattern" target="_blank">Lazy
Instantiation</a>, the first obstacle to overcome when using <a href="http://martinfowler.com/articles/injection.html" target="_blank">IoC
Containers</a> like <a href="http://codeplex.com/unity" target="_blank">Unity</a>,
is to have your components get a reference to the container so the dependency creation
can be delegated to it when the need arises.  My first inclination was to wrap
Unity in a <a href="http://en.wikipedia.org/wiki/Singleton_pattern" target="_blank">Singleton</a> and
have the component reference this in order to resolve the dependency.  
</p>
        <p>
          <font size="3">Container.Instance.Resolve&lt;<font color="#07c7fe">IProductService</font>&gt;();</font>
        </p>
        <p>
Singleton's are, however, notoriously difficult to test and very rigid in design. 
Used in this manner,  a Singleton is nothing more than a global variable wrapped
in a buzzword.  so I wanted a different approach.  Since we are using a <a href="http://en.wikipedia.org/wiki/Dependency_injection" target="_blank">Dependency
Injection</a> Framework, why not have the container inject a reference to itself into
our components.
</p>
        <p>
1.  First, configure the Unity container so that it can return a reference to
itself.
</p>
        <p>
          <a href="http://www.randypatterson.com/images/Gettingareferencetothecurrentunitycontai_B90C/image1.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="65" alt="image" src="http://www.randypatterson.com/images/Gettingareferencetothecurrentunitycontai_B90C/image1_thumb.png" width="526" border="0" />
          </a>
        </p>
        <p>
2.  Next, create a property on your class to get a reference to the Unity container
that created it.
</p>
        <p>
          <a href="http://www.randypatterson.com/images/Gettingareferencetothecurrentunitycontai_B90C/image10.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="119" alt="image" src="http://www.randypatterson.com/images/Gettingareferencetothecurrentunitycontai_B90C/image10_thumb.png" width="341" border="0" />
          </a>
        </p>
        <p>
3.  Finally, have the container resolve the dependency the first time it's referenced.  
</p>
        <p>
          <a href="http://www.randypatterson.com/images/Gettingareferencetothecurrentunitycontai_B90C/image16.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="181" alt="image" src="http://www.randypatterson.com/images/Gettingareferencetothecurrentunitycontai_B90C/image16_thumb.png" width="548" border="0" />
          </a>
        </p>
        <p>
          <font size="3">
          </font>
          <font size="3">Unit Testing</font>
        </p>
        <p>
Testing is straight forward as well.   You could have your unit test use
reflection to reach in and set the private field (_productService) to your mock object. 
However,  giving your Unit Tests access to private members violates the "<a href="http://xunitpatterns.com/Principles%20of%20Test%20Automation.html#Use%20the%20Front%20Door%20First" target="_blank">Use
the Front Door First</a>" Test Automation Principle and should be avoided if possible. 
Alternatively, you could create a mock object for IUnityContainer and have it return
a mock object for IProductService when the Resolve method is called.
</p>
        <p>
Using <a href="http://www.ayende.com/projects/rhino-mocks/downloads.aspx" target="_blank">RhinoMocks</a>,
the Unit Test would look something like this:
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.randypatterson.com/images/Gettingareferencetothecurrentunitycontai_B90C/image.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="424" alt="image" src="http://www.randypatterson.com/images/Gettingareferencetothecurrentunitycontai_B90C/image_thumb.png" width="698" border="0" />
          </a>
        </p>
        <p>
          <font size="3">
          </font> 
</p>
        <p>
 <a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2frandypatterson.com%2f2008%2f03%2f30%2fLazyInstantiationWithUnityApplicationBlock.aspx"><img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2frandypatterson.com%2f2008%2f03%2f30%2fLazyInstantiationWithUnityApplicationBlock.aspx" border="0" /></a></p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=90df538c-feee-483d-b914-ed2dd54ef119" />
      </div>
    </content>
  </entry>
  <entry>
    <title>MSDN Article on Dependency Injection</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/03/24/MSDNArticleOnDependencyInjection.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,efd6bd04-951e-4c16-9a8c-745434a4847e.aspx</id>
    <published>2008-03-24T19:16:10.7336250-04:00</published>
    <updated>2008-03-24T19:16:10.7336250-04:00</updated>
    <category term="Patterns" label="Patterns" scheme="http://randypatterson.com/CategoryView,category,Patterns.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Nice article posted by <a href="http://msdn2.microsoft.com/en-us/magazine/cc337885.aspx" target="_blank">MSDN
Magazine on Dependency Injection</a> written by <a href="http://codebetter.com/blogs/james.kovacs/default.aspx" target="_blank">James
Kovacs</a>.  Coincides nicely with my <a href="http://randypatterson.com/2008/03/23/OrlandoCodeCampSlidesAndSampleCode.aspx" target="_blank">Presentation
on Unity Application Block</a> at the Orlando Code Camp
</p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=efd6bd04-951e-4c16-9a8c-745434a4847e" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Orlando Code Camp slides and sample code</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/03/23/OrlandoCodeCampSlidesAndSampleCode.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,e8b99eba-2451-4eee-9a3c-2a8e6b5c6b74.aspx</id>
    <published>2008-03-23T12:29:59.5141746-04:00</published>
    <updated>2008-03-23T12:29:59.5141746-04:00</updated>
    <category term="Events" label="Events" scheme="http://randypatterson.com/CategoryView,category,Events.aspx" />
    <category term="Patterns" label="Patterns" scheme="http://randypatterson.com/CategoryView,category,Patterns.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
The <a href="http://www.orlandocodecamp.com/default.aspx" target="_blank">Orlando
Code Camp</a> was a huge success.  Lots of great sessions and talented speakers.
A special thanks goes out to <a href="http://www.ShawnWeisfeld.com" target="_blank">Shawn
Weisfeld</a> of the <a href="http://onetug.net/default.aspx" target="_blank">Orlando
.NET Users Group</a> and <a href="http://www.cfdotnet.org/About/tabid/61/Default.aspx" target="_blank">Roy
Lawson</a> of the <a href="http://www.cfdotnet.org/" target="_blank">Lakeland Users
Group</a>, as well as the many other volunteers and speakers.
</p>
        <p>
Below, I've posted my Power Point slides and code samples for both my sessions at
the Code Camp.
</p>
        <p>
          <font size="4">
          </font> 
</p>
        <p>
          <font size="4">The Unity Application Block</font>
        </p>
        <p>
          <iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-a368b40efafbe8fa.skydrive.live.com/embedrowdetail.aspx/Orlando%20Code%20Camp/Unity%20Application%20Block.zip" frameborder="0" scrolling="no">
          </iframe>
        </p>
        <p>
          <font size="4">Beginning Test Driven Development</font>
        </p>
        <p>
          <iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-a368b40efafbe8fa.skydrive.live.com/embedrowdetail.aspx/Orlando%20Code%20Camp/Beginning%20TDD.zip" frameborder="0" scrolling="no">
          </iframe>
        </p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=e8b99eba-2451-4eee-9a3c-2a8e6b5c6b74" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Orlando Code Camp 2008</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/03/13/OrlandoCodeCamp2008.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,9c7fd421-240c-485d-aded-40b201de37c1.aspx</id>
    <published>2008-03-12T20:22:14.5650000-04:00</published>
    <updated>2008-03-12T20:22:14.5650000-04:00</updated>
    <category term="Events" label="Events" scheme="http://randypatterson.com/CategoryView,category,Events.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.randypatterson.com/images/OrlandoCodeCamp_11CAF/image.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="68" alt="image" src="http://www.randypatterson.com/images/OrlandoCodeCamp_11CAF/image_thumb.png" width="244" border="0" />
          </a>
        </p>
        <h3>
          <a href="http://www.orlandocodecamp.com/" target="_blank">Orlando Code Camp 2008
- Saturday March 22, 2008</a>
        </h3>
        <p>
The FREE Orlando Code Camp will be on Saturday, March 22, 2008. Last year's Orlando
Code Camp had 481 registered attendees, 52 sessions, and 38 speakers. If you are looking
for free .NET developer training by hardcore .net developers in the Florida community,
mark your calendar for this year's Orlando Code Camp. 
</p>
        <p>
  
</p>
        <p>
          <a href="http://www.orlandocodecamp.com/" target="_blank">Signup</a> now, its filling
up fast! 
</p>
        <p>
  
</p>
        <p>
  
</p>
        <p>
  
</p>
        <p>
I am giving 2 presentations this year: 
</p>
        <p>
  
</p>
        <p>
          <font size="3">
            <strong>Beginning Test Driven Development</strong>
            <br />
          </font>In this session I will discuss Unit Testing Goals, Principles and Philosophies
such as Test First, Test Last and the dreaded, Test After. Learn what creating good
unit tests mean and how it will help improve the quality of your applications. 
</p>
        <p>
  
</p>
        <p>
          <strong>
            <font size="3">The Unity Application Block</font>
          </strong>
          <br />
The Unity Application block is a lightweight, extensible dependency injection container
with support for constructor, property, and method call injection. Microsoft has finally
developed an Inversion of Control (IoC) container that will appear in the Enterprise
Application Block. In this session I will introduce the basic concepts of Dependency
Injection and review how the Unity Application Block is used.
</p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=9c7fd421-240c-485d-aded-40b201de37c1" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Mix08 Videos Posted Online</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/03/12/Mix08VideosPostedOnline.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,2869ac2b-f214-4099-ba63-3210226b1e39.aspx</id>
    <published>2008-03-12T19:59:49.2525000-04:00</published>
    <updated>2008-03-12T20:06:57.9556250-04:00</updated>
    <category term="Podcast" label="Podcast" scheme="http://randypatterson.com/CategoryView,category,Podcast.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Lots of good content you can watch online or download for later viewing. 
</p>
        <p>
          <a href="http://www.randypatterson.com/images/Mix08VideosPostedOnline_117C9/image_3.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="212" alt="image" src="http://www.randypatterson.com/images/Mix08VideosPostedOnline_117C9/image_thumb_3.png" width="420" border="0" />
          </a>
        </p>
        <p>
          <a href="http://sessions.visitmix.com/" target="_blank">Mix08 Sessions</a>
        </p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=2869ac2b-f214-4099-ba63-3210226b1e39" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Tampa Bay International Association of Software Architects Newsletter - January 2008</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/01/29/TampaBayInternationalAssociationOfSoftwareArchitectsNewsletterJanuary2008.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,e97c00c2-a59b-4de0-8378-4ad92ef5841e.aspx</id>
    <published>2008-01-29T18:13:40.8652832-05:00</published>
    <updated>2008-01-29T18:30:26.1437756-05:00</updated>
    <category term="Events" label="Events" scheme="http://randypatterson.com/CategoryView,category,Events.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img src="http://randypatterson.com/ct.ashx?id=cedd2d04-d3e0-409a-a961-073576dc9574&amp;url=http%3a%2f%2fwww.randypatterson.com%2fimages%2fTampaBayInternationalAssociationofSoftwa_71C8%2fimage.png" />
        </p>
        <p>
  
</p>
        <p>
          <font size="4">This Month's Meeting</font>
          <br />
        </p>
        <p>
 
</p>
        <table cellspacing="0" cellpadding="2" width="915" border="0">
          <tbody>
            <tr>
              <td valign="top" width="100">
                <strong>When:</strong>
              </td>
              <td valign="top" width="813">
1/31/2008 6:30 PM - 8:30 PM<br /></td>
            </tr>
            <tr>
              <td valign="top" width="104">
                <strong>Topic:</strong>
              </td>
              <td valign="top" width="810">
                <p>
                  <strong>The Perfect Pattern Storm, where TDD meets UX and MVP. </strong>
                </p>
                <p>
                  <strong>
                  </strong>  
</p>
                <p>
As host of ARCast.TV, Ron Jacobs has a front row seat to observe the constantly shifting
architectural landscape. In this session we will consider what happens when the force
of test driven development (TDD) collides with the demand for better UX.
</p>
                <p>
 
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="107">
                <strong>Speaker:</strong>
              </td>
              <td valign="top" width="807">
                <strong>
                </strong>
                <a href="http://www.ronjacobs.com">Ron Jacobs</a> is an Architect
Evangelist in the <a href="http://msdn.microsoft.com/architecture">Microsoft Architecture
Strategy group</a> based at the company headquarters in Redmond Washington. Since
1999 Ron has been a product and program manager on various Microsoft products including
the <a href="http://.net/">.NET</a> Framework, Windows Communication Foundation and
COM+. A top-rated conference speaker, author and host of the podcast show <a href="http://www.arcast.tv">ARCast.TV</a>,
Ron brings over 20 years of industry experience to his role of helping Microsoft customers
and partners to build architecturally sound and secure applications.<br /></td>
            </tr>
            <tr>
              <td valign="top" width="110">
                <strong>Design Pattern Overview:</strong>
              </td>
              <td valign="top" width="804">
                <a href="http://www.DavidHayden.com">David Hayden</a> will be presenting an overview
of the Factory pattern</td>
            </tr>
            <tr>
              <td valign="top" width="113">
                <strong>Location:</strong>
                <br />
              </td>
              <td valign="top" width="801">
                <p>
Microsoft Corporation<br />
3000 Bayport Drive<br />
Suite 480<br />
Tampa, FL 33607 
<br /><a href="http://maps.live.com/default.aspx?cp=27.966888%7E-82.549685&amp;lvl=14&amp;style=r&amp;v=2&amp;sp=Point.27.966888_-82.549685_Microsoft+Corp">View
a map</a><br /><a href="http://maps.live.com/OneClickDirections.aspx?mkt=en-us&amp;rtp=%7Epos.27.968023982861645_-82.549467086792&amp;FORM=LLMP">View
1-Click Directions</a></p>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <p>
          <strong>
            <a href="http://www.eventbrite.com/event/89609023/RRPBlog">Register for this
meeting.</a>
          </strong>
        </p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=e97c00c2-a59b-4de0-8378-4ad92ef5841e" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Unit Testing Principles and Goals</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2008/01/13/UnitTestingPrinciplesAndGoals.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,96f4180b-f6ff-46f0-8d53-8c96786af4e7.aspx</id>
    <published>2008-01-12T20:37:54.6150469-05:00</published>
    <updated>2008-01-18T21:00:42.6721432-05:00</updated>
    <category term="Events" label="Events" scheme="http://randypatterson.com/CategoryView,category,Events.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm giving a presentation at the <a href="http://www.cfdotnet.org/" target="_blank">Lakeland
Users Group</a> this Tuesday, January 15, 2008 from 6:30 PM - 8:30 PM  entitled
"Unit Testing Principles and Goals".  
</p>
        <p>
I will discuss Unit Testing Goals, Principles and Philosophies such as Test First,
Test Last and the dreaded, Test After.   Learn what creating good unit tests
mean and how it will help improve the quality of your applications.  Learn to
leverage to power of Test Drive Development and, when necessary, how to write Unit
Tests for existing code. 
</p>
        <p>
  
</p>
        <p>
          <strong>
            <a href="http://maps.live.com/?v=2&amp;where1=2525%20Drane%20Field%20Rd%2C%20Lakeland%2C%20FL%2033811-1354&amp;encType=1 " target="_blank">Location</a>: </strong>
          <br />
2525 Drane Field Road, Suite 10<br />
Lakeland, FL 33811 
</p>
        <p>
 
</p>
        <p>
          <strong>
            <font size="2">Updated:</font>
          </strong>
        </p>
        <div class="wlWriterSmartContent" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:9543eedd-7ed1-47db-bbae-3c402d1dab83" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <p>
            <a href="http://www.randypatterson.com/images/UnitTestingPrinciplesandGoals_11322/UnitTestPresentation.zip" target="_blank">Download
Presentation Slides</a>
          </p>
        </div>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=96f4180b-f6ff-46f0-8d53-8c96786af4e7" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Martin Fowler has a Podcast!</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/12/12/MartinFowlerHasAPodcast.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,0a6e16d7-e41f-4f19-80c6-62c7d6488eec.aspx</id>
    <published>2007-12-11T22:00:26.0000000-05:00</published>
    <updated>2007-12-12T13:13:22.1478750-05:00</updated>
    <category term="Podcast" label="Podcast" scheme="http://randypatterson.com/CategoryView,category,Podcast.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.randypatterson.com/images/NewThoughtWorksPodcast_9946/smRSSImage.png">
        </a>
        <p>
          <a href="http://www.thoughtworks.com/index.html" target="_blank">ThoughtWorks</a> has
a new <a href="http://www.thoughtworks.com/what-we-say/podcasts.html" target="_blank">IT
Matters Podcast</a> that discusses the business and technology issues facing the IT
Industry. The First topic is on Domain Specific Languages Part 1 of 2.  A panel
of ThoughtWorks employees including, <a href="http://www.thoughtworks.com/who-we-are/martin-fowler.html">Martin
Fowler</a>, <a href="http://www.thoughtworks.com/who-we-are/leadership-profiles/rebecca-parsons.html">Dr.
Rebecca Parsons</a>, Neal Ford and Jay Fields; all participate in a discussion around
domain-specific languages (DSLs). 
</p>
        <p>
Topics include:  
</p>
        <p>
1. How to build effective DSLs
</p>
        <p>
2. When to use a DSL
</p>
        <p>
3. What pitfalls to avoid
</p>
        <p>
4. Some real-world examples of DSL best practices.
</p>
        <p>
With the release of Visual Studio 2008 SDK that includes tools for <a href="http://www.code-magazine.com/Article.aspx?quickid=0710072" target="_blank">Developing
Domain Specific languages in Visual Studio 2008</a>, the timing could not be better. 
I am looking forward to listening to Part 2.
</p>
        <p>
 
</p>
        <a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2frandypatterson.com%2f2007%2f12%2f12%2fMartinFowlerHasAPodcast.aspx">
          <img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2frandypatterson.com%2f2007%2f12%2f12%2fMartinFowlerHasAPodcast.aspx" border="0" />
        </a>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=0a6e16d7-e41f-4f19-80c6-62c7d6488eec" />
      </div>
    </content>
  </entry>
  <entry>
    <title>10 Podcasts Every Developer Should Listen To</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/12/05/10PodcastsEveryDeveloperShouldListenTo.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,3f5ba0f3-4b7e-47ae-93f5-deec4d3d8b14.aspx</id>
    <published>2007-12-04T19:23:05.2922206-05:00</published>
    <updated>2008-06-27T17:27:27.6061250-04:00</updated>
    <category term="Podcast" label="Podcast" scheme="http://randypatterson.com/CategoryView,category,Podcast.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of the best ways that I've discovered to keep up to date with the constant change
of technology is to listen to podcasts.  I find this a great way to learn during
my daily commute and exercise regiment (refilling my coffee AND getting the mail).  
</p>
        <p>
  
</p>
        <p>
One thing I would encourage is to attempt to listen while coding.  If you can
listen to music while you code you can probably listen to podcasts with little effort. 
Everyone is different but here is what I've discovered about myself. 
</p>
        <ul>
          <li>
If both ears are listening to a podcast I get too distracted and cannot concentrate
enough on coding. 
</li>
          <li>
If I listen using my right ear, I <span class="acronym" title="to understand profoundly"><a href="http://en.wikipedia.org/wiki/Grok" target="_blank">grok</a></span> almost
nothing of the podcast content. 
</li>
          <li>
If I listen with my left ear, it seems to be a good balance between listening and
doing.</li>
        </ul>
        <p>
I've heard of some who code while listening to a podcast in double speed to save time. 
I can't do that but, apparently, some can.  
</p>
        <p>
  
</p>
        <p>
  
</p>
        <p>
Here are the podcasts I find invaluable as a developer 
</p>
        <p>
 
</p>
        <table cellspacing="0" cellpadding="2" width="704" border="1">
          <tbody>
            <tr>
              <td valign="top" width="24">
                <a href="http://polymorphicpodcast.com/podcast/feed/" target="_blank">
                  <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="smRSSImage" src="http://randypatterson.com/images/DeveloperRelatedPodcasts_EA60/smRSSImage.png" width="20" border="0" />
                </a>
              </td>
              <td valign="top" width="185">
                <a href="http://polymorphicpodcast.com/" target="_blank">Polymorphic Podcast</a>
              </td>
              <td valign="top" width="490">
Craig Shoemaker brings insight into software development in the .NET platform along
with interviews with industry luminaries. <em>Good content, good quality but an inconsistent
schedule.<br /></em></td>
            </tr>
            <tr>
              <td valign="top" width="24">
                <a href="http://channel9.msdn.com/rss.aspx?ShowID=5&amp;format=mp3" target="_blank">
                  <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="smRSSImage" src="http://randypatterson.com/images/DeveloperRelatedPodcasts_EA60/smRSSImage.png" width="20" border="0" />
                </a>
              </td>
              <td valign="top" width="185">
                <a href="http://channel9.msdn.com/shows/ARCast_with_Ron_Jacobs" target="_blank">ARCast
with Ron Jacobs</a>
              </td>
              <td valign="top" width="488">
Ron Jacobs is a Microsoft employee and delivers a weekly podcast on <a href="http://channel9.msdn.com/" target="_blank">Channel
9</a> that dives into some tough .NET architecture topics.  
<br /></td>
            </tr>
            <tr>
              <td valign="top" width="24">
                <a href="http://www.se-radio.net/rss" target="_blank">
                  <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="smRSSImage" src="http://randypatterson.com/images/DeveloperRelatedPodcasts_EA60/smRSSImage.png" width="20" border="0" />
                </a>
              </td>
              <td valign="top" width="185">
                <a href="http://www.se-radio.net" target="_blank">Software Engineering Radio</a>
              </td>
              <td valign="top" width="486">
Not specifically .NET related but contains a wide spectrum of Software topics from
Dynamic Languages to Transactional Memory to Fault Tolerance.  
<br /></td>
            </tr>
            <tr>
              <td valign="top" width="24">
                <a href="http://feeds.feedburner.com/sqeconferences" target="_blank">
                  <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="smRSSImage" src="http://randypatterson.com/images/DeveloperRelatedPodcasts_EA60/smRSSImage.png" width="20" border="0" />
                </a>
              </td>
              <td valign="top" width="185">
                <a href="http://www.stickyminds.com/podcasts" target="_blank">Software Quality Engineering
Conferences Podcast</a>
              </td>
              <td valign="top" width="485">
Interviews with speakers from the Agile Development Practices 2007 Conference<br /></td>
            </tr>
            <tr>
              <td valign="top" width="24">
                <a href="http://www.podcastingforacause.com/onsoft_audio.xml" target="_blank">
                  <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="smRSSImage" src="http://randypatterson.com/images/DeveloperRelatedPodcasts_EA60/smRSSImage.png" width="20" border="0" />
                </a>
              </td>
              <td valign="top" width="185">
                <a href="http://www.informit.com/podcasts/channel.aspx?c=dadf92ca-3bdc-484e-9cd8-cbfe0cfc0de6&amp;rl=1" target="_blank">OnSoftware</a>
              </td>
              <td valign="top" width="484">
Weekly interviews with some of the software industry's leading developers about a
wide range of programming and development issues<br /></td>
            </tr>
            <tr>
              <td valign="top" width="24">
                <a href="http://feeds.feedburner.com/WebdevradioPodcastHome" target="_blank">
                  <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="smRSSImage" src="http://randypatterson.com/images/DeveloperRelatedPodcasts_EA60/smRSSImage.png" width="20" border="0" />
                </a>
              </td>
              <td valign="top" width="185">
                <a href="http://www.webdevradio.com/index.php">WebDevRadio Podcast </a>
              </td>
              <td valign="top" width="483">
Web Development Discussion<br /></td>
            </tr>
            <tr>
              <td valign="top" width="24">
                <a href="http://agiletoolkit.libsyn.com/rss" target="_blank">
                  <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="smRSSImage" src="http://randypatterson.com/images/DeveloperRelatedPodcasts_EA60/smRSSImage.png" width="20" border="0" />
                </a>
              </td>
              <td valign="top" width="185">
                <a href="http://agiletoolkit.libsyn.com" target="_blank">Agile Toolkit Podcast</a>
              </td>
              <td valign="top" width="483">
Topics covering all things Agile.  
</td>
            </tr>
            <tr>
              <td valign="top" width="24">
                <a href="http://feeds.feedburner.com/netRocksFullMp3Downloads" target="_blank">
                  <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="smRSSImage" src="http://randypatterson.com/images/DeveloperRelatedPodcasts_EA60/smRSSImage.png" width="20" border="0" />
                </a>
              </td>
              <td valign="top" width="185">
                <a href="http://www.dotnetrocks.com" target="_blank">.NET Rocks!</a>
              </td>
              <td valign="top" width="483">
.NET Rocks! is a weekly talk show for anyone interested in programming on the Microsoft
.NET platform. The shows range from introductory information to hardcore geekiness<br /></td>
            </tr>
            <tr>
              <td valign="top" width="24">
                <a href="http://www.hanselminutes.com/hanselminutes_MP3Direct.xml" target="_blank">
                  <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="smRSSImage" src="http://randypatterson.com/images/DeveloperRelatedPodcasts_EA60/smRSSImage.png" width="20" border="0" />
                </a>
              </td>
              <td valign="top" width="185">
                <a href="http://www.hanselminutes.com" target="_blank">Hanselminutes</a>
              </td>
              <td valign="top" width="483">
Scott Hanselman discusses utilities and tools, gives practical how-to advice, and
discusses ASP.NET or Windows issues and workarounds.<br /></td>
            </tr>
            <tr>
              <td valign="top" width="24">
                <a href="http://www.scalabledevelopment.com/ftp/ScalabilityWithDotNet.xml" target="_blank">
                  <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="20" alt="smRSSImage" src="http://randypatterson.com/images/DeveloperRelatedPodcasts_EA60/smRSSImage.png" width="20" border="0" />
                </a>
              </td>
              <td valign="top" width="185">
                <a href="http://weblogs.asp.net/wallym/" target="_blank">ASP.NET PodCast</a>
              </td>
              <td valign="top" width="483">
The ASP.NET Podcast brings a technology focus to the area of podcasts.  This
podcast is geared towards developers with applications that scale to a large amount
of data and users.</td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <p>
I would like to hear what others are listening to and what software you use to manage
your podcasts.  I have a love/hate relationship with ITunes.
</p>
        <h3>UPDATE:
</h3>
        <p>
          <a href="http://randypatterson.com/2008/06/27/TopDeveloperPodcastsPartII.aspx" target="_blank">Top
Developer Podcasts Part II</a>
        </p>
        <p>
 
</p>
        <p>
 <a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2frandypatterson.com%2f2007%2f12%2f05%2f10PodcastsEveryDeveloperShouldListenTo.aspx"><img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2frandypatterson.com%2f2007%2f12%2f05%2f10PodcastsEveryDeveloperShouldListenTo.aspx" border="0" /></a></p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=3f5ba0f3-4b7e-47ae-93f5-deec4d3d8b14" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Get SnagIt and Camtasia for FREE!</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/11/27/GetSnagItAndCamtasiaForFREE.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,68de0328-baa6-4a5a-bdbb-c0efccaf9eb2.aspx</id>
    <published>2007-11-26T20:56:53.4522688-05:00</published>
    <updated>2007-11-26T20:56:53.4522688-05:00</updated>
    <category term="Deals" label="Deals" scheme="http://randypatterson.com/CategoryView,category,Deals.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Right now Techsmith is offering <a href="http://www.labnol.org/software/download/download-camtasia-studio-free/1829/" target="_blank">Camtasia</a> and <a href="http://www.labnol.org/software/download/free-download-snagit-with-serial-number/1841/" target="_blank">Snag-It</a> for
free.  You download the demo then register for a free license key.  These
are previous versions of the software but they are still feature packed and will solve
most of your screen capture needs.
</p>
        <p>
          <img height="309" alt="download free snagit" src="http://www.labnol.org/assets/images/DownloadSnagItFullVersionwithSerialNumbe_144BF/downloadfreesnagit.jpg" width="400" border="0" />
        </p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=68de0328-baa6-4a5a-bdbb-c0efccaf9eb2" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Visual Studio 2008 Express Released</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/11/24/VisualStudio2008ExpressReleased.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,6668dfc0-88d0-4c88-b63d-a3ca3da6ad91.aspx</id>
    <published>2007-11-24T09:57:43.2450779-05:00</published>
    <updated>2007-11-24T09:57:43.2450779-05:00</updated>
    <category term="C#" label="C#" scheme="http://randypatterson.com/CategoryView,category,C%23.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you don't have an MSDN subscription and you can't wait to try out the new Visual
Studio 2008 features you can download the express edition and learn the new features
while you wait for the professional edition to be available in stores.
</p>
        <p>
          <a title="http://www.microsoft.com/express/" href="http://www.microsoft.com/express/">http://www.microsoft.com/express/</a>
        </p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=6668dfc0-88d0-4c88-b63d-a3ca3da6ad91" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Tampa Bay International Association of Software Architects (IASA) Monthly Meeting</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/11/12/TampaBayInternationalAssociationOfSoftwareArchitectsIASAMonthlyMeeting.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,cedd2d04-d3e0-409a-a961-073576dc9574.aspx</id>
    <published>2007-11-12T18:14:04.9810340-05:00</published>
    <updated>2007-11-12T18:19:30.7039532-05:00</updated>
    <category term="Events" label="Events" scheme="http://randypatterson.com/CategoryView,category,Events.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.randypatterson.com/images/TampaBayInternationalAssociationofSoftwa_71C8/image.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="66" alt="image" src="http://www.randypatterson.com/images/TampaBayInternationalAssociationofSoftwa_71C8/image_thumb.png" width="239" border="0" />
          </a>
        </p>
        <p>
 <strong>When</strong>: 11/28/2007  6:30 PM - 8:00 PM
</p>
        <p>
          <strong>Abstract:</strong> You can run, you can switch jobs, and you can write unit
tests, but invariably at some point you will run into legacy code. Legacy code hides
in many forms - sealed classes, spaghetti and big-ball-of-mud code, data in disparate
data sources (or incompatible schemas). As an architect, there are steps you can take
to get ahead of these issues and begin to make your codebases something you actually
want to change. In this talk, we will discuss concepts from Michael Feathers' work
on Working Effectively with Legacy Code as well as Scott Ambler's work on refactoring
databases. You'll see tips and tricks to model your legacy code and data, and hear
about ways to begin to turn your legacy code into a usable base." 
</p>
        <p>
 
</p>
        <p>
          <strong>Speaker</strong>: <a href="http://www.cornetdesign.com" target="_blank">Cory
Foy</a> is an agile developer passionate about languages such as C# and Ruby. He currently
works for Microsoft as a Premier Field Engineer, has been a developer on the NUnit
team, and is known to speak at code camps and user groups across the country. He lives
just north of Tampa with his wife and 2 daughters.
</p>
        <p>
          <strong>Registration:</strong>
          <a href="http://www.clicktoattend.com/?id=122714" target="_blank">here</a>
        </p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=cedd2d04-d3e0-409a-a961-073576dc9574" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Tampa User Group Meeting for October</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/10/02/TampaUserGroupMeetingForOctober.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,5b552ac1-5784-4d2c-acc7-7d5d8ae282bc.aspx</id>
    <published>2007-10-02T18:26:40.1000000-04:00</published>
    <updated>2007-10-06T09:22:23.7221250-04:00</updated>
    <category term="Events" label="Events" scheme="http://randypatterson.com/CategoryView,category,Events.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <h3>Speaking in Tampa on October 18th - Repository Factory, Enterprise Library, Guidance
Bundles
</h3>
        <p>
  
</p>
        <p>
          <a href="http://www.davidhayden.com/">David Hayden</a> ( <a href="http://www.davidhayden.com/">Microsoft
MVP C#</a> ) is giving a  presenting to the Tampa .NET Developer Group on Thursday,
October 18th at 6:30pm at the <a href="http://www.fladotnet.com/locations.aspx?location=tampa" target="_blank">Microsoft
Tampa Office</a>. 
</p>
        <p>
  
</p>
        <p>
The focus is on the new <a href="http://www.codeplex.com/RepositoryFactory" target="_blank">Repository
Factory</a>, which is a software factory from Microsoft Patterns &amp; Practices that
will generate a data access layer for your winform and web applications in minutes.
It generates business entities, stored procedures, and repository classes from an
existing database within Visual Studio. In addition he will also be showing off the
following: 
</p>
        <ul>
          <li>
            <a href="http://msdn2.microsoft.com/en-us/library/bb410105.aspx" target="_blank">Validation
Application Block</a> to provide business object validation. 
</li>
          <li>
            <a href="http://msdn2.microsoft.com/en-us/library/bb410104.aspx" target="_blank">Policy
Injection Application Block</a> to describe logging and caching mechanism using an
Aspect-Oriented-Programming style. 
</li>
          <li>
The <a href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Autocomplete_landing_page" target="_blank">Autocomplete
Guidance Bundle</a> and <a href="http://www.codeplex.com/websf/Wiki/View.aspx?title=Validation_landing_page" target="_blank">Validation
Guidance Bundle</a>. 
</li>
          <li>
The ability to develop an Enterprise Library Plug-In to offer design-time support
of the Repository Factory Configuration.</li>
        </ul>
        <p>
See you there! You can <a href="http://www.fladotnet.com/reg.aspx?EventID=278">RSVP
here</a>. 
</p>
        <p>
  
</p>
        <p>
  
</p>
        <p>
  
</p>
        <p>
I really enjoy <a href="http://www.davidhayden.com/davidhayden/presentations.aspx" target="_blank">David
Hayden's Presentations</a> and this topic is of special interest to me.  
</p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=5b552ac1-5784-4d2c-acc7-7d5d8ae282bc" />
      </div>
    </content>
  </entry>
  <entry>
    <title>How to design a Fluent Interface</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/09/26/HowToDesignAFluentInterface.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,7b10ffdb-58f4-4ec0-bbe6-714cdc92e864.aspx</id>
    <published>2007-09-26T13:25:09.5120000-04:00</published>
    <updated>2008-05-06T12:11:36.7009592-04:00</updated>
    <category term="C#" label="C#" scheme="http://randypatterson.com/CategoryView,category,C%23.aspx" />
    <category term="Patterns" label="Patterns" scheme="http://randypatterson.com/CategoryView,category,Patterns.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://en.wikipedia.org/wiki/Martin_Fowler" target="_blank">Martin Fowler</a> coined
the term "<a href="http://martinfowler.com/bliki/FluentInterface.html" target="_blank">FluentInterface</a>"
to describe objects that expose an interface that <em>flows, </em>and is designed
to be readable and concise.  The cost of this fluency is additional effort required
to design the interface for your object and the slight increase in complexity. 
These types of interfaces are often utilized to create configurations for your objects
but can progress into an internal <a href="http://martinfowler.com/bliki/DomainSpecificLanguage.html" target="_blank">Domain
Specific Language</a> or <span class="acronym" title="Domain Specific Language">DSL</span>.
</p>
        <p>
          <em>Configuration Fluent Interface Example: (sometimes called Method Chaining</em>) 
</p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:dd182aa4-9302-405f-bd5b-c10b52b88702" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="c#">Order    
	.AddFreeShipping()    
	.IncludeItem(10)    
	.SetQuantity(2); 
</pre>
        </div>
        <p>
        </p>
        <p>
          <em>
          </em> 
</p>
        <p>
          <em>DSL Fluent Interface Example:  (<a href="http://ayende.com/projects/rhino-mocks.aspx" target="_blank">Rhino
Mocks</a>)</em>
        </p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:053ad60b-25df-46a7-87ed-d4534a412242" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="c#">Expect    
	.Call(entityMock.GetID(12))    
	.IgnoreArguments()    
	.Repeat    
	.Once()    
	.Return(entityDataSet);</pre>
        </div>
        <p>
        </p>
        <p>
 
</p>
        <h3>Show me the Code
</h3>
        <p>
Fluent interfaces are best explained by showing some code examples, so I'll take the
rather prosaic <em>Person</em> object and create a fluent interface for it.    
</p>
        <p>
          <em>Take a common Person object and write some code to instantiate and Initialize
the object</em>
        </p>
        <p>
        </p>
        <p>
        </p>
        <div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:472b8a35-4484-473e-910e-5975e8073903" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <pre name="code" class="c#">       public class Person
        {
            private string _firstName;
            private string _lastName;
            private int _age;
            public bool _isActive;

            public Person(string firstName, string lastName, int age, bool isActive)
            {
                _firstName = firstName;
                _lastName = lastName;
                _age = age;
                _isActive = isActive;
            }

            public string FirstName
            {
                get { return _firstName; }
                set { _firstName = value; }
            }

            public string LastName
            {
                get { return _lastName; }
                set { _lastName = value; }
            }

            public int Age
            {
                get { return _age; }
                set { _age = value; }
            }

            public bool IsActive
            {
                get { return _isActive; }
                set { _isActive = value; }
            }
        }
 </pre>
        </div>
This is a common pattern where the constructor is used to quickly set the properties
of the class.  The initialization code would look something like this.
<p>
 
</p><table cellspacing="0" cellpadding="2" width="552" border="1"><tbody><tr><td valign="top" width="550"><div class="csharpcode"><pre class="alt">Person person = <span class="kwrd">new</span> Person(<span class="str">"Frank"</span>, <span class="str">"Pat"</span>,
30, <span class="kwrd">true</span>);</pre></div></td></tr></tbody></table><p>
 
</p><p>
Although this code is concise it is not very readable. Is "Frank" the first name or
the last name? What does the value <font color="#0000ff">true</font> represent? The
readability issue becomes more problematic as the number of construction parameters
increase.  One solution, and the point of this post, is to write a <a href="http://martinfowler.com/bliki/FluentInterface.html" target="_blank">Fluent
Interface</a> for our Person class.  The idea here is to allow each property
to be set through a method call and then have that method return a reference to itself
so you can continue on with next method call (often called method chaining).  
</p><table cellspacing="0" cellpadding="2" width="552" border="1"><tbody><tr><td valign="top" width="550"><div class="csharpcode"><pre class="alt">person.SetLastName(<span class="str">"Frank"</span>).SetFirstName(<font color="#0080c0">"Pat"</font>);</pre><div class="csharpcode"> 
</div></div><style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style></td></tr></tbody></table><style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style><p>
 
</p><p>
This makes our code concise and far easier to read, we now know that "Frank" is the
last name.  However, an obvious issue with this pattern is that we are now cluttering
up our class with methods that, when taken out of context, make little sense. 
We have a <font color="#0000ff">FirstName</font> property and a <font color="#0000ff">SetFirstName</font> method
defined on our class that obfuscates the intent. A better approach is to create an
internal class that is accessed through a <font color="#0000ff">Set </font>property
and exposes only the <a href="http://martinfowler.com/bliki/FluentInterface.html" target="_blank">Fluent
Interface</a>.
</p><div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:96bb94b4-69d9-4b2a-8a9e-1056ec43e928" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre name="code" class="c#">public class Person
        {
            public Person()
            {
                _set = new PersonFluentInterface(this);
            }

            private string _firstName;
            private string _LastName;
            private int _age;
            private readonly PersonFluentInterface _set;
            private bool _isActive;

            public PersonFluentInterface Set
            {
                get { return _set; }
            }

            public string FirstName
            {
                get { return _firstName; }
                set { _firstName = value; }
            }

            public string LastName
            {
                get { return _LastName; }
                set { _LastName = value; }
            }

            public int Age
            {
                get { return _age; }
                set { _age = value; }
            }

            public bool IsActive
            {
                get { return _isActive; }
                set { _isActive = value; }
            }

            public class PersonFluentInterface
            {
                private readonly Person _person;

                public PersonFluentInterface(Person person)
                {
                    _person = person;
                }

                public PersonFluentInterface FirstName(string firstName)
                {
                    _person.FirstName = firstName;
                    return this;
                }

                public PersonFluentInterface LastName(string lastName)
                {
                    _person.LastName = lastName;
                    return this;
                }

                public PersonFluentInterface Age(int age)
                {
                    _person.Age = age;
                    return this;
                }

                public PersonFluentInterface IsActive()
                {
                    _person.IsActive = true;
                    return this;
                }

                public PersonFluentInterface IsNotActive()
                {
                    _person.IsActive = false;
                    return this;
                }
            }
        }</pre></div><p>
 
</p><p>
Now the code is clean, concise and quite readable.
</p><div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:fb992ae0-0aec-4aca-b3c0-f8bdd44dc345" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre name="code" class="c#">Person person = new Person();
person.Set.FirstName("Pat").LastName("Frank").Age(30).IsActive(); </pre></div><h3>Conclusion
</h3><p>
This pattern for fluent interfaces is often seen in object configuration and setup. 
It's fairly easy to design and the objects configuration options are readily discoverable
using intellisense.  As the complexity of an objects setup increased, a fluent
interface becomes a more attractive option to ease the initialization burden. 
</p><p>
  
</p><p>
 
</p><p></p><p></p><a href="http://www.dotnetkicks.com/kick/?url=http://randypatterson.com/2007/09/26/HowToDesignAFluentInterface.aspx"><img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://randypatterson.com/2007/09/26/HowToDesignAFluentInterface.aspx&amp;border=&amp;fgcolor=&amp;bgcolor=&amp;cfgcolor=&amp;cbgcolor=" border="0" /></a><link href="Styles/SyntaxHighlighter.css" type="text/css" rel="stylesheet" /><script language="javascript" src="Scripts/shCore.js"></script><script language="javascript" src="Scripts/shBrushCSharp.js"></script><script language="javascript">
window.onload = function() {
    dp.SyntaxHighlighter.ClipboardSwf = 'Scripts/clipboard.swf';
    dp.SyntaxHighlighter.HighlightAll('code');
};
 </script><img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=7b10ffdb-58f4-4ec0-bbe6-714cdc92e864" /></div>
    </content>
  </entry>
  <entry>
    <title>International Association of Software Architects, Tampa Chapter</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/09/23/InternationalAssociationOfSoftwareArchitectsTampaChapter.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,642f10c8-0c1c-4a45-980a-6c68577696fa.aspx</id>
    <published>2007-09-23T10:52:56.6790000-04:00</published>
    <updated>2007-10-06T09:35:28.5971250-04:00</updated>
    <category term="Events" label="Events" scheme="http://randypatterson.com/CategoryView,category,Events.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
 <a href="http://randypatterson.com/content/binary/WindowsLiveWriter/InternationalAssociationofSoftwareArchit_9746/IASA_2.gif"><img style="border: 0px none ;" alt="IASA" src="http://randypatterson.com/content/binary/WindowsLiveWriter/InternationalAssociationofSoftwareArchit_9746/IASA_thumb.gif" border="0" height="66" width="239" /></a></p>
        <p>
This is the inaugural meeting for the Tampa chapter of IASA.  In this meeting
we will discuss a number of topics about the group and what to expect going forward. 
We are also fortunate to have a Microsoft Architect Evangelist coming into town to
speak.<br /><strong></strong></p>
        <p>
          <strong>Speaker:</strong> Jeff Barnes, Microsoft Architect Evangelist<br /><strong><br />
Topic:</strong> The Role of the Software Architect<br /><strong><br />
Abstract:</strong> This session will explore the role of the Software Architect -
from defining what the job role actually entails, what it takes to be successful at
it, and what steps you can take to become a software architect (or a better one) today.
This session will be highly interactive and should lead to lively group discussions
and audience participation.
</p>
        <p>
          <strong>When:</strong>
        </p>
        <p>
10/30/2007 
</p>
        <p>
6:30 PM - 8:00 PM
</p>
        <p>
          <strong>Where:</strong>
        </p>
        <p>
Microsoft Corporation 
</p>
        <p>
3000 Bayport Drive 
</p>
        <p>
Suite 480 
</p>
        <p>
Tampa, FL 33607 
</p>
        <p>
USA
</p>
        <p>
Click <a href="https://www.clicktoattend.com/invitation.aspx?code=121438" target="_blank">here</a> to
register for the event
</p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=642f10c8-0c1c-4a45-980a-6c68577696fa" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Useless Unit Test</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/09/21/UselessUnitTest.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,d7f0c7ab-fb1a-49c0-9639-925472f53184.aspx</id>
    <published>2007-09-21T08:10:15.4274295-04:00</published>
    <updated>2007-09-21T08:10:15.4274295-04:00</updated>
    <category term="What Burns Me" label="What Burns Me" scheme="http://randypatterson.com/CategoryView,category,What%2BBurns%2BMe.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is one of the most useless unit tests I've encountered
</p>
        <table cellspacing="0" cellpadding="2" width="611" border="1">
          <tbody>
            <tr>
              <td valign="top" width="609">
                <div class="csharpcode">
                  <pre class="alt">
                    <span class="rem">/// &lt;summary&gt;</span>
                  </pre>
                  <pre>
                    <span class="rem">///A test for GetByLegalCaseID (int)</span>
                  </pre>
                  <pre class="alt">
                    <span class="rem">///&lt;/summary&gt;</span>
                  </pre>
                  <pre>[TestMethod()]</pre>
                  <pre class="alt">
                    <span class="kwrd">public</span>
                    <span class="kwrd">void</span> GetTicketByLegalCaseID_Test()</pre>
                  <pre>{</pre>
                  <pre class="alt">    TicketEntityModel target = <span class="kwrd">new</span> TicketEntityModel();</pre>
                  <pre>
                    <span class="kwrd">int</span> ID = 1;</pre>
                  <pre class="alt">    TicketDataSet actual = target.GetByLegalCaseID(ID);</pre>
                  <pre> </pre>
                  <pre class="alt">    Assert.IsNotNull(actual, <span class="str">"TicketDataSet was
not returned."</span>);</pre>
                  <pre>    Assert.IsNotNull(actual.Citation, <span class="str">"No Citation table was
returned."</span>);</pre>
                  <pre class="alt">    Assert.IsTrue(actual.Citation.Rows.Count &gt; 0, <span class="str">"No
Citation rows were returned."</span>);</pre>
                  <pre>    Assert.IsNotNull(actual.Ticket, <span class="str">"No Ticket table was returned."</span>);</pre>
                  <pre class="alt">    Assert.IsTrue(actual.Ticket.Rows.Count &gt; 0, <span class="str">"No
Ticket rows were returned."</span>);</pre>
                  <pre>}</pre>
                </div>
                <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <p>
Unit tests in the Entity Model should concentrate on testing business logic, not Data
Access Layer (<span class="acronym" title="Data Access Layer">DAL</span>) logic. Unit
tests for <span class="acronym" title="Data Access Layer">DAL</span> objects test
data access issues.   Furthermore,  this Unit Test simply checks to
see if the current database has a record with an ID of 1 and, therefore, is non-deterministic.
It can fail for <strong>many</strong> reasons that have nothing to do with the business
logic. If <em>GetByLegalCaseID</em> has any business logic in it then unit tests should
to be written to test that logic and the dependencies on the <span class="acronym" title="Data Access Layer">DAL</span> would
be mocked so a previously setup DataSet is returned with known values. This falls
under the "What Burns Me" category.  
</p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=d7f0c7ab-fb1a-49c0-9639-925472f53184" />
      </div>
    </content>
  </entry>
  <entry>
    <title>The Power of the Predicate&amp;lt;T&amp;gt;</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/09/19/ThePowerOfThePredicateltTgt.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,2c56cd60-9195-4ed8-b3b5-2dab2a6721a7.aspx</id>
    <published>2007-09-18T20:40:57.9490000-04:00</published>
    <updated>2007-09-23T17:14:26.8998805-04:00</updated>
    <category term="C#" label="C#" scheme="http://randypatterson.com/CategoryView,category,C%23.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
The very flexible generic collection <a href="http://msdn2.microsoft.com/en-us/library/6sh2ey19.aspx" target="_blank">List&lt;T&gt;</a> contains
several methods that take a <a href="http://m-w.com/dictionary/predicate" target="_blank">predicate</a> as
it's parameter.  Coupled with <a href="http://msdn2.microsoft.com/en-us/library/0yw3tz5k(VS.80).aspx" target="_blank">Anonymous
Methods</a> this provides powerfully concise code for filtering, searching and sorting
your collections.
</p>
        <p>
 
</p>
        <table cellspacing="0" cellpadding="2" width="620" border="1">
          <tbody>
            <tr>
              <td valign="top" width="618">
                <div class="csharpcode">
                  <pre class="alt">List&lt;Person&gt; People = <span class="kwrd">new</span> List&lt;Person&gt;();</pre>
                  <pre> </pre>
                  <pre class="alt">People.Add(<span class="kwrd">new</span> Person(<span class="str">"Randy"</span>, <span class="str">"Patterson"</span>,
40));</pre>
                  <pre>People.Add(<span class="kwrd">new</span> Person(<span class="str">"John"</span>, <span class="str">"Smith"</span>,
15));</pre>
                  <pre class="alt">People.Add(<span class="kwrd">new</span> Person(<span class="str">"Caity"</span>, <span class="str">"Johnson"</span>,
13));</pre>
                  <pre>People.Add(<span class="kwrd">new</span> Person(<span class="str">"Jody"</span>, <span class="str">"Patterson"</span>,
39));</pre>
                  <pre class="alt">People.Add(<span class="kwrd">new</span> Person(<span class="str">"Chloe"</span>, <span class="str">"Dog"</span>,
30));</pre>
                  <pre>People.Add(<span class="kwrd">new</span> Person(<span class="str">"Corey"</span>, <span class="str">"Patterson"</span>,
18));</pre>
                </div>
                <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <p>
For Example,  to filter the collection and display only my family members requires
a single line of code
</p>
        <table cellspacing="0" cellpadding="2" width="668" border="0">
          <tbody>
            <tr>
              <td valign="top" width="666">
IList&lt;Person&gt; family = People.FindAll(<span class="kwrd"><font color="#0000ff">delegate</font></span>(Person
person) { <span class="kwrd"><font color="#0000ff">return</font></span> person.LastName
== <span class="str">"Patterson"</span>; });</td>
            </tr>
          </tbody>
        </table>
        <pre class="csharpcode"> </pre>
        <p>
And produces the following output
</p>
        <p>
          <a href="http://randypatterson.com/content/binary/WindowsLiveWriter/132cfcb55843_8256/image_6.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="53" alt="image" src="http://randypatterson.com/content/binary/WindowsLiveWriter/132cfcb55843_8256/image_thumb_2.png" width="226" border="0" />
          </a>
        </p>
        <p>
To remove the teenagers (not a bad proposition) also requires a single line
</p>
        <pre class="csharpcode">People.RemoveAll(<span class="kwrd">delegate</span>(Person
person) { <span class="kwrd">return</span> person.Age &gt; 12 &amp;&amp; person.Age
&lt; 20; });</pre>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <h3>Sorting
</h3>
        <p>
Sorting requires a <a href="http://msdn2.microsoft.com/en-us/library/tfakywbh.aspx" target="_blank">Comparison&lt;T&gt;</a> delegate
instead of <a href="http://msdn2.microsoft.com/en-us/library/bfcke1bz.aspx" target="_blank">Predicate&lt;T&gt;</a> but
operates in much the same fashion.
</p>
        <p>
For example, sorting by last name requires this single line of code:
</p>
        <pre class="csharpcode">People.Sort(<span class="kwrd">delegate</span>(Person x, Person
y) {<span class="kwrd">return</span> x.LastName.CompareTo(y.LastName) ;});</pre>
        <p>
          <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
a slight modification will sort the list in descending order:
</p>
        <pre class="csharpcode">People.Sort(<span class="kwrd">delegate</span>(Person x, Person
y) { <span class="kwrd">return</span><font color="#ff0000">y</font>.LastName.CompareTo(<font color="#ff0000">x</font>.LastName);
});</pre>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
To sort by Last Name then First Name would look something like this:
</p>
        <table cellspacing="0" cellpadding="2" width="600" border="1">
          <tbody>
            <tr>
              <td valign="top" width="600">
                <div class="csharpcode">
                  <pre class="alt">People.Sort(<span class="kwrd">delegate</span>(Person
x, Person y)</pre>
                  <pre>    {</pre>
                  <pre class="alt">
                    <span class="kwrd">if</span> (x.LastName == y.LastName)</pre>
                  <pre>
                    <span class="kwrd">return</span> x.FirstName.CompareTo(y.FirstName);</pre>
                  <pre class="alt">
                    <span class="kwrd">else</span>
                  </pre>
                  <pre>
                    <span class="kwrd">return</span> x.LastName.CompareTo(y.LastName);</pre>
                  <pre class="alt">    });</pre>
                </div>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <h3>Conclusion
</h3>
        <p>
I've just scratched the surface on what the generic List collection is capable of
providing. There are several other generic methods that take delegates as parameters,
such as <a href="http://msdn2.microsoft.com/en-us/library/bwabdf9z.aspx" target="_blank">ForEach</a> and <a href="http://msdn2.microsoft.com/en-us/library/73fe8cwf.aspx" target="_blank">ConvertAll</a>,
that open up interesting possibilities in your code.   Overall I find the
Anonymous Method syntax a bit <a href="http://www.answers.com/topic/kluge?cat=technology" target="_blank">kludgy</a> but
C# 3.0 promises to reduce the syntactical noise and give us true (almost) <a href="http://www.davidhayden.com/blog/dave/archive/2006/11/30/LambdaExpressionsExtensionMethodsLINQ.aspx" target="_blank">Lambda
Expressions</a>.  
</p>
        <p>
        </p>
        <p>
          <a href="http://www.dotnetkicks.com/kick/?url=http://randypatterson.com/2007/09/19/ThePowerOfThePredicateltTgt.aspx">
            <img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://randypatterson.com/2007/09/19/ThePowerOfThePredicateltTgt.aspx" border="0" />
          </a>
        </p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=2c56cd60-9195-4ed8-b3b5-2dab2a6721a7" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Free Conference Calls in less than 60 seconds</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/09/15/FreeConferenceCallsInLessThan60Seconds.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,51d7f112-1fe4-4d36-9995-7d35f8e63bfc.aspx</id>
    <published>2007-09-15T19:50:29.9627920-04:00</published>
    <updated>2007-09-17T09:01:58.9482295-04:00</updated>
    <category term="Deals" label="Deals" scheme="http://randypatterson.com/CategoryView,category,Deals.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Not really related to software development but <a href="http://www.instantconference.com/" target="_blank">Instant
Conference</a> is one of those gems occasionally found while surfing the <a href="http://www.boingboing.net/2006/07/02/sen-stevens-hilariou.html" target="_blank">tubes</a>. 
</p>
        <p>
          <a href="http://randypatterson.com/content/binary/WindowsLiveWriter/FreeConferenceCallsinlessthan60seconds_116ED/image_4.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="36" alt="image" src="http://randypatterson.com/content/binary/WindowsLiveWriter/FreeConferenceCallsinlessthan60seconds_116ED/image_thumb_1.png" width="244" border="0" />
          </a> 
</p>
        <p>
You just give them an email address and you get back a conference number and an access
code........that's it! The dial in number and access code are dedicated to you and
never expire.  While in the conference there are many advanced features such
as <a href="http://www.instantconference.com/howitworks.aspx#recording" target="_blank">Conference
Recording</a> and <a href="http://www.instantconference.com/howitworks.aspx#presentation" target="_blank">Presentation
Mode</a>.
</p>
        <p>
          <a href="http://randypatterson.com/content/binary/WindowsLiveWriter/FreeConferenceCallsinlessthan60seconds_116ED/image_6.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="167" alt="image" src="http://randypatterson.com/content/binary/WindowsLiveWriter/FreeConferenceCallsinlessthan60seconds_116ED/image_thumb_2.png" width="244" border="0" />
          </a>
        </p>
        <p>
I've used my number several times and found the quality to be pretty good and the
features easy to use.  If you record your conference you'll get an email in an
hour or so that will allow you to download an <a href="http://en.wikipedia.org/wiki/MP3" target="_blank">MP3</a> file. 
A nice feature for verifying your notes.
</p>
        <div class="wlWriterSmartContent" id="scid:B3E14793-948F-49af-A347-D19C374A7C4F:b98e03a8-263d-403b-b3e6-ff0726839f4b" style="padding-right: 0px; display: inline; padding-left: 0px; float: left; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <script type="text/javascript">
            <!--
digg_url = 'http://randypatterson.com/2007/09/15/FreeConferenceCallsInLessThan60Seconds.aspx';
digg_title = 'Free Conference Calls';
digg_bodytext = 'Instant Conference is one of those gems occasionally found while surfing the tubes.';
digg_topic = 'tech_deals';
//-->
          </script>
          <script src="http://digg.com/tools/diggthis.js" type="text/javascript">
          </script>
        </div>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=51d7f112-1fe4-4d36-9995-7d35f8e63bfc" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Welcome</title>
    <link rel="alternate" type="text/html" href="http://randypatterson.com/2007/09/15/Welcome.aspx" />
    <id>http://randypatterson.com/PermaLink,guid,7182c862-0445-4f34-9083-4384bfbe8ea2.aspx</id>
    <published>2007-09-15T16:09:49.8023354-04:00</published>
    <updated>2007-09-15T16:09:49.8023354-04:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Welcome back to my <span class="acronym" title="a portmanteau of web log"><a href="http://en.wikipedia.org/wiki/Blog" target="_blank">Blog</a></span>. 
I've had a blog for awhile but, due to a heavy work load,  I haven't posted anything
in over a year.  In the past year I've implemented many of the principles of <span class="acronym" title="Getting Things Done"><a href="http://en.wikipedia.org/wiki/Getting_Things_Done" target="_blank">GTD</a></span> to
better manage my professional, personal and online time.  This will, hopefully,
allow me to Work, Live and Play without the stress involved in miss-managing time.
</p>
        <p>
I've also removed my previous <span class="acronym" title="a portmanteau of web log"><a href="http://en.wikipedia.org/wiki/Blog" target="_blank">Blog</a></span> and
blog postings and started fresh with a new version of <a href="http://dasblog.info/" target="_blank">DasBlog</a> and
new postings. It was a pleasant surprise to see the maturity of the blog engines as
well as the software to help you post your content.  I am currently using <a href="http://get.live.com/betas/writer_betas" target="_blank">Windows
Live Writer</a> for content publishing, which has a very active community for <a href="http://gallery.live.com/default.aspx?pl=8" target="_blank">Plug-in's</a>.
</p>
        <img width="0" height="0" src="http://randypatterson.com/aggbug.ashx?id=7182c862-0445-4f34-9083-4384bfbe8ea2" />
      </div>
    </content>
  </entry>
</feed>