<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Disjointed thoughts on software engineering :-)</title><subtitle type="html">Sometimes I just sit down and think...
other times I should sit down and blog!
</subtitle><id>http://blogs.msdn.com/mauroregio/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauroregio/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/mauroregio/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2006-06-07T02:00:00Z</updated><entry><title>Searching is fine…let’s make it easier, or even fun! Part 3</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauroregio/archive/2009/02/19/searching-is-fine-let-s-make-it-easier-or-even-fun-part-3.aspx" /><id>http://blogs.msdn.com/mauroregio/archive/2009/02/19/searching-is-fine-let-s-make-it-easier-or-even-fun-part-3.aspx</id><published>2009-02-19T09:33:36Z</published><updated>2009-02-19T09:33:36Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;Getting Images from Live Search API&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I couldn’t believe it, it was the forth straight snow day !    &lt;br /&gt;Actually, it was getting really nasty out there, with drivers spinning on icy roads and bumping into each others’ car and subzero temperatures. Better stay inside, for sure!     &lt;br /&gt;I would not feel guilty to dedicate a bit more time to keep developing the &lt;a href="http://blogs.msdn.com/mauroregio/archive/2009/02/10/searching-is-fine-let-s-make-it-easier-or-even-fun.aspx"&gt;Image Slide control&lt;/a&gt; for getting images from Live Search through its APIs, described in part 1 of this blog series.&lt;/p&gt;  &lt;h2&gt;&lt;font size="2"&gt;Query and ImageQuery Classes&lt;/font&gt;&lt;/h2&gt;  &lt;p&gt;As you probably read in &lt;a href="http://blogs.msdn.com/mauroregio/archive/2009/02/14/searching-is-fine-let-s-make-it-easier-or-even-fun-part-2.aspx"&gt;part 2&lt;/a&gt;, I had left my work thinking about how to facilitate the creation of Microsoft Live Search queries. What I wanted to develop was a component that would help me reduce the chances of making errors while using the various operators.     &lt;br /&gt;    &lt;br /&gt;I started up defining few enumerations for names and codes of Countries and Languages.     &lt;br /&gt;&amp;#160; It would definitely help me reduce spelling errors. Well, I am sure that is only my problem and you all know how to consistently spell &lt;em&gt;Latvian&lt;/em&gt; and/or &lt;em&gt;Lithuanian&lt;/em&gt; in your code.     &lt;br /&gt;&amp;#160; At the same time, it would avoid the need to look up for cryptic codes. Again, I should know better, and always remember that &lt;em&gt;&amp;quot;zh_chs&amp;quot;,&amp;quot;zh_cht&amp;quot;&lt;/em&gt; are code names for &lt;em&gt;Simplified Chinese&lt;/em&gt; and &lt;em&gt;Traditional Chinese&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;With these types defined, I could extend my &lt;strong&gt;Query&lt;/strong&gt; wrapper object, adding a couple of collections to store the &lt;em&gt;list of Countries and Languages&lt;/em&gt; that I wanted to include in my queries.&lt;/p&gt;  &lt;p&gt;I needed another couple of collections for the list of Sites that should be included and/or excluded from the queries.    &lt;br /&gt;&amp;#160; These two properties can be very interesting if you want to make sure that the query results are coming from content in specific sites, or they avoid other sites. Call it human relevance boost! :-)&lt;/p&gt;  &lt;p&gt;What else did I need?    &lt;br /&gt;Oh, sure! Live Search API allows to specify the aspect ratio, the type of images, size and subjects. These are all string filters that can be added to the query.     &lt;br /&gt;&amp;#160; I could definitely use other enumerations here.&amp;#160; And, I could then add a few properties to my Query object to refer to the instances.&lt;/p&gt;  &lt;p&gt;But, wait! Hold on… not so fast…    &lt;br /&gt;The Live Search Web Service Application Programming Interface (API) Version 2.0 enables developers to build applications that can retrieve different types of information from the Internet, supporting different types of information, including: &lt;em&gt;Web, Images, News, Instant Answers, Ads, Related Search, Spell, Phonebook&lt;/em&gt;. (You can look up the &lt;a href="http://msdn.microsoft.com/en-us/library/dd251072.aspx"&gt;documentation on MSDN&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;So, really, these image related properties would be good for image oriented queries but not, let’s say, for News or Web ones.    &lt;br /&gt;&amp;#160; Well, I could always move these properties in a subclass of the Query object, say &lt;strong&gt;ImageQuery&lt;/strong&gt;, couldn’t I?&lt;/p&gt;  &lt;p&gt;Actually, now that I thought of it, the MaxNumOfImages properties that I had previously defined in the Query object could be in the ImageQuery as well. Or should I change its semantics and generalized it to make it become the MaxNumOfResults?    &lt;br /&gt;&amp;#160; Well, I thought the former would work better for my purpose, as I would make it easier for me to develop the web control and its design time support code.&lt;/p&gt;  &lt;p&gt;Having said that, I was almost done…    &lt;br /&gt;In fact, I was left with reviewing serialization and de-serialization for the ImageQuery class, and then with creating a method that would output a well formed Live Search query, transforming the strongly typed property values in those strings that I had hard time manually composing and spelling.     &lt;br /&gt;&amp;#160; Additionally, I needed a helper method that would create a Live Search SearchRequest starting from the content of the ImageQuery, I called it LiveSearchExpression.&lt;/p&gt;  &lt;p&gt;Finally, I could use the ImageQuery object to create a well formed Live Search API SearchRequest object, using the BuildRequest method, whose code is shown below.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; SearchRequest BuildRequest(String myAppId, 
                                  &lt;span class="kwrd"&gt;uint&lt;/span&gt; nImageOffset, 
                                  AdultOption myAdultOption)
{
    SearchRequest request = &lt;span class="kwrd"&gt;new&lt;/span&gt; SearchRequest();
    request.AppId = myAppId;
    request.Sources = &lt;span class="kwrd"&gt;new&lt;/span&gt; SourceType[] { SourceType.Image };
    request.Image = &lt;span class="kwrd"&gt;new&lt;/span&gt; ImageRequest();
    &lt;span class="rem"&gt;// Image-specific request fields (optional)&lt;/span&gt; 
    request.Image.Count = 50; &lt;span class="rem"&gt;// Always ask for maximum&lt;/span&gt;
    request.Image.CountSpecified = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;&lt;span class="rem"&gt;    // Get images starting from a certain offset;&lt;/span&gt;
    request.Image.Offset = nImageOffset; 
    request.Image.OffsetSpecified = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
    &lt;/font&gt;&lt;font size="1"&gt;&lt;span class="rem"&gt;// Common request fields (required)  &lt;br /&gt;    // Get Well Formed Query Text from this obiect       &lt;/span&gt;
    request.Query = LiveSearchExpression();
    &lt;span class="rem"&gt;// Common request fields (optional)&lt;/span&gt;
    [...]
    &lt;span class="kwrd"&gt;return&lt;/span&gt; request;
}&lt;/font&gt;&lt;/pre&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;

