<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Brian Noyes' Blog - Architecture</title>
    <link>http://briannoyes.net/</link>
    <description>.NET Ramblings</description>
    <language>en-us</language>
    <copyright>Brian Noyes</copyright>
    <lastBuildDate>Sat, 17 Feb 2007 01:47:42 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.12105.0</generator>
    <managingEditor>brian.noyes@gmail.com</managingEditor>
    <webMaster>brian.noyes@gmail.com</webMaster>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=d0dc6bd9-ce84-450f-9240-a0aaf8eee86a</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,d0dc6bd9-ce84-450f-9240-a0aaf8eee86a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,d0dc6bd9-ce84-450f-9240-a0aaf8eee86a.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d0dc6bd9-ce84-450f-9240-a0aaf8eee86a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Wow, is this really my first blog post this year? The year has started off busy busy
busy.
</p>
        <p>
But enough about me... this is about you! YOU need to come to the NOVA Code Camp on
14 April! YOU need to volunteer to speak if you have some knowledge you are willing
to share with your fellow developers.
</p>
        <p>
I hope to see you there.
</p>
        <p>
Details: <span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><a href="http://novacodecamp.org/">http://novacodecamp.org/</a></span></p>
        <p>
          <span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">
          </span> 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=d0dc6bd9-ce84-450f-9240-a0aaf8eee86a" />
      </body>
      <title>NOVA / DC Area Code Camp</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,d0dc6bd9-ce84-450f-9240-a0aaf8eee86a.aspx</guid>
      <link>http://briannoyes.net/2007/02/17/NOVADCAreaCodeCamp.aspx</link>
      <pubDate>Sat, 17 Feb 2007 01:47:42 GMT</pubDate>
      <description>&lt;p&gt;
Wow, is this really my first blog post this year? The year has started off busy busy
busy.
&lt;/p&gt;
&lt;p&gt;
But enough about me... this is about you! YOU need to come to the NOVA Code Camp on
14 April! YOU need to volunteer to speak if you have some knowledge you are willing
to share with your fellow developers.
&lt;/p&gt;
&lt;p&gt;
I hope to see you there.
&lt;/p&gt;
&lt;p&gt;
Details: &lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;a href="http://novacodecamp.org/"&gt;http://novacodecamp.org/&lt;/a&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=d0dc6bd9-ce84-450f-9240-a0aaf8eee86a" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,d0dc6bd9-ce84-450f-9240-a0aaf8eee86a.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>Architecture</category>
      <category>Community</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=a0e9b379-5eab-4385-a4a0-069b28f39fa0</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a0e9b379-5eab-4385-a4a0-069b28f39fa0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Another great conference complete. Around 5000 showed up and we had great feedback
from the crowd that it was a good show. If you haven't been to connections before,
you really should check it out.
</p>
        <p>
I gave three talks this week. You can get the slides and demos for each below.
</p>
        <p>
Real World ClickOnce:  <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDP301_RealWorldClickOnce.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/RealWorldClickOnceDemos.zip">Demos</a><br />
Workflow Driven Windows Applications:  <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VWX301_WorkflowDrivenWindowsApplications.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/WorkflowWindowsAppDemos.zip">Demos</a><br />
Implement a Data Layer with the VS 2005 DataSet Designer:  <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDA302_ImplementDataLayerwithDataSetDesigner.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/DataSetDesignerDemos.zip">Demos</a></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a0e9b379-5eab-4385-a4a0-069b28f39fa0" />
      </body>
      <title>DevConnections Vegas Slides and Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</guid>
      <link>http://briannoyes.net/2006/11/10/DevConnectionsVegasSlidesAndDemos.aspx</link>
      <pubDate>Fri, 10 Nov 2006 02:02:33 GMT</pubDate>
      <description>&lt;p&gt;
Another great conference complete. Around 5000 showed up and we had great feedback
from the crowd that it was a good show. If you haven't been to connections before,
you really should check it out.
&lt;/p&gt;
&lt;p&gt;
I gave three talks this week. You can get the slides and demos for each below.
&lt;/p&gt;
&lt;p&gt;
Real World ClickOnce:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDP301_RealWorldClickOnce.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/RealWorldClickOnceDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Workflow Driven Windows Applications:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VWX301_WorkflowDrivenWindowsApplications.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/WorkflowWindowsAppDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Implement a Data Layer with the VS 2005 DataSet Designer:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDA302_ImplementDataLayerwithDataSetDesigner.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/DataSetDesignerDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a0e9b379-5eab-4385-a4a0-069b28f39fa0" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>Architecture</category>
      <category>ClickOnce</category>
      <category>Data Binding</category>
      <category>DevConnections</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=8f0cb400-09e4-4bdf-bc82-d01a0e234d1a</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,8f0cb400-09e4-4bdf-bc82-d01a0e234d1a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,8f0cb400-09e4-4bdf-bc82-d01a0e234d1a.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=8f0cb400-09e4-4bdf-bc82-d01a0e234d1a</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Looks like I get to hold onto the MVP title for another year. WooHoo! 
</p>
        <p>
Being an MVP has a lot of great benefits, but you need to contribute a lot of time
to the community to earn the title. In case people are wondering the kinds of things
you can do to qualify, I gave about 35 <a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=-1&amp;tabid=8#noyes">talks
at major conferences </a>in the last year, 14 user group talks, 3 webcasts, wrote
a book (<a href="http://www.softinsight.com/databindingbook">Data Binding with Windows
Forms 2.0</a>), published about a <a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=-1&amp;tabid=9#noyes">half
dozen articles </a>in various publications, helped run the Captial Area .NET User
Group, and participated in 6 Microsoft partner events (SDRs, readiness events, etc.).
This is all extra-curricular activity that does not directly earn me any significant
money. On top of that I had to continue to earn a living as an architect and trainer
with <a href="http://www.idesign.net">IDesign</a>, which is a lot of fun in itself.
Sounds exhausting, but I gotta say I feel pretty lucky to have found something that
I love to do so much.
</p>
        <p>
This year I have been moved to the Visual Developer - Solution Architect category
instead of ASP.NET because that aligns more with where my primary focus is these days.
I'm all about smart clients, but they don't have a category for that yet. I still
can hold my own with ASP.NET, but just don't spend as much of my time in that space
as with architecture and smart client technologies anymore.
</p>
        <p>
Cool, cool, cool. I feel privileged to count myself part of a very talented community
of Microsoft recognized experts!
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=8f0cb400-09e4-4bdf-bc82-d01a0e234d1a" />
      </body>
      <title>Awarded MVP for another year! Visual Developer - Solution Architect</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,8f0cb400-09e4-4bdf-bc82-d01a0e234d1a.aspx</guid>
      <link>http://briannoyes.net/2006/01/05/AwardedMVPForAnotherYearVisualDeveloperSolutionArchitect.aspx</link>
      <pubDate>Thu, 05 Jan 2006 15:19:36 GMT</pubDate>
      <description>&lt;p&gt;
Looks like I get to hold onto the MVP title for another year. WooHoo! 
&lt;/p&gt;
&lt;p&gt;
Being an MVP has a lot of great benefits, but you need to contribute a lot of time
to the community to earn the title. In case people are wondering the kinds of things
you can do to qualify, I gave about 35 &lt;a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=-1&amp;amp;tabid=8#noyes"&gt;talks
at major conferences &lt;/a&gt;in the last year, 14 user group talks, 3 webcasts, wrote
a book (&lt;a href="http://www.softinsight.com/databindingbook"&gt;Data Binding with Windows
Forms 2.0&lt;/a&gt;), published about a &lt;a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=-1&amp;amp;tabid=9#noyes"&gt;half
dozen articles &lt;/a&gt;in various publications, helped run the Captial Area .NET User
Group, and participated in 6 Microsoft partner events (SDRs, readiness events, etc.).
This is all extra-curricular activity that does not directly earn me any significant
money. On top of that I had to continue to earn a living as an architect and trainer
with &lt;a href="http://www.idesign.net"&gt;IDesign&lt;/a&gt;, which is a lot of fun in itself.
Sounds exhausting, but I gotta say I feel pretty lucky to have found something that
I love to do so much.
&lt;/p&gt;
&lt;p&gt;
This year I have been moved to the Visual Developer - Solution Architect category
instead of ASP.NET because that aligns more with where my primary focus is these days.
I'm all about smart clients, but they don't have a category for that yet. I still
can hold my own with ASP.NET, but just don't spend as much of my time in that space
as with architecture and smart client technologies anymore.
&lt;/p&gt;
&lt;p&gt;
Cool, cool, cool. I feel privileged to count myself part of a very talented community
of Microsoft recognized experts!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=8f0cb400-09e4-4bdf-bc82-d01a0e234d1a" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,8f0cb400-09e4-4bdf-bc82-d01a0e234d1a.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Community</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=f9834693-e992-4bf1-9408-1ab8d2cb518c</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,f9834693-e992-4bf1-9408-1ab8d2cb518c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,f9834693-e992-4bf1-9408-1ab8d2cb518c.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f9834693-e992-4bf1-9408-1ab8d2cb518c</wfw:commentRss>
      <title>Interface-based Programming example employing the Factory pattern</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,f9834693-e992-4bf1-9408-1ab8d2cb518c.aspx</guid>
      <link>http://briannoyes.net/2005/11/20/InterfacebasedProgrammingExampleEmployingTheFactoryPattern.aspx</link>
      <pubDate>Sun, 20 Nov 2005 16:16:02 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;When
I demonstrate the use of interface-based programming in a class, I always give a demo
of using interface-based programming combined with a factory pattern to add dynamic
behaviors to an application. This is basically a scaled down version of what the provider
model in ASP.NET 2.0 and the Enterprise Library do to allow you to externally configure
components that will be called by the framework at runtime. ASP.NET actually uses
abstract base classes instead of interfaces because they also provide some shared
implementation, but the concepts are basically the same.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;I use a simple
little example of a client that defines an IDog interface (in a separate interface
only assembly that it can share with component providers) that specifies the contract
that providers are expected to implement. I then show how to build components separately
that the client has no specific type information about, and load and invoke the behavior
defined in those components dynamically through a factory and based on the interface
definition that is the contract for how those components expose their behavior and
some configuration file entries that the factory can use to load and instantiate the
types. The client is able to do this without requiring any code modifications to accept
new components, and can even have new behaviors added at runtime without needing to
restart the application.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;I have repacked
the demo I normally give in class to:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Make it a
little cleaner&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Separate out
the factory into a generic factory in a separate assembly that could be reused for
any project&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Use the new
Settings features in the .NET 2.0 framework to enter the type information into a configuration
file instead of using a separate XML file like I used to. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;The factory
method looks like the following:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt;&lt;font color=#000000&gt; T[]
ConstructType&amp;lt;T&amp;gt;() &lt;/font&gt;&lt;span style="COLOR: blue"&gt;where&lt;/span&gt;&lt;font color=#000000&gt; T
: &lt;/font&gt;&lt;span style="COLOR: blue"&gt;class&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Refresh the config cache in case the config file has been edited at runtime&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;Settings&lt;/span&gt;&lt;font color=#000000&gt;.Default.Reload();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Load the collection of components from the string collection in config&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;StringCollection&lt;/span&gt;&lt;font color=#000000&gt; componentTypeInfoColl
= &lt;/font&gt;&lt;span style="COLOR: teal"&gt;Settings&lt;/span&gt;&lt;font color=#000000&gt;.Default.Components;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Create a list to add the components to as they are created&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;List&lt;/span&gt;&lt;font color=#000000&gt;&amp;lt;T&amp;gt;
components = &lt;/font&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: teal"&gt;List&lt;/span&gt;&lt;font color=#000000&gt;&amp;lt;T&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;// 
&lt;st1:place w:st="on"&gt;Loop&lt;/st1:place&gt;
through the config strings trying to create instances of the appropriate type&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt;&lt;font color=#000000&gt; (&lt;/font&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;font color=#000000&gt; componentTypeInfo &lt;/font&gt;&lt;span style="COLOR: blue"&gt;in&lt;/span&gt;&lt;font color=#000000&gt; componentTypeInfoColl)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;try&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Config entries should be in the form:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Fully.Qualified.TypeName, AssemblyName&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Split into its two parts&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;font color=#000000&gt;[]
typeInfo = componentTypeInfo.Split(&lt;/font&gt;&lt;span style="BACKGROUND: aqua; COLOR: maroon; mso-highlight: aqua"&gt;','&lt;/span&gt;&lt;font color=#000000&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Dynamic load the assembly&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;Assembly&lt;/span&gt;&lt;font color=#000000&gt; assem
= &lt;/font&gt;&lt;span style="COLOR: teal"&gt;Assembly&lt;/span&gt;&lt;font color=#000000&gt;.Load(typeInfo[1].Trim());&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Dynamic instance creation&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;T
instance = assem.CreateInstance(typeInfo[0].Trim()) &lt;/font&gt;&lt;span style="COLOR: blue"&gt;as&lt;/span&gt;&lt;font color=#000000&gt; T;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;font color=#000000&gt; (instance
!= &lt;/font&gt;&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;&lt;font color=#000000&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;components.Add(instance);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;catch&lt;/span&gt;&lt;font color=#000000&gt; {
} &lt;/font&gt;&lt;span style="BACKGROUND: silver; COLOR: green; mso-highlight: silver"&gt;//
Just ignore invalid types&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&lt;font color=#000000&gt; components.ToArray();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;So the only
things you need to know to use this as a factory for other purposes than this demo
is that it expects the type information to be entered in the client configuration
file with an application settings section like the following:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;configuration&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;configSections&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;sectionGroup&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;name&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;applicationSettings&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;System.Configuration.ApplicationSettingsGroup,
System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; &amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;section&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;name&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;DynamicFactoryLibrary.Properties.Settings&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;type&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;System.Configuration.ClientSettingsSection,
System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;requirePermission&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;false&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;sectionGroup&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;configSections&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;applicationSettings&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;DynamicFactoryLibrary.Properties.Settings&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;setting&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;name&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;Components&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt; &lt;/span&gt;&lt;span style="COLOR: red"&gt;serializeAs&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;Xml&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;value&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;ArrayOfString&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;xmlns:xsi&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/span&gt;&lt;font color=#000000&gt;"&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;xmlns:xsd&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;http://www.w3.org/2001/XMLSchema&lt;/span&gt;&lt;font color=#000000&gt;"&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;string&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;Animals.Dog,
Animals&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;string&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;!--&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;string&amp;gt;Animals.GermanShepherd,
Animals&amp;lt;/string&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;string&amp;gt;Animals2.Shitzu,
Animals2&amp;lt;/string&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;--&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;ArrayOfString&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;value&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;setting&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;DynamicFactoryLibrary.Properties.Settings&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;applicationSettings&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;configuration&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;I’m
just using a StringCollection as the type for the component type collection, so each
component that you want to add to the collection should be added to the section in
the form:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;string&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&amp;gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;Animals.Dog,
Animals&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;string&lt;/span&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;You can see
a couple of additional components commented out for dynamically adding them into the
application (even while it is running). The type information uses a standard convention
for specifying type information through a config file: specifically the fully qualified
type name of the type, followed by a comma, followed by an Assembly name to load it
from.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;You can &lt;a href="http://www.softinsight.com/downloads/InterfaceBasedProgramming.zip"&gt;grab
the whole sample here&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;To demonstrate
the example in action:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul style="MARGIN-TOP: 0in" type=disc&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;First build
the InterfaceBasedProgramming solution, which builds the interface contract assembly,
the factory library, and the client application. The default client config file has
all of the type information for available components commented out.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Open the build
output folder of the client (InterfaceBasedClient\bin\debug) and run the client by
double clicking on InterfaceBasedClient.exe.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Push the button
and observe that you get nothing because no types have been provided or plugged in
though the config file yet. Leave the client running.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Next open
the Animals solution, build it, and copy the build output (Animals.dll) from the bin\Debug
folder into the client’s bin\Debug folder.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Edit the InterfaceBasedClient.exe.config
file through an editor, and uncomment the Dog type information as shown in the snippet
of config file above, save the file.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Hit the button
in the client again, you should see a standard Dog Bark (through a message box).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Edit the config
file again, uncommenting the type information for a GermanShepherd (which is also
defined in the Animals assembly), and save.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Push the button
again and you will see that type is dynamically used from the already loaded assembly.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Go open the
Animals2 solution and build it.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Copy the Animals2.dll
from its bin\Debug folder into the bin\Debug folder for the client.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Edit the config
file for the client again to uncomment the type information for the Shitzu type, and
save.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;font color=#000000&gt;Click the
button in the client again and you should see all three types of dogs bark.&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=f9834693-e992-4bf1-9408-1ab8d2cb518c" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,f9834693-e992-4bf1-9408-1ab8d2cb518c.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=0a11df39-72f7-47fb-a0a8-7222e0c8d19c</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,0a11df39-72f7-47fb-a0a8-7222e0c8d19c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,0a11df39-72f7-47fb-a0a8-7222e0c8d19c.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0a11df39-72f7-47fb-a0a8-7222e0c8d19c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm catching a flight early tomorrow morning to Vegas for <a href="http://www.vsconnections.com">VS
Connections </a>and am really looking forward to it. VS Connections in particular,
and <a href="http://www.devconnections.com">DevConnections</a> in general (the overall
conference event) is well run, in great locations, and always has a lot of great content
that I can benefit from as well.
</p>
        <p>
I've been spending most of my recent prep time fine tuning the demos for my two WCF
sessions, Build Event Driven Applications with Indigo and Connecting Smart Client
Applications with Indigo. The more I work with Windows Communications Foundation (aka
"Indigo"), I am struck by a number of things:
</p>
        <ul>
          <li>
I am impressed by how capable Indigo is. 
</li>
          <li>
I am awed by how elegant and simple solutions are to complex aspects like security,
transactions, queuing, callbacks, and so on. 
</li>
          <li>
I am dumbfounded by how hard it is to figure out how to get to those elegant and simple
solutions.</li>
        </ul>
        <p>
The last bullet is not really a criticism of what they have come up with, it is just
the nature of the beast. I would draw on an analogy <a href="http://www.softinsight.com/LifeBeforeProgramming.aspx">from
my flying days </a>to explain why this is so. Imagine the cockpit of a WW I fighter
aircraft. You probably have half a dozen or less simple dials and gauges, and a stick
and throttle. Imagine trying to use that set of controls on an aircraft that can fly
at high subsonic speeds at high altitude carrying hundreds of passengers for 12 hour
transoceanic flights. Not going to work too well. This is basically where you were
at with past technologies to build complex, distributed, heterogenous, connected enterprise
systems. It could be done, but the end result was not going to be pretty and it was
going to take you a long time to get there.
</p>
        <p>
Now with WCF, it is more like climbing into the <a href="http://www.militaryfactory.com/cockpits/777_cockpit.asp">cockpit
of a 777</a>. There is a technological elegance to everything that is there. But there
are still hundreds (if not thousands) of individual switches, controls, displays,
electronic gages and dials, menu driven control panels, etc. A great deal of human
engineering has gone into everything that is in there so that for any given common
task, there are only a couple of relevant controls that you have to touch and put
into place to get the job done. The challenge is in knowing which one of those hundreds
of knobs and dials to tweak.
</p>
        <p>
The same is true for WCF. Microsoft has created an incredibly powerful and technologically
advanced platform that is well adapted to building large distributed enterprise systems.
In order to do that, there needs to be hundreds of switches and knobs that you can
throw to address different scenarios. The downside to that is bullet number three
above - you have to learn which switches and knobs are relevant for a given task,
and in what order to throw them.
</p>
        <p>
This is somewhat aggravated right now in that we are only at Beta 1 of WinFx (and
its parts WCF, WPF, and WinWF), and the names, shapes, and locations of all the knobs
and switches is constantly changing as they work on that human engineering task of
trying to make it easier to use. Meanwhile the documentation and samples are seriously
lagging, so working with it right now is a little like stepping into that 777 cockpit
without any labels on the controls. When you say to yourself, "I just need transactions
and certificate based security", it is kind of like saying "I just need to call the
flight attendant at the second aft flight station". Simple to describe, but God help
you in figuring out which switches and knobs to throw. At least there are not really
any destructive ones that you can throw by accident. If you get it wrong, your app
may not work, but you would have to go out of your way to write some code that would
do bad things when WCF fails to let you communicate.
</p>
        <p>
I'm looking forward to continuing to work with this technology and learn what all
those knobs and buttons are for. Learning all the controls of the aft cockpit of the
F-14 to run the weapons system, navigation systems, communications systems, and other
tasks was one of the funnest things I have done in my life. The fact that we got to
do that while strapped to a couple of 50K lb + of thrust zorching through the sky
pulling G's and landing on the carrier certainly helped make it interesting. Sitting
at a computer leaves a little to be desired in that department, but the learning challenge
is still just as fun.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=0a11df39-72f7-47fb-a0a8-7222e0c8d19c" />
      </body>
      <title>Las Vegas Bound - Impressions of WCF</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,0a11df39-72f7-47fb-a0a8-7222e0c8d19c.aspx</guid>
      <link>http://briannoyes.net/2005/11/08/LasVegasBoundImpressionsOfWCF.aspx</link>
      <pubDate>Tue, 08 Nov 2005 07:13:55 GMT</pubDate>
      <description>&lt;p&gt;
