<?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>Wandering through the Wilderness - Real World</title>
    <link>http://www.julmar.com/blog/mark/</link>
    <description>... a journey through WPF, MVVM and .NET4</description>
    <language>en-us</language>
    <copyright>Mark Smith</copyright>
    <lastBuildDate>Mon, 06 Jul 2009 18:24:44 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>mark@julmar.com</managingEditor>
    <webMaster>mark@julmar.com</webMaster>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=3e5e25ec-d3e6-4a15-9fbb-aeb7e354583e</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,3e5e25ec-d3e6-4a15-9fbb-aeb7e354583e.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,3e5e25ec-d3e6-4a15-9fbb-aeb7e354583e.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=3e5e25ec-d3e6-4a15-9fbb-aeb7e354583e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A project I've been working on for the last two months is finally online in beta form
- check out
</p>
        <p>
          <a href="http://rcat.codeplex.com/">http://rcat.codeplex.com/</a>
        </p>
        <p>
It's essentially a biological alignment viewer for RNA sequences.  Here's a couple
of screen shots:
</p>
        <p>
          <strong>Alignment Viewer</strong>
        </p>
        <p>
          <img style="WIDTH: 648px; HEIGHT: 383px" border="0" src="http://www.julmar.com/blog/mark/content/binary/rCat001.jpg" width="830" height="488" />
        </p>
        <p>
          <strong>2D Structure Viewer</strong>
        </p>
        <p>
          <img style="WIDTH: 720px; HEIGHT: 441px" border="0" src="http://www.julmar.com/blog/mark/content/binary/rCat002.jpg" width="812" height="495" />
        </p>
        <p>
          <strong>2D Circle relationship Viewer</strong>
        </p>
        <p>
          <img style="WIDTH: 767px; HEIGHT: 403px" border="0" src="http://www.julmar.com/blog/mark/content/binary/rCat003.jpg" width="883" height="489" />
        </p>
        <p>
You can download the source code from the above link to play with it - it's a MVVM
implementation and has quite a bit of interesting optimizations in it for performance
purposes, including a read-only data virtualization for large sequence manipulation. 
The next release will include a full read/write implementation so watch the project
if you are interested!
</p>
        <p>
 
</p>
      </body>
      <title>rCAT 1.0 beta is online</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,3e5e25ec-d3e6-4a15-9fbb-aeb7e354583e.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2009/07/06/rCAT10BetaIsOnline.aspx</link>
      <pubDate>Mon, 06 Jul 2009 18:24:44 GMT</pubDate>
      <description>&lt;p&gt;
A project I've been working on for the last two months is finally online in beta form
- check out
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://rcat.codeplex.com/"&gt;http://rcat.codeplex.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
It's essentially a biological alignment viewer for RNA sequences.&amp;nbsp; Here's a couple
of screen shots:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Alignment Viewer&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img style="WIDTH: 648px; HEIGHT: 383px" border=0 src="http://www.julmar.com/blog/mark/content/binary/rCat001.jpg" width=830 height=488&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2D Structure Viewer&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img style="WIDTH: 720px; HEIGHT: 441px" border=0 src="http://www.julmar.com/blog/mark/content/binary/rCat002.jpg" width=812 height=495&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2D Circle relationship Viewer&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img style="WIDTH: 767px; HEIGHT: 403px" border=0 src="http://www.julmar.com/blog/mark/content/binary/rCat003.jpg" width=883 height=489&gt;
&lt;/p&gt;
&lt;p&gt;
You can download the source code from the above link to play with it - it's a MVVM
implementation and has quite a bit of interesting optimizations in it for performance
purposes, including a read-only data virtualization for large sequence manipulation.&amp;nbsp;
The next release will include a full read/write implementation so watch the project
if you are interested!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,3e5e25ec-d3e6-4a15-9fbb-aeb7e354583e.aspx</comments>
      <category>.NET</category>
      <category>Code</category>
      <category>Real World</category>
      <category>WPF</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=4e4f6f4e-ca26-48e3-b096-c8dfc282209f</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,4e4f6f4e-ca26-48e3-b096-c8dfc282209f.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=4e4f6f4e-ca26-48e3-b096-c8dfc282209f</wfw:commentRss>
      <title>Creating Extensible Applications with MAF (System.AddIn)</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,4e4f6f4e-ca26-48e3-b096-c8dfc282209f.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2008/05/06/CreatingExtensibleApplicationsWithMAFSystemAddIn.aspx</link>
      <pubDate>Tue, 06 May 2008 21:46:26 GMT</pubDate>
      <description>
&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin-top:0in;
	mso-para-margin-right:0in;
	mso-para-margin-bottom:10.0pt;
	mso-para-margin-left:0in;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-ascii-font-family:Cambria;
	mso-ascii-theme-font:minor-latin;
	mso-hansi-font-family:Cambria;
	mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:shapedefaults v:ext="edit" spidmax="2050"/&gt;
&lt;/xml&gt;&lt;![endif]--&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:shapelayout v:ext="edit"&gt;
  &lt;o:idmap v:ext="edit" data="1"/&gt;
 &lt;/o:shapelayout&gt;&lt;/xml&gt;&lt;![endif]--&gt;