&lt;p&gt;A coffee and a breakfast later, I was done with all that. 
  &lt;br /&gt;&amp;#160; And, I hope the class diagram below will help you have a better sense of it.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauroregio/WindowsLiveWriter/Searchingisfineletsmakeiteasierorevenfun_12836/image_2.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="487" alt="image" src="http://blogs.msdn.com/blogfiles/mauroregio/WindowsLiveWriter/Searchingisfineletsmakeiteasierorevenfun_12836/image_thumb.png" width="449" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;
  &lt;br /&gt;&amp;#160;&lt;font size="2"&gt;&lt;strong&gt;Using Query/ImageQuery Classes&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;Now, I had no trouble in&amp;#160; processing queries that I would send to Live Search invoking its APIs, neither within the web control nor inside the web service that was actually calling Microsoft Live Search. &lt;/p&gt;

&lt;p&gt;For example, within the code-behind the user control, I could write snippets like the following, where Query was the control property storing the query text, and the SlideShowExtender was the name of the homonym Ajax control used at runtime to invoke the web services, passing the ContextKey as its parameter.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(Query))
{
            ImageQuery myIQ = &lt;span class="kwrd"&gt;new&lt;/span&gt; ImageQuery();
            myIQ.Text = Query;
            myIQ.IncludedCountries.Add(Countries.United_States);
            myIQ.ImageColor = ImageQuery.ImageColors.Color;
            myIQ.ImageSize = ImageQuery.ImageSizes.Medium;
            myIQ.ImageType = ImageQuery.ImageTypes.Photo;
            myIQ.ImageSubject = ImageQuery.ImageSubjects.NonPortrait;
            myIQ.MaxNumOfImages = 100;

            &lt;span class="kwrd"&gt;this&lt;/span&gt;.SlideShowExtender.ContextKey = myIQ.ToJSON();                                      
 }&lt;/font&gt;&lt;/pre&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;

&lt;p&gt;Processing the query in the web service was also a breeze. &lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;&lt;span class="rem"&gt;// Deserialize the ImageQuery from the passed parameter&lt;/span&gt;
ImageQuery myImgQuery = ImageQuery.CreateFromJSON(contextKey);&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;[…]&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;&lt;span class="rem"&gt;//Build the request for the right query at the right offset&lt;/span&gt;
SearchRequest request = myImgQuery.BuildRequest(m_LiveSearchAppId, 
                                                nOffset, 
                                                AdultOption.Moderate);&lt;/font&gt;&lt;/pre&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;&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;Yep, implementing these wrapper classes, Query and ImageQuery, had been time well spent. 

&lt;br /&gt;

&lt;p&gt;You know? Using Live Searh API was much easier than before.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It was almost fun! :-)&lt;/strong&gt;&lt;u&gt;&amp;#160;&lt;/u&gt; 

  &lt;br /&gt;

  &lt;br /&gt;My end to end scenario was still working fine, my second coffee was long gone. It was definitely time for another one and a break. &lt;/p&gt;

&lt;p&gt;Yes, I needed some fresh energy before tackling the development of the full blown web control, especially the design time support part… :-)&lt;/p&gt;