I'm catching a flight early tomorrow morning to Vegas for &lt;a href="http://www.vsconnections.com"&gt;VS
Connections &lt;/a&gt;and am really looking forward to it. VS Connections in particular,
and &lt;a href="http://www.devconnections.com"&gt;DevConnections&lt;/a&gt; in general (the overall
conference event) is well run, in great locations, and always has a lot of great content
that I can benefit from as well.
&lt;/p&gt;
&lt;p&gt;
I've been spending most of my recent prep time fine tuning the demos for my two WCF
sessions, Build Event Driven Applications with Indigo and Connecting Smart Client
Applications with Indigo. The more I work with Windows Communications Foundation (aka
"Indigo"), I am struck by a number of things:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
I am impressed by how capable Indigo is. 
&lt;li&gt;
I am awed by how elegant and simple solutions are to complex aspects like security,
transactions, queuing, callbacks, and so on. 
&lt;li&gt;
I am dumbfounded by how hard it is to figure out how to get to those elegant and simple
solutions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The last bullet is not really a criticism of what they have come up with, it is just
the nature of the beast. I would draw on an analogy &lt;a href="http://www.softinsight.com/LifeBeforeProgramming.aspx"&gt;from
my flying days &lt;/a&gt;to explain why this is so. Imagine the cockpit of a WW I fighter
aircraft. You probably have half a dozen or less simple dials and gauges, and a stick
and throttle. Imagine trying to use that set of controls on an aircraft that can fly
at high subsonic speeds at high altitude carrying hundreds of passengers for 12 hour
transoceanic flights. Not going to work too well. This is basically where you were
at with past technologies to build complex, distributed, heterogenous, connected&amp;nbsp;enterprise
systems. It could be done, but the end result was not going to be pretty and it was
going to take you a long time to get there.
&lt;/p&gt;
&lt;p&gt;
Now with WCF, it is more like climbing into the &lt;a href="http://www.militaryfactory.com/cockpits/777_cockpit.asp"&gt;cockpit
of a 777&lt;/a&gt;. There is a technological elegance to everything that is there. But there
are still hundreds (if not thousands) of individual switches, controls, displays,
electronic gages and dials, menu driven control panels, etc. A great deal of human
engineering has gone into everything that is in there so that for any given common
task, there are only a couple of relevant controls that you have to touch and put
into place to get the job done. The challenge is in knowing which one of those hundreds
of knobs and dials to tweak.
&lt;/p&gt;
&lt;p&gt;
The same is true for WCF. Microsoft has created an incredibly powerful and technologically
advanced platform that is well adapted to building large distributed enterprise systems.
In order to do that, there needs to be hundreds of switches and knobs that you can
throw to address different scenarios. The downside to that is bullet number three
above - you have to learn which switches and knobs are relevant for a given task,
and in what order to throw them.
&lt;/p&gt;
&lt;p&gt;
This is somewhat aggravated right now in that we are only at Beta 1 of WinFx (and
its parts WCF, WPF, and WinWF), and the names, shapes, and locations of all the knobs
and switches is constantly changing as they work on that human engineering task of
trying to make it easier to use. Meanwhile the documentation and samples are seriously
lagging, so working with it right now is a little like stepping into that 777 cockpit
without any labels on the controls. When you say to yourself, "I just need transactions
and certificate based security", it is kind of like saying "I just need to call the
flight attendant at the second aft flight station". Simple to describe, but God help
you in figuring out which switches and knobs to throw. At least there are not really
any destructive ones that you can throw by accident. If you get it wrong, your app
may not work, but you would have to go out of your way to write some code that would
do bad things when WCF fails to let you communicate.
&lt;/p&gt;
&lt;p&gt;
I'm looking forward to continuing to work with this technology and learn what all
those knobs and buttons are for. Learning all the controls of the aft cockpit of the
F-14 to run the weapons system, navigation systems, communications systems, and other
tasks was one of the funnest things I have done in my life. The fact that we got to
do that while strapped to a couple of 50K lb + of thrust zorching through the sky
pulling G's and landing on the carrier certainly helped make it interesting. Sitting
at a computer leaves a little to be desired in that department, but the learning challenge
is still just as fun.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=0a11df39-72f7-47fb-a0a8-7222e0c8d19c" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,0a11df39-72f7-47fb-a0a8-7222e0c8d19c.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>DevConnections</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
      <category>WinFx</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=69fc7632-be37-4dde-8290-6c9aa4e57fc4</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=69fc7632-be37-4dde-8290-6c9aa4e57fc4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'll be speaking at <a href="http://www.vsconnections.com">Visual Studio Connections </a>(part
of <a href="http://www.devconnections.com">DevConnections</a>) in Las Vegas from 5-8
November. This is a great and growing conference that happens twice annually in the
US, usually Orlando in the spring and Las Vegas in the fall, that I have been privileged
to speak at for the last couple years. If you haven't been to one yet, you ought to
be hammering your boss for permisson/funding to attend for the following reasons:
</p>
        <ul>
          <li>
It will rapidly and time-effectively expose you to new solution technologies you might
not get a chance to explore on your own 
</li>
          <li>
You will get concentrated advanced training in current and future technologies, getting
you up to speed on them in far less time than you can achieve on your own 
</li>
          <li>
You will get presentations from the top speakers in the business 
</li>
          <li>
You will get a chance to network with peers in the industry, learn from others experiences
employing .NET technologies, which will make you more effective at employing them
yourself 
</li>
          <li>