&lt;div class="Section1"&gt;
&lt;h1&gt;
&lt;/h1&gt;
&lt;p class="MsoNormal"&gt;
&lt;br&gt;
Last month, my colleague, &lt;a href="http://www.develop.com/us/technology/bio.aspx?id=87"&gt;Pinku
Surana&lt;/a&gt;, wrote an article about .NET AppDomains and how they can be used to provide
component isolation and make your applications more reliable.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;If
you missed it, you can read the &lt;a href="http://www.develop.com/us/technology/technology.aspx?tech=all"&gt;Developments
archives&lt;/a&gt; on Developmentor’s website.&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;This month,
I’d like to continue exploring reliability and extensibility by introducing you to
a new framework included with .NET 3.5: The Managed Add-in Framework (MAF), sometimes
referred to as System.AddIn.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Developers (and managers) have long desired a way to easily create extensible applications
that allow new features to be added without jeopardizing the stability of the existing
code base.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The .NET framework has provided the underlying
support to accomplish this from the very beginning through the reflection API and
AppDomain support Pinku examined last month.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;MAF builds
on that fundamental support to provide a higher-level service that allow you to dynamically
discover, load, secure and interact with external assemblies used to provide features
for your application.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Several common architectural requirements
are made trivial with MAF:
&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="text-indent: -0.25in;"&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;1)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;!--[endif]--&gt;Isolate aspects of your code for security reasons or partial-trust scenarios.
&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in;"&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;2)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;!--[endif]--&gt;Allow business partners to extend your application safely without access
to the source code; Adobe Illustrator is a great example of this style of application.
&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in;"&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;3)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;!--[endif]--&gt;Separate volatile sections of your application out – where depending
on the customer the application needs to execute different sets of code.
&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in;"&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;4)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;!--[endif]--&gt;Add or change code without unloading the application – for example pay-to-play
scenarios, or where you need to update an assembly but the application must continue
to run.
&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="text-indent: -0.25in;"&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;5)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;!--[endif]--&gt;Develop and evolve different sections of the application in parallel
without any fear of destabilizing one based on the other.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
If any of these scenarios sound like something you could utilize in your application
then you should know about MAF!
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
At the center of the MAF-based application is the pipeline.
&lt;/p&gt;
&lt;h2&gt;The Pipeline
&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;
Communication between add-ins and the host application is strictly regulated by the
pipeline.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The pipeline is dynamically created by MAF through
a set of loosely-coupled components which are used to version, marshal and transform
the data as it passes back and forth between the host and each loaded add-in.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;span style=""&gt;
&lt;!--[if gte vml 1]&gt;&lt;v:shapetype
 id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
 path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;
 &lt;v:stroke joinstyle="miter"/&gt;
 &lt;v:formulas&gt;
  &lt;v:f eqn="if lineDrawn pixelLineWidth 0"/&gt;
  &lt;v:f eqn="sum @0 1 0"/&gt;
  &lt;v:f eqn="sum 0 0 @1"/&gt;
  &lt;v:f eqn="prod @2 1 2"/&gt;
  &lt;v:f eqn="prod @3 21600 pixelWidth"/&gt;
  &lt;v:f eqn="prod @3 21600 pixelHeight"/&gt;
  &lt;v:f eqn="sum @0 0 1"/&gt;
  &lt;v:f eqn="prod @6 1 2"/&gt;
  &lt;v:f eqn="prod @7 21600 pixelWidth"/&gt;
  &lt;v:f eqn="sum @8 21600 0"/&gt;
  &lt;v:f eqn="prod @7 21600 pixelHeight"/&gt;
  &lt;v:f eqn="sum @10 21600 0"/&gt;
 &lt;/v:formulas&gt;
 &lt;v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/&gt;
 &lt;o:lock v:ext="edit" aspectratio="t"/&gt;
&lt;/v:shapetype&gt;&lt;v:shape id="O_x0020_2" o:spid="_x0000_i1028" type="#_x0000_t75"
 style='width:6in;height:81pt;visibility:visible' o:gfxdata="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

"&gt;
 &lt;v:imagedata src="Creating%20Extensible%20Applications%20with%20MAF_files/image001.png"
  o:title="" croptop="-786f" cropbottom="-414f"/&gt;
 &lt;o:lock v:ext="edit" aspectratio="f"/&gt;