&lt;p&gt;Don’t you love implementing design time support for web controls? 
  &lt;br /&gt;Well, I will tell you more on the next part… I guess.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9433376" width="1" height="1"&gt;</content><author><name>maurore</name><uri>http://blogs.msdn.com/members/maurore.aspx</uri></author></entry><entry><title>Searching is fine…let’s make it easier, or even fun! Part 2</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauroregio/archive/2009/02/14/searching-is-fine-let-s-make-it-easier-or-even-fun-part-2.aspx" /><id>http://blogs.msdn.com/mauroregio/archive/2009/02/14/searching-is-fine-let-s-make-it-easier-or-even-fun-part-2.aspx</id><published>2009-02-14T04:54:08Z</published><updated>2009-02-14T04:54:08Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;Getting Images from Live Search API &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;So, if you read &lt;a href="http://blogs.msdn.com/mauroregio/archive/2009/02/10/searching-is-fine-let-s-make-it-easier-or-even-fun.aspx" target="_blank"&gt;part I&lt;/a&gt; of this post, by now you should have an idea of the type of experience and components that I aimed to develop…     &lt;br /&gt;a web server rendering a client page with inside a custom control used to show and animate images found on Microsoft Live Search by invoking a web service running on web server…     &lt;br /&gt;Wow, that was mouthful! :-)&lt;/p&gt;  &lt;p&gt;I hope the following diagram will help you navigate this architecture and have a feeling for the interactions among components… some details will follow &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauroregio/WindowsLiveWriter/Searchingisfineletsmakeiteasierorevenfun_107D3/image_4.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="376" alt="image" src="http://blogs.msdn.com/blogfiles/mauroregio/WindowsLiveWriter/Searchingisfineletsmakeiteasierorevenfun_107D3/image_thumb_1.png" width="455" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ok, let’s get it started…&lt;/p&gt;  &lt;h3&gt;&lt;font size="2"&gt;Sketching out the Web Control&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;I wasn’t sure exactly how the control would look like, so I decided to &lt;em&gt;sketch it&lt;/em&gt; using a user control (.ascx) instead of starting with a full blown web control. That way I was able to experiment with the UX while figuring out the properties I needed for the control to support my user experience, and I would not have to work on the design time support until the control design was hardened…&lt;/p&gt;  &lt;p&gt;Creating the first instance of the control was a piece of cake.    &lt;br /&gt;After all, I needed just a label for the image Title, an Image for the picture, a label for the image Description (which I decided to use to show the images’ source), and the Play/Stop, Next, Prev buttons to control the slide show. Pretty much something like this…&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;&amp;lt;asp:Panel ID=&lt;span class="str"&gt;&amp;quot;PD_SearchImagesSlideShow&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; CssClass=&lt;span class="str"&gt;&amp;quot;searchimages_pd_slideshow&amp;quot;&lt;/span&gt;&amp;gt;
            &amp;lt;asp:Panel ID=&lt;span class="str"&gt;&amp;quot;PD_Photo&amp;quot;&lt;/span&gt; CssClass=&lt;span class="str"&gt;&amp;quot;searchimages_pd_photo&amp;quot;&lt;/span&gt;&amp;gt;
                &amp;lt;asp:Panel ID=&lt;span class="str"&gt;&amp;quot;PD_Title&amp;quot;&lt;/span&gt; CssClass=&lt;span class="str"&gt;&amp;quot;searchimages_pd_title&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&amp;gt;
                    &amp;lt;asp:Label ID=&lt;span class="str"&gt;&amp;quot;lblImageTitle&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;   /&amp;gt;
                &amp;lt;/asp:Panel&amp;gt;                                          
                &amp;lt;asp:Image  ID=&lt;span class="str"&gt;&amp;quot;myImage&amp;quot;&lt;/span&gt;  runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; CssClass=&lt;span class="str"&gt;&amp;quot;searchimages_pd_image&amp;quot;&lt;/span&gt; /&amp;gt;                             
                &amp;lt;asp:Panel ID=&lt;span class="str"&gt;&amp;quot;PD_Desc&amp;quot;&lt;/span&gt; CssClass=&lt;span class="str"&gt;&amp;quot;searchimages_pd_desc&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&amp;gt;
                    &amp;lt;asp:Label ID=&lt;span class="str"&gt;&amp;quot;lblImageDescription&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;  /&amp;gt;
                &amp;lt;/asp:Panel&amp;gt; 
            &amp;lt;/asp:Panel&amp;gt;
            &amp;lt;asp:Panel ID=&lt;span class="str"&gt;&amp;quot;PD_Btns&amp;quot;&lt;/span&gt;  runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; CssClass=&lt;span class="str"&gt;&amp;quot;searchimages_pd_btns&amp;quot;&lt;/span&gt;&amp;gt;           
                &amp;lt;asp:Button ID=&lt;span class="str"&gt;&amp;quot;Btn_Previous&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; Text=&lt;span class="str"&gt;&amp;quot;Previous&amp;quot;&lt;/span&gt;  /&amp;gt;
                &amp;lt;asp:Button ID=&lt;span class="str"&gt;&amp;quot;Btn_Play&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; Text=&lt;span class="str"&gt;&amp;quot;Play&amp;quot;&lt;/span&gt;/&amp;gt;
                &amp;lt;asp:Button ID=&lt;span class="str"&gt;&amp;quot;Btn_Next&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; Text=&lt;span class="str"&gt;&amp;quot;Next&amp;quot;&lt;/span&gt;/&amp;gt;              
            &amp;lt;/asp:Panel&amp;gt;
&amp;lt;/asp:Panel&amp;gt;    &lt;/font&gt;&lt;/pre&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;Embed everything in a panel, assign each controls a CssClass, create the style sheet… ok I got that one from another project… 