You will have a lot of fun (OK, maybe don't tell your boss this...)</li>
        </ul>
        <p>
You can learn a lot peripherally from the conference too by reading the <a href="http://aspadvice.com/blogs/devconnections/default.aspx">DevConnections
blog here</a>. There are posts from other speakers as they develop their talks and
their own observations and experiences at the conference.
</p>
        <p>
I'll be presenting the following sessions:
</p>
        <p>
          <strong>VSM356: Build Custom Data Bound Business Objects and Collections</strong>
          <br />
          <strong>VSM351: Secure Smart Client ClickOnce Deployments</strong>
          <br />
          <strong>VID306: Build Event-Driven Applications with Indigo</strong>
          <br />
          <strong>VID309: Connect Smart Client Applications with Indigo</strong>
        </p>
        <p>
If you make it to the show (and you should!!), stop by and say hi!
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=69fc7632-be37-4dde-8290-6c9aa4e57fc4" />
      </body>
      <title>Upcoming DevConnections Talks</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</guid>
      <link>http://briannoyes.net/2005/10/24/UpcomingDevConnectionsTalks.aspx</link>
      <pubDate>Mon, 24 Oct 2005 20:48:04 GMT</pubDate>
      <description>&lt;p&gt;
I'll be speaking at &lt;a href="http://www.vsconnections.com"&gt;Visual Studio Connections &lt;/a&gt;(part
of &lt;a href="http://www.devconnections.com"&gt;DevConnections&lt;/a&gt;) in Las Vegas from 5-8
November. This is a great and growing conference that happens twice annually in the
US, usually Orlando in the spring and Las Vegas in the fall, that I have been privileged
to speak at for the last couple years. If you haven't been to one yet, you ought to
be hammering your boss for permisson/funding to attend for the following reasons:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
It will rapidly and time-effectively expose you to new solution technologies you might
not get a chance to explore on your own 
&lt;li&gt;
You will get concentrated advanced training in current and future technologies, getting
you up to speed on them in far less time than you can achieve on your own 
&lt;li&gt;
You will get presentations from the top speakers in the business 
&lt;li&gt;
You will get a chance to network with peers in the industry, learn from others experiences
employing .NET technologies, which will make you more effective at employing them
yourself 
&lt;li&gt;
You will have a lot of fun (OK, maybe don't tell your boss this...)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You can learn a lot peripherally from the conference too by reading the &lt;a href="http://aspadvice.com/blogs/devconnections/default.aspx"&gt;DevConnections
blog here&lt;/a&gt;. There are posts from other speakers as they develop their talks and
their own observations and experiences at the conference.
&lt;/p&gt;
&lt;p&gt;
I'll be presenting the following sessions:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;VSM356:&amp;nbsp;Build Custom Data Bound Business Objects and Collections&lt;/strong&gt;
&lt;br&gt;
&lt;strong&gt;VSM351:&amp;nbsp;Secure Smart Client ClickOnce Deployments&lt;/strong&gt;
&lt;br&gt;
&lt;strong&gt;VID306:&amp;nbsp;Build Event-Driven Applications with Indigo&lt;/strong&gt;
&lt;br&gt;
&lt;strong&gt;VID309:&amp;nbsp;Connect Smart Client Applications with Indigo&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
If you make it to the show (and you should!!), stop by and say hi!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=69fc7632-be37-4dde-8290-6c9aa4e57fc4" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>DevConnections</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=8c3cbaa6-92b0-4bd0-89fd-3bf29009ca16</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,8c3cbaa6-92b0-4bd0-89fd-3bf29009ca16.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,8c3cbaa6-92b0-4bd0-89fd-3bf29009ca16.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=8c3cbaa6-92b0-4bd0-89fd-3bf29009ca16</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My associate <a href="http://www.dasblonde.net/">Michele </a>is part of a panel discussion
podcast that Microsoft is doing on Service Oriented Architecture that will be ongoing
over a period of time. The first one just hit the streets and is great. <a href="http://www.microsoft.com/architecture/default.aspx?pid=share.podcast&amp;abver=FEEB2E89-4412-4C58-A7F8-9B2CA0E0BDAC">Check
it out here</a>.
</p>
        <p>
Very nice little discussion of what matters.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=8c3cbaa6-92b0-4bd0-89fd-3bf29009ca16" />
      </body>
      <title>Nice little SOA podcast</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,8c3cbaa6-92b0-4bd0-89fd-3bf29009ca16.aspx</guid>
      <link>http://briannoyes.net/2005/09/23/NiceLittleSOAPodcast.aspx</link>
      <pubDate>Fri, 23 Sep 2005 05:05:52 GMT</pubDate>
      <description>&lt;p&gt;
My associate &lt;a href="http://www.dasblonde.net/"&gt;Michele &lt;/a&gt;is part of a panel discussion
podcast that Microsoft is doing on Service Oriented Architecture that will be ongoing
over a period of time. The first one just hit the streets and is great. &lt;a href="http://www.microsoft.com/architecture/default.aspx?pid=share.podcast&amp;amp;abver=FEEB2E89-4412-4C58-A7F8-9B2CA0E0BDAC"&gt;Check
it out here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Very nice little discussion of what matters.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=8c3cbaa6-92b0-4bd0-89fd-3bf29009ca16" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,8c3cbaa6-92b0-4bd0-89fd-3bf29009ca16.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=386ab929-6013-439e-bb0e-bdef11e4cfc5</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,386ab929-6013-439e-bb0e-bdef11e4cfc5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,386ab929-6013-439e-bb0e-bdef11e4cfc5.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=386ab929-6013-439e-bb0e-bdef11e4cfc5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'll take the opportunity here for some shameless self-promotion...
</p>
        <p>
If you are an intermediate to advanced developer who already has some .NET experience
and are looking to take it to the next level, you might want to check out our Advanced
.NET Master Class, which I will be teaching in Reston, VA from 17-21 Oct. This is
a public offering of a high-demand course that we normally only offer onsite for larger
development teams. You can find the <a href="http://www.idesign.net/idesign/links/classes/advanced.aspx">full
class description here</a>. This will be a well-timed, comprehensive, in-depth coverage
of developing enterprise applications in .NET 2.0. I cover a huge amount
of material including advanced language features in C#, assemblies and versioning,
serialization, multi-threading, transactions, security, Enterprise Services, and Remoting.
</p>
        <p>
If you are interested, contact us <a href="mailto:%73%61%6C%65%73%40%69%64%65%73%69%67%6E%2E%6E%65%74?subject=Advanced Master Class Registration">through
this link to obtain more information.</a></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=386ab929-6013-439e-bb0e-bdef11e4cfc5" />
      </body>
      <title>Advanced .NET Master Class Oct 17-21, Reston VA</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,386ab929-6013-439e-bb0e-bdef11e4cfc5.aspx</guid>
      <link>http://briannoyes.net/2005/08/02/AdvancedNETMasterClassOct1721RestonVA.aspx</link>
      <pubDate>Tue, 02 Aug 2005 11:34:46 GMT</pubDate>
      <description>&lt;p&gt;
I'll take the opportunity here for some shameless self-promotion...
&lt;/p&gt;
&lt;p&gt;
If you are an intermediate to advanced developer who already has some .NET experience
and are looking to take it to the next level, you might want to check out our Advanced
.NET Master Class, which I will be teaching in Reston, VA from 17-21 Oct. This is
a public offering of a high-demand course that we normally only offer onsite for larger
development teams. You can find the &lt;a href="http://www.idesign.net/idesign/links/classes/advanced.aspx"&gt;full
class description here&lt;/a&gt;. This will be a well-timed, comprehensive, in-depth coverage
of developing enterprise applications in .NET 2.0.&amp;nbsp;I cover&amp;nbsp;a huge amount
of material including&amp;nbsp;advanced language features in C#, assemblies and versioning,
serialization, multi-threading, transactions, security, Enterprise Services, and Remoting.
&lt;/p&gt;
&lt;p&gt;
If you are interested, contact us &lt;a href="mailto:%73%61%6C%65%73%40%69%64%65%73%69%67%6E%2E%6E%65%74?subject=Advanced Master Class Registration"&gt;through
this link to obtain more information.&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=386ab929-6013-439e-bb0e-bdef11e4cfc5" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,386ab929-6013-439e-bb0e-bdef11e4cfc5.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=cf59d0e7-54b2-4bc4-bcb0-7506e3d4864e</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,cf59d0e7-54b2-4bc4-bcb0-7506e3d4864e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,cf59d0e7-54b2-4bc4-bcb0-7506e3d4864e.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=cf59d0e7-54b2-4bc4-bcb0-7506e3d4864e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.softinsight.com/downloads/TechEd2005/SmartClientOfflineDataCachingAndSyncDemos.zip">Here
are the demos</a> from today's talk. Enjoy!<img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=cf59d0e7-54b2-4bc4-bcb0-7506e3d4864e" /></body>
      <title>Smart Client Offline Data Caching and Synchronization Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,cf59d0e7-54b2-4bc4-bcb0-7506e3d4864e.aspx</guid>
      <link>http://briannoyes.net/2005/07/08/SmartClientOfflineDataCachingAndSynchronizationDemos.aspx</link>
      <pubDate>Fri, 08 Jul 2005 14:24:15 GMT</pubDate>
      <description>&lt;a href="http://www.softinsight.com/downloads/TechEd2005/SmartClientOfflineDataCachingAndSyncDemos.zip"&gt;Here
are the demos&lt;/a&gt; from today's talk. Enjoy!&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=cf59d0e7-54b2-4bc4-bcb0-7506e3d4864e" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,cf59d0e7-54b2-4bc4-bcb0-7506e3d4864e.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=8b5db945-bd7b-4ffe-93f5-bd9460e28d38</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,8b5db945-bd7b-4ffe-93f5-bd9460e28d38.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,8b5db945-bd7b-4ffe-93f5-bd9460e28d38.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=8b5db945-bd7b-4ffe-93f5-bd9460e28d38</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">For those who want the demos from my session
on data binding in Windows Forms 2.0 at TechEd Europe today, <a href="http://www.softinsight.com/downloads/TechEd2005/DataBindingDemos.zip">here
they are</a>.<img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=8b5db945-bd7b-4ffe-93f5-bd9460e28d38" /></body>
      <title>Data Binding Demos from TechEd Europe today</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,8b5db945-bd7b-4ffe-93f5-bd9460e28d38.aspx</guid>
      <link>http://briannoyes.net/2005/07/06/DataBindingDemosFromTechEdEuropeToday.aspx</link>
      <pubDate>Wed, 06 Jul 2005 14:59:59 GMT</pubDate>
      <description>For those who want the demos from my session on data binding in Windows Forms 2.0 at TechEd Europe today, &lt;a href="http://www.softinsight.com/downloads/TechEd2005/DataBindingDemos.zip"&gt;here
they are&lt;/a&gt;.&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=8b5db945-bd7b-4ffe-93f5-bd9460e28d38" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,8b5db945-bd7b-4ffe-93f5-bd9460e28d38.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=cc8e68f4-f965-42c7-b47c-5ef37a6fe238</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,cc8e68f4-f965-42c7-b47c-5ef37a6fe238.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,cc8e68f4-f965-42c7-b47c-5ef37a6fe238.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=cc8e68f4-f965-42c7-b47c-5ef37a6fe238</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have gotten a lot of questions surrounding the use of certificates in ClickOnce.
Here are the key facts to understand:
</p>
        <ul>
          <li>
You must sign your ClickOnce manifests with an Authenticode certificate. VS 2005 will
do this for you when you publish an application. 
</li>
          <li>
Authenticode certificates are not the same thing as an SSL certificate or an X509
client certificate used for authentication purposes, even though they are all based
on the same technology.</li>
          <li>
You can generate your own certificate using Visual Studio, or the makecert command
line utility. In this case, you are both the publisher represented by the certificate
and the certificate issuing authority. You will sometimes see this referred to as
a self-signed certificate.</li>
          <li>
A third party issued certificate (i.e. Verisign, Thawte) is the preferred approach.
These companies are already configured in Windows as trusted root certificate authorities
(CA), and because they are third party verified, there is an additional level of implied
trust associated with them.</li>
          <li>
If you are part of a large enterprise domain and you have a domain CA, that CA can
issue you a publisher cert for your domain that you can use, and your publisher certificate
can be pushed out to client machines through group policy or SMS.</li>
          <li>
If user prompting is acceptable for elevating privileges (based on the permissions
requested by the application in its manifest and the permissions that would be granted
by code access security based on the launch URL), then there is no need to install
any certificates on the client side.</li>
          <li>
If you want to avoid user prompting, you need to install your publisher certificate
in the Trusted Publishers store on the client machine.</li>
          <li>
At runtime, certificate checks are only done against the local certificate stores
on the client machine. Specifically, the certificate used to sign the manifests is
checked for in the Trusted Publishers store, and the issuer of that certificate is
checked for in the Trusted Root Certificate Authorities store.</li>
        </ul>
        <p>
If you want more information on configuring certificates and how they work at runtime,
you should check out my article on MSDN Online:
</p>
        <p>
          <a href="http://www.msdn.microsoft.com/library/en-us/dnwinforms/html/clickoncetrustpub.asp">http://www.msdn.microsoft.com/library/en-us/dnwinforms/html/clickoncetrustpub.asp</a>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=cc8e68f4-f965-42c7-b47c-5ef37a6fe238" />
      </body>
      <title>ClickOnce certificates in a nutshell</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,cc8e68f4-f965-42c7-b47c-5ef37a6fe238.aspx</guid>
      <link>http://briannoyes.net/2005/06/29/ClickOnceCertificatesInANutshell.aspx</link>
      <pubDate>Wed, 29 Jun 2005 11:54:46 GMT</pubDate>
      <description>&lt;p&gt;
I have gotten a lot of questions surrounding the use of certificates in ClickOnce.
Here are the key facts to understand:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
You must sign your ClickOnce manifests with an Authenticode certificate. VS 2005 will
do this for you when you publish an application. 
&lt;/li&gt;
&lt;li&gt;
Authenticode certificates are not the same thing as an SSL certificate or an X509
client certificate used for authentication purposes, even though they are all based
on the same technology.&lt;/li&gt;
&lt;li&gt;
You can generate your own certificate using Visual Studio, or the makecert command
line utility. In this case, you are both the publisher represented by the certificate
and the certificate issuing authority. You will sometimes see this referred to as
a self-signed certificate.&lt;/li&gt;
&lt;li&gt;
A third party issued certificate (i.e. Verisign, Thawte) is the preferred approach.
These companies are already configured in Windows as trusted root certificate authorities
(CA), and because they are third party verified, there is an additional level of implied
trust associated with them.&lt;/li&gt;
&lt;li&gt;
If you are part of a large enterprise domain and you have a domain CA, that CA can
issue you a publisher cert for your domain that you can use, and your publisher certificate
can be pushed out to client machines through group policy or SMS.&lt;/li&gt;
&lt;li&gt;
If user prompting is acceptable for elevating privileges (based on&amp;nbsp;the permissions
requested by the application in its manifest and the permissions that would be granted
by code access security based on the launch URL), then there is no need to install
any certificates on the client side.&lt;/li&gt;
&lt;li&gt;
If you want to avoid user prompting, you need to install your publisher certificate
in the Trusted Publishers store on the client machine.&lt;/li&gt;
&lt;li&gt;
At runtime, certificate checks are only done against the local certificate stores
on the client machine. Specifically, the certificate used to sign the manifests is
checked for in the Trusted Publishers store, and the issuer of that certificate is
checked for in the Trusted Root Certificate Authorities store.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you want more information on configuring certificates and how they work at runtime,
you should check out my article on MSDN Online:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.msdn.microsoft.com/library/en-us/dnwinforms/html/clickoncetrustpub.asp"&gt;http://www.msdn.microsoft.com/library/en-us/dnwinforms/html/clickoncetrustpub.asp&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=cc8e68f4-f965-42c7-b47c-5ef37a6fe238" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,cc8e68f4-f965-42c7-b47c-5ef37a6fe238.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=1c4fb286-f1a6-4096-a0c9-c2b7ef5168d6</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,1c4fb286-f1a6-4096-a0c9-c2b7ef5168d6.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,1c4fb286-f1a6-4096-a0c9-c2b7ef5168d6.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=1c4fb286-f1a6-4096-a0c9-c2b7ef5168d6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://weblogs.asp.net/rosherove/">Roy </a>and
I had a great long interview/discussion on a myriad of .NET topics back a couple of
months, and he has it all edited and posted now. You can find it <a href="http://weblogs.asp.net/rosherove/archive/2005/06/19/413774.aspx">here</a>.<img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=1c4fb286-f1a6-4096-a0c9-c2b7ef5168d6" /></body>
      <title>Interview with Roy Osherove</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,1c4fb286-f1a6-4096-a0c9-c2b7ef5168d6.aspx</guid>
      <link>http://briannoyes.net/2005/06/22/InterviewWithRoyOsherove.aspx</link>
      <pubDate>Wed, 22 Jun 2005 18:48:04 GMT</pubDate>
      <description>&lt;a href="http://weblogs.asp.net/rosherove/"&gt;Roy &lt;/a&gt;and I had a great long interview/discussion
on a myriad of .NET topics back a couple of months, and he has it all edited and posted
now. You can find it &lt;a href="http://weblogs.asp.net/rosherove/archive/2005/06/19/413774.aspx"&gt;here&lt;/a&gt;.&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=1c4fb286-f1a6-4096-a0c9-c2b7ef5168d6" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,1c4fb286-f1a6-4096-a0c9-c2b7ef5168d6.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=f3009bde-a5d1-4208-b9f5-995b47797215</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,f3009bde-a5d1-4208-b9f5-995b47797215.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,f3009bde-a5d1-4208-b9f5-995b47797215.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f3009bde-a5d1-4208-b9f5-995b47797215</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here are the demos I gave in my TechEd session on Friday of last week. Sorry it took
me a bit to get them posted. Call it post-conference-traumatic-stress-letdown-syndrome
that made me go stupid.
</p>
        <p>
          <a href="http://www.softinsight.com/downloads/TechEd2005/SmartClientOfflineDataCachingAndSyncDemos.zip">Smart
Client Offline Demos</a>
        </p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=f3009bde-a5d1-4208-b9f5-995b47797215" />
      </body>
      <title>Smart Client Offline Data Caching and Synchronization Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,f3009bde-a5d1-4208-b9f5-995b47797215.aspx</guid>
      <link>http://briannoyes.net/2005/06/16/SmartClientOfflineDataCachingAndSynchronizationDemos.aspx</link>
      <pubDate>Thu, 16 Jun 2005 13:03:39 GMT</pubDate>
      <description>&lt;p&gt;
Here are the demos I gave in my TechEd session on Friday of last week. Sorry it took
me a bit to get them posted. Call it post-conference-traumatic-stress-letdown-syndrome
that made me go stupid.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/TechEd2005/SmartClientOfflineDataCachingAndSyncDemos.zip"&gt;Smart
Client Offline Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=f3009bde-a5d1-4208-b9f5-995b47797215" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,f3009bde-a5d1-4208-b9f5-995b47797215.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=e32c038f-74aa-4851-a334-c43916a9ea67</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,e32c038f-74aa-4851-a334-c43916a9ea67.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,e32c038f-74aa-4851-a334-c43916a9ea67.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e32c038f-74aa-4851-a334-c43916a9ea67</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just got back from Holland Thursday after speaking at SDC there, and now I am in
Orlando to speak at TechEd. These things are nothing but fun, but man, the travel
can get crazy.
</p>
        <p>
I had a great time last night joining in with the crowd at the <a href="http://dotnetjunkies.com/WebLog/jpalermo/">Party
with Palermo</a>, which evolved from a loosely organized geek dinner into a great
gathering of speakers, RDs, MVPs, and attendees in the Peabody hotel restaurant and
bar. Today there are a collection of overlapping events that I plan to try to attend
portions of, including some MVP events, the INETA summit, and some of the pre-con
sessions.
</p>
        <p>
The rest of the week is already pretty packed. My breakout session is not until Friday,
but I have a bunch of other things I am participating in / presenting as well:
</p>
        <p>
          <strong>Tuesday 7 Jun:</strong>
        </p>
        <p>
3:15-6:15 PM- proctoring Juval Lowy's Instructor Led Lab (ILL) on Generics (DEV20/DEV20R)
</p>
        <p>
9:00 - 10:00 PM - Preparing for Indigo Birds of a Feather (BoF) given by Juval
</p>
        <p>
          <strong>Wednesday 8 June:</strong>
        </p>
        <p>
8:30 AM-11:30 AM- proctoring Michele Leroux Bustamante's ILL on Iterators (DEV23/DEV23R)
</p>
        <p>
7:00-11:00 PM Influencer Party
</p>
        <p>
9:00-10:00PM <strong><em>Leading BoF session on Smart Client Deployment (BOF051)</em></strong></p>
        <p>
          <strong>Thursday 9 June:</strong>
        </p>
        <p>
3:15 - 6:15 PM - <strong><em>Giving System.Transactions ILL (DEV 22/22R)</em></strong></p>
        <p>
Friday 10 June:
</p>
        <p>
10:15 AM -12:00 PM - Answering Q&amp;A questions through LiveMeeting for Juval Lowy's
Simulcast session Being More Productive with the .NET Framework (DEV325)
</p>
        <p>
1:00 - 2:15 PM - <strong><em>Presenting CLI440 Smart Client Offline Data Caching and
Synchronization</em></strong></p>
        <p>
 
</p>
        <p>
Those are just the items that warrant an unchallenged block on my calendar. There
are a ton of other events mixed in there as well to keep the week packed. I also need
to get some more work done on my book this week getting the second half of the book
up to date with Beta 2 and ready for Tech review, and also want to try to blog a few
technical posts about stuff I am working on. Hmm, when is thattime expansion device
going to be on the market??
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=e32c038f-74aa-4851-a334-c43916a9ea67" />
      </body>
      <title>Back in Conference Land at TechEd</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,e32c038f-74aa-4851-a334-c43916a9ea67.aspx</guid>
      <link>http://briannoyes.net/2005/06/05/BackInConferenceLandAtTechEd.aspx</link>
      <pubDate>Sun, 05 Jun 2005 12:23:24 GMT</pubDate>
      <description>&lt;p&gt;
I just got back from Holland Thursday after speaking at SDC there, and now I am in
Orlando to speak at TechEd. These things are nothing but fun, but man, the travel
can get crazy.
&lt;/p&gt;
&lt;p&gt;
I had a great time last night joining in with the crowd at the &lt;a href="http://dotnetjunkies.com/WebLog/jpalermo/"&gt;Party
with Palermo&lt;/a&gt;, which evolved from a loosely organized geek dinner into a great
gathering of speakers, RDs, MVPs, and attendees in the Peabody hotel restaurant and
bar. Today there are a collection of overlapping events that I plan to try to attend
portions of, including some MVP events, the INETA summit, and some of the pre-con
sessions.
&lt;/p&gt;
&lt;p&gt;
The rest of the week is already pretty packed. My breakout session is not until Friday,
but I have a bunch of other things I am participating in / presenting as well:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Tuesday 7 Jun:&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
3:15-6:15 PM- proctoring Juval Lowy's Instructor Led Lab (ILL) on Generics (DEV20/DEV20R)
&lt;/p&gt;
&lt;p&gt;
9:00 - 10:00 PM - Preparing for Indigo Birds of a Feather (BoF) given by Juval
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Wednesday 8 June:&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
8:30 AM-11:30 AM- proctoring Michele Leroux Bustamante's ILL on Iterators (DEV23/DEV23R)
&lt;/p&gt;
&lt;p&gt;
7:00-11:00 PM Influencer Party
&lt;/p&gt;
&lt;p&gt;
9:00-10:00PM &lt;strong&gt;&lt;em&gt;Leading&amp;nbsp;BoF session on Smart Client Deployment (BOF051)&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Thursday 9 June:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
3:15 - 6:15 PM - &lt;strong&gt;&lt;em&gt;Giving System.Transactions ILL (DEV 22/22R)&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Friday 10 June:
&lt;/p&gt;
&lt;p&gt;
10:15 AM -12:00 PM - Answering Q&amp;amp;A questions through LiveMeeting for Juval Lowy's
Simulcast session Being More Productive with the .NET Framework (DEV325)
&lt;/p&gt;
&lt;p&gt;
1:00 - 2:15 PM - &lt;strong&gt;&lt;em&gt;Presenting CLI440 Smart Client Offline Data Caching and
Synchronization&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Those are just the items that warrant an unchallenged block on my calendar. There
are a ton of other events mixed in there as well to keep the week packed. I also need
to get some more work done on my book this week getting the second half of the book
up to date with Beta 2 and ready for Tech review, and also want to try to blog a few
technical posts about stuff I am working on. Hmm, when is thattime expansion device
going to be on the market??
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=e32c038f-74aa-4851-a334-c43916a9ea67" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,e32c038f-74aa-4851-a334-c43916a9ea67.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=21750bf8-0a00-4fbf-80b9-6d5f86342a4d</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,21750bf8-0a00-4fbf-80b9-6d5f86342a4d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,21750bf8-0a00-4fbf-80b9-6d5f86342a4d.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=21750bf8-0a00-4fbf-80b9-6d5f86342a4d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave 4 sessions at the Software Developers Conference 2005 in Arnhem, Netherlands
yesterday and today. Great little conference and a lot of fun to get to speak at. 
</p>
        <p>
Here are the slides and demos from the sessions:
</p>
        <p>
Smart Client Offline Data Caching and Synchronization:  <a href="http://www.softinsight.com/downloads/SDC2005/SmartClientOfflineDataCachingandSynchronization.pdf">slides</a>   <a href="http://www.softinsight.com/downloads/SDC2005/SmartClientOfflineDemos.zip">demos</a></p>
        <p>
Extending ASP.NET with Custom Handlers and Modules:  <a href="http://www.softinsight.com/downloads/SDC2005/ExtendingASPNET.pdf">slides</a>   <a href="http://www.softinsight.com/downloads/SDC2005/ExtendingASPNETDemos.zip">demos</a></p>
        <p>
Smart Client Communications with the Middle Tier: <a href="http://www.softinsight.com/downloads/SDC2005/SmartClientCommunicationswiththeMiddleTier.pdf">slides</a>   <a href="http://www.softinsight.com/downloads/SDC2005/SmartClientCommunicationswiththeMiddleTier_Demos.zip">demos</a></p>
        <p>
Tackle Complex Data Binding with Windows Forms 2.0:  <a href="http://www.softinsight.com/downloads/SDC2005/TackleComplexDataBindinginWindowsForms20.pdf">slides</a>   <a href="http://www.softinsight.com/downloads/SDC2005/TackleComplexDataBindinginWindowsForms20.zip">demos</a></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=21750bf8-0a00-4fbf-80b9-6d5f86342a4d" />
      </body>
      <title>Slides and Demos from SDC 2005 Netherlands</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,21750bf8-0a00-4fbf-80b9-6d5f86342a4d.aspx</guid>
      <link>http://briannoyes.net/2005/05/31/SlidesAndDemosFromSDC2005Netherlands.aspx</link>
      <pubDate>Tue, 31 May 2005 10:49:47 GMT</pubDate>
      <description>&lt;p&gt;
I gave 4 sessions at the Software Developers Conference 2005 in Arnhem, Netherlands
yesterday and today. Great little conference and a lot of fun to get to speak at. 
&lt;/p&gt;
&lt;p&gt;
Here are the slides and demos from the sessions:
&lt;/p&gt;
&lt;p&gt;
Smart Client Offline Data Caching and Synchronization:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/SDC2005/SmartClientOfflineDataCachingandSynchronization.pdf"&gt;slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/SDC2005/SmartClientOfflineDemos.zip"&gt;demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Extending ASP.NET with Custom Handlers and Modules:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/SDC2005/ExtendingASPNET.pdf"&gt;slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/SDC2005/ExtendingASPNETDemos.zip"&gt;demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Smart Client Communications with the Middle Tier: &lt;a href="http://www.softinsight.com/downloads/SDC2005/SmartClientCommunicationswiththeMiddleTier.pdf"&gt;slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/SDC2005/SmartClientCommunicationswiththeMiddleTier_Demos.zip"&gt;demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Tackle Complex Data Binding with Windows Forms 2.0:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/SDC2005/TackleComplexDataBindinginWindowsForms20.pdf"&gt;slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/SDC2005/TackleComplexDataBindinginWindowsForms20.zip"&gt;demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=21750bf8-0a00-4fbf-80b9-6d5f86342a4d" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,21750bf8-0a00-4fbf-80b9-6d5f86342a4d.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=e9de78d5-1e41-48d5-bbc9-f6863d3b0759</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,e9de78d5-1e41-48d5-bbc9-f6863d3b0759.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,e9de78d5-1e41-48d5-bbc9-f6863d3b0759.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e9de78d5-1e41-48d5-bbc9-f6863d3b0759</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My article on Configuring ClickOnce Trusted Publishers went live this week on the
Smart Client Developer Center on MSDN Online:
</p>
        <p>
          <a href="http://www.msdn.microsoft.com/smartclient/default.aspx?pull=/library/en-us/dnwinforms/html/clickoncetrustpub.asp">http://www.msdn.microsoft.com/smartclient/default.aspx?pull=/library/en-us/dnwinforms/html/clickoncetrustpub.asp</a>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=e9de78d5-1e41-48d5-bbc9-f6863d3b0759" />
      </body>
      <title>Configuring ClickOnce Trusted Publishers Article up</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,e9de78d5-1e41-48d5-bbc9-f6863d3b0759.aspx</guid>
      <link>http://briannoyes.net/2005/05/01/ConfiguringClickOnceTrustedPublishersArticleUp.aspx</link>
      <pubDate>Sun, 01 May 2005 20:00:50 GMT</pubDate>
      <description>&lt;p&gt;
My article on Configuring ClickOnce Trusted Publishers went live this week on the
Smart Client Developer Center on MSDN Online:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.msdn.microsoft.com/smartclient/default.aspx?pull=/library/en-us/dnwinforms/html/clickoncetrustpub.asp"&gt;http://www.msdn.microsoft.com/smartclient/default.aspx?pull=/library/en-us/dnwinforms/html/clickoncetrustpub.asp&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=e9de78d5-1e41-48d5-bbc9-f6863d3b0759" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,e9de78d5-1e41-48d5-bbc9-f6863d3b0759.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=fe092e5e-760a-41dc-91f7-a66eefb2ec98</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,fe092e5e-760a-41dc-91f7-a66eefb2ec98.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,fe092e5e-760a-41dc-91f7-a66eefb2ec98.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=fe092e5e-760a-41dc-91f7-a66eefb2ec98</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you attended my sessions today at Visual Studio Connections in Orlando, thanks!
It was a lot of fun. 
</p>
        <p>
 
</p>
        <p>
Here are links to the slides and demos for each session:
</p>
        <p>
Smart Client Communications with the middle tier: <a href="http://www.softinsight.com/downloads/SmartClientCommunications.pdf">Slides</a>     <a href="http://www.softinsight.com/downloads/SmartClientCommunicationsDemos.zip">Demos</a></p>
        <p>
Smart Client Offline Data Caching and Synchronization: <a href="http://www.softinsight.com/downloads/SmartClientOfflineData.pdf">Slides</a>      <a href="http://www.softinsight.com/downloads/SmartClientOfflineDataDemos.zip">Demos</a></p>
        <p>
Enjoy!
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=fe092e5e-760a-41dc-91f7-a66eefb2ec98" />
      </body>
      <title>Smart Client slides and demos from VS Connections sessions today</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,fe092e5e-760a-41dc-91f7-a66eefb2ec98.aspx</guid>
      <link>http://briannoyes.net/2005/03/22/SmartClientSlidesAndDemosFromVSConnectionsSessionsToday.aspx</link>
      <pubDate>Tue, 22 Mar 2005 23:59:32 GMT</pubDate>
      <description>&lt;p&gt;
If you attended my sessions today at Visual Studio Connections in Orlando, thanks!
It was a lot of fun. 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Here are links to the slides and demos for each session:
&lt;/p&gt;
&lt;p&gt;
Smart Client Communications with the middle tier: &lt;a href="http://www.softinsight.com/downloads/SmartClientCommunications.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/SmartClientCommunicationsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Smart Client Offline Data Caching and Synchronization: &lt;a href="http://www.softinsight.com/downloads/SmartClientOfflineData.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/SmartClientOfflineDataDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=fe092e5e-760a-41dc-91f7-a66eefb2ec98" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,fe092e5e-760a-41dc-91f7-a66eefb2ec98.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=edb8fcec-8c68-4968-8415-46573843b08e</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,edb8fcec-8c68-4968-8415-46573843b08e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,edb8fcec-8c68-4968-8415-46573843b08e.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=edb8fcec-8c68-4968-8415-46573843b08e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm doing a lot of talks at various conferences, user groups, and code camps over
the next few months, mostly on smart client topics. Here is the line up:
</p>
        <p>
Visual Studio Connections - 20-24 March - Orlando, FL:<br /><a href="http://www.vsconnections.com">http://www.vsconnections.com</a><br />
Smart Client Offline Data Caching and Synchronization<br />
Smart Client Communications with the Middle Tier<br />
Secure Smart Client Deployment with ClickOnce<br />
Advanced .NET Fundamentals Full Day Tutorial
</p>
        <p>
Philly .NET Code Camp - 23-24 April - Philidelphia, PA<br /><a href="http://www.phillydotnet.org/Default.aspx?alias=www.phillydotnet.org/codecamp">http://www.phillydotnet.org/Default.aspx?alias=www.phillydotnet.org/codecamp</a><br />
Smart Client Offline Data Caching and Synchronization<br />
Secure Smart Client Deployments with ClickOnce<br />
Tackle Complex Data Binding with Windows Forms 2.0<br />
Present Rich Data Interfaces with the DataGridView Control
</p>
        <p>
Tulsa .NET Users Group - 25 April - Tulsa OK<br /><a href="http://www.tulsadnug.org/DesktopDefault.aspx">http://www.tulsadnug.org/DesktopDefault.aspx</a><br />
Tackle Complex Data Binding in Windows Forms 2.0
</p>
        <p>
Mid-Atlantic MSDN Code Camp - 7 May - Reston VA<br /><a href="http://blogs.msdn.com/gduthie/articles/383561.aspx">http://blogs.msdn.com/gduthie/articles/383561.aspx</a><br />
Secure Smart Client Deployment with ClickOnce<br />
Smart Client Offline Data Caching and Synchronization<br />
Microsoft Application Blocks Chalk Talk
</p>
        <p>
Software Developers Conference - 30-31 May - Arnhem Netherlands<br /><a href="http://www.sdc.nl/default.asp@a1pid=12338pdwl&amp;a1sid=29101225200420.htm">http://www.sdc.nl/default.asp@a1pid=12338pdwl&amp;a1sid=29101225200420.htm</a><br />
Smart Client Offline Data Caching and Synchronization<br />
Smart Client Communications with the Middle Tier<br />
Tackle Complex Data Binding with Windows Forms 2.0<br />
Extending ASP.NET with Custom Handlers and Modules
</p>
        <p>
Microsoft TechEd - 5-10 June - Orlando, FL<br /><a href="http://www.microsoft.com/teched">http://www.microsoft.com/teched</a><br />
Smart Client Offline Data Caching and Synchronization
</p>
        <p>
DevTeach - 19-21 June - Montreal Canada<br /><a href="http://www.devteach.com">http://www.devteach.com</a><br />
Secure Smart Client Deployments with ClickOnce<br />
Tackle Complex Data Binding in Windows Forms 2.0<br />
Extending ASP.NET with Custom Handlers and Modules
</p>
        <p>
          <br />
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=edb8fcec-8c68-4968-8415-46573843b08e" />
      </body>
      <title>Upcoming speaking schedule - VSConnections, TechEd US, DevTeach, SDC Netherlands and more</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,edb8fcec-8c68-4968-8415-46573843b08e.aspx</guid>
      <link>http://briannoyes.net/2005/03/20/UpcomingSpeakingScheduleVSConnectionsTechEdUSDevTeachSDCNetherlandsAndMore.aspx</link>
      <pubDate>Sun, 20 Mar 2005 20:38:06 GMT</pubDate>
      <description>&lt;p&gt;
I'm doing a lot of talks at various conferences, user groups, and code camps over
the next few months, mostly on smart client topics. Here is the line up:
&lt;/p&gt;
&lt;p&gt;
Visual Studio Connections - 20-24 March - Orlando, FL:&lt;br&gt;
&lt;a href="http://www.vsconnections.com"&gt;http://www.vsconnections.com&lt;/a&gt;
&lt;br&gt;
Smart Client Offline Data Caching and Synchronization&lt;br&gt;
Smart Client Communications with the Middle Tier&lt;br&gt;
Secure Smart Client Deployment with ClickOnce&lt;br&gt;
Advanced .NET Fundamentals Full Day Tutorial
&lt;/p&gt;
&lt;p&gt;
Philly .NET Code Camp - 23-24 April - Philidelphia, PA&lt;br&gt;
&lt;a href="http://www.phillydotnet.org/Default.aspx?alias=www.phillydotnet.org/codecamp"&gt;http://www.phillydotnet.org/Default.aspx?alias=www.phillydotnet.org/codecamp&lt;/a&gt;
&lt;br&gt;
Smart Client Offline Data Caching and Synchronization&lt;br&gt;
Secure Smart Client Deployments with ClickOnce&lt;br&gt;
Tackle Complex Data Binding with Windows Forms 2.0&lt;br&gt;
Present Rich Data Interfaces with the DataGridView Control
&lt;/p&gt;
&lt;p&gt;
Tulsa .NET Users Group - 25 April - Tulsa OK&lt;br&gt;
&lt;a href="http://www.tulsadnug.org/DesktopDefault.aspx"&gt;http://www.tulsadnug.org/DesktopDefault.aspx&lt;/a&gt;
&lt;br&gt;
Tackle Complex Data Binding in Windows Forms 2.0
&lt;/p&gt;
&lt;p&gt;
Mid-Atlantic MSDN Code Camp - 7 May - Reston VA&lt;br&gt;
&lt;a href="http://blogs.msdn.com/gduthie/articles/383561.aspx"&gt;http://blogs.msdn.com/gduthie/articles/383561.aspx&lt;/a&gt;
&lt;br&gt;
Secure Smart Client Deployment with ClickOnce&lt;br&gt;
Smart Client Offline Data Caching and Synchronization&lt;br&gt;
Microsoft Application Blocks Chalk Talk
&lt;/p&gt;
&lt;p&gt;
Software Developers Conference - 30-31 May - Arnhem Netherlands&lt;br&gt;
&lt;a href="http://www.sdc.nl/default.asp@a1pid=12338pdwl&amp;amp;a1sid=29101225200420.htm"&gt;http://www.sdc.nl/default.asp@a1pid=12338pdwl&amp;amp;a1sid=29101225200420.htm&lt;/a&gt;
&lt;br&gt;
Smart Client Offline Data Caching and Synchronization&lt;br&gt;
Smart Client Communications with the Middle Tier&lt;br&gt;
Tackle Complex Data Binding with Windows Forms 2.0&lt;br&gt;
Extending ASP.NET with Custom Handlers and Modules
&lt;/p&gt;
&lt;p&gt;
Microsoft TechEd - 5-10 June - Orlando, FL&lt;br&gt;
&lt;a href="http://www.microsoft.com/teched"&gt;http://www.microsoft.com/teched&lt;/a&gt;
&lt;br&gt;
Smart Client Offline Data Caching and Synchronization
&lt;/p&gt;
&lt;p&gt;
DevTeach - 19-21 June - Montreal Canada&lt;br&gt;
&lt;a href="http://www.devteach.com"&gt;http://www.devteach.com&lt;/a&gt;
&lt;br&gt;
Secure Smart Client Deployments with ClickOnce&lt;br&gt;
Tackle Complex Data Binding in Windows Forms 2.0&lt;br&gt;
Extending ASP.NET with Custom Handlers and Modules
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=edb8fcec-8c68-4968-8415-46573843b08e" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,edb8fcec-8c68-4968-8415-46573843b08e.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=d416a240-1b53-4c5b-a848-e03716109395</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,d416a240-1b53-4c5b-a848-e03716109395.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,d416a240-1b53-4c5b-a848-e03716109395.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d416a240-1b53-4c5b-a848-e03716109395</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://weblogs.asp.net/rosherove/">Roy</a> attended a week of our IDesign <a href="http://www.idesign.net/idesign/links/classes/advanced.aspx">Advanced
.NET Master Class </a>last week, taught (and authored) by Juval Lowy, which includes
a module on our recommended approach to software development process. <a href="http://weblogs.asp.net/rosherove/">Roy</a> did
a great job summarizing the key points <a href="http://weblogs.asp.net/rosherove/articles/StagedDelivery.aspx">in
his article here</a>, but seemed to have picked up a little too strong of a tone on
certain points than was intended, based on my knowledge of the material (from being
an instructor for the class myself) and from discussions with Juval.
</p>
        <p>
Specifically, in the section of his article where he talks about the differences between
our process and Agile, <a href="http://weblogs.asp.net/rosherove/">Roy</a> talks about
the ~30% effort dedicated to architecture and makes it sound like we are recommending
a big-bang, all up front, try to think of everything to do with the product before
doing any construction (aka waterfall), which is not what is intended. The ~30% effort
dedicated to architecture and design is in fact done up front - but done up front
for each stage of the product development, which distributes that effort fairly evenly
across the product development lifecycle. It is one initial up front architecture
piece, where you decide on the overall architecture of the system, what the major
subsystems and components will be along with their interactions, security boundaries,
transactions, identities, packaging, and so on, and then a bunch of smaller architecture
and design pieces associated with the specific requirements for each component or
subsystem in each stage of the development.
</p>
        <p>
What we don't subscribe to is the concept that you can just sit down at a keyboard
and start coding and come up with a coherent design for a large scale enterprise system
as you go without some up front architecture and design work. We also believe that
a majority of coders do not have the experience or big picture about the product for
larger systems to be making all the design decisions themselves, thus the need for
a dedicated architect who makes those architecture and design decisions throughout
the development (with input from the team of course).
</p>
        <p>
Another point I wanted to clarify is the use of test clients. I am not a true believer
(yet) in full blown TDD, mainly because of the disconnect between our approach to
actually doing some design and documentation before coding, at which point the benefit
of writing tests before code becomes limited. But we definitely push that you should
have tests for everything, preferably written in a way that you can automate the execution
of those test, at a minimum the smoke test portion of them. Those test should be written
and run by the developer, and can be used by QA for their testing as well. As
such NUnit style tests are perfectly acceptable for component based testing of business
logic and data access components, but some things really need a UI to test them, so
for those we use simple UI test clients (typically WinForms). If you have not yet
adopted NUnit testing and don't want to add that to your list of technologies to conquer,
then you can write your tests how ever you like (such as all little WinForms and console
test clients), but you should do so in a way that is not just total throw away.
</p>
        <p>
Other than those minor points, I thought Roy's article did a great job of summarizing
what I know Juval taught in the class.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=d416a240-1b53-4c5b-a848-e03716109395" />
      </body>
      <title>Comparing the IDesign process with Agile</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,d416a240-1b53-4c5b-a848-e03716109395.aspx</guid>
      <link>http://briannoyes.net/2005/01/02/ComparingTheIDesignProcessWithAgile.aspx</link>
      <pubDate>Sun, 02 Jan 2005 18:59:17 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://weblogs.asp.net/rosherove/"&gt;Roy&lt;/a&gt; attended a week of our IDesign &lt;a href="http://www.idesign.net/idesign/links/classes/advanced.aspx"&gt;Advanced
.NET Master Class &lt;/a&gt;last week, taught (and authored) by Juval Lowy, which includes
a module on our recommended approach to software development process. &lt;a href="http://weblogs.asp.net/rosherove/"&gt;Roy&lt;/a&gt; did
a great job summarizing the key points &lt;a href="http://weblogs.asp.net/rosherove/articles/StagedDelivery.aspx"&gt;in
his article here&lt;/a&gt;, but seemed to have picked up a little too strong of a tone on
certain points than was intended, based on my knowledge of the material (from being
an instructor for the class myself) and from discussions with Juval.
&lt;/p&gt;
&lt;p&gt;
Specifically, in the section of his article where he talks about the differences between
our process and Agile, &lt;a href="http://weblogs.asp.net/rosherove/"&gt;Roy&lt;/a&gt; talks about
the ~30% effort dedicated to architecture and makes it sound like we are recommending
a big-bang, all up front, try to think of everything to do with the product before
doing any construction (aka waterfall), which is not what is intended. The ~30% effort
dedicated to architecture and design is in fact done up front - but done up front
for each stage of the product development, which distributes that effort fairly evenly
across the product development lifecycle. It is one initial up front architecture
piece, where you decide on the overall architecture of the system, what the major
subsystems and components will be along with their interactions, security boundaries,
transactions, identities, packaging, and so on, and then a bunch of smaller architecture
and design pieces associated with the specific requirements for each component or
subsystem in each stage of the development.
&lt;/p&gt;
&lt;p&gt;
What we don't subscribe to is the concept that you can just sit down at a keyboard
and start coding and come up with a coherent design for a large scale enterprise system
as you go without some up front architecture and design work. We also believe that
a majority of coders do not have the experience or big picture about the product for
larger systems to be making all the design decisions themselves, thus the need for
a dedicated architect who makes those architecture and design decisions throughout
the development (with input from the team of course).
&lt;/p&gt;
&lt;p&gt;
Another point I wanted to clarify is the use of test clients. I am not a true believer
(yet) in full blown TDD, mainly because of the disconnect between our approach to
actually doing some design and documentation before coding, at which point the benefit
of writing tests before code becomes limited. But we definitely push that you should
have tests for everything, preferably written in a way that you can automate the execution
of those test, at a minimum the smoke test portion of them. Those test should be written
and run by the developer, and can&amp;nbsp;be used by QA for their testing as well. As
such NUnit style tests are perfectly acceptable for component based testing of business
logic and data access components, but some things really need a UI to test them, so
for those we use simple UI test clients (typically WinForms). If you have not yet
adopted NUnit testing and don't want to add that to your list of technologies to conquer,
then you can write your tests how ever you like (such as all little WinForms and console
test clients), but you should do so in a way that is not just total throw away.
&lt;/p&gt;
&lt;p&gt;
Other than those minor points, I thought Roy's article did a great job of summarizing
what I know Juval taught in the class.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=d416a240-1b53-4c5b-a848-e03716109395" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,d416a240-1b53-4c5b-a848-e03716109395.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Community</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=e42f2619-1e11-4dc5-bab4-2893b5e5d3a9</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,e42f2619-1e11-4dc5-bab4-2893b5e5d3a9.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,e42f2619-1e11-4dc5-bab4-2893b5e5d3a9.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e42f2619-1e11-4dc5-bab4-2893b5e5d3a9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://blogs.msdn.com/jaybaz_ms/archive/2004/12/23/331474.aspx">JayBaz has
a great little post </a>regarding the compulsive obsession of many programmers about
worrying about micro performance differences instead of writing clean code. Similar
sentiments to my thoughts on <a href="http://www.softinsight.com/bnoyes/PermaLink.aspx?guid=234dcff4-5bc7-4a9b-8434-4e06b47eb09c">Generics
performance </a>and <a href="http://www.softinsight.com/bnoyes/PermaLink.aspx?guid=35d18c9e-f8cc-4f03-aa1e-3ffc0eada041">performance
in general</a>.
</p>
        <p>
Keep in mind this is a guy who used to be on the compiler team and REALLY knows the
difference in performance of various statements down at the IL level.
</p>
        <p>
(Depending on how soon you read this, you may not be able to get to the post - blogs.msdn.com
is down right now. Thank you RSS + Newsgator :) )
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=e42f2619-1e11-4dc5-bab4-2893b5e5d3a9" />
      </body>
      <title>Amen JayBaz!</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,e42f2619-1e11-4dc5-bab4-2893b5e5d3a9.aspx</guid>
      <link>http://briannoyes.net/2004/12/28/AmenJayBaz.aspx</link>
      <pubDate>Tue, 28 Dec 2004 11:14:31 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://blogs.msdn.com/jaybaz_ms/archive/2004/12/23/331474.aspx"&gt;JayBaz has