&lt;/v:shape&gt;&lt;![endif]--&gt;
&lt;!--[if !vml]--&gt;&lt;img src="http://www.julmar.com/blog/mark/content/binary/image001.png" alt="image001.png" border="0" height="102" width="557"&gt;
&lt;br&gt;
&lt;!--[endif]--&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Each section of the pipeline is contained in a separate assembly, loaded as necessary
to manage the specific add-in.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;MAF discovers each component
and then loads them on request using reflection.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
For reliability, MAF allows optional isolation boundaries to be created between the
add-in and host – everything to the left of the contract is loaded into the main (host)
AppDomain and everything to the right loaded into a newly created AppDomain which
has its own security permission set.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The isolation can
also be done through cross-process calls if true process-level isolation is necessary.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Under
the covers, the system uses traditional remoting calls to do the work of marshaling
calls back and forth.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Breaking down the pipeline, there are three main parts starting in the center with
the contract.
&lt;/p&gt;
&lt;h2&gt;Contract
&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;
As you might expect, MAF is based on interface contracts.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Interfaces
allow classes in an application to be loosely coupled, reducing the risk when changes
are made between dependent sections of the code.&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;The
interface contract is shared between the host and add-in and once it has been established,
it should never be changed.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Consider the simple example of a translator program.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The
host will expect to load one or more translator add-ins that will do some work on
an inbound string and return the results.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;To accomplish
this, I might create an &lt;b style=""&gt;ITranslator&lt;/b&gt; interface that looks like:
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;[AddInContract]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;public interface ITranslator
: IContract&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
Translate(string input);&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;br&gt;
}&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;br&gt;
Notice that the interface derives from &lt;b style=""&gt;IContract&lt;/b&gt;. &lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;This
is a requirement for add-in contracts and is what will be used to provide marshalling
support when the pipeline is established.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;We also need
to decorate the interface with the &lt;b style=""&gt;[AddInContract]&lt;/b&gt; attribute – this
is the marker used by MAF to identify the contract when it is dynamically constructing
the pipeline.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Both of these types come from the &lt;b style=""&gt;System.AddIn.Pipeline&lt;/b&gt; namespace
in &lt;b style=""&gt;System.AddIn.Contract.dll&lt;/b&gt;.
&lt;/p&gt;
&lt;h2&gt;Views
&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;
Moving to the edges, we find the views.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;This is the code
that the add-in and host directly interact with.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;It represents
a host or add-in specific “view” of the contract and, like the contract, is contained
in a separate assembly.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Both of the view classes will echo the structure of the contract, but not actually
be dependent upon the contract. &lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;For example, our host
side view might look like this:
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;public abstract class
TranslatorHostView&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public
abstract string Translate(string input);&lt;br&gt;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;br&gt;
The view is commonly exposed as an abstract class to make it look more natural when
used by the host, but an interface will work just as well.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The
host uses the view directly when communicating with any add-in based on the contract.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
On the add-in side, we have an almost identical class – except we decorate this type
with the &lt;b style=""&gt;[AddInBase]&lt;/b&gt; attribute so MAF knows which side of the pipeline
this view is for (the add-in).&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;This is located in
the &lt;b style=""&gt;System.AddIn.Pipeline&lt;/b&gt; namespace in the &lt;b style=""&gt;System.AddIn&lt;/b&gt; assembly.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
When we create each add-in, the implementation will use this type as the base class.
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;[AddInBase]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;public abstract class
TranslatorAddInView&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public
abstract string Translate(stringinp);&lt;br&gt;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;h2&gt;Adapters
&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;
The last piece of the pipeline is the adapters.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The adapters
play a very special role in the pipeline – they are the glue that binds the contract
to the view: implementing lifetime management and any necessary data conversion between
the two ends.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
It may seem redundant to have this class, but by separating the view from the contract
we introduce version tolerance into our architecture – the host can version independently
of the add-in and vice-versa.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Depending on the situation,
the adapters can be as simple as a pass-through class, or can provide higher-level
services to allow non-serializable types to be marshaled across the isolation boundaries.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
On the host side, the adapter will implement the view (remember it is either an interface
or abstract class).&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;It will be passed a reference to the
contract in the constructor and it is responsible for connecting the two together.
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;[HostAdapter]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;public class TranslatorHostViewToContract
: &lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&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; &lt;/span&gt;TranslatorHostView&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ITranslator
_contract;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ContractHandle
_lifetime;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public
TranslatorHostViewToContract(&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&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;ITranslator
contract)&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;_contract
= contract;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_lifetime
= new ContractHandle(contract);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public
override string Translate(string inp)&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;return
_contract.Translate(inp);&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;br&gt;
In this simple example, the code caches off the contract interface.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;This
is a remoting proxy to the actual loaded add-in.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The adapter
then implements the &lt;b style=""&gt;Translate&lt;/b&gt; method and passes it forward to the
contract for implementation.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;If we had non-serializable
types, then the adapter would be responsible for converting them into something that &lt;i style=""&gt;was&lt;/i&gt; serializable.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
It also provides some lifetime management for the contract.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Because
the contract is a remoting proxy and is likely running in a separate AppDomain (or
even process) we have to be concerned with how long it lives.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;MAF
provides all the support for this through the &lt;b style=""&gt;ContractHandle&lt;/b&gt; class.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Most
of the time, all you will need to do is store a &lt;b style=""&gt;ContractHandle&lt;/b&gt; in
your host adapter and then pass it the inbound contract to wrap in your constructor.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Finally, in order for MAF to identify this class, it must be decorated with the &lt;b style=""&gt;[HostAdapter]&lt;/b&gt; attribute
from the &lt;b style=""&gt;System.AddIn.Pipeline&lt;/b&gt; namespace out of the &lt;b style=""&gt;System.AddIn.dll&lt;/b&gt;. 
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
The add-in side looks very similar, but does the opposite: it makes the add-in view
look like the contract.
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;[AddInAdapter]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;public class TranslatorAddInViewToContract
: 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ContractBase,
ITranslator&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TranslatorAddInView
_view;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public
TranslatorAddInViewToContract(&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&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; &lt;/span&gt;TranslatorView
view)&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;_view
= view;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;i&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public
string Translate(string inp)&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;{&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return
_view.Translate(inp);&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;
&lt;br&gt;
MAF passes the view to the constructor and the class caches the reference off in a
field.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;It implements the contract (&lt;b style=""&gt;ITranslator&lt;/b&gt;)
and &lt;b style=""&gt;ContractBase&lt;/b&gt; which provides the implementation of the &lt;b style=""&gt;IContract&lt;/b&gt; interface
for us (remember this was a required interface on our contract).&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;As
the host makes calls to the contract interface, this class will translate those calls
to the add-in view, which as you will see is the implementation provided by the add-in
itself.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Note how the &lt;b style=""&gt;[AddInAdapter]&lt;/b&gt; attribute
is used to mark this class so MAF can discover it.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
If it seems like all the above is a lot of repetitious, boilerplate code well.. you’re
right!&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;To make it easier on the developer to create the
pipeline components, the MAF team has created a &lt;a href="http://www.codeplex.com/clraddins"&gt;pipeline
builder&lt;/a&gt; available at http://www.codeplex.com/clraddins.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;It
takes the contract assembly and then generates the views and adapters from it: 
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;span style=""&gt;
&lt;!--[if gte vml 1]&gt;&lt;v:shape
 id="P_x0020_3" o:spid="_x0000_i1027" type="#_x0000_t75" alt="image1.jpg"
 style='width:6in;height:284pt;visibility:visible;mso-wrap-style:square'&gt;
 &lt;v:imagedata src="Creating%20Extensible%20Applications%20with%20MAF_files/image003.jpg"
  o:title="image1.jpg"/&gt;
 &lt;v:textbox style='mso-rotate-with-shape:t'/&gt;
&lt;/v:shape&gt;&lt;![endif]--&gt;
&lt;!--[if !vml]--&gt;&lt;img src="http://www.julmar.com/blog/mark/content/binary/image003.jpg" alt="image003.jpg" border="0" height="623" width="947"&gt;
&lt;br&gt;
&lt;!--[endif]--&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h2&gt;Creating an add-in
&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;
Once the pipeline pieces are built you can create add-ins.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Each
add-in provides an implementation of the abstract add-in view.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;For
example, we might provide a BabelFish add-in for universalized translation:
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;[AddIn(“BabelFishTranslator”, 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Description=“Universal
translator”, 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Version=“1.0.0.0”,
Publisher=“Zaphod Beeblebrox”]&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;public class BabelFishAddIn
: TranslatorAddInView&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public
string Translate(string input) 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;...&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;br&gt;
The add-in implements the &lt;b style=""&gt;AddInView&lt;/b&gt;, providing a concrete implementation
of the &lt;b style=""&gt;Translate&lt;/b&gt; method.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;It is decorated
with the &lt;b style=""&gt;[AddIn]&lt;/b&gt; attribute that allows it to provide a name, version,
description and other data the host can use to decide whether it is a useful translator.
&lt;/p&gt;
&lt;h2&gt;Putting the pieces together – the directory structure
&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;
To properly identify each of the components necessary, MAF enforces a particular directory
structure you need to follow for deployment.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Each piece
is stored in a sub-directory off the root of the pipeline directory (this is typically
the APPBASE where the host executable is stored).&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;span style=""&gt;
&lt;!--[if gte vml 1]&gt;&lt;v:shape
 id="O_x0020_4" o:spid="_x0000_i1026" type="#_x0000_t75" style='width:6in;
 height:182pt;visibility:visible' o:gfxdata="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

"&gt;
 &lt;v:imagedata src="Creating%20Extensible%20Applications%20with%20MAF_files/image005.png"
  o:title="" croptop="-1068f" cropbottom="-276f" cropleft="-247f" cropright="-7858f"/&gt;
 &lt;o:lock v:ext="edit" aspectratio="f"/&gt;
&lt;/v:shape&gt;&lt;![endif]--&gt;
&lt;!--[if !vml]--&gt;&lt;img src="http://www.julmar.com/blog/mark/content/binary/image006.png" alt="image006.png" border="0" height="184" width="434"&gt;
&lt;br&gt;
&lt;!--[endif]--&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;!--[if gte vml 1]&gt;&lt;v:shape id="O_x0020_5" o:spid="_x0000_s1026"
 type="#_x0000_t75" style='position:absolute;margin-left:251.55pt;margin-top:36.6pt;
 width:196.3pt;height:156.5pt;z-index:1;visibility:visible;
 mso-wrap-distance-left:9pt;mso-wrap-distance-top:.48pt;
 mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:1.04pt;
 mso-position-horizontal:absolute;mso-position-horizontal-relative:text;
 mso-position-vertical:absolute;mso-position-vertical-relative:text'
 wrapcoords="-221 0 -221 21327 21186 21327 21628 16132 21628 15311 21186 0 -221 0"
 o:gfxdata="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

CwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy

MjIy/8AAEQgAvgDEAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//E

ALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJ

ChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeI

iYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq

8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQH

BQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJico

KSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZ

mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a

AAwDAQACEQMRAD8A9isZ0t9DsXfOPIjHH+6Kf/atv/t/lVMf8i3Y/wDXKP8A9BrjtUW7n1mWG2F2

ZBaxmJorjZHE5ZxuZdw3DgcYbp0rRRTZEpNHe/2rb/7f5Uf2rb/7f5VxK6lfPESDbq0l41tExjYh

Apb5m+YZyFxgY5NMGq30zW0MbWscjicPJIjFSYmAyo3Dg89+PU45ORC52dz/AGrb/wC3+VH9q2/+

3+VcKutX9zLYpa2YbzII55gccKxwcEsuMYJzhu3Apkl5qVzcWjpcQRR/2hJCFEbEsqhx8x3DP3em

OuD7U+RBzv8Ar7zvf7Vt/R/yo/tW39H/ACrgpNWvlRIbK2EtxJPcAA/MNqORj5nXrkd+OwrTiu7g

6s1vOqxRmPdEuwkv03HeDgYJxjHoc0KCYc7Oq/tW39H/ACo/tW3/ANv8qxKKORBzs2/7Vt/9v8qP

7Vt/R/yrEoo5EHOzb/tW29H/ACo/tW29H/KsSijkQc7Nv+1bb0f8qP7VtvR/yrEoo5EHOzb/ALVt

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

BQYAAAAABgAGAH0BAABfLAAAAAA=

"&gt;
 &lt;v:imagedata src="Creating%20Extensible%20Applications%20with%20MAF_files/image007.png"
  o:title=""/&gt;
 &lt;o:lock v:ext="edit" aspectratio="f"/&gt;
 &lt;w:wrap type="tight"/&gt;
&lt;/v:shape&gt;&lt;![endif]--&gt;
&lt;!--[if !vml]--&gt;
&lt;!--[endif]--&gt;The directory names are required, but not case sensitive – each directory
holding a single piece of the pipeline that MAF will load dynamically when it is loading
the add-in.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The host-side view is always located in the
same directory as the host executable itself so it does not need a dedicated directory.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;When
creating your Visual Studio project, it is important to set the output directories
appropriately so that you create the above directory structure.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;In
addition, all references between the components should be marked as CopyLocal = “false”
in Visual Studio to ensure a local copy of the assembly isn’t placed into the sub-directory:&amp;nbsp; &lt;span style=""&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;span style=""&gt;&lt;img src="http://www.julmar.com/blog/mark/content/binary/image008.png" alt="image008.png" border="0" height="159" width="198"&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;h2&gt;Discovering and loading add-ins from the host
&lt;/h2&gt;
&lt;p class="MsoNormal"&gt;
The last piece of the puzzle is the actual loading of add-ins from the host.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;This
is done in three basic steps:
&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="text-indent: -0.25in;"&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;1.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;!--[endif]--&gt;Identify and catalog the add-ins
&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in;"&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;2.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;!--[endif]--&gt;Retrieve the list of specific add-ins based on view or name
&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="text-indent: -0.25in;"&gt;
&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;3.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;!--[endif]--&gt;Activate and use the add-in
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
The first step is to identify the available add-ins for the host.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;This
is done through the &lt;b style=""&gt;System.AddIn.AddInStore&lt;/b&gt; class:
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;string[] errorList
= AddInStore.Rebuild(&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;PipelineStoreLocation.ApplicationBase);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Calling &lt;b style=""&gt;Rebuild&lt;/b&gt; forces MAF to walk the directory structure and create
the pipeline database.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;It stores this information in the
pipeline root directory and returns a list of errors, if any occur.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The
most common errors are missing pipeline components – where MAF is unable to locate
some required portion of the pipeline such as a View or Adapter.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Next, the host will retrieve a list of add-ins based on the host view through the &lt;b style=""&gt;FindAddIns&lt;/b&gt; method
– these will be the add-ins conforming to a specific contract (whatever the view/adapter
is bound to):
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;Collection&amp;lt;AddInToken&amp;gt;
addinTokens = AddInStore.FindAddIns(&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&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;typeof(TranslatorHostView),&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&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;PipelineStoreLocation.ApplicationBase);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
The first parameter is the host view type – so MAF knows what add-ins we are looking
for, the second is the pipeline root directory, which is the same directory passed
to the &lt;b style=""&gt;Rebuild&lt;/b&gt; method and indicates where the pipeline database is
stored.
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
The returning collection represents a series of &lt;i style=""&gt;tokens &lt;/i&gt;that are used
to identify and control the add-ins.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;This is how the host
can examine, activate and unload the add-in.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;To activate
a specific add-in, you can take the token and call &lt;b style=""&gt;Activate&lt;/b&gt;:
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;Collection&amp;lt;AddInToken&amp;gt;
addinTokens;&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;...&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;foreach (AddInToken token in
addinTokens)&lt;br&gt;
{&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TranslatorHostView
view =&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;token.Activate&amp;lt;TranslatorHostView&amp;gt;(&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&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; &lt;/span&gt;AddInSecurityLevel.Internet);&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;string
hello = view.Translate(“Bonjour”);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;...&lt;br&gt;
}&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
The &lt;b style=""&gt;Activate&lt;/b&gt; call loads all the required components, instantiates
the add-in type and returns the host view used to interact with the add-in.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Calls
made to this object will be marshaled back and forth to the add-in using the pipeline.
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
Notice that the parameter passed to &lt;b style=""&gt;Activate&lt;/b&gt; indicates the security
level required.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;There are several overrides that allow
you to dictate exactly how the add-in is loaded.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;You can
load the add-in into a specific AppDomain – the current one for best performance:
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;token.Activate&amp;lt;TranslatorHostView&amp;gt;(AppDomain.CurrentDomain)&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
You can specify a specific permission set to restrict the things the add-in can do
on your behalf:
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;PermissionSet pset = ...;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;token.Activate&amp;lt;TranslatorHostView&amp;gt;(pset);&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;br&gt;
Or you can specify a known permission set based on the CAS zones:
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;img src="http://www.julmar.com/blog/mark/content/binary/image010.png" alt="image010.png" border="0" height="102" width="244"&gt;
&lt;br&gt;
&lt;span style=""&gt;
&lt;!--[if gte vml 1]&gt;&lt;v:shape id="P_x0020_11" o:spid="_x0000_i1025"
 type="#_x0000_t75" alt="image1.JPG" style='width:242pt;height:100pt;
 visibility:visible;mso-wrap-style:square'&gt;
 &lt;v:imagedata src="Creating%20Extensible%20Applications%20with%20MAF_files/image009.png"
  o:title="image1.JPG" chromakey="#f4f4f4"/&gt;
 &lt;v:textbox style='mso-rotate-with-shape:t'/&gt;
&lt;/v:shape&gt;&lt;![endif]--&gt;
&lt;!--[if !vml]--&gt;
&lt;!--[endif]--&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Once the add-in is activated, the host can call it just like any other object – but
never forget that you are likely crossing an isolation barrier!&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Make
sure to design your contracts so that you minimize the number of calls between the
host and add-ins to ensure your performance doesn’t suffer.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
When you are finished with the add-in, you can tell MAF to unload it through the &lt;b style=""&gt;AddInController&lt;/b&gt; associated
with the view:
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;AddInController ctrl
= &lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;AddInController.GetAddInController(view);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNoSpacing"&gt;
&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;ctrl.Shutdown();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;br&gt;
This will unload the add-in side pipeline and then destroy the containing AppDomain
so you release the resources associated with it.
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
There are many other capabilities MAF provides such as versioning, passing collections
and WPF visuals, passing non-serializable types, etc.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;You
can get a pretty decent overview of the features from &lt;a href="http://msdn.microsoft.com/en-us/library/bb384241.aspx"&gt;MSDN&lt;/a&gt; and
the MAF team has a blog at &lt;a href="http://blogs.msdn.com/clraddins/"&gt;&lt;span style="font-family: &amp;quot;Lucida Grande&amp;quot;;"&gt;http://blogs.msdn.com/clraddins/&lt;/span&gt;&lt;/a&gt; that
has some great, practical information on using this new framework.&lt;span style="font-family: &amp;quot;Lucida Grande&amp;quot;; color: black;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,4e4f6f4e-ca26-48e3-b096-c8dfc282209f.aspx</comments>
      <category>.NET</category>
      <category>Code</category>
      <category>Real World</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=b862bda0-ca95-42b9-b557-0f16f15628d6</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,b862bda0-ca95-42b9-b557-0f16f15628d6.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,b862bda0-ca95-42b9-b557-0f16f15628d6.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=b862bda0-ca95-42b9-b557-0f16f15628d6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
About a year ago, I blogged on using the .NET 2.0 facility <b>SynchronizationContext</b> to
create thread-aware components which could be hosted and would "do the right thing"
for callbacks. Here's the <a href="http://www.julmar.com/blog/mark/PermaLink,guid,78805871-cb7b-4ea4-9be8-a8a1d61a15d8.aspx">Link</a> to
that post. 
</p>
        <p>
Recently, I got an email from a reader who wanted to use that paradigm, but wanted
to be able to suspend the operation for some period of time and then resume it later
on. He asked if there was an easy way to modify the sample I presented, and it turns
out that there is. 
</p>
        <p>
It essentially involves three steps: 
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <b>1.</b> In the AsyncStateData structure, add a <b>ManualResetEvent</b> object. This
will be used to trigger the pause/resume behavior. It must be initially set as signaled. 
<br /><b><br />
2.</b> In the actual asynchronous operation loop, add the event into the loop condition
by calling <b>event.WaitOne()</b>. Make sure you have released any locks and the code
can safely be halted at that point in the logic otherwise you may create deadlock
scenarios and other difficult debugging issues. 
<br /><b><br />
3.</b> Add a <b>Pause</b> and <b>Continue</b> method into the class which signals
and resets the event. 
</p>
        </blockquote> Modifying my previous code example, here's what I come up with: 
<h4>Step 1: Add the event to AsyncStateDate
</h4><div class="csharpcode"><pre><span class="lnum"> 1: </span><span class="kwrd">class</span> AsyncStateData</pre><pre><span class="lnum"> 2: </span>{</pre><pre><span class="lnum"> 3: </span><span class="kwrd">private</span> ManualResetEvent
pauseEvent = <span class="kwrd">new</span> ManualResetEvent(<span class="kwrd">true</span>);</pre><pre><span class="lnum"> 4: </span> ...</pre><pre><span class="lnum"> 5: </span>}</pre></div><h4>Step 2: Add event into the loop at a safe point
</h4><div class="csharpcode"><pre><span class="lnum"> 1: </span><span class="kwrd">public
partial</span><span class="kwrd">class</span> Calculator</pre><pre><span class="lnum"> 2: </span>{</pre><pre><span class="lnum"> 3: </span><span class="kwrd">private</span><span class="kwrd">void</span> InternalCalculatePi(<span class="kwrd">int</span> digits,
AsyncStateData</pre><pre><span class="lnum"> 4: </span>asyncData)</pre><pre><span class="lnum"> 5: </span> {</pre><pre><span class="lnum"> 6: </span><span class="kwrd">int</span> completedDigits
= 0;</pre><pre><span class="lnum"> 7: </span><span class="kwrd">for</span> (; !asyncData.canceled
&amp;&amp; pauseEvent.WaitOne(-1, <span class="kwrd">true</span>) &amp;&amp;</pre><pre><span class="lnum"> 8: </span>completedDigits
&lt; digits; completedDigits++)</pre><pre><span class="lnum"> 9: </span> { ... }</pre><pre><span class="lnum"> 10: </span> }</pre><pre><span class="lnum"> 11: </span> </pre><pre><span class="lnum"> 12: </span>...</pre><pre><span class="lnum"> 13: </span>}</pre></div><h4>Step 3: Add a Pause and Continue API
</h4><!-- code formatted by http://manoli.net/csharpformat/ --><div class="csharpcode"><pre><span class="lnum"> 1: </span><span class="kwrd">public
partial</span><span class="kwrd">class</span> Calculator</pre><pre><span class="lnum"> 2: </span>{</pre><pre><span class="lnum"> 3: </span><span class="kwrd">public</span><span class="kwrd">void</span> PauseAsync(<span class="kwrd">object</span> asyncTask)</pre><pre><span class="lnum"> 4: </span> {</pre><pre><span class="lnum"> 5: </span> AsyncStateData
asyncData = asyncTask <span class="kwrd">as</span> AsyncStateData;</pre><pre><span class="lnum"> 6: </span><span class="kwrd">if</span> (asyncData
!= <span class="kwrd">null</span> &amp;&amp; asyncData.running == <span class="kwrd">true</span>)</pre><pre><span class="lnum"> 7: </span> asyncData.pauseEvent.Reset();</pre><pre><span class="lnum"> 8: </span> }</pre><pre><span class="lnum"> 9: </span> </pre><pre><span class="lnum"> 10: </span><span class="kwrd">public</span><span class="kwrd">void</span> ContinueAsync(<span class="kwrd">object</span> asyncTask)</pre><pre><span class="lnum"> 11: </span> {</pre><pre><span class="lnum"> 12: </span> AsyncStateData
asyncData = asyncTask <span class="kwrd">as</span> AsyncStateData;</pre><pre><span class="lnum"> 13: </span><span class="kwrd">if</span> (asyncData
!= <span class="kwrd">null</span> &amp;&amp; asyncData.running == <span class="kwrd">true</span>)</pre><pre><span class="lnum"> 14: </span> asyncData.pauseEvent.Set();</pre><pre><span class="lnum"> 15: </span> }</pre><pre><span class="lnum"> 16: </span>...</pre><pre><span class="lnum"> 17: </span>}</pre></div><br /><br />
There are certainly other ways to do this as well, for example, create a dedicated
Thread object instead of using an Async delegate and then call <b>Suspend</b> on the
thread (and <b>Resume</b> to continue). That can be dangerous if you take locks while
running your async operation so the <b>ManualResetEvent</b> is probably a better solution
from that perspective (since you are blocking in a known location vs. just suspending
the thread arbitrarily and potentially holding onto shared resources. 
</body>
      <title>Adding Pause/Resume into SynchronizationContext based components</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,b862bda0-ca95-42b9-b557-0f16f15628d6.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2007/01/17/AddingPauseResumeIntoSynchronizationContextBasedComponents.aspx</link>
      <pubDate>Wed, 17 Jan 2007 16:11:04 GMT</pubDate>
      <description>&lt;p&gt;
&lt;style type=text/css&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
About a year ago, I blogged on using the .NET 2.0 facility &lt;b&gt;SynchronizationContext&lt;/b&gt; to
create thread-aware components which could be hosted and would "do the right thing"
for callbacks. Here's the &lt;a href="http://www.julmar.com/blog/mark/PermaLink,guid,78805871-cb7b-4ea4-9be8-a8a1d61a15d8.aspx"&gt;Link&lt;/a&gt; to
that post. 
&lt;/p&gt;
&lt;p&gt;
Recently, I got an email from a reader who wanted to use that paradigm, but wanted
to be able to suspend the operation for some period of time and then resume it later
on. He asked if there was an easy way to modify the sample I presented, and it turns
out that there is. 
&lt;/p&gt;
&lt;p&gt;
It essentially involves three steps: 
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;b&gt;1.&lt;/b&gt; In the AsyncStateData structure, add a &lt;b&gt;ManualResetEvent&lt;/b&gt; object. This
will be used to trigger the pause/resume behavior. It must be initially set as signaled. 
&lt;br&gt;
&lt;b&gt;
&lt;br&gt;
2.&lt;/b&gt; In the actual asynchronous operation loop, add the event into the loop condition
by calling &lt;b&gt;event.WaitOne()&lt;/b&gt;. Make sure you have released any locks and the code
can safely be halted at that point in the logic otherwise you may create deadlock
scenarios and other difficult debugging issues. 
&lt;br&gt;
&lt;b&gt;
&lt;br&gt;
3.&lt;/b&gt; Add a &lt;b&gt;Pause&lt;/b&gt; and &lt;b&gt;Continue&lt;/b&gt; method into the class which signals
and resets the event. 
&lt;/p&gt;
&lt;/blockquote&gt; Modifying my previous code example, here's what I come up with: 
&lt;h4&gt;Step 1: Add the event to AsyncStateDate
&lt;/h4&gt;
&lt;div class=csharpcode&gt;&lt;pre&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt;&lt;span class=kwrd&gt;class&lt;/span&gt; AsyncStateData&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt; &lt;span class=kwrd&gt;private&lt;/span&gt; ManualResetEvent
pauseEvent = &lt;span class=kwrd&gt;new&lt;/span&gt; ManualResetEvent(&lt;span class=kwrd&gt;true&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt; ...&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;h4&gt;Step 2: Add event into the loop at a safe point
&lt;/h4&gt;
&lt;div class=csharpcode&gt;&lt;pre&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt;&lt;span class=kwrd&gt;public partial&lt;/span&gt; &lt;span class=kwrd&gt;class&lt;/span&gt; Calculator&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt; &lt;span class=kwrd&gt;private&lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; InternalCalculatePi(&lt;span class=kwrd&gt;int&lt;/span&gt; digits,
AsyncStateData&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt;asyncData)&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt; &lt;span class=kwrd&gt;int&lt;/span&gt; completedDigits
= 0;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt; &lt;span class=kwrd&gt;for&lt;/span&gt; (; !asyncData.canceled
&amp;amp;&amp;amp; pauseEvent.WaitOne(-1, &lt;span class=kwrd&gt;true&lt;/span&gt;) &amp;amp;&amp;amp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt;completedDigits
&amp;lt; digits; completedDigits++)&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 9: &lt;/span&gt; { ... }&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 10: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 11: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 12: &lt;/span&gt;...&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 13: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;h4&gt;Step 3: Add a Pause and Continue API
&lt;/h4&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class=csharpcode&gt;&lt;pre&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt;&lt;span class=kwrd&gt;public partial&lt;/span&gt; &lt;span class=kwrd&gt;class&lt;/span&gt; Calculator&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; PauseAsync(&lt;span class=kwrd&gt;object&lt;/span&gt; asyncTask)&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt; AsyncStateData
asyncData = asyncTask &lt;span class=kwrd&gt;as&lt;/span&gt; AsyncStateData;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt; &lt;span class=kwrd&gt;if&lt;/span&gt; (asyncData
!= &lt;span class=kwrd&gt;null&lt;/span&gt; &amp;amp;&amp;amp; asyncData.running == &lt;span class=kwrd&gt;true&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt; asyncData.pauseEvent.Reset();&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 9: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 10: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; ContinueAsync(&lt;span class=kwrd&gt;object&lt;/span&gt; asyncTask)&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 11: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 12: &lt;/span&gt; AsyncStateData
asyncData = asyncTask &lt;span class=kwrd&gt;as&lt;/span&gt; AsyncStateData;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 13: &lt;/span&gt; &lt;span class=kwrd&gt;if&lt;/span&gt; (asyncData
!= &lt;span class=kwrd&gt;null&lt;/span&gt; &amp;amp;&amp;amp; asyncData.running == &lt;span class=kwrd&gt;true&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 14: &lt;/span&gt; asyncData.pauseEvent.Set();&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 15: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 16: &lt;/span&gt;...&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 17: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
There are certainly other ways to do this as well, for example, create a dedicated
Thread object instead of using an Async delegate and then call &lt;b&gt;Suspend&lt;/b&gt; on the
thread (and &lt;b&gt;Resume&lt;/b&gt; to continue). That can be dangerous if you take locks while
running your async operation so the &lt;b&gt;ManualResetEvent&lt;/b&gt; is probably a better solution from that perspective (since you are blocking in a known location vs. just suspending the thread arbitrarily and potentially holding onto shared resources. </description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,b862bda0-ca95-42b9-b557-0f16f15628d6.aspx</comments>
      <category>.NET</category>
      <category>Code</category>
      <category>Real World</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=8cacb269-767b-4e53-8564-70e6b2dd1c40</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,8cacb269-767b-4e53-8564-70e6b2dd1c40.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,8cacb269-767b-4e53-8564-70e6b2dd1c40.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=8cacb269-767b-4e53-8564-70e6b2dd1c40</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">A DM colleague of mine, <a href="http://nielsb.wordpress.com/2006/08/29/apps-for-a-windows-user-on-osx/">Neils
Berglund</a> noted his required applications under OS X and asked for feedback on
what everyone else is using (assuming you are on OS X anyway). 
<br /><br />
The original question was what RSS reader are you using.. my preference is <a href="http://www.newsgator.com/NetNewsWire.aspx">NetNewsWire</a> as
I was used to the Newsgator line of products when using Windows all the time so it
made an easy transition for me. I also use <b>MarsEdit</b> to update posts on this
blog -- it's not WYSIWYG but it keeps my HTML skills (if I ever had any) from drying
up. 
<br /><br />
So, adding to Neils list, I also use -- 
<ul><li><u>Final Cut Express</u> - for editing movies, I found iMovie to be too limiting. 
</li><li><u>CHMOX</u> - to open and read .CHM (Windows Help) files. 
</li><li><u>DivX codecs</u> - to play my 300+ .divx movies. 
</li><li><u>Smultron</u> - a decent, quick color-coded text editor 
</li><li><u>Virtue Desktops</u> - an awesome window manager. 
</li><li><u>Remote Buddy</u> - allows the Apple Remote to be used to control other applications
such as Power Point. 
</li><li><u>Microsoft Office</u> - I just can't live without Word/Excel/Power Point. I know
Apple has iWork, but it just isn't quite the same. 
</li><li><u>Flip4Mac</u> - Codecs for .WMV (Windows Media), essential in a 99.999% Windows
dominated world. 
</li><li><u>Coverflow</u> - this isn't critical, but it's a fun app to show off - it let's
you view your music through the album covers in a cool, flip-3d style fashion. 
</li></ul><br />
I'm also trying out a .mac membership for backup purposes. Not sure I'll stay with
that, but it is automatic and seems to work even when I travel. 
<br /><br />
So, what things do <b>you</b> think are necessary applications under OS X? 
</body>
      <title>Living in an OS X world</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,8cacb269-767b-4e53-8564-70e6b2dd1c40.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2006/09/01/LivingInAnOSXWorld.aspx</link>
      <pubDate>Fri, 01 Sep 2006 16:15:50 GMT</pubDate>
      <description>A DM colleague of mine, &lt;a href="http://nielsb.wordpress.com/2006/08/29/apps-for-a-windows-user-on-osx/"&gt;Neils
Berglund&lt;/a&gt; noted his required applications under OS X and asked for feedback on
what everyone else is using (assuming you are on OS X anyway). 
&lt;br /&gt;
&lt;br /&gt;
The original question was what RSS reader are you using.. my preference is &lt;a href="http://www.newsgator.com/NetNewsWire.aspx"&gt;NetNewsWire&lt;/a&gt; as
I was used to the Newsgator line of products when using Windows all the time so it
made an easy transition for me. I also use &lt;b&gt;MarsEdit&lt;/b&gt; to update posts on this
blog -- it's not WYSIWYG but it keeps my HTML skills (if I ever had any) from drying
up. 
&lt;br /&gt;
&lt;br /&gt;
So, adding to Neils list, I also use -- 
&lt;ul&gt;
&lt;li&gt;
&lt;u&gt;Final Cut Express&lt;/u&gt; - for editing movies, I found iMovie to be too limiting. 
&lt;li&gt;
&lt;u&gt;CHMOX&lt;/u&gt; - to open and read .CHM (Windows Help) files. 
&lt;li&gt;
&lt;u&gt;DivX codecs&lt;/u&gt; - to play my 300+ .divx movies. 
&lt;li&gt;
&lt;u&gt;Smultron&lt;/u&gt; - a decent, quick color-coded text editor 
&lt;li&gt;
&lt;u&gt;Virtue Desktops&lt;/u&gt; - an awesome window manager. 
&lt;li&gt;
&lt;u&gt;Remote Buddy&lt;/u&gt; - allows the Apple Remote to be used to control other applications
such as Power Point. 
&lt;li&gt;
&lt;u&gt;Microsoft Office&lt;/u&gt; - I just can't live without Word/Excel/Power Point. I know
Apple has iWork, but it just isn't quite the same. 
&lt;li&gt;
&lt;u&gt;Flip4Mac&lt;/u&gt; - Codecs for .WMV (Windows Media), essential in a 99.999% Windows
dominated world. 
&lt;li&gt;
&lt;u&gt;Coverflow&lt;/u&gt; - this isn't critical, but it's a fun app to show off - it let's
you view your music through the album covers in a cool, flip-3d style fashion. 
&lt;/ul&gt;
&lt;br /&gt;
I'm also trying out a .mac membership for backup purposes. Not sure I'll stay with
that, but it is automatic and seems to work even when I travel. 
&lt;br /&gt;
&lt;br /&gt;
So, what things do &lt;b&gt;you&lt;/b&gt; think are necessary applications under OS X?
</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,8cacb269-767b-4e53-8564-70e6b2dd1c40.aspx</comments>
      <category>Real World</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=f9029cb2-81b6-435d-ae36-99a0ffc53d21</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,f9029cb2-81b6-435d-ae36-99a0ffc53d21.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,f9029cb2-81b6-435d-ae36-99a0ffc53d21.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=f9029cb2-81b6-435d-ae36-99a0ffc53d21</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p align="left">
I feel like I've committed adultery.. I've gone and purchased a Mac-Mini. <img src="content/binary/macmini.jpg" border="0" /></p>
        <p>
I pushed my wife to get into email and the Internet.  She's not really into technology
or computers; she'd much rather have a conversation with someone or meet face to face
than to use email as a communication tool.  I kept espousing the value of email,
how easy it is to keep in touch, how quick it is, how you can search for things on
the Internet.  She finally bit the bullet and started using Windows XP on an
old computer we had.  That's when the trouble started.  No sooner had I
gotten her connected and she had contacts and relied on the daily communication, the
computer started flaking out.  First it was the Internet connection itself..
it would just disappear off the network.  The printer would stop working for
no reason - a reboot would generally fix it.  Next it was IE and Outlook Express
not working properly, finally the motherboard just died.  Each of these problems
required me to come in and save the day. 
</p>
        <p>
Now mind you, I'm not at all adverse to looking like the hero to my wife, but the
problem is that she has now gotten it firmly in her head that technology sucks. 
You have to be some kind of geek to keep it running.  Enter the Mac.  I've
got several friends who proselytize to me constantly about the stability and reliability
of their computing platform, how it doesn't have viruses, how they just leave it running
all the time.  I'm hoping these claims are true because I'm tired of keeping
the computers running here.
</p>
        <p>
So, I go down and buy the thing and bring it home in this ridiculously small box. 
Unpacked the thing is about the size of two bricks set side-by-side.  Incredible. 
It's also amazingly quiet.  You can't hear it unless you are using the DVD -
unlike the PC tower which sounded like a jet taking off most of the time.  Now
I know you can get quiet towers, but it's hard to beat the form factor here - I've
not seen anything quite like it in the PC world.
</p>
        <p>
The setup was pretty smooth.  I plugged in the monitor/keyboard/mouse and then
turned it on.  It detected my wireless network and even allowed me to connect
to the NAS drive I use for backups.  I was able to get my wife's email exported
from Outlook Express into the iMail program pretty easily, her address book moved
over too.  Programs seem slower, especially the DVD installs but overall I'm
impressed.
</p>
        <p>
Appearance-wise, OSX is very pretty.  The icons are very nice, and I generally
like the interface.  It's not too drastically different from XP, although I miss
my "tasks" pane which allowed me to do various things without searching through the
interface.  I introduced it t my wife and showed her how to start Safari, the
email program, and Word.  That's pretty much all she needs.  Most of the
kids games installed onto it (funny enough, little kid games are mostly cross-platform
since they use Flash and Quicktime).  So far so good. 
</p>
        <p>
I have had a couple of quirky things that are unsettling.  Starting up multiple
programs really bogs the thing down - I presume that's because it's a slow G4 with
only 512M of memory.  I had Finder lock up on me and I had to figure out the
CTRL+ALT+DEL equivalent on this machine (OPT+APPLE+ESC for those who are interested). 
It didn't recover and I had to power cycle it.. hopefully that won't be a common occurrence. 
</p>
        <p>
I want to try Mono on it and see if I can move some basic .NET code onto the box..
although I've found that computers tend to be more unreliable if I keep messing with
them.
</p>
        <p>
Here's hoping that my laptop won't get jealous and start crashing on me.
</p>
      </body>
      <title>Cheating on my computer..</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,f9029cb2-81b6-435d-ae36-99a0ffc53d21.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2005/08/25/CheatingOnMyComputer.aspx</link>
      <pubDate>Thu, 25 Aug 2005 16:51:18 GMT</pubDate>
      <description>&lt;p align=left&gt;
I feel like I've committed adultery.. I've gone and purchased a Mac-Mini.&amp;nbsp;&lt;img src="content/binary/macmini.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
I pushed my wife to get into email and the Internet.&amp;nbsp; She's not really into technology
or computers; she'd much rather have a conversation with someone or meet face to face
than to use email as a communication tool.&amp;nbsp; I kept espousing the value of email,
how easy it is to keep in touch, how quick it is, how you can search for things on
the Internet.&amp;nbsp; She finally bit the bullet and started using Windows XP on an
old computer we had.&amp;nbsp; That's when the trouble started.&amp;nbsp; No sooner had I
gotten her connected and she had contacts and relied on the daily communication, the
computer started flaking out.&amp;nbsp; First it was the Internet connection itself..
it would just disappear off the network.&amp;nbsp; The printer would stop working for
no reason - a reboot would generally fix it.&amp;nbsp; Next it was IE and Outlook Express
not working properly, finally the motherboard just died.&amp;nbsp; Each of these problems
required me to come in and save the day.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Now mind you, I'm not at all adverse to looking like the hero to my wife, but the
problem is that she has now gotten it firmly in her head that technology sucks.&amp;nbsp;
You have to be some kind of geek to keep it running.&amp;nbsp; Enter the Mac.&amp;nbsp; I've
got several friends who proselytize to me constantly about the stability and reliability
of their computing platform, how it doesn't have viruses, how they just leave it running
all the time.&amp;nbsp; I'm hoping these claims are true because I'm tired of keeping
the computers running here.
&lt;/p&gt;
&lt;p&gt;
So, I go down and buy the thing and bring it home in this ridiculously small box.&amp;nbsp;
Unpacked the thing is about the size of two bricks set side-by-side.&amp;nbsp; Incredible.&amp;nbsp;
It's also amazingly quiet.&amp;nbsp; You can't hear it unless you are using the DVD -
unlike the PC tower which sounded like a jet taking off most of the time.&amp;nbsp; Now
I know you can get quiet towers, but it's hard to beat the form factor here - I've
not seen anything quite like it in the PC world.
&lt;/p&gt;
&lt;p&gt;
The setup was pretty smooth.&amp;nbsp; I plugged in the monitor/keyboard/mouse and then
turned it on.&amp;nbsp; It detected my wireless network and even allowed me to connect
to the NAS drive I use for backups.&amp;nbsp; I was able to get my wife's email exported
from Outlook Express into the iMail program pretty easily, her address book moved
over too.&amp;nbsp; Programs seem slower, especially the DVD installs but overall I'm
impressed.
&lt;/p&gt;
&lt;p&gt;
Appearance-wise, OSX is very pretty.&amp;nbsp; The icons are very nice, and I generally
like the interface.&amp;nbsp; It's not too drastically different from XP, although I miss
my "tasks" pane which allowed me to do various things without searching through the
interface.&amp;nbsp; I introduced it t my wife and showed her how to start Safari, the
email program, and Word.&amp;nbsp; That's pretty much all she needs.&amp;nbsp; Most of the
kids games installed onto it (funny enough, little kid games are mostly cross-platform
since they use Flash and Quicktime).&amp;nbsp; So far so good.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I have had a couple of quirky things that are unsettling.&amp;nbsp; Starting up multiple
programs really bogs the thing down - I presume that's because it's a slow G4 with
only 512M of memory.&amp;nbsp; I had Finder lock up on me and I had to figure out the
CTRL+ALT+DEL equivalent on this machine (OPT+APPLE+ESC for those who are interested).&amp;nbsp;
It didn't recover and I had to power cycle it.. hopefully that won't be a common occurrence.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I want to try Mono on it and see if I can move some basic .NET code onto the box..
although I've found that computers tend to be more unreliable if I keep messing with
them.
&lt;/p&gt;
&lt;p&gt;
Here's hoping that my laptop won't get jealous and start crashing on me.
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,f9029cb2-81b6-435d-ae36-99a0ffc53d21.aspx</comments>
      <category>Real World</category>
    </item>
    <item>
      <trackback:ping>http://www.julmar.com/blog/mark/Trackback.aspx?guid=540a6c4d-1ead-4251-baef-6545622cdd47</trackback:ping>
      <pingback:server>http://www.julmar.com/blog/mark/pingback.aspx</pingback:server>
      <pingback:target>http://www.julmar.com/blog/mark/PermaLink,guid,540a6c4d-1ead-4251-baef-6545622cdd47.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.julmar.com/blog/mark/CommentView,guid,540a6c4d-1ead-4251-baef-6545622cdd47.aspx</wfw:comment>
      <wfw:commentRss>http://www.julmar.com/blog/mark/SyndicationService.asmx/GetEntryCommentsRss?guid=540a6c4d-1ead-4251-baef-6545622cdd47</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm Mark Smith (yeah right!), and I work in the Microsoft .NET and Telephony space. 
I do consulting in the Dallas Texas area and also teach for <a href="http://www.develop.com">DevelopMentor</a>.
</p>
      </body>
      <title>Welcome to my Blog</title>
      <guid isPermaLink="false">http://www.julmar.com/blog/mark/PermaLink,guid,540a6c4d-1ead-4251-baef-6545622cdd47.aspx</guid>
      <link>http://www.julmar.com/blog/mark/2005/08/11/WelcomeToMyBlog.aspx</link>
      <pubDate>Thu, 11 Aug 2005 21:45:46 GMT</pubDate>
      <description>&lt;p&gt;
I'm Mark Smith (yeah right!), and I work in the Microsoft .NET and Telephony space.&amp;nbsp;
I do consulting in the Dallas Texas area and also teach for &lt;a href="http://www.develop.com"&gt;DevelopMentor&lt;/a&gt;.
&lt;/p&gt;</description>
      <comments>http://www.julmar.com/blog/mark/CommentView,guid,540a6c4d-1ead-4251-baef-6545622cdd47.aspx</comments>
      <category>Real World</category>
    </item>
  </channel>
</rss>