&lt;br /&gt;but CSS is easy anyway… isn’t it? :-) 

&lt;p&gt;Oh, I almost forgot, the controls needed also an Ajax &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/SlideShow/SlideShow.aspx" target="_blank"&gt;SlideShow extender&lt;/a&gt;, which comes with the Microsoft &lt;a href="http://www.asp.net/ajax/ajaxcontroltoolkit" target="_blank"&gt;Ajax Control Toolkit&lt;/a&gt;. That would make the &lt;em&gt;trick&lt;/em&gt; of requesting the images from my web service and animating them in a slide show on the client. If you are not familiar with extenders, think of them as Javascript that is associated with server controls (once they are instantiated in a web page) and used to extend (i.e. improve, aka make cool) their functionalities. &lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;font size="1"&gt;&amp;lt;ACT:SlideShowExtender ID=&lt;span class="str"&gt;&amp;quot;SlideShowExtender&amp;quot;&lt;/span&gt; AutoPlay=&lt;span class="str"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; Loop=&lt;span class="str"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;
                 ImageTitleLabelID=&lt;span class="str"&gt;&amp;quot;lblImageTitle&amp;quot;&lt;/span&gt;
                 TargetControlID=&lt;span class="str"&gt;&amp;quot;myImage&amp;quot;&lt;/span&gt;                                    
                 ImageDescriptionLabelID=&lt;span class="str"&gt;&amp;quot;lblImageDescription&amp;quot;&lt;/span&gt;  
                 PreviousButtonID=&lt;span class="str"&gt;&amp;quot;Btn_Previous&amp;quot;&lt;/span&gt;
                 PlayButtonID=&lt;span class="str"&gt;&amp;quot;Btn_Play&amp;quot;&lt;/span&gt; PlayButtonText=&lt;span class="str"&gt;&amp;quot;Play&amp;quot;&lt;/span&gt;  StopButtonText=&lt;span class="str"&gt;&amp;quot;Stop&amp;quot;&lt;/span&gt;
                 NextButtonID=&lt;span class="str"&gt;&amp;quot;Btn_Next&amp;quot;&lt;/span&gt;                                    
                 SlideShowServicePath=&lt;span class="str"&gt;&amp;quot;~/services/...&amp;quot;&lt;/span&gt; SlideShowServiceMethod=&lt;span class="str"&gt;&amp;quot;SearchPhotos&amp;quot;&lt;/span&gt;  
                 UseContextKey=&lt;span class="str"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;
                 runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&amp;gt;                                   
&amp;lt;/ACT:SlideShowExtender&amp;gt;&lt;/font&gt; &lt;/pre&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;

&lt;p&gt;For example (see snippet above), in the case of the SlideShow extender, you associate that to (at least) an image and – at runtime - the extender will fetch images from a web service and replace the content of the associated image in response to a client timer event.&amp;#160; &lt;br /&gt;&amp;#160; So, the effect would be that of a… slideshow – precisely!&lt;/p&gt;

&lt;p&gt;Now, the control was showing up correctly in a test .aspx page even before my second coffee and before my kids woke up… brilliant! 
  &lt;br /&gt;Was it the second, or third one? … It must have been the second… 

  &lt;br /&gt;I couldn’t see any sun light outside yet… &lt;/p&gt;

&lt;p&gt;Now the interesting part, the control’s properties and logic…&lt;/p&gt;

&lt;h4&gt;&lt;font size="2"&gt;&lt;em&gt;Control Properties &lt;/em&gt;?&amp;#160; &lt;/font&gt;&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Width&lt;/strong&gt; and &lt;strong&gt;Height&lt;/strong&gt; – to make sure the control could be properly sized in different web pages. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;QueryText&lt;/strong&gt; – I needed a string for the query that should be issued to Microsoft Live Search. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;MaxNumberOfImages&lt;/strong&gt;&amp;#160; - to define the maximum number of images the client would request to the web service and, ultimately, to Microsoft Live Search. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That was it. I was determined to keep it simple…&lt;/p&gt;

&lt;h4&gt;&lt;font size="2"&gt;&lt;em&gt;Control Logic &lt;/em&gt;?&lt;/font&gt;&lt;/h4&gt;

&lt;p&gt;A handful of statements to initialize the control, a few other lines for the presentation, just enough to arrange and scale the controls inside the panel based on the Width and Height defined by the user. 
  &lt;br /&gt;Then, I had to make sure the SlideShow extender would carry the right parameters for the web service invocation, namely: &lt;u&gt;QueryText&lt;/u&gt; and &lt;em&gt;MaxNumberOfImages&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Hmmm… the SlideShow’s ContextKey property used to pass information to the invoked web service is a string though… 
  &lt;br /&gt;you can’t pass the two properties just like that. 

  &lt;br /&gt;Not too bad though. I just had to serialize both properties and assign the serialized string to the ContextKey property.&amp;#160; &lt;br /&gt;&amp;#160; You know? I used to hate serialization, but now Microsoft .NET offers plenty of choices to do it, it’s not fun yet.. but much better.&amp;#160; &lt;br /&gt;&amp;#160; I just needed a wrapper object for the two properties. 

  &lt;br /&gt;&amp;#160; So, I created the &lt;em&gt;&lt;strong&gt;Query&lt;/strong&gt;&lt;/em&gt; object to carry that information and to implement the serialization. &lt;/p&gt;