a great little post &lt;/a&gt;regarding the compulsive obsession of many programmers about
worrying about micro performance differences instead of writing clean code. Similar
sentiments to my thoughts on &lt;a href="http://www.softinsight.com/bnoyes/PermaLink.aspx?guid=234dcff4-5bc7-4a9b-8434-4e06b47eb09c"&gt;Generics
performance &lt;/a&gt;and &lt;a href="http://www.softinsight.com/bnoyes/PermaLink.aspx?guid=35d18c9e-f8cc-4f03-aa1e-3ffc0eada041"&gt;performance
in general&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Keep in mind this is a guy who used to be on the compiler team and REALLY knows the
difference in performance of various statements down at the IL level.
&lt;/p&gt;
&lt;p&gt;
(Depending on how soon you read this, you may not be able to get to the post - blogs.msdn.com
is down right now. Thank you RSS + Newsgator :) )
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=e42f2619-1e11-4dc5-bab4-2893b5e5d3a9" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,e42f2619-1e11-4dc5-bab4-2893b5e5d3a9.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=234dcff4-5bc7-4a9b-8434-4e06b47eb09c</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,234dcff4-5bc7-4a9b-8434-4e06b47eb09c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,234dcff4-5bc7-4a9b-8434-4e06b47eb09c.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=234dcff4-5bc7-4a9b-8434-4e06b47eb09c</wfw:commentRss>
      <title>Generics performance concerns? Don't sweat it!</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,234dcff4-5bc7-4a9b-8434-4e06b47eb09c.aspx</guid>
      <link>http://briannoyes.net/2004/11/17/GenericsPerformanceConcernsDontSweatIt.aspx</link>
      <pubDate>Wed, 17 Nov 2004 14:06:47 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://dotnetjunkies.com/WebLog/sahilmalik/archive/2004/11/14/32170.aspx"&gt;Sahil
points to &lt;/a&gt;the &lt;a href="http://lab.msdn.microsoft.com/productfeedback/viewFeedback.aspx?feedbackid=ee76a341-b5f2-4b45-a6f8-a0c3dc669a52"&gt;#2
bug report &lt;/a&gt;on the MSDN Product Feedback center regarding concerns over the performance
of generics. My feelings on this pretty much echo an &lt;a href="http://www.softinsight.com/bnoyes/PermaLink.aspx?guid=35d18c9e-f8cc-4f03-aa1e-3ffc0eada041"&gt;earlier
post I made &lt;/a&gt;about performance in general.
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;Who
cares if generics are 1000 or 10000 times slower (which I don&amp;#8217;t believe &amp;#8211;
it might be for first call while the type is dynamically generated and compiled if
necessary, but after that the difference should be small)? What matters is whether
the performance of your application as a whole&amp;nbsp;is sufficient and meets your specifications.
People make this mistake all the time, worrying about the overhead of every instruction,
when the real performance of whole applications is usually determined by network/file/database
I/O or particular computational processes. That is where you worry about performance
&amp;#8211; at the places where you have identified through measurement that it needs
to be addressed. Everywhere else, do what makes the most sense for maintainable code
&amp;#8211; and the type safety and reduction of repetitive code declarations provided
by generics are huge from that perspective.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Bottom line is that
even if it is 1000 times slower across the board , I don&amp;#8217;t believe that will
have a significant impact on the overall performance of most apps that will use generics.
You also have to be very careful about making claims like this without substantiating
them with actual measurements and the situations under which the measurement was performed.
I bet I can set up a loop with a generic collection and an untyped collection of value
types where the generic collection would beat the pants off the non-generic collection
due to all the boxing/unboxing that has to occur getting those value types in and
out through object references. Does that mean that generics are XX times faster than
non-generics? No, it means that in one particular scenario (which is probably an immeasurable
fraction of the overall computing time of the application) there is a measurable benefit
of using one approach over another.&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"&gt;Bottom line: Generics&amp;nbsp;have
huge benefit. You should plan to use them anywhere you want type safety and don't
want to reinvent the wheel. If you have implemented something with them and have MEASURED
that to be a bottleneck for performance in your application, then optimize that code...
possibly removing the generics. But please people don't start preaching that it is
a &amp;#8220;best practice&amp;#8220; not to use generics because of &amp;#8220;performance&amp;#8220;.
Ugh.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=234dcff4-5bc7-4a9b-8434-4e06b47eb09c" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,234dcff4-5bc7-4a9b-8434-4e06b47eb09c.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=606d6ea0-f808-4a72-9ff0-3ef4c371e42c</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,606d6ea0-f808-4a72-9ff0-3ef4c371e42c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,606d6ea0-f808-4a72-9ff0-3ef4c371e42c.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=606d6ea0-f808-4a72-9ff0-3ef4c371e42c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here are the slides and demos from today's sessions:
</p>
        <p>
          <a href="http://www.softinsight.com/downloads/VSC_SmartClientDisconnectedData.pdf">Smart
Client Disconnected Data slides</a>
        </p>
        <p>
          <a href="http://www.softinsight.com/downloads/VSC_PatientData.zip">Smart Client Disconnected
Data slides</a>
        </p>
        <p>
          <a href="http://www.softinsight.com/downloads/VSC_ClickOnce.pdf">ClickOnce Deployment
slides</a>
        </p>
        <p>
          <a href="http://www.softinsight.com/downloads/VSC_ClickOnce.zip">ClickOnce Deployment
demos</a>
        </p>
        <p>
          <a href="http://www.softinsight.com/downloads/VSC_Deployment.pdf">Intro to .NET Deployment
slides</a>
        </p>
        <p>
          <a href="http://www.softinsight.com/downloads/VSC_Deployment.zip">Intro to .NET Deployment
demos</a>
        </p>
        <p>
Enjoy!
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=606d6ea0-f808-4a72-9ff0-3ef4c371e42c" />
      </body>
      <title>VS Connections Slides and Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,606d6ea0-f808-4a72-9ff0-3ef4c371e42c.aspx</guid>
      <link>http://briannoyes.net/2004/11/10/VSConnectionsSlidesAndDemos.aspx</link>
      <pubDate>Wed, 10 Nov 2004 21:37:09 GMT</pubDate>
      <description>&lt;p&gt;
Here are the slides and demos from today's sessions:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/VSC_SmartClientDisconnectedData.pdf"&gt;Smart
Client Disconnected Data slides&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/VSC_PatientData.zip"&gt;Smart Client Disconnected
Data slides&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/VSC_ClickOnce.pdf"&gt;ClickOnce Deployment
slides&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/VSC_ClickOnce.zip"&gt;ClickOnce Deployment
demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/VSC_Deployment.pdf"&gt;Intro to .NET Deployment
slides&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/VSC_Deployment.zip"&gt;Intro to .NET Deployment
demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=606d6ea0-f808-4a72-9ff0-3ef4c371e42c" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,606d6ea0-f808-4a72-9ff0-3ef4c371e42c.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=5ee0b458-9522-4258-b6c9-e9d4191f0e08</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,5ee0b458-9522-4258-b6c9-e9d4191f0e08.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,5ee0b458-9522-4258-b6c9-e9d4191f0e08.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5ee0b458-9522-4258-b6c9-e9d4191f0e08</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.softinsight.com/downloads/SimpleTimeTracker.zip">Here are the
demos</a> I gave in today's session on Smart Client Communications with the middle
tier.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5ee0b458-9522-4258-b6c9-e9d4191f0e08" />
      </body>
      <title>Smart Client Communications demos from TechEd Malaysia today</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,5ee0b458-9522-4258-b6c9-e9d4191f0e08.aspx</guid>
      <link>http://briannoyes.net/2004/09/17/SmartClientCommunicationsDemosFromTechEdMalaysiaToday.aspx</link>
      <pubDate>Fri, 17 Sep 2004 04:49:31 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/SimpleTimeTracker.zip"&gt;Here are the
demos&lt;/a&gt; I gave in today's session on Smart Client Communications with the middle
tier.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5ee0b458-9522-4258-b6c9-e9d4191f0e08" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,5ee0b458-9522-4258-b6c9-e9d4191f0e08.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=70f22b5b-2e97-405a-9b0e-b27ad88dc381</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,70f22b5b-2e97-405a-9b0e-b27ad88dc381.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,70f22b5b-2e97-405a-9b0e-b27ad88dc381.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=70f22b5b-2e97-405a-9b0e-b27ad88dc381</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.softinsight.com/bnoyes/PermaLink.aspx?guid=40b3abd8-fc0f-4bb2-a092-6cc6532cd0d6">Look
here</a>
        </p>
        <p>
Thanks!
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=70f22b5b-2e97-405a-9b0e-b27ad88dc381" />
      </body>
      <title>UIP MSDN Webcast demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,70f22b5b-2e97-405a-9b0e-b27ad88dc381.aspx</guid>
      <link>http://briannoyes.net/2004/08/12/UIPMSDNWebcastDemos.aspx</link>
      <pubDate>Thu, 12 Aug 2004 21:46:16 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.softinsight.com/bnoyes/PermaLink.aspx?guid=40b3abd8-fc0f-4bb2-a092-6cc6532cd0d6"&gt;Look
here&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=70f22b5b-2e97-405a-9b0e-b27ad88dc381" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,70f22b5b-2e97-405a-9b0e-b27ad88dc381.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=312fc4ea-82ba-421b-b771-c05ed886b70a</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,312fc4ea-82ba-421b-b771-c05ed886b70a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,312fc4ea-82ba-421b-b771-c05ed886b70a.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=312fc4ea-82ba-421b-b771-c05ed886b70a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Version 2 of the UIP application block came out back in April, and included a lot
of new functionality. Unfortunately, they also broke one important capability in moving
from v1 to v2: the ability to pass in an set of initialization arguments to get a
task initialized. 
</p>
        <p>
In V1, there was an overload of the UIPManager.StartTask method that allowed you to
pass in an instance of a TaskArgumentsHolder object, which itself has a placeholder
TaskArguments object reference where you could stuff anything you needed to pass downstream
to the task that is being launched, such as user login info, command line or querystring
params, etc. 
</p>
        <p>
This disappeared in V2 with the move to multiple navigation models. However, the fix
is pretty straightforward to get that capability back - it just involves making a
minor tweak to the UIP library source code, which is not a problem since you get full
source code with the block.
</p>
        <p>
Basically, what you need to do is go into the Navigators folder within the UIP project,
and for each navigator type you want to support arguments on, you need to change the
visibility of the StartTask method that takes a TaskArgumentsHolder parameter from
private to either internal or public:
</p>
        <font size="2">
          <p>
public void StartTask(TaskArgumentsHolder holder) { ... }
</p>
          <p>
Then go into the UIPManager class, and add an overload for each of the StartXXTask
methods that takes a nav graph name and a TaskArgumentsHolder, and have it call the
appropriate StartTask on the appropriate navigator:
</p>
          <font size="2">
            <p>
public static void StartNavigationTask(string navGraph, TaskArgumentsHolder holder)
</p>
            <p>
{
</p>
            <p>
GraphNavigator navigator = new GraphNavigator(navGraph);
</p>
            <p>
navigator.StartTask(holder);
</p>
            <p>
}
</p>
            <p>
As soon as you do that, you are back in business. You can start a task and pass in
arguments with something like this:
</p>
            <p>
              <font face="Arial">TaskArgumentsHolder holder = new TaskArgumentsHolder(Guid.Empty,null,"startupargs");<br />
UIPManager.StartNavigationTask("StartupParams",holder);<br /></font>
            </p>
            <p>
              <font face="Arial">That's all there is to it.
</font>
            </p>
          </font>
        </font>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=312fc4ea-82ba-421b-b771-c05ed886b70a" />
      </body>
      <title>Passing Arguments when starting a task in UIP</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,312fc4ea-82ba-421b-b771-c05ed886b70a.aspx</guid>
      <link>http://briannoyes.net/2004/08/12/PassingArgumentsWhenStartingATaskInUIP.aspx</link>
      <pubDate>Thu, 12 Aug 2004 17:54:14 GMT</pubDate>
      <description>&lt;p&gt;
Version 2 of the UIP application block came out back in April, and included a lot
of new functionality. Unfortunately, they also broke one important capability in moving
from v1 to v2: the ability to pass in an set of initialization arguments to get a
task initialized. 
&lt;/p&gt;
&lt;p&gt;
In V1, there was an overload of the UIPManager.StartTask method that allowed you to
pass in an instance of a TaskArgumentsHolder object, which itself has a placeholder
TaskArguments object reference where you could stuff anything you needed to pass downstream
to the task that is being launched, such as user login info, command line or querystring
params, etc. 
&lt;/p&gt;
&lt;p&gt;
This disappeared in V2 with the move to multiple navigation models. However, the fix
is pretty straightforward to get that capability back - it just involves making a
minor tweak to the UIP library source code, which is not a problem since you get full
source code with the block.
&lt;/p&gt;
&lt;p&gt;
Basically, what you need to do is go into the Navigators folder within the UIP project,
and for each navigator type you want to support arguments on, you need to change the
visibility of the StartTask method that takes a TaskArgumentsHolder parameter from
private to either internal or public:
&lt;/p&gt;
&lt;font size=2&gt; 
&lt;p&gt;
public void StartTask(TaskArgumentsHolder holder) { ... }
&lt;/p&gt;
&lt;p&gt;
Then go into the UIPManager class, and add an overload for each of the StartXXTask
methods that takes a nav graph name and a TaskArgumentsHolder, and have it call the
appropriate StartTask on the appropriate navigator:
&lt;/p&gt;
&lt;font size=2&gt; 
&lt;p&gt;
public static void StartNavigationTask(string navGraph, TaskArgumentsHolder holder)
&lt;/p&gt;
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
GraphNavigator navigator = new GraphNavigator(navGraph);
&lt;/p&gt;
&lt;p&gt;
navigator.StartTask(holder);
&lt;/p&gt;
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
As soon as you do that, you are back in business. You can start a task and pass in
arguments with something like this:
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Arial&gt;TaskArgumentsHolder holder = new TaskArgumentsHolder(Guid.Empty,null,"startupargs");&lt;br&gt;
UIPManager.StartNavigationTask("StartupParams",holder);&lt;br&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Arial&gt;That's all there is to it.
&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&gt;&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=312fc4ea-82ba-421b-b771-c05ed886b70a" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,312fc4ea-82ba-421b-b771-c05ed886b70a.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=318c05ef-5baf-46ec-a9de-4d315a6a1212</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,318c05ef-5baf-46ec-a9de-4d315a6a1212.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,318c05ef-5baf-46ec-a9de-4d315a6a1212.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=318c05ef-5baf-46ec-a9de-4d315a6a1212</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Tune in to <a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032253016&amp;Culture=en-US">the
webcast </a>if you want to learn how to read/write config data from .config, XML files,
SQL Server, or the registry, encrypted or unencrypted.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=318c05ef-5baf-46ec-a9de-4d315a6a1212" />
      </body>
      <title>Webcast on the Configuration Management Application Block Monday</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,318c05ef-5baf-46ec-a9de-4d315a6a1212.aspx</guid>
      <link>http://briannoyes.net/2004/06/26/WebcastOnTheConfigurationManagementApplicationBlockMonday.aspx</link>
      <pubDate>Sat, 26 Jun 2004 21:25:08 GMT</pubDate>
      <description>&lt;p&gt;
Tune in to &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032253016&amp;amp;Culture=en-US"&gt;the
webcast &lt;/a&gt;if you want to learn how to read/write config data from .config, XML files,
SQL Server, or the registry, encrypted or unencrypted.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=318c05ef-5baf-46ec-a9de-4d315a6a1212" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,318c05ef-5baf-46ec-a9de-4d315a6a1212.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Community</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=75a905ea-e9d2-44be-85e4-f8da8faf5210</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,75a905ea-e9d2-44be-85e4-f8da8faf5210.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,75a905ea-e9d2-44be-85e4-f8da8faf5210.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=75a905ea-e9d2-44be-85e4-f8da8faf5210</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://weblogs.asp.net/rosherove/">Roy </a>had a <a href="http://weblogs.asp.net/rosherove/articles/dbunittesting.aspx?Pending=true">great
little epiphany </a>on using Enterprise Services for a test fixture base class. Great
use of ES and results in much cleaner test fixtures. 
</p>
        <p>
Nice job Roy!
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=75a905ea-e9d2-44be-85e4-f8da8faf5210" />
      </body>
      <title>Using Enterprise Services transaction for a TDD data access test base class</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,75a905ea-e9d2-44be-85e4-f8da8faf5210.aspx</guid>
      <link>http://briannoyes.net/2004/06/19/UsingEnterpriseServicesTransactionForATDDDataAccessTestBaseClass.aspx</link>
      <pubDate>Sat, 19 Jun 2004 22:44:11 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://weblogs.asp.net/rosherove/"&gt;Roy &lt;/a&gt;had a &lt;a href="http://weblogs.asp.net/rosherove/articles/dbunittesting.aspx?Pending=true"&gt;great
little epiphany &lt;/a&gt;on using Enterprise Services for a test fixture base class. Great
use of ES and results in much cleaner test fixtures. 
&lt;/p&gt;
&lt;p&gt;
Nice job Roy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=75a905ea-e9d2-44be-85e4-f8da8faf5210" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,75a905ea-e9d2-44be-85e4-f8da8faf5210.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=40b3abd8-fc0f-4bb2-a092-6cc6532cd0d6</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,40b3abd8-fc0f-4bb2-a092-6cc6532cd0d6.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,40b3abd8-fc0f-4bb2-a092-6cc6532cd0d6.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=40b3abd8-fc0f-4bb2-a092-6cc6532cd0d6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Hi All,
</p>
        <p>
For those of you who attended - thanks for sticking in there through the webcast server
problems. Glad we were able to get running 10 minutes late or so. We were literally
one minute from pulling the plug and declaring it a bust when the servers came back
up and you all started popping into the room.
</p>
        <p>
          <a href="http://www.softinsight.com/downloads/UIP.pdf">Here is a link </a>to a PDF
of the slides.
</p>
        <p>
          <a href="http://www.softinsight.com/downloads/uipcode.zip">Here is a link </a>to the
demos.
</p>
        <p>
Enjoy!
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=40b3abd8-fc0f-4bb2-a092-6cc6532cd0d6" />
      </body>
      <title>User Interface Process Application Block MSDN Webcast slides and demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,40b3abd8-fc0f-4bb2-a092-6cc6532cd0d6.aspx</guid>
      <link>http://briannoyes.net/2004/06/15/UserInterfaceProcessApplicationBlockMSDNWebcastSlidesAndDemos.aspx</link>
      <pubDate>Tue, 15 Jun 2004 21:55:11 GMT</pubDate>
      <description>&lt;p&gt;
Hi All,
&lt;/p&gt;
&lt;p&gt;
For those of you who attended - thanks for sticking in there through the webcast server
problems. Glad we were able to get running 10 minutes late or so. We were literally
one minute from pulling the plug and declaring it a bust when the servers came back
up and you all started popping into the room.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/UIP.pdf"&gt;Here is a link &lt;/a&gt;to a PDF
of the slides.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/downloads/uipcode.zip"&gt;Here is a link &lt;/a&gt;to the
demos.
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=40b3abd8-fc0f-4bb2-a092-6cc6532cd0d6" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,40b3abd8-fc0f-4bb2-a092-6cc6532cd0d6.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=ddca46ad-a850-409e-9396-076915ea4acd</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,ddca46ad-a850-409e-9396-076915ea4acd.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,ddca46ad-a850-409e-9396-076915ea4acd.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ddca46ad-a850-409e-9396-076915ea4acd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I led a Birds of a Feather session last night on the Microsoft Application Blocks
that was pretty well attended for being the last timeslot. Most of the people there
had not yet used any of the blocks, so it ended up being more of a Q&amp;A than a
discussion, but it still went well and was a lot of fun. 
</p>
        <p>
Today I attended a session by Wojtek Kozaczynski from the Patterns and Practices team
that puts out the blocks. Very good session on the future of the blocks that I wish
I had attended before my BoF. They are working on something they are calling the Application
Block Library that will be released towards the end of the year. This ties together
a number of the existing blocks such as data access, exception management, configuration
management, caching and more into a single library that is more consistent with the
architecture and interdependencies of the blocks. They are also going to add some
functionality to each, improve the documentation and samples to be more consistent
and well formatted, and will include an administrative tool that will plug into Visual
Studio 2003 and run as an external tool to ease the configuration and management of
the blocks through their underlying configuration settings. All very cool stuff.
</p>
        <p>
Bottom line message was to start using the blocks available today, don't wait for
the library, but for apps that get started next year you will have a will have a whole
new set of blocks to work with that will be even better.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=ddca46ad-a850-409e-9396-076915ea4acd" />
      </body>
      <title>Microsoft Application Block focus and evolution</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,ddca46ad-a850-409e-9396-076915ea4acd.aspx</guid>
      <link>http://briannoyes.net/2004/05/27/MicrosoftApplicationBlockFocusAndEvolution.aspx</link>
      <pubDate>Thu, 27 May 2004 01:29:26 GMT</pubDate>
      <description>&lt;p&gt;
I led a Birds of a Feather session last night on the Microsoft Application Blocks
that was pretty well attended for being the last timeslot. Most of the people there
had not yet used any of the blocks, so it ended up being more of a Q&amp;amp;A than a
discussion, but it still went well and was a lot of fun. 
&lt;/p&gt;
&lt;p&gt;
Today I attended a session by Wojtek Kozaczynski from the Patterns and Practices team
that puts out the blocks. Very good session on the future of the blocks that I wish
I had attended before my BoF. They are working on something they are calling the Application
Block Library that will be released towards the end of the year. This ties together
a number of the existing blocks such as data access, exception management, configuration
management, caching and more into a single library that is more consistent with the
architecture and interdependencies of the blocks. They are also going to add some
functionality to each, improve the documentation and samples to be more consistent
and well formatted, and will include an administrative tool that will plug into Visual
Studio 2003 and run as an external tool to ease the configuration and management of
the blocks through their underlying configuration settings. All very cool stuff.
&lt;/p&gt;
&lt;p&gt;
Bottom line message was to start using the blocks available today, don't wait for
the library, but for apps that get started next year you will have a will have a whole
new set of blocks to work with that will be even better.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=ddca46ad-a850-409e-9396-076915ea4acd" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,ddca46ad-a850-409e-9396-076915ea4acd.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=66f89ef9-ebc4-4077-a17f-4099010c9b4e</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,66f89ef9-ebc4-4077-a17f-4099010c9b4e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,66f89ef9-ebc4-4077-a17f-4099010c9b4e.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=66f89ef9-ebc4-4077-a17f-4099010c9b4e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Just sat in on a great session by Tim Huckaby on Architecting and Building Smart Client
apps in .NET. He showed a number of demos showing the differences between web apps
(even rich ones with DHTML to enhance the user experience), auto-deployed smart clients
with No Touch Deployment and the AppUpdater from gotdotnet, smart device apps, and
Visual Studio Tools for Office apps. If you didn't make this one, check it out on
the DVDs, Tim is always an awesome speaker.
</p>
        <p>
Sunday evening I sat in on Juval Lowy's smart client Birds of a Feather session. Good
lively discussion on the differences and justifications for moving to a smart client
and what the comparative strengths and weaknesses are.
</p>
        <p>
Right now in a session on handing occasionally disconnected client applications. keeping
data stored and synchronized with the back end when you do connect. 
</p>
        <p>
We have been talking about the merits of smart clients for some time now and steering
customers in that direction whenever it makes sense. It is great to see a focus on
these topics emerging at TechEd.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=66f89ef9-ebc4-4077-a17f-4099010c9b4e" />
      </body>
      <title>Smart client track at TechEd</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,66f89ef9-ebc4-4077-a17f-4099010c9b4e.aspx</guid>
      <link>http://briannoyes.net/2004/05/24/SmartClientTrackAtTechEd.aspx</link>
      <pubDate>Mon, 24 May 2004 22:29:00 GMT</pubDate>
      <description>&lt;p&gt;
Just sat in on a great session by Tim Huckaby on Architecting and Building Smart Client
apps in .NET. He showed a number of demos showing the differences between web apps
(even rich ones with DHTML to enhance the user experience), auto-deployed smart clients
with No Touch Deployment and the AppUpdater from gotdotnet, smart device apps, and
Visual Studio Tools for Office apps. If you didn't make this one, check it out on
the DVDs, Tim is always an awesome speaker.
&lt;/p&gt;
&lt;p&gt;
Sunday evening I sat in on Juval Lowy's smart client Birds of a Feather session. Good
lively discussion on the differences and justifications for moving to a smart client
and what the comparative strengths and weaknesses are.
&lt;/p&gt;
&lt;p&gt;
Right now in a session on handing occasionally disconnected client applications. keeping
data stored and synchronized with the back end when you do connect. 
&lt;/p&gt;
&lt;p&gt;
We have been talking about the merits of smart clients for some time now and steering
customers in that direction whenever it makes sense. It is great to see a focus on
these topics emerging at TechEd.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=66f89ef9-ebc4-4077-a17f-4099010c9b4e" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,66f89ef9-ebc4-4077-a17f-4099010c9b4e.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Community</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=8f354ec1-3762-48d0-a878-734f82f6ee9c</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,8f354ec1-3762-48d0-a878-734f82f6ee9c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,8f354ec1-3762-48d0-a878-734f82f6ee9c.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=8f354ec1-3762-48d0-a878-734f82f6ee9c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you are interested in learning about the future of auto-deployment of smart client
applications with .NET, specifically ClickOnce (a new deployment technology in .NET
2.0), and you are in the bay area, come check out my talk this Wed night at the Bay.NET
user group meeting. (<a href="http://www.baynetug.org">www.baynetug.org</a>). 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=8f354ec1-3762-48d0-a878-734f82f6ee9c" />
      </body>
      <title>ClickOnce - speaking at Bay.NET on Wed</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,8f354ec1-3762-48d0-a878-734f82f6ee9c.aspx</guid>
      <link>http://briannoyes.net/2004/05/18/ClickOnceSpeakingAtBayNETOnWed.aspx</link>
      <pubDate>Tue, 18 May 2004 00:01:08 GMT</pubDate>
      <description>&lt;p&gt;
If you are interested in learning about the future of auto-deployment of smart client
applications with .NET, specifically ClickOnce (a new deployment technology in .NET
2.0), and you are in the bay area, come check out my talk this Wed night at the Bay.NET
user group meeting. (&lt;a href="http://www.baynetug.org"&gt;www.baynetug.org&lt;/a&gt;). 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=8f354ec1-3762-48d0-a878-734f82f6ee9c" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,8f354ec1-3762-48d0-a878-734f82f6ee9c.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Community</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=af8e01e3-dfd7-4ac0-898c-5f29d45fd8cc</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,af8e01e3-dfd7-4ac0-898c-5f29d45fd8cc.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,af8e01e3-dfd7-4ac0-898c-5f29d45fd8cc.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=af8e01e3-dfd7-4ac0-898c-5f29d45fd8cc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I put together a custom authentication and authorization solution this week for a
customer that I wanted to share, both because it works pretty well, and also to see
if anyone can spot any gaping security holes in the approach that I didn't think of
before we go prime time with it. It is basically a way to mix ASP.NET Forms Authentication
with Windows Authentication and Authorization without requiring elevated privilege
on the ASPNET worker process account. The solution involves using an .NET Enterprise
Service (COM+) component to do the actual checks against the Windows accounts.
</p>
        <p>
The scenario is this. The customer has an ASP.NET web application with some unique
requirements regarding authentication and authorization. They need explicit control
over the login/logout process because they need to restrict session length and number
of concurrent logins for some accounts differently than others. They require that
the accounts being used for auth be Windows accounts, and that the auth decisions
are based on the Windows users and groups. They are also running on Win2K server.
They also need to support Linux clients running Mozilla. At least they made it an
easy scenario &lt;g&gt;.
</p>
        <p>
The need for the accounts to be Windows based makes Windows auth sound like the ticket,
but there was no way to satisfy the login/logout/session/concurrent login limitations
in the requirements because your code is pretty much out of the loop with the built
in Windows auth, so Forms auth sounds good. But then you have to use Windows account
information for the actual auth decisions. Fine, that is what the LogonUser API is
for. 
</p>
        <p>
Ah yes, but then there is that little hitch that they are running on Win2K, which
requires the SE_TCB_NAME (Act as part of operating system) privilege to call LogonUser,
which is not something you want to give to the ASPNET account if you want a secure
system. So what to do...?
</p>
        <p>
What I came up with was to create a .NET Enterprise Services component that runs in
a Server application. The application is configured to run under a special Windows
account that is just a normal user, but has the required SE_TCB_NAME privilege assigned
to be able to call LogonUser. The account is also configured so that interactive logins
are disallowed. The component exposes an Authenticate method that takes the credentials
and returns a bool indicating success or failure, and returns the token that LogonUser
gives you to represent the user.
</p>
        <p>
The ASP.NET app includes a custom principal class that encapsulates the user identity
provided by the login process through Forms authentication, and also holds onto the
user token returned after calling Authenticate on the ES component. I tried using
the token directly within the ASP.NET app to create a WindowsIndentity, but could
not get it to work because of the token coming from another process. So I added an
IsInRole method to the ES component that takes the desired role name and the user
token. This method uses the token to create a WindowsIdentity and WindowsPrincipal,
and calls IsInRole against that. The IsInRole method of the custom principal just
calls that corresponding method in the ES component, passing in the role and the user
token it cached after calling Authenticate. The user token is also stored in session
so that it can be used to recreate and set the custom principal on subsequent requests. 
</p>
        <p>
Using this approach, the login form just calls Authenticate, and if successful, stores
the user token in session and uses FormsAuthentication to issue the login session
cookie. In the PreRequestHandlerExecute event handler in the application class, the
custom principal is recreated and set as the principal on the context as long as the
request is authenticated (managed by Forms auth). Then the rest of the app can just
call IsInRole on the User property like normal, and the custom principal's implementation
of that gets called. This is also the place where all the unique session length/concurrent
sessions are enforced.
</p>
        <p>
Obviously going cross process on every request for role checks is not such a great
idea, so we also cache the authenticated roles after they have been checked once through
the ES component, and time out that cache using a configurable period so that if someone's
group membership has been changed and they are running a long session (the app has
a self-refresh status page), those changes will be picked up. 
</p>
        <p>
To add some additional security, we use COM+ role based security to make it so that
only the local machine ASPNET account can call into the component.
</p>
        <p>
It may sound a little complicated, and it was to get it all implemented and working
correctly the first time. But it has the advantage that it is very easy for the ASP.NET
app to integrate, makes the custom mechanisms being used transparent to the app other
than the call to Authenticate and the call to attach the custom principal. And the
security provided by ES gives a way to get the privileged role out of the ASPNET process.
We could have used a Windows Service to do this as well, but then we would need to
call into the service somehow and protect against unauthorized callers, and all that
is built into ES.
</p>
        <p>
Anyone see any holes here? Was there a better way to do this that escaped me?
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=af8e01e3-dfd7-4ac0-898c-5f29d45fd8cc" />
      </body>
      <title>Windows Authentication and Authorization using Forms Auth in ASP.NET with Enterprise Services</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,af8e01e3-dfd7-4ac0-898c-5f29d45fd8cc.aspx</guid>
      <link>http://briannoyes.net/2004/05/16/WindowsAuthenticationAndAuthorizationUsingFormsAuthInASPNETWithEnterpriseServices.aspx</link>
      <pubDate>Sun, 16 May 2004 16:40:45 GMT</pubDate>
      <description>&lt;p&gt;