&lt;h4&gt;&lt;font size="2"&gt;Web Service&lt;/font&gt;&lt;/h4&gt;

&lt;p&gt;I developed of the web service in phases…&lt;/p&gt;

&lt;p&gt;At first, I tested the client / server interaction, then I carried on with requesting images to Microsoft Live Search APIs. 
  &lt;br /&gt;&amp;#160; I started with a simple stub for the web service, encapsulating just enough logic so that it would return a few images taken from my web’s images directory…&amp;#160;&amp;#160; Hey, it was not much, I know…, but that would do it for a first test of the service, and it would also show a slideshow on the client too. &lt;/p&gt;

&lt;p&gt;That worked out quite well! 
  &lt;br /&gt;&amp;#160; By breakfast time, my control was invoking the web service, and showing a slide show of the returned images on the client.&amp;#160; &lt;br /&gt;&amp;#160; The end to end lacked only the integration with Microsoft Live Search. 

  &lt;br /&gt;&amp;#160; I was almost done, wasn’t I? :-) &lt;/p&gt;

&lt;p&gt;Plus, it was about time to enjoy some quality time with my family… 
  &lt;br /&gt;Yet, they were all sleeping… why would I wake them up? 

  &lt;br /&gt;And, Oh.. Noooo… :-)&amp;#160; it was snowing again! &lt;/p&gt;

&lt;p&gt;Well,… I went downstairs to prepare a cup of coffee, while reading the documentation of Microsoft Live Search APIs. 
  &lt;br /&gt;&amp;#160; I had not made up my mind yet whether I would use the HTTP Get or SOAP as protocol. I knew HTTP would probably be a little bit lighter weight, but that meant I would need to deal with parsing some XML documents back and forth. Then, I opted to use SOAP, out of laziness I guess… the facility offered by the typed objects provided with the SOAP APIs was way too appealing.&lt;/p&gt;

&lt;p&gt;Even more intriguing were the neatly assembled samples provided with the APIs. I had them working , and I adapted them within my web service code even before I finished my coffee… the third one!&lt;/p&gt;

&lt;p&gt;Finally, I had a prototypical implementation of the end to end scenario that exercised the whole architecture. 
  &lt;br /&gt;And, it was working quite well.&lt;/p&gt;

&lt;p&gt;However, a few doubts started crossing my mind when I got fancy with the queries using Live Search operators like &lt;strong&gt;site:&lt;/strong&gt; or &lt;strong&gt;language:&lt;/strong&gt; or &lt;strong&gt;location:&lt;/strong&gt;.&amp;#160; &lt;br /&gt;&amp;#160; These questions became more pressing when, with specific reference to image queries, I started using some other operators in order to filter results on image properties such as &lt;strong&gt;ImageAspectRatio&lt;/strong&gt; &lt;em&gt;(Tall, Wide, Square)&lt;/em&gt;, &lt;em&gt;&lt;strong&gt;ImageType&lt;/strong&gt; (Photo, Graphics)&lt;/em&gt;, etc…&amp;#160; &lt;br /&gt;&amp;#160; I was a bit frustrated I had to write an application to do build a long and complicated query to interoperate with the Microsoft Live Search. 

  &lt;br /&gt;Truth to be told, everything was working fine, but my experience as a developer could have been better…&amp;#160; &lt;br /&gt;&amp;#160; The reasons was that the components I had built so far, did not know anything about these operators. Their knowledge was only in my mind and hmm…. in Microsoft Live Search APIs’. 

  &lt;br /&gt;&amp;#160; And, I thought it was a pity none of my components would expose that knowledge in a more useful way. &lt;/p&gt;

&lt;p&gt;I knew it! &lt;/p&gt;

&lt;p&gt;All that had little to do with my little project. 
  &lt;br /&gt;&amp;#160; I was already thinking how Microsoft Live Search APIs could be extended and/or simplified… :-)&lt;/p&gt;

&lt;p&gt;I could not help it though.&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;I had to take another look at that Query wrapper.&amp;#160; &lt;br /&gt;&amp;#160; Yep, its responsibilities could be expanded with great benefit for the overall solution. &lt;/p&gt;