I put together a custom authentication and authorization solution this week for a
customer that I wanted to share, both because it works pretty well, and also to see
if anyone can spot any gaping security holes in the approach that I didn't think of
before we go prime time with it. It is basically a way to mix ASP.NET Forms Authentication
with Windows Authentication and Authorization without requiring elevated privilege
on the ASPNET worker process account. The solution involves using an .NET Enterprise
Service (COM+) component to do the actual checks against the Windows accounts.
&lt;/p&gt;
&lt;p&gt;
The scenario is this. The customer has an ASP.NET web application with some unique
requirements regarding authentication and authorization. They need explicit control
over the login/logout process because they need to restrict session length and number
of concurrent logins for some accounts differently than others. They require that
the accounts being used for auth be Windows accounts, and that the auth decisions
are based on the Windows users and groups. They are also running on Win2K server.
They also need to support Linux clients running Mozilla. At least they made it an
easy scenario &amp;lt;g&amp;gt;.
&lt;/p&gt;
&lt;p&gt;
The need for the accounts to be Windows based makes Windows auth sound like the ticket,
but there was no way to satisfy the login/logout/session/concurrent login limitations
in the requirements because your code is pretty much out of the loop with the built
in Windows auth, so Forms auth sounds good. But then you have to use Windows account
information for the actual auth decisions. Fine, that is what the LogonUser API is
for. 
&lt;/p&gt;
&lt;p&gt;
Ah yes, but then there is that little hitch that they are running on Win2K, which
requires the SE_TCB_NAME (Act as part of operating system) privilege to call LogonUser,
which is not something you want to give to the ASPNET account if you want a secure
system. So what to do...?
&lt;/p&gt;
&lt;p&gt;
What I came up with was to create a .NET Enterprise Services component that runs in
a Server application. The application is configured to run under a special Windows
account that is just a normal user, but has the required SE_TCB_NAME privilege assigned
to be able to call LogonUser. The account is also configured so that interactive logins
are disallowed. The component exposes an Authenticate method that takes the credentials
and returns a bool indicating success or failure, and returns the token that LogonUser
gives you to represent the user.
&lt;/p&gt;
&lt;p&gt;
The ASP.NET app includes a custom principal class that encapsulates the user identity
provided by the login process through Forms authentication, and also holds onto the
user token returned after calling Authenticate on the ES component. I tried using
the token directly within the ASP.NET app to create a WindowsIndentity, but could
not get it to work because of the token coming from another process. So I added an
IsInRole method to the ES component that takes the desired role name and the user
token. This method uses the token to create a WindowsIdentity and WindowsPrincipal,
and calls IsInRole against that. The IsInRole method of the custom principal just
calls that corresponding method in the ES component, passing in the role and the user
token it cached after calling Authenticate. The user token is also stored in session
so that it can be used to recreate and set the custom principal on subsequent requests. 
&lt;/p&gt;
&lt;p&gt;
Using this approach, the login form just calls Authenticate, and if successful, stores
the user token in session and uses FormsAuthentication to issue the login session
cookie. In the PreRequestHandlerExecute event handler in the application class, the
custom principal is recreated and set as the principal on the context as long as the
request is authenticated (managed by Forms auth). Then the rest of the app can just
call IsInRole on the User property like normal, and the custom principal's implementation
of that gets called. This is also the place where all the unique session length/concurrent
sessions are enforced.
&lt;/p&gt;
&lt;p&gt;
Obviously going cross process on every request for role checks is not such a great
idea, so we also cache the authenticated roles after they have been checked once through
the ES component, and time out that cache using a configurable period so that if someone's
group membership has been changed and they are running a long session (the app has
a self-refresh status page), those changes will be picked up. 
&lt;/p&gt;
&lt;p&gt;
To add some additional security, we use COM+ role based security to make it so that
only the local machine ASPNET account can call into the component.
&lt;/p&gt;
&lt;p&gt;
It may sound a little complicated, and it was to get it all implemented and working
correctly the first time. But it has the advantage that it is very easy for the ASP.NET
app to integrate, makes the custom mechanisms being used transparent to the app other
than the call to Authenticate and the call to attach the custom principal. And the
security provided by ES gives a way to get the privileged role out of the ASPNET process.
We could have used a Windows Service to do this as well, but then we would need to
call into the service somehow and protect against unauthorized callers, and all that
is built into ES.
&lt;/p&gt;
&lt;p&gt;
Anyone see any holes here? Was there a better way to do this that escaped me?
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=af8e01e3-dfd7-4ac0-898c-5f29d45fd8cc" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,af8e01e3-dfd7-4ac0-898c-5f29d45fd8cc.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=4cefd3e8-7e8b-4df0-8d48-a5bc135b792d</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,4cefd3e8-7e8b-4df0-8d48-a5bc135b792d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,4cefd3e8-7e8b-4df0-8d48-a5bc135b792d.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4cefd3e8-7e8b-4df0-8d48-a5bc135b792d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am a firm believer in the use of component based development, and for the middle
tier, Enterprise Services is the right way to go for most serious applications. Unfortunately
there are a lot of misconceptions about the positioning of Enterprise Services, aka
Serviced Components, aka COM+ with respect to .NET development. The biggest of these
is viewing COM+ development with .NET as a legacy approach. Another is that when you
build COM+ components with .NET, you are doing COM interop. Another is that COM+ is
too hard to be worth it. All of these are just wrong.
</p>
        <p>
To really get things in perspective, you have to think of COM+ as what it really is
- component services provided by the operating system. In the same way that you use
the OS for services such as file and network I/O and access control, when you use
COM+, you are really just using component services provided by the OS. So doing COM+
in .NET is no more “legacy” than doing file I/O or network calls using
.NET. In fact it is much less so because the level of abstraction and architecture
provided by COM+ is far more advanced than those other services provided by the OS.
When Microsoft put together COM+, they put together a very forward looking architecture
for building robust, scalable, high performance applications. 
</p>
        <p>
Building Enterprise Service components is also the best thing you could be doing today
to migrate to Indigo tomorrow. Most of the hype surrounding Indigo (and well, just
about everything in the last couple years) is about Web Services. And yes, one of
the primary scenarios for using Indigo will be to build service oriented applications
that happen to communicate using web service protocols. But the thing is that the
Indigo programming model abstracts away all the web service goo from you and lets
you work with a much more clean and declarative model. It happens to have a declarative
model that looks much closer to Enterprise Services programming today than it does
to web services programming today. Through configuration, you will be able to control
the transport layer and make it act like a web service, Enterprise Services, or .NET
REmoting under the covers, but your code will look an awful lot like ES code from
what I have seen.
</p>
        <p>
So ES is not legacy by any stretch, it is very current and powerful in its capabilities,
and it is very forward looking in terms of what you will build in the future. 
</p>
        <p>
What about interop? Well, certainly if you are calling out to a legacy COM component
that is running in COM+, you are doing COM interop. But if you build a .NET ES based
system, the .NET components do not use COM interop to talk to one another. There is
some unmanaged code in the loop for providing those component services from the operating
system such as distributed transactions, security, instance management, queuing, loosely
coupled events and so on. But there is unmanaged code involved for many other things
your apps do that reach outside of their own context, so you shouldn't let that fact
drive your thinking about ES. Bottom line is that you need to try things and see if
the technology can provide the performance needed for your application, not just blindly
avoid things that you perceive to have performance penalties. And the fact is that
you can get some huge performance benefits from the instance management features of
COM+ and from the speed of the underlying transport if you design your system well.
</p>
        <p>
Finally there is the difficulty of building ES systems. And yes, this is not the kind
of technology that your average community college philosophy major can use to throw
together a toy app in an afternoon. You have to design your system, consider the communications
and calls between components, figure out which services you need to use and how to
best use them, and you have to have a lot of discipline and automation in your development
and build process to do it right. But the benefits of doing these things are huge
on their own and are something you should be doing for critical business applications
in the first place, whether you use ES or technology X.
</p>
        <p>
You also have to consider the time/cost payback of using ready-to-use, well tested
and proven technology for services like distributed transactions, authentication and
authorization at the application, component, interface, and method level, object pooling,
just in time activation, queued component method calls, etc. etc. Sure you can build
your own mechanisms for these things, but are you really so vain as to think you can
build it better than they did? And without spending orders of magnitude more time
than it would take to use the services out of the box? Need 2, 10, or a 100 components
that call each other, possibly touching many different databases, to all become part
of one distributed transaction? Sure thing, just slap an attribute on each class and
each public method and you are done with ES. How long would it take you to get this
right managing the transactions yourself? A little longer methinks. A security mechanism
that can be locked down by the developer with a few attributes at design time based
on the spec, but that can be easily modified later on adminstratively if requirements
change? Done with ES. Spin your own? Have fun. Dispatch method calls asynchronously
through MSMQ to components that you may not even have network access to at the time
you execute? Sure thing, with ES a couple attribute, a slightly different instance
creation coding pattern, done. Spin your own? Have fun.
</p>
        <p>
Bottom line, people need to get past the fear and misconceptions of Enterprise Service
components. If you are building toy apps, go ahead and ignore ES and keep building
monolithic or client-server apps that don't scale and are hard to maintain. But if
you are building serious business apps for the middle tier and might need any of the
services mentioned, then you should be looking at ES as one of your first choices.
ES is an incredibly powerful capability that too many companies dismiss out of hand. 
</p>
        <p>
If you want to learn more, first, pick up a copy of <a href="http://www.oreilly.com/catalog/comdotnetsvs/index.html">Juval's
book</a>. A strategic .NET-only developer will read every chapter for the concepts
and understanding of each of the COM+ services, but will not get wrapped up in the
C++ code presented. They will then cross reference the appropriate portion of <a href="http://www.ondotnet.com/pub/a/dotnet/excerpt/com_dotnet_ch10/index.html">Chapter
10</a>, which presents just how to use each service with Enterprise Services
in .NET.
</p>
        <p>
Also, check out <a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=1&amp;tabid=2">our
IDesign Method</a>, which is one of our service offerings for helping companies architect
and design their ES systems.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=4cefd3e8-7e8b-4df0-8d48-a5bc135b792d" />
      </body>
      <title>COM+/Enterprise Service Components are not a legacy technology</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,4cefd3e8-7e8b-4df0-8d48-a5bc135b792d.aspx</guid>
      <link>http://briannoyes.net/2004/05/14/COMEnterpriseServiceComponentsAreNotALegacyTechnology.aspx</link>
      <pubDate>Fri, 14 May 2004 20:22:09 GMT</pubDate>
      <description>&lt;p&gt;
I am a firm believer in the use of component based development, and for the middle
tier, Enterprise Services is the right way to go for most serious applications. Unfortunately
there are a lot of misconceptions about the positioning of Enterprise Services, aka
Serviced Components, aka COM+ with respect to .NET development. The biggest of these
is viewing COM+ development with .NET as a legacy approach. Another is that when you
build COM+ components with .NET, you are doing COM interop. Another is that COM+ is
too hard to be worth it. All of these are just wrong.
&lt;/p&gt;
&lt;p&gt;
To really get things in perspective, you have to think of COM+ as what it really is
- component services provided by the operating system. In the same way that you use
the OS for services such as file and network I/O and access control, when you use
COM+, you are really just using component services provided by the OS. So doing COM+
in .NET is no more &amp;#8220;legacy&amp;#8221; than doing file I/O or network calls using
.NET. In fact it is much less so because the level of abstraction and architecture
provided by COM+ is far more advanced than those other services provided by the OS.
When Microsoft put together COM+, they put together a very forward looking architecture
for building robust, scalable, high performance applications. 
&lt;/p&gt;
&lt;p&gt;
Building Enterprise Service components is also the best thing you could be doing today
to migrate to Indigo tomorrow. Most of the hype surrounding Indigo (and well, just
about everything in the last couple years) is about Web Services. And yes, one of
the primary scenarios for using Indigo will be to build service oriented applications
that happen to communicate using web service protocols. But the thing is that the
Indigo programming model abstracts away all the web service goo from you and lets
you work with a much more clean and declarative model.&amp;nbsp;It happens to have a&amp;nbsp;declarative
model that looks much closer to Enterprise Services programming today than it does
to web services programming today. Through configuration, you will be able to control
the transport layer and make it act like a web service, Enterprise Services, or .NET
REmoting under the covers, but your code will look an awful lot like ES code from
what I have seen.
&lt;/p&gt;
&lt;p&gt;
So ES is not legacy by any stretch, it is very current and powerful in its capabilities,
and it is very forward looking in terms of what you will build in the future. 
&lt;/p&gt;
&lt;p&gt;
What about interop? Well, certainly if you are calling out to a legacy COM component
that is running in COM+, you are doing COM interop. But if you build a .NET ES&amp;nbsp;based
system, the .NET components do not use COM interop to talk to one another. There is
some unmanaged code in the loop for providing those component services from the operating
system such as distributed transactions, security, instance management, queuing, loosely
coupled events and so on. But there is unmanaged code involved for many other things
your apps do that reach outside of their own context, so you shouldn't let that fact
drive your thinking about ES. Bottom line is that you need to try things and see if
the technology can provide the performance needed for your application, not just blindly
avoid things that you perceive to have performance penalties. And the fact is that
you can get some huge performance benefits from the instance management features of
COM+ and from the speed of the underlying transport if you design your system well.
&lt;/p&gt;
&lt;p&gt;
Finally there is the difficulty of building ES systems. And yes, this is not the kind
of technology that your average community college philosophy major can use to&amp;nbsp;throw
together a toy app in an afternoon. You have to design your system, consider the communications
and calls between components, figure out which services you need to use and how to
best use them, and you have to have a lot of discipline and automation in your development
and build process to do it right. But the benefits of doing these things are huge
on their own and are something you should be doing for critical business applications
in the first place, whether you use ES or technology X.
&lt;/p&gt;
&lt;p&gt;
You also have to consider the time/cost payback of using ready-to-use, well tested
and proven technology for services like distributed transactions, authentication and
authorization at the application, component, interface, and method level, object pooling,
just in time activation, queued component method calls, etc. etc. Sure you can build
your own mechanisms for these things, but are you really so vain as to think you can
build it better than they did? And without spending orders of magnitude more time
than it would take to use the services out of the box? Need 2, 10, or a 100 components
that call each other, possibly touching many different databases, to all become part
of one distributed transaction? Sure thing, just slap an attribute on each class and
each public method and you are done with ES. How long would it take you to get this
right managing the transactions yourself? A little longer methinks. A security mechanism
that can be locked down by the developer with a few attributes at design time based
on the spec, but that can be easily modified later on adminstratively if requirements
change? Done with ES. Spin your own? Have fun. Dispatch method calls asynchronously
through MSMQ to components that you may not even have network access to at the time
you execute? Sure thing, with ES a couple attribute, a slightly different instance
creation coding pattern, done. Spin your own? Have fun.
&lt;/p&gt;
&lt;p&gt;
Bottom line, people need to get past the fear and misconceptions of Enterprise Service
components. If you are building toy apps, go ahead and ignore ES and keep building
monolithic or client-server apps that don't scale and are hard to maintain. But if
you are building serious business apps for the middle tier and might need any of the
services mentioned, then you should be looking at ES as one of your first choices.
ES is an incredibly powerful capability that too many companies dismiss out of hand. 
&lt;/p&gt;
&lt;p&gt;
If you want to learn more, first, pick up a copy of &lt;a href="http://www.oreilly.com/catalog/comdotnetsvs/index.html"&gt;Juval's
book&lt;/a&gt;. A strategic .NET-only developer will&amp;nbsp;read every chapter for the concepts
and understanding of each of the COM+ services, but will not get wrapped up in the
C++ code presented. They will then cross reference the appropriate portion of &lt;a href="http://www.ondotnet.com/pub/a/dotnet/excerpt/com_dotnet_ch10/index.html"&gt;Chapter
10&lt;/a&gt;, which presents just&amp;nbsp;how to use each service&amp;nbsp;with Enterprise Services
in .NET.
&lt;/p&gt;
&lt;p&gt;
Also, check out &lt;a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=1&amp;amp;tabid=2"&gt;our
IDesign Method&lt;/a&gt;, which is one of our service offerings for helping companies architect
and design their ES systems.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=4cefd3e8-7e8b-4df0-8d48-a5bc135b792d" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,4cefd3e8-7e8b-4df0-8d48-a5bc135b792d.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=35d18c9e-f8cc-4f03-aa1e-3ffc0eada041</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,35d18c9e-f8cc-4f03-aa1e-3ffc0eada041.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,35d18c9e-f8cc-4f03-aa1e-3ffc0eada041.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=35d18c9e-f8cc-4f03-aa1e-3ffc0eada041</wfw:commentRss>
      <title>Address perf WHERE IT IS NEEDED</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,35d18c9e-f8cc-4f03-aa1e-3ffc0eada041.aspx</guid>
      <link>http://briannoyes.net/2004/05/08/AddressPerfWHEREITISNEEDED.aspx</link>
      <pubDate>Sat, 08 May 2004 14:32:20 GMT</pubDate>
      <description>&lt;p&gt;
I sat in a talk recently on performance with .NET applications. The speaker was suggesting
things that I here others say often but I strongly disagree with. Two specific issues
were the recommendation to use ngen and to never include debug info in release builds
to achieve the best performance. The conversation went something like this:
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I
pressed him on the ngen:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Me: I thought
one of the reasons you shouldn&amp;#8217;t ngen is because the JIT compiler can do optimizations
that result in superior runtime performance over ngen?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Him: Well,
yes that is true&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Me: So if
you really care about perf, you shouldn&amp;#8217;t ngen?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Him: Yes,
but if you ngen you dramatically improve the start up time for the app&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Me For the
first time the app is run only, right?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Him: Well,
yeah&amp;#8230;.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Me: And,
there are load time effects that ngen can have (rebasing) that can actually result
in worse load time perf?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Him: Well,
yeah&amp;#8230;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Then the
debug info in release mode:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Him: You
should definitely avoid putting debug info in your release builds&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Me: So what
is the impact if you do?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Him: Well,
a couple extra instructions per method call&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Me: So do
you think an extra couple instructions actually has an impact on the overall perf
of most apps? Aren&amp;#8217;t they usually IO bound or have other perf bottlenecks that
really form the performance limit for most apps?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Him:&amp;nbsp;
Well, yeah&amp;#8230;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Why
don&amp;#8217;t people get this? I'm not saying you shouldn't always consider perf or
that you should do stupid things that will affect perf. But if you are doing things
that affect the maintainability of your system, I would always favor doing the things
that result in more maintainable systems. Then address perf where needed. If your
performance is already adequate, then you don't have a problem. If it is not, it is
probably due to one or a couple hot spots in your application that you can do some
optimization on to get things back in check.&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Ngen can
either help or hurt perf, and can result in unpredictable results if anything in your
system changes with respect to what version gets used. Me, I like deterministic systems.
Debug info in your release builds can give you additional insight when errors happen
in the production environment including line numbers in exceptions and additional
ways to debug.&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;A lot of
it has to do with good architecture and design too. Most often people apply performance
tweaks liberally because they have no idea where the hot spots might be in their app
or how to find them.&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;font face=Arial size=2&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I just get
frustrated when people latch onto a concept and apply it blindly without understanding
when/where it is actually needed. Let's face it, if a couple extra instructions per
method call is really driving the performance of your entire application, you either
write some incredibly tight code, or your app is a simple little test app that you
created to drive home your point that doesn't go out and make any DB queries, network
calls, access the disk, or any of the other things that really drive the perf of real
world apps.&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=35d18c9e-f8cc-4f03-aa1e-3ffc0eada041" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,35d18c9e-f8cc-4f03-aa1e-3ffc0eada041.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=5cdc01aa-9a45-4f6b-bdd8-602d1d56ccb2</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,5cdc01aa-9a45-4f6b-bdd8-602d1d56ccb2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,5cdc01aa-9a45-4f6b-bdd8-602d1d56ccb2.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5cdc01aa-9a45-4f6b-bdd8-602d1d56ccb2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I like Test Driven Development (TDD). It makes sense to me at a conceptual level,
it feels right, and it basically formalizes a number of practices I have had
for years (but without the discipline to necessarily do it the same way all the time).
I think it leads to better software both through finding defects earlier and
because it changes the way you approach coding in a good way that makes you think
about the client API very closely up front (because your tests are client code).
</p>
        <p>
The one thing I don't like or really just haven't gotten my arms around yet is how
to really apply it comprehensively across all the kinds of development I do. For business
objects that encapsulate some data and expose operations on that data, TDD is
perfect and easy to understand. For things like asynchronous, event-driven services
and interactive UI code, I still have a hard time figuring out how to apply TDD. 
</p>
        <p>
So when I finally got around to reading the latest MSDN, I was looking forward to
the <a href="http://www.msdn.microsoft.com/msdnmag/issues/04/04/ExtremeProgramming/default.aspx">article
in there</a> on TDD. I found the article to be well written and thought it did
a great job explaining the basics and how to put together TDD test fixtures in .NET
and work with NUnit. I was a little dissatisfied with the finish though. 
</p>
        <p>
As I read, I started salivating as I got to the section titled “Using TDD in
the Real World”. Cool, someone is finally going to go beyond talking about money
classes as demonstrate using TDD for something hard... or maybe not. Then it started
talking about addressing GUI testing, even better... or maybe not. In the end, the
“real world” scenario ended up being a combo box driven by a simple data
container class for countries, and the only thing that TDD was demonstrated against
was the country list class. Hardly a real world scenario, and how you might test the
combo box that uses it was quickly slipped around.
</p>
        <p>
Does anyone out there have any good resource links to using TDD for GUI and/or asynchronous/event-driven
scenarios? That is the one area I still need a better clue, but I can't seem to find
any good examples or discussion of them.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5cdc01aa-9a45-4f6b-bdd8-602d1d56ccb2" />
      </body>
      <title>TDD in the real world... for real?</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,5cdc01aa-9a45-4f6b-bdd8-602d1d56ccb2.aspx</guid>
      <link>http://briannoyes.net/2004/04/04/TDDInTheRealWorldForReal.aspx</link>
      <pubDate>Sun, 04 Apr 2004 00:09:48 GMT</pubDate>
      <description>&lt;p&gt;