&lt;p&gt;But that was enough for the day… and for this part!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9420596" width="1" height="1"&gt;</content><author><name>maurore</name><uri>http://blogs.msdn.com/members/maurore.aspx</uri></author></entry><entry><title>Searching is fine… let’s make it easier, or even fun!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauroregio/archive/2009/02/10/searching-is-fine-let-s-make-it-easier-or-even-fun.aspx" /><id>http://blogs.msdn.com/mauroregio/archive/2009/02/10/searching-is-fine-let-s-make-it-easier-or-even-fun.aspx</id><published>2009-02-10T10:07:32Z</published><updated>2009-02-10T10:07:32Z</updated><content type="html">&lt;p&gt;&lt;em&gt;&lt;strong&gt;Getting Images from Live Search APIs – part 1&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I don’t like the snow.    &lt;br /&gt;&amp;#160; When it is fresh, it is white and beautiful, but it is way too cold…     &lt;br /&gt;&amp;#160; Then, if you live in a city, it quickly gets dirty and muddy…    &lt;br /&gt;And, we had plenty this year in Seattle, especially around Christmas.&lt;/p&gt;  &lt;p&gt;So, I’d rather stay home when it snows,&amp;#160; enjoying the family and,&amp;#160; &lt;br /&gt;if possible, doing something cool… whatever happens to be cool for me at the time.&lt;/p&gt;  &lt;p&gt;This time, I ended up doing some work for my little web site for fishing aficionados. A web I use more as a web developer fitness center than a real web app… right! go figure… :-)&lt;/p&gt;  &lt;p&gt;Since I reviewed Microsoft’s Live Search APIs 2.0, a few days before the Christmas break, I thought it would be interesting to include some of the content they make available, like search results, news and images on my web’s pages.&lt;/p&gt;  &lt;p&gt;Boy, these APIs make accessing Microsoft Live Search really easy!&lt;/p&gt;  &lt;p&gt;You compose a query in a search request and you get a collection of results back. Both request and results are typed, i.e. images and news have different types, with specific properties, etc.. And, you can use different protocols, such as SOAP, XML, to communicate with the Live Search API service.   &lt;br /&gt;    &lt;br /&gt;Building an application around them is quite simple. So, developers can really focus on how to implement the user scenarios.&lt;/p&gt;  &lt;p&gt;For my web, I thought it would be cool to have an image slideshow, showing fishing photographs taken from those indexed on the net, within the context imposed by any given container page, yet picked in a somewhat random way and always fresh (making sure to properly show their source/credits).&lt;/p&gt;  &lt;p&gt;I started envisioning something like this… Great fish, by the way!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauroregio/WindowsLiveWriter/Searchingisfineletsmakeiteasierorevenfun_14151/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mauroregio/WindowsLiveWriter/Searchingisfineletsmakeiteasierorevenfun_14151/image_thumb.png" width="286" height="320" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So, let’s see… what are we looking at here?&lt;/p&gt;  &lt;p&gt;A custom ASP.NET server control, a composite one, with an Ajax slide show extender to animate the images and interact with the user through the buttons… and some code to connect to the Microsoft Live Search service.&lt;/p&gt;  &lt;p&gt;Yes, that would do it.&lt;/p&gt;  &lt;p&gt;As a second thought, I would need to expose the application ID on the client Javascript code, hmmm… not good… not good!   &lt;br /&gt;&amp;#160;&amp;#160; It is not that the AppID could not be sniffed on the net, but the idea of plainly exposing it, didn’t sound right. &lt;/p&gt;  &lt;p&gt;More importantly, if my web had many users that would translate in many requests to Microsoft Live Search API, one per active client.    &lt;br /&gt;Yet… if two or more clients were looking at the same page – say the one about Alaska, i.e. issuing the same query (like: “Fishing Alaska”), wouldn’t I be able to cache the request/content on my web, before serving that page?&lt;/p&gt;  &lt;p&gt;Gotcha!! &lt;/p&gt;  &lt;p&gt;I just needed a service on my web, to support client requests and forward them to the Microsoft Live Search APIs and/or cache them and their results.&lt;/p&gt;  &lt;p&gt;Perhaps two, three days of work for a solid prototype…&lt;/p&gt;  &lt;p&gt;Sure! Why not? &lt;/p&gt;  &lt;p&gt;After all, there were two feet of snow outside…    &lt;br /&gt;    &lt;br /&gt;And so I did… and it was almost like I predicted.&lt;/p&gt;  &lt;p&gt;The architecture it is working fine, and the results are neat.   &lt;br /&gt;Plus, I managed to create another couple of interesting components on the way…&lt;/p&gt;  &lt;p&gt;And now that the snow melt for long, I thought I would share this experience with you. That is.&lt;/p&gt;  &lt;p&gt;Stay tuned for the incoming parts…&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9410042" width="1" height="1"&gt;</content><author><name>maurore</name><uri>http://blogs.msdn.com/members/maurore.aspx</uri></author></entry><entry><title>GAT / DSL Integration Scenarios</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauroregio/archive/2006/06/07/GAT-DSL-Integration.aspx" /><id>http://blogs.msdn.com/mauroregio/archive/2006/06/07/GAT-DSL-Integration.aspx</id><published>2006-06-07T04:00:00Z</published><updated>2006-06-07T04:00:00Z</updated><content type="html">&lt;div&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 6pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;Microsoft Guidance Automation Package (GAT) and Domain Specific Language Toolkit (DSL) &lt;br /&gt;are two key technologies, recently released by Microsoft, which allow architects and developers &lt;br /&gt;to author and package guidance and domain specific languages.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 6pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;GAT and DSL offer considerable value when used on a separate basis, and even more when used together.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 6pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;And, given that Victor Aprea (Clarius Consulting) and I have been working on GAT/DSL integration for some time, &lt;br /&gt;we decided to publish a paper about it. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 6pt"&gt;&lt;font face="undefined"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;So, here they are few GAT / DSL integration scenarios… &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;h1 style="PADDING-RIGHT: 0in; MARGIN-TOP: 12pt; PADDING-LEFT: 0in; FONT-WEIGHT: normal; FONT-SIZE: 16pt; MARGIN-BOTTOM: 3pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 12pt"&gt;&lt;strong&gt;Providing DSL users with context / guidance&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/h1&gt;&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;Every Domain Specific Language is designed and implemented based on the requirements &lt;br /&gt;of the domain it is intended to model. When that language is used as part of the development &lt;br /&gt;process of a given solution however, the solution’s context may affect the way that language &lt;br /&gt;is used and how its artifacts are consumed. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;For starters, DSL users will need to know whether there are only specific places in the solution &lt;br /&gt;structure where DSL instances should be created/stored. And, it’s the task of the guidance provided &lt;br /&gt;with the solution template to support and enforce these solution’s well-formed-ness rules. &lt;br /&gt;Again, it must be noted that this knowledge may not be available to the DSL author.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;            Imagine a business analyst is using a Business Process DSL while developing a solution &lt;br /&gt;within Visual Studio. That analyst may not have the necessary information and skills to determine &lt;br /&gt;where to put the Business Process model files inside the solution, or how to process them. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;In fact, that knowledge belongs much more likely to the solution developer. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;Additionally, for each artifact that can be created using a certain DSL, developers will need to know &lt;br /&gt;what the artifact lifecycle is, in the context of a solution development process in which that DSL is used.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;            In fact, the DSL toolkit support a very basic lifecycle –i.e. create, save (possibly delete), &lt;br /&gt;apply report templates - for DSL model files. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;            The designer of a specific solution may want to change and extend that lifecycle significantly. &lt;br /&gt;For example, certain pre-conditions -verifiable at solution/project/file level in the solution- may need to &lt;br /&gt;be validated before a DSL instance of a certain type may be created. Or, as we will see more in details &lt;br /&gt;later on, the use of one language may be affected by and/or dependent by other DSLs used in the same solution.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;            In a way similar problems need to be solved for all the artifacts in a solution. For example, &lt;br /&gt;solutions developers need to address same problems for source code files or even binaries. &lt;br /&gt;However, usage scenarios for programming languages are much more predictable, because better known, &lt;br /&gt;than a generic DSL. Similarly, DSLs virtually span through many level of abstraction and their scope can &lt;br /&gt;be very different from one another. That makes providing the necessary guidance to enable the DSL &lt;br /&gt;artifact life cycle very important.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;            &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;As part of that guidance, DSL users will also need to be educated on which procedures or commands &lt;br /&gt;can be applied to language instances, and which artifacts will be created – if any – when these commands are applied. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;            For example, a designer of a solution may have created various transformations that &lt;br /&gt;–depending on the solution’s state – may be applied to instances of a certain DSL. &lt;br /&gt;So, commands to launch these transformations may appear - within a context sensitive menu - &lt;br /&gt;when the developer selects certain DSL model files, or model elements or even a DSL design surface..&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;Indeed, GAT can be very effectively used to provide DSL users with necessary guidance about how &lt;br /&gt;to use a certain language and to embed into a solution the necessary support for the specific lifecycle &lt;br /&gt;on DLS’ instances, model elements, etc...&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h1 style="PADDING-RIGHT: 0in; MARGIN-TOP: 12pt; PADDING-LEFT: 0in; FONT-WEIGHT: normal; FONT-SIZE: 16pt; MARGIN-BOTTOM: 3pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 12pt"&gt;&lt;strong&gt;Using GAT to extend consumption of DSL artifacts&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/h1&gt;&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;Using DSL Toolkit, a DSL author can define transformations on DSL instances in order to create various artifacts. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;            An example of a transformation can be the compilation of instances of a custom application &lt;br /&gt;architecture language into programming modules containing classes implementing the applications &lt;br /&gt;or patterns defined by that architecture.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;In order to define a transformation, a DSL author uses the DSL debugging environment, &lt;br /&gt;which is natively provided by the DSL toolkit when a new DSL language solution is created, &lt;br /&gt;and that provides start up transformation templates.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;            To make transformations available to language users, templates need to be copied &lt;br /&gt;inside the solution or project where the instances of that language are created.  &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;Solution developers can select a transformation template and apply it to the language instance, &lt;br /&gt;just asking the development environment to apply the template. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt; TEXT-INDENT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;When launched, a transformation may load one or more models of one or various DSLs &lt;br /&gt;to get its input data. However, the artifact generated must be directed to a single file. This last fact, &lt;br /&gt;depending on the particular development scenarios, may be perceived as a significant limitation &lt;br /&gt;on use and adoption of DSL. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;On the other hand, GAT can be used to overcome this evident limitation. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt; TEXT-INDENT: 0.5in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;In fact, GAT recipes make it easier to invoke transformation templates from within code. &lt;br /&gt;And, the recipe writer can more freely determine where to direct the output of the transformation, &lt;br /&gt;if one or more artifact are generated as results of the application of that transformation. &lt;br /&gt;For example, a recipe can be written which repeatedly applies a text template to the same model, &lt;br /&gt;perhaps using different model elements each time and generating different artifacts, one per model element.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;Interestingly enough, the transformations developed by the DSL author within the DSL toolkit debugging &lt;br /&gt;environment can be brought – almost with no changes – into the GAT package containing the solution guidance.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;In this way, a solution developer can also apply different transformations to the same model element &lt;br /&gt;or have a single transformation that applies to various model elements even of different languages.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;                     &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;By using additional libraries (for example Clarius has started developing one) you can have your T4 templates &lt;br /&gt;accept both, GAX recipe arguments and T4 model files, giving you a powerful combination in terms &lt;br /&gt;of the code you can write in the template.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;font face="Times New Roman"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&lt;/font&gt; &lt;/div&gt;
&lt;h1 style="PADDING-RIGHT: 0in; MARGIN-TOP: 12pt; PADDING-LEFT: 0in; FONT-WEIGHT: normal; FONT-SIZE: 16pt; MARGIN-BOTTOM: 3pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 12pt"&gt;&lt;strong&gt;DSL cross language integration &lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/h1&gt;&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;As mentioned in our introduction, DSLs are generally relatively small, highly focused languages used &lt;br /&gt;to model and solve certain -clearly identifiable- problems that various developer roles may have &lt;br /&gt;to tackle as part of the software development lifecycle. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;The limited scope of a DSL should not be perceived as a negative factor though. &lt;br /&gt;Actually, the smallest the scope the greatest is the language potential effectiveness in solving problems &lt;br /&gt;that belong to that scope, and supporting the specific needs of roles who are supposed to be the primary &lt;br /&gt;stakeholders for the area of concern/abstraction level (viewpoint) that is associated with that scope. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;Nevertheless, in many cases, architects and developers need to be able to navigate through various viewpoints, &lt;br /&gt;i.e. through different areas concerns and across various abstraction levels. Other times, they need to be able &lt;br /&gt;to transform artifacts created while designing and developing a certain viewpoint, into other artifacts &lt;br /&gt;belonging to a different viewpoint.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;Navigation across viewpoints and transformation of related artifacts imposes new requirements on DSL design, &lt;br /&gt;especially in terms of integration among them. Perhaps the most important is the ability to refer to model elements &lt;br /&gt;of one language from a different one (more specifically from the latter’s model elements or properties)&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;            For example, let’s assume modeling of Business Message Types and Business Entities in developing &lt;br /&gt;a SOA application has been done using two different DSL. While using the Business Message Types DSL, &lt;br /&gt;the message designer may need to refer to instances of business entities, specified using the other language, &lt;br /&gt;in order to specify the payload for the message.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;The current release of DSL toolkit does not support any integration across different DSLs. More specifically, &lt;br /&gt;it’s not natively possible to refer from the model elements or properties in a language to those modeled &lt;br /&gt;and instantiated in another one. &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;However, that level of integration can be programmatically obtained. In fact, a DSL integration service &lt;br /&gt;can be designed to allow DSL author/users to browse through model elements defined in different languages &lt;br /&gt;and to establish the necessary cross language references.  Additionally, one need to develop custom property &lt;br /&gt;editors that will extend the DSL user interface to activate the integration service, and allow DSL users to actually &lt;br /&gt;instantiate cross language references.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;While GAT does not provide any native mechanism to support DSL cross language integration, &lt;br /&gt;once the integration service is available GAT recipe patterns can be used to package the necessary &lt;br /&gt;integration capabilities in a way that makes it easier for the solution developer to use.&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;We have developed a DSL Integration Service that we are now testing with the preliminary bits of the version of &lt;br /&gt;DSL Toolkit that will be released later on august. We will make these bits available to the community at large for test.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;h1 style="PADDING-RIGHT: 0in; MARGIN-TOP: 12pt; PADDING-LEFT: 0in; FONT-WEIGHT: normal; FONT-SIZE: 16pt; MARGIN-BOTTOM: 3pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 12pt"&gt;&lt;strong&gt;DSL constraint checking across languages&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/h1&gt;&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;Using the DSL toolkit, a DSL author can specify as many validity checking and constraints as necessary, &lt;br /&gt;within a single DSL. All she/he needs to do is to define extension to the classes implementing certain modeling &lt;br /&gt;elements, following the guidelines offered by the validity checking framework provided with the DSL toolkit.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;            Checking the validity of the constraints on the model instances can be activated on demand or &lt;br /&gt;when particular events, like file save, happen.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;font face="Arial"&gt;However, for the very same reasons why one may need to integrate different DSLs, validity checking may &lt;br /&gt;need to be extended to span across multiple languages.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;font face="Arial"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            For example, a DSL may define a model element named Business Process, which refers to &lt;br /&gt;Business Rules that have been defined in a different language. Of course, for the model to be valid &lt;br /&gt;– as a whole – instances of the Business Process in the first language have to refer to Business Rules &lt;br /&gt;that exist in the second, i.e. have been instantiated using the Business Rules DSL. In this case, the solution &lt;br /&gt;developer can use cross DSL integration to make sure models created are valid by design, instead &lt;br /&gt;of having to check it afterwards&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div style="PADDING-RIGHT: 0in; MARGIN-TOP: 0in; PADDING-LEFT: 0in; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0pt"&gt;&lt;font face="Times New Roman"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;So? what do you think?&lt;/div&gt;
&lt;div&gt;Are we missing something important? &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;What would be other integration scenarios? &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div id="CSBloggerSig"&gt;Mauro Regio&lt;br /&gt;Architect | Microsoft Corp.&lt;/div&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=620990" width="1" height="1"&gt;</content><author><name>maurore</name><uri>http://blogs.msdn.com/members/maurore.aspx</uri></author><category term="Modeling and DSLs" scheme="http://blogs.msdn.com/mauroregio/archive/tags/Modeling+and+DSLs/default.aspx" /><category term="Guidance" scheme="http://blogs.msdn.com/mauroregio/archive/tags/Guidance/default.aspx" /></entry></feed>