I like Test Driven Development (TDD). It makes sense to me at a conceptual level,
it feels right,&amp;nbsp;and it basically formalizes a number of practices I have had
for years (but without the discipline to necessarily do it the same way all the time).
I think it&amp;nbsp;leads to better software both through finding defects earlier and
because it changes the way you approach coding in a good way that makes you think
about the client API very closely up front (because your tests are client code).
&lt;/p&gt;
&lt;p&gt;
The one thing I don't like or really just haven't gotten my arms around yet is how
to really apply it comprehensively across all the kinds of development I do. For business
objects&amp;nbsp;that encapsulate some data and expose operations on that data, TDD is
perfect and easy to understand. For things like asynchronous, event-driven services
and interactive UI code, I still have a hard time figuring out how to apply TDD. 
&lt;/p&gt;
&lt;p&gt;
So when I finally got around to reading the latest MSDN, I was looking forward to
the &lt;a href="http://www.msdn.microsoft.com/msdnmag/issues/04/04/ExtremeProgramming/default.aspx"&gt;article
in there&lt;/a&gt;&amp;nbsp;on TDD. I found the article to be well written and thought it did
a great job explaining the basics and how to put together TDD test fixtures in .NET
and work with NUnit. I was a little dissatisfied with the finish though. 
&lt;/p&gt;
&lt;p&gt;
As I read, I started salivating as I got to the section titled &amp;#8220;Using TDD in
the Real World&amp;#8221;. Cool, someone is finally going to go beyond talking about money
classes as demonstrate using TDD for something hard... or maybe not. Then it started
talking about addressing GUI testing, even better... or maybe not. In the end, the
&amp;#8220;real world&amp;#8221; scenario ended up being a combo box driven by a simple data
container class for countries, and the only thing that TDD was demonstrated against
was the country list class. Hardly a real world scenario, and how you might test the
combo box that uses it was quickly slipped around.
&lt;/p&gt;
&lt;p&gt;
Does anyone out there have any good resource links to using TDD for GUI and/or asynchronous/event-driven
scenarios? That is the one area I still need a better clue, but I can't seem to find
any good examples or discussion of them.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5cdc01aa-9a45-4f6b-bdd8-602d1d56ccb2" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,5cdc01aa-9a45-4f6b-bdd8-602d1d56ccb2.aspx</comments>
      <category>Architecture</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=4f08aefd-dbc3-4d1a-bc6e-874ec872feff</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,4f08aefd-dbc3-4d1a-bc6e-874ec872feff.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,4f08aefd-dbc3-4d1a-bc6e-874ec872feff.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4f08aefd-dbc3-4d1a-bc6e-874ec872feff</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I spoke last night at the Central Pennsylvania Users Group in Harrisburg, PA. They
have a great group and about 35 folks turned out despite snow and nasty weather. Judy
Calla is the group lead and gave a nice little beginners talk on debugging and error
handling in .NET applications. I then jumped in with a talk on querying XML data in
.NET.
</p>
        <p>
One of the key points I always try to draw out in that talk is to get people familiar
with the XPathNavigator model and the differences between the various types of XML
documents in .NET (XmlDocument, XmlDataDocument, XPathDocument). 
</p>
        <p>
It is a natural fit for people who have worked with MSXML before to settle in and
use the XmlDocument class (the W3C DOM implementation in .NET), never going beyond
the methods and properties exposed by XmlNode and its derived classes to do their
work.
</p>
        <p>
However, I try to get people familiar with the fact that the preferred model for working
with XML data in memory in .NET is working through the XPathNavigator, since
it can be used across all three of the document types, and especially since it will
take on an even more significant role in .NET 2.0 with the introduction of the modifiable
XPathDocument. More on that in a minute. I also point out that you can layer an XPathNavigator
implementation on top of any hierarchical data that you control, giving it an XML
like working model, even though it may have nothing to do with XML itself.
</p>
        <p>
The XPathNavigator base class ( and the concrete implementations provided  by
each of the document types) provides a consistent and clean model for navigating and
querying XML data. To get one, you just call CreateNavigator on the underlying document
instance. What you get back is effectively a cursor into the document nodes that you
can move around with the various MoveXXX methods, or you can query the current node
and all sub-nodes with XPath expressions. When you query through this model, you have
the choice of just passing an XPath expression as a string to the Select or Evaluate
method (the former returns a node set result, the latter returns a value result -
bool, number, string - if that is what the XPath expression is expected to evaluate
to), or you can pre-compile the expression for faster execution if the query will
be made more than once.
</p>
        <p>
The XPathDocument class in .NET 1.X is a lighterweight object model than the one in
the XmlDocument class and will have less of a footprint in memory for the same XML
document in most cases. The big decision point in which of those two document types
to pick currently is whether you need write access to the nodes you are dealing with.
If the answer is yes, you only have one choice currently, and that is to work with
the XmlDocument class. You can and still should do so through an XPathNavigator, but
the underlying nodes are still XmlNodes instead of XPathNodes, and are therefore write
access. If you are just looking to query and navigate the data to perform processing,
then XPathDocument is the better choice because of the lighter weight object model.
</p>
        <p>
In .NET 2.0, the big thing to be aware of is that the XPathDocument class becomes
read/write. But more important than that is that any changes you make to the document
(modifying, inserting, or deleting nodes) are tracked by the document in a similar
fashion to the way the DataSet tracks changes. This means that you can then use the
XPathDocument to perform updates to the underlying data store from whence it came.
That is huge.
</p>
        <p>
So bottom line, if you are not using XPathNavigator today for working with your XML
documents in .NET, you should be. Look into and get used to the model. It will give
you better consistency and a migration path to move you XML document processing code
from the DOM today to the XPathDocument in .NET 2.0 with minimal changes.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=4f08aefd-dbc3-4d1a-bc6e-874ec872feff" />
      </body>
      <title>Prefer XPathNavigator</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,4f08aefd-dbc3-4d1a-bc6e-874ec872feff.aspx</guid>
      <link>http://briannoyes.net/2004/03/17/PreferXPathNavigator.aspx</link>
      <pubDate>Wed, 17 Mar 2004 12:54:29 GMT</pubDate>
      <description>&lt;p&gt;
I spoke last night at the Central Pennsylvania Users Group in Harrisburg, PA. They
have a great group and about 35 folks turned out despite snow and nasty weather. Judy
Calla is the group lead and gave a nice little beginners talk on debugging and error
handling in .NET applications. I then jumped in with a talk on querying XML data in
.NET.
&lt;/p&gt;
&lt;p&gt;
One of the key points I always try to draw out in that talk is to get people familiar
with the XPathNavigator model and the differences between the various types of XML
documents in .NET (XmlDocument, XmlDataDocument, XPathDocument). 
&lt;/p&gt;
&lt;p&gt;
It is a natural fit for people who have worked with MSXML before to settle in and
use the XmlDocument class (the W3C DOM implementation in .NET), never going beyond
the methods and properties exposed by XmlNode and its derived classes to do their
work.
&lt;/p&gt;
&lt;p&gt;
However, I try to get people familiar with the fact that the preferred model for working
with XML data in memory&amp;nbsp;in .NET is working through the XPathNavigator, since
it can be used across all three of the document types, and especially since it will
take on an even more significant role in .NET 2.0 with the introduction of the modifiable
XPathDocument. More on that in a minute. I also point out that you can layer an XPathNavigator
implementation on top of any hierarchical data that you control, giving it an XML
like working model, even though it may have nothing to do with XML itself.
&lt;/p&gt;
&lt;p&gt;
The XPathNavigator base class ( and the concrete implementations provided&amp;nbsp; by
each of the document types) provides a consistent and clean model for navigating and
querying XML data. To get one, you just call CreateNavigator on the underlying document
instance. What you get back is effectively a cursor into the document nodes that you
can move around with the various MoveXXX methods, or you can query the current node
and all sub-nodes with XPath expressions. When you query through this model, you have
the choice of just passing an XPath expression as a string to the Select or Evaluate
method (the former returns a node set result, the latter returns a value result -
bool, number, string -&amp;nbsp;if that is what the XPath expression is expected to evaluate
to), or you can pre-compile the expression for faster execution if the query will
be made more than once.
&lt;/p&gt;
&lt;p&gt;
The XPathDocument class in .NET 1.X is a lighterweight object model than the one in
the XmlDocument class and will have less of a footprint in memory for the same XML
document in most cases. The big decision point in which of those two document types
to pick currently is whether you need write access to the nodes you are dealing with.
If the answer is yes, you only have one choice currently, and that is to work with
the XmlDocument class. You can and still should do so through an XPathNavigator, but
the underlying nodes are still XmlNodes instead of XPathNodes, and are therefore write
access. If you are just looking to query and navigate the data to perform processing,
then XPathDocument is the better choice because of the lighter weight object model.
&lt;/p&gt;
&lt;p&gt;
In .NET 2.0, the big thing to be aware of is that the XPathDocument class becomes
read/write. But more important than that is that any changes you make to the document
(modifying, inserting, or deleting nodes) are tracked by the document in a similar
fashion to the way the DataSet tracks changes. This means that you can then use the
XPathDocument to perform updates to the underlying data store from whence it came.
That is huge.
&lt;/p&gt;
&lt;p&gt;
So bottom line, if you are not using XPathNavigator today for working with your XML
documents in .NET, you should be. Look into and get used to the model. It will give
you better consistency and a migration path to move you XML document processing code
from the DOM today to the XPathDocument in .NET 2.0 with minimal changes.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=4f08aefd-dbc3-4d1a-bc6e-874ec872feff" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,4f08aefd-dbc3-4d1a-bc6e-874ec872feff.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=921f87d3-5d61-4f1a-8bb6-069b0ffc37fa</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,921f87d3-5d61-4f1a-8bb6-069b0ffc37fa.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,921f87d3-5d61-4f1a-8bb6-069b0ffc37fa.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=921f87d3-5d61-4f1a-8bb6-069b0ffc37fa</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm working on a project for a customer that I have <a href="/bnoyes/PermaLink.aspx?guid=593dc861-aaf8-4e27-97b3-0872e1a31c99">mentioned
before</a> that is a Java web app using Oracle products. I know, what is a .NET
guy doing this for? Trust me, I have tried hard to persuade the customer's customer
that they would be better off with a .NET solution to no avail. They dictated an Oracle/Solaris
architecture before the project even started to maintain platform homogeneity within
their network, so we are stuck with that.
</p>
        <p>
We are just getting started into the design phase (yes, a waterfall process also dictated
by the customer... do these people never learn??), and trying to nail down the technologies
and software architecture we will use given the constrained enviroment. It is like
trying to learn a foriegn language in some ways. The basic architectural concepts
are the same, but the terminology, libraries, technologies you use to achieve it are
all very different. 
</p>
        <p>
The other thing that is weird is the low community support structure in the Oracle
world. After much searching of the Oracle Tech Net and the web in general, it
was just really hard to find good articles and how-to type information on web app
architecture and design with Oracle. Basically, I just needed to talk to
someone who does what I do with .NET but does it with Oracle products so that
I could get them to help me draw the parallels. We were sent one after another consultant
by Oracle, telling them we needed a web application architect each time, and ending
up with DBA after DBA after DBA, each basically saying “I think you can write
all your HTML in PL/SQL”. Yeah, a 1 tier app, that's just what I had in mind.
Either that or we ended up with the Technical Manager type who could rattle off a
laundry list of options (most involving obscene licensing costs), but couldn't really
guide us on the right selection of technologies given our requirements and expertise.
</p>
        <p>
Finallly yesterday we went to the Reston Oracle headquarters and met with some folks
and got the guy we needed. I could immediately tell that he spoke the lingo, even
though he was talking different tools and terms, we were both describing the same
app architecture and he was able in about an hour's time to get us right on track.
</p>
        <p>
Some of the stuff in the Oracle suite (JDeveloper in particular) are pretty nice.
Microsoft should take a look. Even though their Business Components for Java (BC4J)
framework and Struts (an MVC open source framework) are heavily driven by XML, you
almost never have to touch the raw XML yourself. They have wizards and dialogs that
encapsulate ever setting you might possibly need to make in the XML configuration
files of many flavors. We need more of that in .NET, and I think some is coming in
Whidbey from what I have seen and heard.
</p>
        <p>
It is definitely a more DB centric world that we are used to in the .NET realm, but
I could see where that pendulum might swing closer to the Oracle approach with some
of the features coming in Yukon.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=921f87d3-5d61-4f1a-8bb6-069b0ffc37fa" />
      </body>
      <title>A Day in the land of Oracle</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,921f87d3-5d61-4f1a-8bb6-069b0ffc37fa.aspx</guid>
      <link>http://briannoyes.net/2004/02/14/ADayInTheLandOfOracle.aspx</link>
      <pubDate>Sat, 14 Feb 2004 15:20:51 GMT</pubDate>
      <description>&lt;p&gt;
I'm working on a project for a customer that I have &lt;a href="/bnoyes/PermaLink.aspx?guid=593dc861-aaf8-4e27-97b3-0872e1a31c99"&gt;mentioned
before&lt;/a&gt;&amp;nbsp;that is a Java web app using Oracle products. I know, what is a .NET
guy doing this for? Trust me, I have tried hard to persuade the customer's customer
that they would be better off with a .NET solution to no avail. They dictated an Oracle/Solaris
architecture before the project even started to maintain platform homogeneity within
their network, so we are stuck with that.
&lt;/p&gt;
&lt;p&gt;
We are just getting started into the design phase (yes, a waterfall process also dictated
by the customer... do these people never learn??), and trying to nail down the technologies
and software architecture we will use given the constrained enviroment. It is like
trying to learn a foriegn language in some ways. The basic architectural concepts
are the same, but the terminology, libraries, technologies you use to achieve it are
all very different. 
&lt;/p&gt;
&lt;p&gt;
The other thing that is weird is the low community support structure in the Oracle
world.&amp;nbsp;After much searching of the Oracle Tech Net and the web in general, it
was just really hard to find good articles and how-to type information on web app
architecture&amp;nbsp;and design with Oracle.&amp;nbsp;Basically, I just needed to talk to
someone who does what I do with .NET&amp;nbsp;but does it with Oracle products so that
I could get them to help me draw the parallels. We were sent one after another consultant
by Oracle, telling them we needed a web application architect each time, and ending
up with DBA after DBA after DBA, each basically saying &amp;#8220;I think you can write
all your HTML in PL/SQL&amp;#8221;. Yeah, a 1 tier app, that's just what I had in mind.
Either that or we ended up with the Technical Manager type who could rattle off a
laundry list of options (most involving obscene licensing costs), but couldn't really
guide us on the right selection of technologies given our requirements and expertise.
&lt;/p&gt;
&lt;p&gt;
Finallly yesterday we went to the Reston Oracle headquarters and met with some folks
and got the guy we needed. I could immediately tell that he spoke the lingo, even
though he was talking different tools and terms, we were both describing the same
app architecture and he was able in about an hour's time to get us right on track.
&lt;/p&gt;
&lt;p&gt;
Some of the stuff in the Oracle suite (JDeveloper in particular) are pretty nice.
Microsoft should take a look. Even though their Business Components for Java (BC4J)
framework and Struts (an MVC open source framework) are heavily driven by XML, you
almost never have to touch the raw XML yourself. They have wizards and dialogs that
encapsulate ever setting you might possibly need to make in the XML configuration
files of many flavors. We need more of that in .NET, and I think some is coming in
Whidbey from what I have seen and heard.
&lt;/p&gt;
&lt;p&gt;
It is definitely a more DB centric world that we are used to in the .NET realm, but
I could see where that pendulum might swing closer to the Oracle approach with some
of the features coming in Yukon.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=921f87d3-5d61-4f1a-8bb6-069b0ffc37fa" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,921f87d3-5d61-4f1a-8bb6-069b0ffc37fa.aspx</comments>
      <category>Architecture</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=ac7067d9-c2f5-4480-ab1a-2f04ffa6df97</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,ac7067d9-c2f5-4480-ab1a-2f04ffa6df97.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,ac7067d9-c2f5-4480-ab1a-2f04ffa6df97.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ac7067d9-c2f5-4480-ab1a-2f04ffa6df97</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Check out the code below and see if you can see spot what is wrong with
it:
</p>
        <font color="#0000ff" size="4">
          <p>
public
</p>
        </font>
        <font color="#000000" size="4">
        </font>
        <font color="#0000ff" size="4">interface</font>
        <font size="4">
          <font color="#000000"> IChildObject </font>{<br /></font>
        <font color="#0000ff" size="4">  string</font>
        <font size="4"> Name {</font>
        <font color="#0000ff" size="4">get</font>
        <font size="4">;</font>
        <font color="#0000ff" size="4">set</font>
        <font size="4">;}<br />
}
</font>
        <font color="#0000ff" size="4">
          <p>
public
</p>
        </font>
        <font color="#000000" size="4">
        </font>
        <font color="#0000ff" size="4">interface</font>
        <font size="4">
          <font color="#000000"> IContainerObject </font>{<br />
  IChildObject Child {</font>
        <font color="#0000ff" size="4">get</font>
        <font size="4">;</font>
        <font color="#0000ff" size="4">set</font>
        <font size="4">;}<br /></font>
        <font color="#0000ff" size="4">  void</font>
        <font size="4"> Save(</font>
        <font color="#0000ff" size="4">string</font>
        <font size="4"> fileName);<br />
}
</font>
        <font color="#0000ff" size="4">
          <p>
public
</p>
        </font>
        <font color="#000000" size="4">
        </font>
        <font color="#0000ff" size="4">class</font>
        <font size="4">
          <font color="#000000"> ChildObj
: IChildObject  </font>{<br /></font>
        <font color="#0000ff" size="4">  private</font>
        <font size="4">
        </font>
        <font color="#0000ff" size="4">string</font>
        <font size="4"> m_name
= "Fred";<br />
  </font>
        <font color="#0000ff" size="4">public</font>
        <font size="4">
        </font>
        <font color="#0000ff" size="4">string</font>
        <font size="4"> Name<br />
  {<br /></font>
        <font color="#0000ff" size="4">    get</font>
        <font size="4"> { </font>
        <font color="#0000ff" size="4">return</font>
        <font size="4"> m_name;
}<br /></font>
        <font color="#0000ff" size="4">    set</font>
        <font size="4"> {
m_name = </font>
        <font color="#0000ff" size="4">value</font>
        <font size="4">; }<br />
  }<br />
}
</font>
        <font color="#0000ff" size="4">
          <p>
public
</p>
        </font>
        <font color="#000000" size="4">
        </font>
        <font color="#0000ff" size="4">class</font>
        <font size="4">
          <font color="#000000"> ContainerObj
: IContainerObject </font>{<br /></font>
        <font color="#0000ff" size="4">  private</font>
        <font size="4"> ChildObj
m_child = </font>
        <font color="#0000ff" size="4">new</font>
        <font size="4"> ChildObj();<br /></font>
        <font color="#0000ff" size="4">  public</font>
        <font size="4">
        </font>
        <font color="#0000ff" size="4">void</font>
        <font size="4"> Save(</font>
        <font color="#0000ff" size="4">string</font>
        <font size="4"> fileName)<br />
 {<br />
    XmlSerializer xs = </font>
        <font color="#0000ff" size="4">new</font>
        <font size="4"> XmlSerializer(</font>
        <font color="#0000ff" size="4">typeof</font>
        <font size="4">(ContainerObj));<br />
    FileStream fs = File.OpenWrite(fileName);<br />
    xs.Serialize(fs,</font>
        <font color="#0000ff" size="4">this</font>
        <font size="4">);<br />
  }
<p></p></font>
        <font color="#0000ff" size="4">  public</font>
        <font size="4"> IChildObject
Child<br />
  {<br /></font>
        <font color="#0000ff" size="4">    get</font>
        <font size="4"> { </font>
        <font color="#0000ff" size="4">return</font>
        <font size="4"> m_child;
}<br /></font>
        <font color="#0000ff" size="4">    set</font>
        <font size="4"> {
m_child = </font>
        <font color="#0000ff" size="4">value</font>
        <font size="4">
        </font>
        <font color="#0000ff" size="4">as</font>
        <font size="4"> ChildObj;
}<br />
  }<br />
}
</font>
        <p>
This was one of those subtle little things that was confounding a customer new to
.NET, but the not so descriptive exception made it a little easier to figure out once
I saw it:
</p>
        <p>
InvalidOperationException: There was an error reflecting the type ContainerObj.
</p>
        <p>
The issue of course is that XmlSerialization uses reflection to figure out what to
write out. It probes the type and gets all its public fields and properties and writes
those out with serialize or reads them in with deserialize. Because the container
object exposed its child property as an interface type instead of the implementation
type, the reflection stopped there and choked and it can't XML Serialize this type.
</p>
        <p>
If it is already using reflection, why couldn't it have been coded to use reflection
a little harder and determine the underlying type for any interface properties? There
are a lot of situations it would be good to expose the property as an interface instead
of a concrete type, but if you do that, you can no longer benefit from the simple
XML serialization mechanism. I hate to have to violate good interface-based design
just to take advantage of XML Serialization, but it seems like that is the only choice
here. 
</p>
        <p>
I realize we could use normal .NET serialization (binary or SOAP), but XmlSerialization
was ideal for the task at hand.
</p>
        <p>
Hopefully the changes they are making to XML Serialization for Indigo will make this
scenario OK.
</p>
        <p>
Am I missing anything obvious? 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=ac7067d9-c2f5-4480-ab1a-2f04ffa6df97" />
      </body>
      <title>XmlSerialization and Interface Based Programming</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,ac7067d9-c2f5-4480-ab1a-2f04ffa6df97.aspx</guid>
      <link>http://briannoyes.net/2004/01/22/XmlSerializationAndInterfaceBasedProgramming.aspx</link>
      <pubDate>Thu, 22 Jan 2004 01:54:06 GMT</pubDate>
      <description>&lt;p&gt;
Check out the code below and see if you can see&amp;nbsp;spot what&amp;nbsp;is wrong with
it:
&lt;/p&gt;
&lt;font color=#0000ff size=4&gt; 
&lt;p&gt;
public
&lt;/font&gt;&lt;font color=#000000 size=4&gt; &lt;/font&gt;&lt;font color=#0000ff size=4&gt;interface&lt;/font&gt;&lt;font size=4&gt;&lt;font color=#000000&gt; IChildObject &lt;/font&gt;{&lt;br&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt;&amp;nbsp; string&lt;/font&gt;&lt;font size=4&gt; Name {&lt;/font&gt;&lt;font color=#0000ff size=4&gt;get&lt;/font&gt;&lt;font size=4&gt;;&lt;/font&gt;&lt;font color=#0000ff size=4&gt;set&lt;/font&gt;&lt;font size=4&gt;;}&lt;br&gt;
}&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt; 
&lt;p&gt;
public
&lt;/font&gt;&lt;font color=#000000 size=4&gt; &lt;/font&gt;&lt;font color=#0000ff size=4&gt;interface&lt;/font&gt;&lt;font size=4&gt;&lt;font color=#000000&gt; IContainerObject &lt;/font&gt;{&lt;br&gt;
&amp;nbsp; IChildObject Child {&lt;/font&gt;&lt;font color=#0000ff size=4&gt;get&lt;/font&gt;&lt;font size=4&gt;;&lt;/font&gt;&lt;font color=#0000ff size=4&gt;set&lt;/font&gt;&lt;font size=4&gt;;}&lt;br&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt;&amp;nbsp; void&lt;/font&gt;&lt;font size=4&gt; Save(&lt;/font&gt;&lt;font color=#0000ff size=4&gt;string&lt;/font&gt;&lt;font size=4&gt; fileName);&lt;br&gt;
}&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt; 
&lt;p&gt;
public
&lt;/font&gt;&lt;font color=#000000 size=4&gt; &lt;/font&gt;&lt;font color=#0000ff size=4&gt;class&lt;/font&gt;&lt;font size=4&gt;&lt;font color=#000000&gt; ChildObj
: IChildObject&amp;nbsp; &lt;/font&gt;{&lt;br&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt;&amp;nbsp; private&lt;/font&gt;&lt;font size=4&gt; &lt;/font&gt;&lt;font color=#0000ff size=4&gt;string&lt;/font&gt;&lt;font size=4&gt; m_name
= "Fred";&lt;br&gt;
&amp;nbsp; &lt;/font&gt;&lt;font color=#0000ff size=4&gt;public&lt;/font&gt;&lt;font size=4&gt; &lt;/font&gt;&lt;font color=#0000ff size=4&gt;string&lt;/font&gt;&lt;font size=4&gt; Name&lt;br&gt;
&amp;nbsp; {&lt;br&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;/font&gt;&lt;font size=4&gt; { &lt;/font&gt;&lt;font color=#0000ff size=4&gt;return&lt;/font&gt;&lt;font size=4&gt; m_name;
}&lt;br&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;/font&gt;&lt;font size=4&gt; { m_name
= &lt;/font&gt;&lt;font color=#0000ff size=4&gt;value&lt;/font&gt;&lt;font size=4&gt;; }&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
}&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt; 
&lt;p&gt;
public
&lt;/font&gt;&lt;font color=#000000 size=4&gt; &lt;/font&gt;&lt;font color=#0000ff size=4&gt;class&lt;/font&gt;&lt;font size=4&gt;&lt;font color=#000000&gt; ContainerObj
: IContainerObject &lt;/font&gt;{&lt;br&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt;&amp;nbsp; private&lt;/font&gt;&lt;font size=4&gt; ChildObj m_child
= &lt;/font&gt;&lt;font color=#0000ff size=4&gt;new&lt;/font&gt;&lt;font size=4&gt; ChildObj();&lt;br&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt;&amp;nbsp; public&lt;/font&gt;&lt;font size=4&gt; &lt;/font&gt;&lt;font color=#0000ff size=4&gt;void&lt;/font&gt;&lt;font size=4&gt; Save(&lt;/font&gt;&lt;font color=#0000ff size=4&gt;string&lt;/font&gt;&lt;font size=4&gt; fileName)&lt;br&gt;
&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlSerializer xs = &lt;/font&gt;&lt;font color=#0000ff size=4&gt;new&lt;/font&gt;&lt;font size=4&gt; XmlSerializer(&lt;/font&gt;&lt;font color=#0000ff size=4&gt;typeof&lt;/font&gt;&lt;font size=4&gt;(ContainerObj));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; FileStream fs = File.OpenWrite(fileName);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; xs.Serialize(fs,&lt;/font&gt;&lt;font color=#0000ff size=4&gt;this&lt;/font&gt;&lt;font size=4&gt;);&lt;br&gt;
&amp;nbsp; }&gt;
&lt;p&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt;&amp;nbsp; public&lt;/font&gt;&lt;font size=4&gt; IChildObject Child&lt;br&gt;
&amp;nbsp; {&lt;br&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;/font&gt;&lt;font size=4&gt; { &lt;/font&gt;&lt;font color=#0000ff size=4&gt;return&lt;/font&gt;&lt;font size=4&gt; m_child;
}&lt;br&gt;
&lt;/font&gt;&lt;font color=#0000ff size=4&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;/font&gt;&lt;font size=4&gt; { m_child
= &lt;/font&gt;&lt;font color=#0000ff size=4&gt;value&lt;/font&gt;&lt;font size=4&gt; &lt;/font&gt;&lt;font color=#0000ff size=4&gt;as&lt;/font&gt;&lt;font size=4&gt; ChildObj;
}&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
}&gt;
&lt;/font&gt; 
&lt;p&gt;
This was one of those subtle little things that was confounding a customer new to
.NET, but the not so descriptive exception made it a little easier to figure out once
I saw it:
&lt;/p&gt;
&lt;p&gt;
InvalidOperationException: There was an error reflecting the type ContainerObj.
&lt;/p&gt;
&lt;p&gt;
The issue of course is that XmlSerialization uses reflection to figure out what to
write out. It probes the type and gets all its public fields and properties and writes
those out with serialize or reads them in with deserialize. Because the container
object exposed its child property as an interface type instead of the implementation
type, the reflection stopped there and choked and it can't XML Serialize this type.
&lt;/p&gt;
&lt;p&gt;
If it is already using reflection, why couldn't it have been coded to use reflection
a little harder and determine the underlying type for any interface properties? There
are a lot of situations it would be good to expose the property as an interface instead
of a concrete type, but if you do that, you can no longer benefit from the simple
XML serialization mechanism. I hate to have to violate good interface-based design
just to take advantage of XML Serialization, but it seems like that is the only choice
here. 
&lt;/p&gt;
&lt;p&gt;
I realize we could use normal .NET serialization (binary or SOAP), but XmlSerialization
was ideal for the task at hand.
&lt;/p&gt;
&lt;p&gt;
Hopefully the changes they are making to XML Serialization for Indigo will make this
scenario OK.
&lt;/p&gt;
&lt;p&gt;
Am I missing anything obvious? 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=ac7067d9-c2f5-4480-ab1a-2f04ffa6df97" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,ac7067d9-c2f5-4480-ab1a-2f04ffa6df97.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=c7172adf-26eb-493d-a7ab-389b73e0a17b</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,c7172adf-26eb-493d-a7ab-389b73e0a17b.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,c7172adf-26eb-493d-a7ab-389b73e0a17b.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=c7172adf-26eb-493d-a7ab-389b73e0a17b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My article on the <a href="http://www.aspnetpro.com/features/2004/02/asp200402bn_f/asp200402bn_f.asp">Microsoft
Application Blocks</a> is now live on the asp.netPRO site. Unfortunately for
some, you have to be a subscriber to access it. It will be in the next print mag that
comes out as well.
</p>
        <p>
The article covers the blocks at a high level, then drills down into the DAAB and
the UIP blocks. I have other articles on the site for the <a href="http://www.aspnetpro.com/newsletterarticle/2003/10/asp200310nb_l/asp200310nb_l.asp">CMAB
block</a> and have one on the EMAB coming out soon online as well. These latter
two are not locked to subscribers only.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=c7172adf-26eb-493d-a7ab-389b73e0a17b" />
      </body>
      <title>Microsoft Application Blocks Article up on asp.netPRO site</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,c7172adf-26eb-493d-a7ab-389b73e0a17b.aspx</guid>
      <link>http://briannoyes.net/2004/01/09/MicrosoftApplicationBlocksArticleUpOnAspnetPROSite.aspx</link>
      <pubDate>Fri, 09 Jan 2004 18:32:22 GMT</pubDate>
      <description>&lt;p&gt;
My article on the &lt;a href="http://www.aspnetpro.com/features/2004/02/asp200402bn_f/asp200402bn_f.asp"&gt;Microsoft
Application Blocks&lt;/a&gt;&amp;nbsp;is now live on the asp.netPRO site. Unfortunately for
some, you have to be a subscriber to access it. It will be in the next print mag that
comes out as well.
&lt;/p&gt;
&lt;p&gt;
The article covers the blocks at a high level, then drills down into the DAAB and
the UIP blocks. I have other articles on the site for the &lt;a href="http://www.aspnetpro.com/newsletterarticle/2003/10/asp200310nb_l/asp200310nb_l.asp"&gt;CMAB
block&lt;/a&gt;&amp;nbsp;and have one on the EMAB coming out soon online as well. These latter
two are not locked to subscribers only.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=c7172adf-26eb-493d-a7ab-389b73e0a17b" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,c7172adf-26eb-493d-a7ab-389b73e0a17b.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=1a4079d0-21ad-4951-949d-e60120a95e9d</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,1a4079d0-21ad-4951-949d-e60120a95e9d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,1a4079d0-21ad-4951-949d-e60120a95e9d.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=1a4079d0-21ad-4951-949d-e60120a95e9d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://weblogs.asp.net/cfranklin/">Carl Franklin</a> was kind enough to invite
me to interview on <a href="http://www.franklins.net/dotnetrocks">.NET Rocks!</a> and
we just finished taping. I was a little nervous knowing the size the show's audience
has grown to, being a dedicated listener myself. But Carl is a master at doing these
things and just made it feel like a good techie geek conversation between friends.
</p>
        <p>
We focused mainly on ClickOnce, which is one of the things I have been spending most
of my time focusing on in Whidbey, and covered all the things that make ClickOnce
a great thing. I also got to brag a little on <a href="/lifebeforeprogramming.aspx">what
I used to do</a>, and put a plug in for <a href="/bnoyes/PermaLink.aspx?guid=b5b05c5a-445c-44db-b9cd-3ff0839eaef3">my
book</a>.
</p>
        <p>
You just can't buy good publicity like that. Unless I sucked....? :P
</p>
        <p>
Should be up on the site in a few weeks.
</p>
        <p>
Thanks Carl!!
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=1a4079d0-21ad-4951-949d-e60120a95e9d" />
      </body>
      <title>Done taping .NET Rocks!</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,1a4079d0-21ad-4951-949d-e60120a95e9d.aspx</guid>
      <link>http://briannoyes.net/2004/01/06/DoneTapingNETRocks.aspx</link>
      <pubDate>Tue, 06 Jan 2004 20:25:08 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://weblogs.asp.net/cfranklin/"&gt;Carl Franklin&lt;/a&gt; was kind enough to invite
me to interview on &lt;a href="http://www.franklins.net/dotnetrocks"&gt;.NET Rocks!&lt;/a&gt; and
we just finished taping. I was a little nervous knowing the size the show's audience
has grown to, being a dedicated listener myself. But Carl is a master at doing these
things and just made it feel like a good techie geek conversation between friends.
&lt;/p&gt;
&lt;p&gt;
We focused mainly on ClickOnce, which is one of the things I have been spending most
of my time focusing on in Whidbey, and covered all the things that make ClickOnce
a great thing. I also got to brag a little on &lt;a href="/lifebeforeprogramming.aspx"&gt;what
I used to do&lt;/a&gt;, and put a plug in for &lt;a href="/bnoyes/PermaLink.aspx?guid=b5b05c5a-445c-44db-b9cd-3ff0839eaef3"&gt;my
book&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
You just can't buy good publicity like that. Unless I sucked....? :P
&lt;/p&gt;
&lt;p&gt;
Should be up on the site in a few weeks.
&lt;/p&gt;
&lt;p&gt;
Thanks Carl!!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=1a4079d0-21ad-4951-949d-e60120a95e9d" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,1a4079d0-21ad-4951-949d-e60120a95e9d.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=8108113a-78c9-4246-ae06-42ed41c0a5e7</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,8108113a-78c9-4246-ae06-42ed41c0a5e7.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,8108113a-78c9-4246-ae06-42ed41c0a5e7.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=8108113a-78c9-4246-ae06-42ed41c0a5e7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
While reflecting on yesterday's post on SOA, I realized I fell into the same old trap
again that many are guilty of - blurring the distinction between Services and SOA.
Most of what I was talking about in that post was really comparing Services to components
or objects, not comparing SOA to component oriented or object oriented development.
SOA is really about how you design and build systems composed of services, not about
what a service is. I have fell into this trap a number of times, because talking about
SOA inevitably leads to first defining what a service is and how it relates to components
and objects, which is basically where my post left off. SOA is a much bigger beast,
and I have to agree with Sam's post that it does lead to different methodologies at
the high level architecture and design level. But at some point in that process, you
have to build a service or services, and at that point you generally start to step
right back into the comfortable world of component and object based development.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=8108113a-78c9-4246-ae06-42ed41c0a5e7" />
      </body>
      <title>Oops I did it again... Service != SOA</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,8108113a-78c9-4246-ae06-42ed41c0a5e7.aspx</guid>
      <link>http://briannoyes.net/2003/12/09/OopsIDidItAgainServiceSOA.aspx</link>
      <pubDate>Tue, 09 Dec 2003 00:29:55 GMT</pubDate>
      <description>&lt;p&gt;
While reflecting on yesterday's post on SOA, I realized I fell into the same old trap
again that many are guilty of - blurring the distinction between Services and SOA.
Most of what I was talking about in that post was really comparing Services to components
or objects, not comparing SOA to component oriented or object oriented development.
SOA is really about how you design and build systems composed of services, not about
what a service is. I have fell into this trap a number of times, because talking about
SOA inevitably leads to first defining what a service is and how it relates to components
and objects, which is basically where my post left off. SOA is a much bigger beast,
and I have to agree with Sam's post that it does lead to different methodologies at
the high level architecture and design level. But at some point in that process, you
have to build a service or services, and at that point you generally start to step
right back into the comfortable world of component and object based development.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=8108113a-78c9-4246-ae06-42ed41c0a5e7" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,8108113a-78c9-4246-ae06-42ed41c0a5e7.aspx</comments>
      <category>Architecture</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=b00dd7f2-3630-4e00-adde-29a852bc9356</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,b00dd7f2-3630-4e00-adde-29a852bc9356.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,b00dd7f2-3630-4e00-adde-29a852bc9356.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=b00dd7f2-3630-4e00-adde-29a852bc9356</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>SOA != Death of components and OOP</strong>
        </p>
        <p>
          <a href="http://samgentile.com/blog/posts/10813.aspx">Sam</a> is trying to get his
head around SOA, along with many of us. He states:
</p>
        <p>
“I must confess SOA to be one of those<strong> paradigm shifts</strong> - <em>it
really does mean the death of objects at least as we know them</em>.”
</p>
        <p>
I don't see it that way at all, any more than the development of component-oriented
development meant the death of OOP. I see SOA as a semi-formalization of a higher
level of abstraction that is needed in large scale applications. OOP developed as
a good abstraction and way of encapsulting state and behavior in small-grained
pieces of code for maintainability and (*potential*) reuse. Components evolved to
encapsulate meduim grained chunks of functionality at a level where you could start
to compose systems from pieces that could be more easily understood, managed, maintained,
and yes, sometimes reused. I see SOA as a further evolution down that path - encapsulating
functionality and processes at a course grained level - making it easier to describe
and compose larger systems out of collaborating, interrelated parts. 
</p>
        <p>
I don't think SOA means the death of OOP or Components at all. Just like most people
build components using OOP, I think most people will built SOAs using OOP and Components.
They are not competing concepts but complementary.
</p>
        <p>
Indigo gets into the game by not forcing you to choose up front in and all or nothing
fashion about which particular communication technology is going to be used to let
services collaborate by using the abstraction of SOA. If you have two pieces of a
system, or two systems that need to communicate and share information, focus on the
communication contract, not the implementation mechanism. Maybe for now they are both
going to be sitting on the same machine, but you want strong security and have more
than one resource manager - a good fit for Enterprise Services. Next year you find
you need to scale out or relocate those services and now there is a firewall in between.
Now Web Services start to make more sense. Today you would need a significant rewrite
of the application. With Indigo it would mostly be tweaking configuration.
</p>
        <p>
I spent a lot of time looking at, writing on, and speaking about the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/uip.asp">Microsoft
Application Blocks</a> before attending a workshop on Indigo in Redmond back
in September, and it helped me understand Indigo in a big way. Many of the application
blocks use abstractions of Providers and Publishers that can be configured and plugged
in to change the behavior of the block without needing to change any of the application
code. This is done by adding classes (components really) that implement the interfaces
that constitute the contract of the block, and using config files to get them loaded
dynamically at runtime. The application just programs against the interface, so it
doesn't care which provider or publisher is servicing the functionality. They are
very slick. 
</p>
        <p>
The <a href="http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=9c29a963-594e-4e7a-9c45-576198df8058">Shadowfax
project</a> Sam mentions is another block in development addressing SOA.
</p>
        <p>
With SOA, the contract just migrates from being a binary interface specification to
being a more abstract and platform neutral WSDL specification. How you satisfy that
contract depends on the requirements of your application.
</p>
        <p>
Bottom line, I see SOA building on OOP and Components conceptually, and see SOA applications
being built with OOP and components. I hope people don't decide that this
means they should go back to procedural programming. 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=b00dd7f2-3630-4e00-adde-29a852bc9356" />
      </body>
      <title>SOA != Death of components and OOP</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,b00dd7f2-3630-4e00-adde-29a852bc9356.aspx</guid>
      <link>http://briannoyes.net/2003/12/07/SOADeathOfComponentsAndOOP.aspx</link>
      <pubDate>Sun, 07 Dec 2003 13:48:42 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;SOA != Death of components and OOP&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://samgentile.com/blog/posts/10813.aspx"&gt;Sam&lt;/a&gt; is trying to get his
head around SOA, along with many of us. He states:
&lt;/p&gt;
&lt;p&gt;
&amp;#8220;I must confess SOA to be one of those&lt;strong&gt; paradigm shifts&lt;/strong&gt; - &lt;em&gt;it
really does mean the death of objects at least as we know them&lt;/em&gt;.&amp;#8221;
&lt;/p&gt;
&lt;p&gt;
I don't see it that way at all, any more than the development of component-oriented
development meant the death of OOP. I see SOA as a semi-formalization of a higher
level of abstraction that is needed in large scale applications. OOP developed as
a good abstraction and way of&amp;nbsp;encapsulting state and behavior in small-grained
pieces of code for maintainability and (*potential*) reuse. Components evolved to
encapsulate meduim grained chunks of functionality at a level where you could start
to compose systems from pieces that could be more easily understood, managed, maintained,
and yes, sometimes reused. I see SOA as a further evolution down that path - encapsulating
functionality and processes at a course grained level - making it easier to describe
and compose larger systems out of collaborating, interrelated parts. 
&lt;/p&gt;
&lt;p&gt;
I don't think SOA means the death of OOP or Components at all. Just like most people
build components using OOP, I think most people will built SOAs using OOP and Components.
They are not competing concepts but complementary.
&lt;/p&gt;
&lt;p&gt;
Indigo gets into the game by not forcing you to choose up front in and all or nothing
fashion about which particular communication technology is going to be used to let
services collaborate by using the abstraction of SOA. If you have two pieces of a
system, or two systems that need to communicate and share information, focus on the
communication contract, not the implementation mechanism. Maybe for now they are both
going to be sitting on the same machine, but you want strong security and have more
than one resource manager - a good fit for Enterprise Services. Next year you find
you need to scale out or relocate those services and now there is a firewall in between.
Now Web Services start to make more sense. Today you would need a significant rewrite
of the application. With Indigo it would mostly be tweaking configuration.
&lt;/p&gt;
&lt;p&gt;
I spent a lot of time looking at, writing on, and speaking about the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/uip.asp"&gt;Microsoft
Application Blocks&lt;/a&gt;&amp;nbsp;before attending a workshop on Indigo in Redmond back
in September, and it helped me understand Indigo in a big way. Many of the application
blocks use abstractions of Providers and Publishers that can be configured and plugged
in to change the behavior of the block without needing to change any of the application
code. This is done by adding classes (components really) that implement the interfaces
that constitute the contract of the block, and using config files to get them loaded
dynamically at runtime. The application just programs against the interface, so it
doesn't care which provider or publisher is servicing the functionality. They are
very slick. 
&lt;/p&gt;
&lt;p&gt;
The &lt;a href="http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=9c29a963-594e-4e7a-9c45-576198df8058"&gt;Shadowfax
project&lt;/a&gt; Sam mentions is another block in development addressing SOA.
&lt;/p&gt;
&lt;p&gt;
With SOA, the contract just migrates from being a binary interface specification to
being a more abstract and platform neutral WSDL specification. How you satisfy that
contract depends on the requirements of your application.
&lt;/p&gt;
&lt;p&gt;
Bottom line, I see SOA building on OOP and Components conceptually, and see SOA applications
being&amp;nbsp;built&amp;nbsp;with OOP and components. I hope people don't decide that this
means they should&amp;nbsp;go back to procedural programming.&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=b00dd7f2-3630-4e00-adde-29a852bc9356" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,b00dd7f2-3630-4e00-adde-29a852bc9356.aspx</comments>
      <category>Architecture</category>
    </item>
  </channel>
</rss>