<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>On The Journey</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/dkaufman/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/dkaufman/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:47:48 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>RouterManager Sample and the SQL Server Modeling CTP</title>
      <link>https://docs.microsoft.com/archive/blogs/dkaufman/routermanager-sample-and-the-sql-server-modeling-ctp</link>
      <pubDate>Mon, 16 Nov 2009 16:48:00 GMT</pubDate>
      <dc:creator><![CDATA[dkaufman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dkaufman/2009/11/16/routermanager-sample-and-the-sql-server-modeling-ctp/</guid>
      <description><![CDATA[I recently shifted positions slightly.&nbsp; Previously, I had been working with ISVs adopting our...]]></description>
      <content:encoded><![CDATA[<P>I recently shifted positions slightly.&nbsp; Previously, I had been working with ISVs adopting our divisions latest technologies such as “Oslo” which is <A href="https://www.douglaspurdy.com/2009/11/10/from-oslo-to-sql-server-modeling/" mce_href="https://www.douglaspurdy.com/2009/11/10/from-oslo-to-sql-server-modeling/">now officially called</A> the SQL Server Modeling.&nbsp; My new team, the <A href="https://blogs.msdn.com/dmcat" mce_href="https://blogs.msdn.com/dmcat">Data Modeling Customer Advisory Team(DM CAT)</A> broadens my focus to work with customer all up on adoption of our Data Modeling technology including the <A href="https://msdn.microsoft.com/en-us/oslo/default.aspx" mce_href="https://msdn.microsoft.com/en-us/oslo/default.aspx">SQL Server Modeling CTP</A> and the <A href="https://msdn.microsoft.com/en-us/library/bb399572(VS.100).aspx" mce_href="https://msdn.microsoft.com/en-us/library/bb399572(VS.100).aspx">Entity Framework</A> and <A href="https://msdn.microsoft.com/en-us/library/cc668792(VS.100).aspx" mce_href="https://msdn.microsoft.com/en-us/library/cc668792(VS.100).aspx">Data Services</A>.&nbsp; We will be engaging customers using this technology and publishing real-world guidance and key learning's to help the community adopt these products.</P>
<P>As part of my work with the SQL Server Modeling CTP, I developed an end-to-end sample application which demonstrate model driven content based routing.&nbsp; The <A href="https://code.msdn.microsoft.com/RouterManager" mce_href="https://code.msdn.microsoft.com/RouterManager">RouterManager</A> makes it simple to configure new WCF .NET 4 <A href="https://msdn.microsoft.com/en-us/library/ee517422(VS.100).aspx" mce_href="https://msdn.microsoft.com/en-us/library/ee517422(VS.100).aspx">Routing Service</A> by creating a domain specific language (DSL).&nbsp; Routing configurations are stored in the SQL Modeling CTP’s Repository database.&nbsp; The Entity Framework is used to read the router model data to configure the router.&nbsp; </P>
<P>You can download the RouterManager sample on <A href="https://code.msdn.microsoft.com/RouterManager" mce_href="https://code.msdn.microsoft.com/RouterManager">Code Gallery</A>.&nbsp; And <A href="https://blogs.msdn.com/dmcat/archive/2009/11/16/model-driven-content-based-routing-using-sql-server-modeling-ctp-part-i.aspx" mce_href="https://blogs.msdn.com/dmcat/archive/2009/11/16/model-driven-content-based-routing-using-sql-server-modeling-ctp-part-i.aspx">read more</A> about the details of the sample on our new <A href="https://blogs.msdn.com/dmcat/default.aspx" mce_href="https://blogs.msdn.com/dmcat/default.aspx">team blog</A>.</P>]]></content:encoded>
    </item>
    <item>
      <title>The SQL Server Modeling CTP</title>
      <link>https://docs.microsoft.com/archive/blogs/dkaufman/the-sql-server-modeling-ctp</link>
      <pubDate>Wed, 11 Nov 2009 23:12:00 GMT</pubDate>
      <dc:creator><![CDATA[dkaufman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dkaufman/2009/11/11/the-sql-server-modeling-ctp/</guid>
      <description><![CDATA[We announced earlier this week the transition of the name of the technology formerly know as “Oslo”...]]></description>
      <content:encoded><![CDATA[<p>We announced earlier this week the transition of the name of the technology formerly know as “Oslo” to SQL Server Modeling.&#160; Douglas Purdy discusses the change and some of our thinking behind this on his blog:</p>  <p><a href="https://www.douglaspurdy.com/2009/11/10/from-oslo-to-sql-server-modeling/" mce_href="https://www.douglaspurdy.com/2009/11/10/from-oslo-to-sql-server-modeling/">From “Oslo” to SQL Server Modeling</a></p>  <p><a href="https://www.douglaspurdy.com/2009/11/12/on-dsls-and-a-few-other-things/" mce_href="https://www.douglaspurdy.com/2009/11/12/on-dsls-and-a-few-other-things/">On DSLs and a few other things…</a></p>  <p>I personally am very excited about this announcement, as we now have a ship vehicle, schedule and a clear path to v1.&#160; As you will hear and see at <a href="https://microsoftpdc.com/" mce_href="https://microsoftpdc.com/">PDC09</a> there has been a lot of work on the technology since the May CTP.</p>  <p>Kraig Brockschmidt posted on the <a href="https://blogs.msdn.com/modelcitizen/default.aspx" mce_href="https://blogs.msdn.com/modelcitizen/default.aspx">Model Citizens</a> blog that we will be releasing a <a href="https://blogs.msdn.com/modelcitizen/archive/2009/11/02/next-oslo-ctp-to-be-released-in-conjunction-with-pdc.aspx" mce_href="https://blogs.msdn.com/modelcitizen/archive/2009/11/02/next-oslo-ctp-to-be-released-in-conjunction-with-pdc.aspx">new version of the modeling CTP</a> in conjunction with PDC.&#160; I have been working with the new bits and created a cool end to end example that will also be released.&#160;&#160; But I will post more details about this project next week.</p>]]></content:encoded>
    </item>
    <item>
      <title>Get Ready for PDC 2009</title>
      <link>https://docs.microsoft.com/archive/blogs/dkaufman/get-ready-for-pdc-2009</link>
      <pubDate>Mon, 05 Oct 2009 20:05:28 GMT</pubDate>
      <dc:creator><![CDATA[dkaufman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dkaufman/2009/10/05/get-ready-for-pdc-2009/</guid>
      <description><![CDATA[PDC 2009 is rapidly approaching.&#160; If you haven’t made plans yet, what are you waiting for?...]]></description>
      <content:encoded><![CDATA[<p><a href="https://microsoftpdc.com/" target="_blank">PDC 2009</a> is rapidly approaching.&#160; If you haven’t made plans yet, what are you waiting for? (<a href="https://microsoftpdc.com/Registration" target="_blank">register</a> by Oct 13th for a discount)&#160; There will be a lot of great Data and Modeling sessions at this years PDC including:</p>  <p>&#160;</p>  <p><strong>The “data &amp; modeling keynote” with Don Box and Chris Anderson</strong></p>  <p><a href="https://microsoftpdc.com/Sessions/P09-04">Data Programming and Modeling for the Microsoft .NET Developer</a></p>  <p>&#160;</p>  <p><strong>Astoria and EF talks</strong></p>  <p><a href="https://microsoftpdc.com/Sessions/FT12">ADO.NET Data Services- What’s new with the RESTful data services framework</a></p>  <p><a href="https://microsoftpdc.com/Sessions/FT10">Evolving ADO.NET Entity Framework in .NET 4 and Beyond</a></p>  <p><strong></strong></p>  <p><strong></strong></p>  <p><strong>“Oslo” talks</strong></p>  <p><a href="https://microsoftpdc.com/Sessions/FT50">Building Data-Driven Applications Using Microsoft Project Code Name &quot;Quadrant&quot; and Microsoft Project Code Name &quot;M&quot;</a></p>  <p><a href="https://microsoftpdc.com/Sessions/SVR19">Microsoft Project Code Name “Repository”: Using Metadata to Drive Application Design, Development, and Management</a></p>  <p><a href="https://microsoftpdc.com/Sessions/FT34">Microsoft Project Code Name “M”- The Data and Modeling Language</a></p>  <p>&#160;</p>  <p>Be sure to keep checking the <a href="https://microsoftpdc.com/" target="_blank">PDC website</a> as new sessions are added daily.</p>]]></content:encoded>
    </item>
    <item>
      <title>From DSLs and Models to “Quadrant” using “Oslo” May CTP – Part III</title>
      <link>https://docs.microsoft.com/archive/blogs/dkaufman/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-iii</link>
      <pubDate>Wed, 24 Jun 2009 03:01:00 GMT</pubDate>
      <dc:creator><![CDATA[dkaufman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dkaufman/2009/06/24/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-iii/</guid>
      <description><![CDATA[This is the 3rd and final part of our look at the “Oslo” May CTP.&nbsp; In Part I, we created a...]]></description>
      <content:encoded><![CDATA[<P>This is the 3rd and final part of our look at the “Oslo” May CTP.&nbsp; In <A href="https://blogs.msdn.com/dkaufman/archive/2009/05/27/from-dsl-and-models-to-quadrant-using-oslo-may-ctp-part-i.aspx" mce_href="https://blogs.msdn.com/dkaufman/archive/2009/05/27/from-dsl-and-models-to-quadrant-using-oslo-may-ctp-part-i.aspx">Part I</A>, we created a simple domain model for a fictional company’s employee information. In <A href="https://blogs.msdn.com/dkaufman/archive/2009/06/05/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-ii.aspx" mce_href="https://blogs.msdn.com/dkaufman/archive/2009/06/05/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-ii.aspx">Part II</A>, we used the M language support to created a domain specific language (DSL) model that took a simple text input and generated model values for our previously created <STRONG>EmployeeInfo</STRONG> domain model.&nbsp; At the end of Part II we had compiled artifacts for our Employee Model and our Employee values (from the DSL input text).&nbsp; In Part III we will load our Employee model and values into the Oslo Repository and inspect them using the Quadrant model viewer.&nbsp; </P>
<P>First we need to the model and model data into the Repository.&nbsp; To do this we execute the mx command.&nbsp; The actual command will look like this:</P>
<P><FONT face=Courier>mx install Employee.mx -d:Repository</FONT></P>
<P>This basically tells the mx command to install the <STRONG>Employee.mx</STRONG> values and our Employee model (which if you remember when we compiled this in <A href="https://blogs.msdn.com/dkaufman/archive/2009/06/05/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-ii.aspx" mce_href="https://blogs.msdn.com/dkaufman/archive/2009/06/05/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-ii.aspx">Part II</A>, we had to pass in a reference to our compiled model <STRONG>EmployeeModel.mx</STRONG>)&nbsp; into the Repository database.&nbsp; Now that our model is in the Repository lets take a look at it using “Quadrant”. </P>
<P>Oslo “Quadrant” is a visual tool for interacting with models and model data is included as part of the “Oslo” May CTP.&nbsp; Quadrant itself is a great example of a model driven application.&nbsp; We will make use of this fact a little later to customize the view of our model.&nbsp; Let’s use Quadrant to take a look at our Employee model.&nbsp; Launch Quadrant by clicking on the icon in the “<EM>Microsoft Codename Oslo Quadrant</EM>” folder in the <EM>Start Menu</EM>.</P>
<P>When Quadrant loads up, the Repository is displayed in a <STRONG>Tree Master/Detail</STRONG> view.&nbsp; Expand <EM>Catalog</EM> and you will see our <STRONG>EmployeeInfo</STRONG> domain holding our <STRONG>Employees</STRONG> model.&nbsp; Click on the <STRONG>Employees</STRONG> model. Notice it displays a list of the first names of the employees that we specified in our DSL input text which is now in the Repository.&nbsp; Remember this as we will come back to it shortly.</P>
<P>Now drag the <STRONG>Employees</STRONG> model onto the workspace.&nbsp; Notice Quadrant displays our model values in a <STRONG>Table</STRONG> view.&nbsp; Let’s change this to a <STRONG><EM>Master/Detail</EM></STRONG> view to make it easier to see.&nbsp; In the upper right of our Employees view, click on where it says <STRONG><EM>Table.</EM></STRONG>&nbsp; A list of different viewers will be shown in the dropdown.&nbsp; Select <STRONG><EM>Master/Detail</EM></STRONG>.&nbsp; A picture of the view setting is shown below (I placed a red oval around the <STRONG>Master/Detail</STRONG> setting you should select):</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image_2.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image_2.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image_thumb.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image_thumb.png" width=863 height=635></A> </P>
<P>You will see Quadrant now shows the list of first names on the left and when you click on a name, it shows the detail on the right (in a property view). Notice, the <STRONG>Table</STRONG> view was tagged in the dropdown as the <EM>Default</EM> view.&nbsp; Let’s make the <STRONG>Master/Detail</STRONG> view the <EM>Default</EM> view.&nbsp; From the main menu select <STRONG>View|Set Default View</STRONG>.&nbsp; <STRONG>Master/Detail</STRONG> will now be the default view for our model.&nbsp; If we close the <STRONG>Employees</STRONG> model and re-drag it from the Catalog, it should come up in our new default view.</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image6.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image6.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image6_thumb.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image6_thumb.png" width=866 height=632></A></P>
<P>When Quadrant displays our <STRONG>Employees</STRONG> model data, it shows the <STRONG>FirstName</STRONG> field.&nbsp; Quadrant looks at a model and grabs the first field it finds that contains “<EM>name</EM>” as the default field to display.&nbsp; Remember previously I said Quadrant was a great example of a model driven application.&nbsp; Well, we can change this behavior for our <STRONG>Employees</STRONG> model by updating one of Quadrant’s models, telling Quadrant what field we want it to display by default.&nbsp; This is done by adding instance data for the <STRONG>ViewerHintCatalogTypes</STRONG> in Quadrant’s own model Repository.&nbsp; </P>
<P>We can use M to insert this data.&nbsp; Let’s have Quadrant display an Employee’s <STRONG>Number</STRONG> instead of <STRONG>FirstName</STRONG> as the default display value.&nbsp; Below is what the M value looks like for our <STRONG>ViewerHintCatalogTypes</STRONG>.&nbsp; We tell Quadrant that our host is the localhost – “<EM>.</EM>”, our the <EM>Catalog</EM> where our Employees model is stored is called “<EM>Repository</EM>”, the schema name for our model is call “<EM>EmployeeInfo</EM>”, the type we want to modify the display for is “<EM>Employees</EM>” and that when it displays the Employees model, it should show the “<EM>Number</EM>” field.&nbsp; Put the below M in a file called <STRONG>EmployeeConfiguration.m</STRONG>:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>module Quadrant.SchemaExtensions <BR>{ <BR>&nbsp;&nbsp; import Quadrant.SchemaExtensions;</FONT></P>
<P><FONT face=Courier><BR>&nbsp;&nbsp; ViewerHintCatalogTypes <BR>&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host =&gt; ".", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CatalogName =&gt; "Repository", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SchemaName =&gt; "EmployeeInfo", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TypeOrAssociationName =&gt; "Employees", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ViewerHint =&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DescriptionProperty =&gt; "Number", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GroupingProperty =&gt; "", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SpatialProperty =&gt; "" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp; } <BR>}</FONT></P>
<P><FONT face=Courier></FONT></P></BLOCKQUOTE>
<P>Because we are inserting values into one of Quadrant’s models, we included an import of Quadrant’s <STRONG>SchemaExtensions</STRONG> model.&nbsp; Now we need to compile our <STRONG>EmployeeConfiguration</STRONG> M.&nbsp; We will need to pass the M compiler a reference to Quadrants models on the command line.&nbsp; Quadrant’s models are compiled into a file called <STRONG>Quadrant.mx</STRONG> which can be found in the Oslo install directory.&nbsp; The command to compile our <STRONG>EmployeeConfiguration</STRONG> is shown below:</P>
<P><FONT face=Courier>m EmployeeConfiguration.m /r:"C:\Program Files\Microsoft Oslo\1.0\bin\QuadrantModels.mx" </FONT></P>
<P>The next step is to install our configuration values for our model into Quadrant’s repository.&nbsp; To do this we first need to find out what Quadrants repository is named.&nbsp; You can do this by loading up SQL Server Manager and looking at the databases or executing the command below from a command line:</P>
<P><FONT face=Courier>sqlcmd -s ./SQLSERVER -Q "select name from sys.databases"</FONT></P>
<P>On my machine, Quadrant’s repository is contained in a database called <STRONG>Quadrant.3.0.1803.10.DKAUFMAN-OSLO</STRONG> which is a combination of the name Quadrant, the Oslo version and the name of my computer.&nbsp; Yours should be similar with a different computer name at the end.&nbsp; We will use the mx command to install the configuration file, telling it to use the Quadrant repository and passing a reference to Quadrant’s compiled models.&nbsp; The command looks like this:</P>
<P><FONT face=Courier>mx install EmployeeConfiguration.mx -d:Quadrant.3.0.1803.10.DKAUFMAN-OSLO.Administrator /r:"C:\Program Files\Microsoft Oslo\1.0\bin\QuadrantModels.mx"</FONT></P>
<P>Our customization is now installed. Close Quadrant and re-start it.&nbsp; Notice now in the Repository Tree view when you click on our Employees model, a list of Employee <STRONG>Number</STRONG> is displayed on the right instead of <STRONG>FirstName</STRONG>.&nbsp; Also, in our default model view for our Employees model, Employee Number is now shown on the left hand side in the <STRONG>Master/Detail</STRONG> and clicking on the number shows the employee info on the right.&nbsp; Below is a screenshot of Quadrant showing the visual customization for our Employees model:</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image1.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image1.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image1_thumb.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_1512B/image1_thumb.png" width=846 height=618></A></P>
<P>That’s it for our tour of the “Oslo” May CTP.&nbsp; Through these posts, we saw how easy it was to build a model, create a DSL for getting data into our model, install our model into the Oslo Repository, display our model visually using Quadrant and customizing the view of our model.&nbsp; You can download the Oslo artifacts for this example <A href="https://cid-aed9d9fba267dd33.skydrive.live.com/self.aspx/.Public/Code/Oslo/Employee%20Model.zip" target=_blank>here</A>.&nbsp; I included batch files to build, clean and install the example. Also, included is a batch file to re-build the default Oslo repository (<U>you might have to edit directories or the name of the Quadrant repository in the batch files to match your install</U>).</P>
<P>Now it’s your turn.&nbsp; Install the latest <A href="https://msdn.microsoft.com/oslo" target=_blank>Oslo CTP</A> and take it for a spin.&nbsp; And please let me know about the applications you build as you experiment with this exciting new technology. </P>]]></content:encoded>
    </item>
    <item>
      <title>From DSLs and Models to “Quadrant” using “Oslo” May CTP – Part II</title>
      <link>https://docs.microsoft.com/archive/blogs/dkaufman/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-ii</link>
      <pubDate>Fri, 05 Jun 2009 01:49:00 GMT</pubDate>
      <dc:creator><![CDATA[dkaufman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dkaufman/2009/06/05/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-ii/</guid>
      <description><![CDATA[Welcome to Part II of our look at the “Oslo” May CTP.&nbsp; In Part I, we created a simple domain...]]></description>
      <content:encoded><![CDATA[<P>Welcome to Part II of our look at the “Oslo” May CTP.&nbsp; In <A href="https://blogs.msdn.com/dkaufman/archive/2009/05/27/from-dsl-and-models-to-quadrant-using-oslo-may-ctp-part-i.aspx" target=_blank mce_href="https://blogs.msdn.com/dkaufman/archive/2009/05/27/from-dsl-and-models-to-quadrant-using-oslo-may-ctp-part-i.aspx">Part I</A>, we created a simple domain model for a fictional company’s employee information. In this installment, we will create a domain specific language (DSL) that will take a simple text input and generate model values for our previously created domain model.&nbsp; </P>
<P>To re-cap, in Part I, we created a module called <STRONG>EmployeeInfo </STRONG>that defined an entity called <STRONG>Employee</STRONG> which has the following definition:</P>
<BLOCKQUOTE>
<P><FONT size=3 face=Courier>type Employee{ <BR>&nbsp; FirstName: Text#50; <BR>&nbsp; LastName: Text#50; <BR>&nbsp; Number:Text#10; <BR>&nbsp; id : Integer32 =&gt; AutoNumber();&nbsp;&nbsp;&nbsp; <BR>} where identity(id);</FONT> </P></BLOCKQUOTE>
<P><STRONG>EmployeeInfo</STRONG> also defined and extent called <STRONG>Employees</STRONG> which contains zero or more <STRONG>Employee</STRONG> instances.</P>
<P>Now we will use M language support to create a very simple DSL called <STRONG>EmployeeGrammar</STRONG> which describes an Employee.&nbsp; Below is an example of the <STRONG>EmployeeGrammar</STRONG>:</P>
<P><FONT face=Courier>My name is Edward Brown, my employee number is 364321 <BR>My name is Joe Smith, my employee number is 342343</FONT></P>
<P>The above input text is placed in a text file called <STRONG>Employee.txt</STRONG>.&nbsp; </P>
<P>Now lets create the language used to parse the input text for our language. A grammar is a set of rules which determine if a sequence of characters conform to a language.&nbsp; The grammar parser will parse the input text based on the rules of the grammar and build a syntax tree which is a hierarchy of data that was parsed.&nbsp; The syntax tree can be used in a number of ways in your application including storing it (e.g. in the Repository or as XML) or by iterating through the tree in memory at runtime directly in your application.&nbsp; For this example we will be using the M tool chain to generate the syntax tree as a set of model values and import it into the Oslo Repository.</P>
<P>We can build our grammar in the Oslo Intellipad tool.&nbsp;&nbsp; For our grammar, first we need to specify the interleave for the language which indicates the rule for which values should be used as whitespaces.&nbsp; For our language, whitespaces will be defined as spaces, tabs, carriage returns/linefeed and commas.&nbsp; The interleave command looks like this:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>interleave Whitespace = ' ' | '\t' | '\n' | '\r' | ','; <BR></FONT></P></BLOCKQUOTE>
<P>Next we need to define tokens which are used to designate rules that defines the language.&nbsp; The language parser will try to match the tokens in the input text.&nbsp; The first token we define will be for the start text for our language which is “My name is”.&nbsp; The token statement looks like this:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>token TkStart = "My name is"; <BR></FONT></P></BLOCKQUOTE>
<P>We then define a token for name which can be any letter, lower or uppercase.&nbsp; A name can be made up of one or more letters.&nbsp; The definition for the name token looks like this:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>token TkName = ("A".."Z" | "a".."z")+; </FONT></P></BLOCKQUOTE>
<P>In the above token definition, the “+” is what indicates that the token is made up of one or more characters.&nbsp; That takes care of tokens for the name part of the DSL but we still need to specify the tokens for the employee number.&nbsp; The tokens for employee number section looks like this:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>token TkNumStart = "my employee number is";&nbsp;&nbsp; <BR>token TkEmpNum = ("0".."9")+;</FONT> </P></BLOCKQUOTE>
<P>Now that we have the tokens we need to define the syntax of how the tokens should be used.&nbsp; M language below is the syntax statement that tells how the tokens can be used to parse the input text.&nbsp; All M language files must have a <STRONG>Main</STRONG> syntax statement which is the starting point for the grammar rules.&nbsp; Our will look like this:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>syntax Main =&nbsp; EmployeeData*; </FONT></P></BLOCKQUOTE>
<P>The above indicates that the EmployeeData rule should be used for the grammar which means there needs to be a syntax statement for EmployeeData and that there will be one or more lines of the input textto be processed.&nbsp;&nbsp;&nbsp; </P>
<P>Next we need to define the syntax for EmployeeData which will consist of the start token, a token for first name, a token for last name, a token for the start of the employee num and finally the token for the employee number.&nbsp; The EmployeeData syntax statement looks like this:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>syntax EmployeeData =&nbsp; TkStart TkName TkName TkNumStart TkEmpNum; </FONT><FONT face=Courier></FONT></P></BLOCKQUOTE>
<P>The complete text for our language so far is shown in Intellipad below.&nbsp; Again we use the module name <STRONG>EmployeeInfo</STRONG>.&nbsp; Our language will be called <STRONG>EmployeeLanguage.&nbsp; </STRONG></P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_10.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_10.png"><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="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_thumb_4.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_thumb_4.png" width=535 height=292></A> </P>
<P>Save the grammar in a file called <STRONG>EmployeeGrammar.mg</STRONG>.&nbsp; Now we can test it.&nbsp; To do this we put Intellipad in MGrammar mode and load up our input text in the <STRONG>Employee.txt</STRONG> file we created above.&nbsp; With the <STRONG>EmployeeGrammar.mg</STRONG> file loaded in Intellipad, press <STRONG>&lt;CTRL&gt; &lt;SHIFT&gt; T</STRONG>.&nbsp; Intellipad should prompt you to select the input text file and then it will go into Tree Preview Mode.&nbsp; The input text will be shown on the left side, the grammar in the middle and the generated syntax tree will be on the right side.&nbsp; At the bottom will be a window that will display parse errors.&nbsp; Below is a screen shot of Intellipad in Tree Preview Mode:</P>
<P align=center><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_18.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_18.png"><IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_thumb_8.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_thumb_8.png" width=678 height=352></A> </P>
<P>If you look at the generated syntax tree on the far right for our sample language input text you will notice that it seems rather ambiguous.&nbsp; It also contains extra text such as the text of the static tokens. To fix this, we will use projections.&nbsp; Projections specify how the values should be generated from the language input text should look.&nbsp; The projection operator “=&gt;” is used and immediately followed by the pattern we want to use in place of the default tree structure.</P>
<P>Let start by cleaning up the <STRONG>EmployeeData</STRONG> syntax.&nbsp; You can reference the values of the tokens by prefacing the token with a <STRONG>&lt;name&gt;:</STRONG>.&nbsp; In this example we will reference the first name of <STRONG>TkName</STRONG> with <STRONG>f</STRONG>, the<STRONG>&nbsp;</STRONG>last name with <STRONG>l </STRONG>and the employee number as <STRONG>n</STRONG>.&nbsp; We will then use those references in the projection for instance indicated the first name should be output in the syntax tree as with the text “FirstName =” and the value of <STRONG>f </STRONG>by writing&nbsp; <EM>FirstName =&gt; f. </EM>The full definition for the <STRONG>EmployeeData</STRONG> syntax should look like this:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>syntax EmployeeData =&nbsp; TkStart f:TkName l:TkName TkNumStart n:TkEmpNum =&gt;{FirstName =&gt; f, LastName =&gt; l, Number =&gt;n}; </FONT><FONT face=Courier></FONT></P></BLOCKQUOTE>
<P>Now let’s add a projection to the <STRONG>Main</STRONG> syntax.&nbsp; The values from the EmployeeData rule will be referenced in the production by the identifier <STRONG>e</STRONG>.&nbsp; We need to make sure the projection generates the name of our extent <STRONG>Employees</STRONG> from the our previously defined model and we will use the <STRONG>valuesof</STRONG> grammar keyword to remove an extra set of brackets that was being generated in the default projection.&nbsp; The <STRONG>Main</STRONG> syntax should look like this:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>syntax Main =&nbsp; e:EmployeeData* =&gt; Employees{valuesof(e)}; </FONT></P></BLOCKQUOTE>
<P>The complete text of our language is shown below:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>module EmployeeInfo{ <BR>language EmployeeLanguage{ <BR>&nbsp;&nbsp; syntax Main =&nbsp; e:EmployeeData* =&gt; Employees{valuesof(e)}; <BR>&nbsp;&nbsp; syntax EmployeeData =&nbsp; TkStart f:TkName l:TkName TkNumStart n:TkEmpNum =&gt;{FirstName =&gt; f, LastName =&gt; l, Number =&gt;n}; <BR>&nbsp;&nbsp; token TkStart = "My name is"; <BR>&nbsp;&nbsp; token TkName = ("A".."Z" | "a".."z")+; <BR>&nbsp;&nbsp; token TkNumStart = "my employee number is"; <BR>&nbsp;&nbsp; token TkEmpNum = ("0".."9")+; <BR>&nbsp;&nbsp; interleave Whitespace = ' ' | '\t' | '\n' | '\r' | ','; <BR>&nbsp; } <BR>}</FONT></P></BLOCKQUOTE>
<P><FONT face=Courier></FONT></P>
<P>The generated syntax tree using the added projections looks much cleaner and now maps to our schema definition of <STRONG>Employee</STRONG>.&nbsp; Here is a screenshot of Intellipad with the new syntax tree displayed:</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_16.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_16.png"><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="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_thumb_7.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_thumb_7.png" width=662 height=281></A> </P>
<P>Now let’s use the M tool chain to compile our grammar and generate M values of our input text.&nbsp; We compile the grammar using the <STRONG>m.exe</STRONG> command, passing it our language file <STRONG>EmployeeGrammar.mg</STRONG>.&nbsp; The result will be&nbsp; an mx file called<STRONG> EmployeeGrammar.mx</STRONG>.&nbsp; We then use the mgx.exe command to generate M values for our input text.&nbsp; We pass the mgx command a the name of our input text file, use the <STRONG>/r</STRONG> switch to reference the <STRONG>EmployeeGrammar.mx</STRONG> file we generated previously and use the <STRONG>/m</STRONG> switch to tell it that the module generated with the values should be <STRONG>EmployeeInfo</STRONG> to be consistent with the modules we defined previous for our model schema.&nbsp; The full command will looks like this:</P>
<P><FONT face=Courier>mgx Employee.txt /r:EmployeeGrammar.mx /m:EmployeeInfo</FONT></P>
<P>This generates the following M values in a file called <STRONG>Employee.m</STRONG>:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>module EmployeeInfo { <BR>&nbsp;&nbsp;&nbsp; Employees { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FirstName =&gt; "Edward", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LastName =&gt; "Brown", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number =&gt; "364321" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FirstName =&gt; "Joe", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LastName =&gt; "Smith", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number =&gt; "342343" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp; } <BR>}</FONT></P></BLOCKQUOTE>
<P>We can then compile the newly generated M values from our input text using the m.exe command, which will generate a file called <STRONG>Employee.mx</STRONG>.&nbsp; To compile the newly generated M values from our input text we need to reference the <STRONG>Employee</STRONG> model schema which we compiled previously which is in the <STRONG>EmployeeModel.mx</STRONG> file.&nbsp;&nbsp; The command looks like this:</P>
<P><FONT face=Courier>m Employee.m /r:EmployeeModel.mx</FONT></P>
<P>And here is a screenshot of the commands executing: </P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_8.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_8.png" mce_href="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_8.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=image border=0 alt=image src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_thumb_3.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_thumb_3.png" width=709 height=310 mce_src="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLsandModelstoQuadrantusingOsloMayC_13F02/image_thumb_3.png"></A> </P>
<P>That’s it for Part II.&nbsp; As you can see, creating new domain specific languages is very easy using the Oslo M tools.&nbsp; In <A href="https://blogs.msdn.com/dkaufman/archive/2009/06/24/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-iii.aspx" mce_href="https://blogs.msdn.com/dkaufman/archive/2009/06/24/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-iii.aspx">Part III</A> we will install our Employee domain model and values into the “Oslo” Repository and then customize the visual view of our model using “Quadrant”.</P>]]></content:encoded>
    </item>
    <item>
      <title>From DSLs and Models to “Quadrant” using “Oslo” May CTP – Part I</title>
      <link>https://docs.microsoft.com/archive/blogs/dkaufman/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-i</link>
      <pubDate>Wed, 27 May 2009 01:17:00 GMT</pubDate>
      <dc:creator><![CDATA[dkaufman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dkaufman/2009/05/27/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-i/</guid>
      <description><![CDATA[The “Oslo” May CTP has just been released.&nbsp; You can download the latest release of Oslo from...]]></description>
      <content:encoded><![CDATA[<P>The “Oslo” May CTP has just been released.&nbsp; You can download the latest release of Oslo from the <A title="Oslo Dev Center" href="https://msdn.microsoft.com/oslo" target=_blank mce_href="https://msdn.microsoft.com/oslo">Oslo Dev Center on MSDN</A>.&nbsp; I have been using this new version and want to give a little tour of the new bits.&nbsp; This will be the first of three posts that take you through creating a simple domain model, building a DSL, importing the Model schema and instance data into the Repository and then exploring and customizing the view of the model using "Quadrant". </P>
<P>For this example we’ll create a very simple domain model using MSchema that will contain information for a fictional company’s employee information.&nbsp; The DSL will take a simple input text that will be parsed and stored as model instance data.&nbsp; Lastly we will display and customize the view of the Employee model in Quadrant.</P>
<P>The posts will be split as follows:</P>
<UL>
<LI><A href="https://blogs.msdn.com/dkaufman/archive/2009/05/27/from-dsl-and-models-to-quadrant-using-oslo-may-ctp-part-i.aspx" mce_href="https://blogs.msdn.com/dkaufman/archive/2009/05/27/from-dsl-and-models-to-quadrant-using-oslo-may-ctp-part-i.aspx">Part I – Creating the Model with MSchema</A> </LI>
<LI><A href="https://blogs.msdn.com/dkaufman/archive/2009/06/05/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-ii.aspx" mce_href="https://blogs.msdn.com/dkaufman/archive/2009/06/05/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-ii.aspx">Part II – Building a DSL with MGrammar</A> </LI>
<LI><A href="https://blogs.msdn.com/dkaufman/archive/2009/06/24/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-iii.aspx" mce_href="https://blogs.msdn.com/dkaufman/archive/2009/06/24/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-iii.aspx">Part III – Viewing the Model in Quadrant</A> </LI></UL>
<P>The Module will be called <STRONG>EmployeeInfo </STRONG>and the schema will contain the definition of an entity called <STRONG>Employee</STRONG>.&nbsp; An employee will have Text fields called <EM><STRONG>FirstName</STRONG></EM>, <EM><STRONG>LastName</STRONG></EM> and <EM><STRONG>Number</STRONG></EM> where <EM><STRONG>Number</STRONG></EM> is the fictional employee’s employee number .&nbsp; The schema for <STRONG>Employee</STRONG> looks like this:</P>
<BLOCKQUOTE>
<P><FONT size=3 face=Courier>type Employee{ <BR>&nbsp; FirstName: Text#50; <BR>&nbsp; LastName: Text#50; <BR>&nbsp; Number:Text#10; <BR>&nbsp; id : Integer32 =&gt; AutoNumber();&nbsp;&nbsp;&nbsp; <BR>} where identity(id);</FONT> </P></BLOCKQUOTE>
<P>Also we include a field call <STRONG><EM>id</EM></STRONG> which is an integer which will contain a&nbsp; number auto generated by “Oslo” that will be used as a unique identity field for each Employee.&nbsp; </P>
<P><STRONG>Note:</STRONG> In the Oslo May CTP, the use of “=” has been deprecated.&nbsp; Instead “=&gt;” is used in MSchema and MGrammar.&nbsp; You can read more about the May CTP language changes in the <A title=Oslo href="https://msdn.microsoft.com/en-us/oslo/releasenotes.aspx" target=_blank mce_href="https://msdn.microsoft.com/en-us/oslo/releasenotes.aspx">Oslo May CTP Release Notes</A> and Shawn Wildermuth's blog post “<A href="https://wildermuth.com/2009/05/22/M_Language_Changes_Coming_in_Next_CTP" mce_href="https://wildermuth.com/2009/05/22/M_Language_Changes_Coming_in_Next_CTP">M Language Changes Coming in Next CTP</A>”</P>
<P>Now that we have Employee defined, we still need an extent to hold a list of employees.&nbsp; The line below will define and extent called Employees that contains zero or more Employee records:</P>
<BLOCKQUOTE>
<P><FONT face=Courier>Employees:Employee*;</FONT></P></BLOCKQUOTE>
<P>That’s it, our simple Employee model is done.&nbsp; Below is the full MSchema file for the Employee model. I used Oslo’s Intellipad editor to create the definition and saved it to an M file called <STRONG>EmployeeModel.m</STRONG>.&nbsp; Here is a picture of the Employee model Intellipad:</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_6.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_6.png" mce_href="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_6.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=image border=0 alt=image src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_thumb_2.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_thumb_2.png" width=682 height=487 mce_src="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_thumb_2.png"></A> </P>
<P>The final step will be to compile the Employee model.&nbsp; We do this using the Domain Compiler - <EM>m.exe</EM> that is part of the “Oslo” SDK from the May CTP and pass it the name of our M file – <STRONG>EmployeeModel.m</STRONG>.&nbsp; This will generate a file called <STRONG>EmployeeModel.mx</STRONG> which contains our compiled model.&nbsp; Below is a screenshot of the compilation step:</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_10.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_10.png" mce_href="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_10.png"><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="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_thumb_4.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_thumb_4.png" width=704 height=310 mce_src="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/FromDSLandModelsusingOsloMayCTPPartI_148AC/image_thumb_4.png"></A> </P>
<P mce_keep="true">&nbsp;</P>
<P>That’s it for this installment, we now have our compiled Domain Model.&nbsp; In <A href="https://blogs.msdn.com/dkaufman/archive/2009/06/05/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-ii.aspx" mce_href="https://blogs.msdn.com/dkaufman/archive/2009/06/05/from-dsls-and-models-to-quadrant-using-oslo-may-ctp-part-ii.aspx">Part II</A> we will create a DSL that converts some easy to understand text into instance data for our Employee Model.&nbsp; </P>]]></content:encoded>
    </item>
    <item>
      <title>A BizTalk DSL using “Oslo”</title>
      <link>https://docs.microsoft.com/archive/blogs/dkaufman/a-biztalk-dsl-using-oslo</link>
      <pubDate>Mon, 02 Mar 2009 16:38:00 GMT</pubDate>
      <dc:creator><![CDATA[dkaufman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dkaufman/2009/03/02/a-biztalk-dsl-using-oslo/</guid>
      <description><![CDATA[It's been a while since my last post.&nbsp; I recently started playing with the latest “Oslo” CTP...]]></description>
      <content:encoded><![CDATA[<P>It's been a while since my last post.&nbsp; I recently started playing with the latest <A href="https://www.microsoft.com/downloads/details.aspx?FamilyID=f2f4544c-626c-44a3-8866-b2a9fe078956&amp;displaylang=en" mce_href="https://www.microsoft.com/downloads/details.aspx?FamilyID=f2f4544c-626c-44a3-8866-b2a9fe078956&amp;displaylang=en">“Oslo” CTP</A> release and wanted to share with you what I have built so far.&nbsp; One of the cool features of the “Oslo” SDK is the ability to write new Domain Specific Languages (DSL) with MGrammar.&nbsp; I had worked in the past with ISV's who wanted to generate BizTalk Orchestrations from their products, so I took some test code I had written that generates test ODX files and decided to try building an MGrammer for generating these files.&nbsp; The idea is to build an easy to read language that when compiled would generate a BizTalk Orchestration .</P>
<P>An example input file to my grammar for an Orchestration looks like this:</P>
<BLOCKQUOTE>
<P mce_keep="true"><EM>Orchestration test <BR>&nbsp; Receive rcvMsg <BR>&nbsp;&nbsp;&nbsp; where ReportToAnalyst = True <BR>&nbsp; end</EM></P>
<P mce_keep="true"><EM>&nbsp; If "x&gt;2" then <BR>&nbsp;&nbsp;&nbsp; Transform trnsfrmMsg1 end <BR>&nbsp; else <BR>&nbsp;&nbsp;&nbsp; Transform trnsfrmMsg2 end <BR>&nbsp; end <BR>&nbsp; <BR>&nbsp; Send sndMsg end <BR>end</EM></P></BLOCKQUOTE>
<P mce_keep="true">The above creates an Orchestration that receives a message, makes a decision which message transform to run and then sends the message.&nbsp; Also notice some shapes can contain other shapes and you can set parameters on the Shapes (eg. "where ReportToAnalyst = True<EM>"). </EM>The syntax for the DSL is very easy to understand, most people could figure out what the process was trying to accomplish simply by looking at the input file.</P>
<P mce_keep="true">Next, I need to be able to parse the new syntax.&nbsp; I did this using the “Oslo” SDK and creating a grammar.&nbsp; Below is a screenshot of the “Oslo” Intellipad editor in tree mode.&nbsp; On the left is my input text.&nbsp; The center pane is my MGrammar and the right pane is the parse tree of the input file:</P>
<P><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=Intellipad border=0 alt=Intellipad src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/Intellipad_thumb.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/Intellipad_thumb.png" width=528 height=377 mce_src="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/Intellipad_thumb.png"></P>
<P mce_keep="true">Now that we can parse the input using MGrammar, I needed a way to generate the ODX file.&nbsp; To do this, I built a commandline compiler in C# that uses Oslo’s&nbsp; System.Dataflow library that walks the parse tree and generates the correct XML for the ODX file.&nbsp; The compiler creates an in memory object for each shape and sets the correct properties and relationships between the shapes.&nbsp; Each shape object knows how to render itself in XML and also knows it’s child shapes.&nbsp; Below is the output from running the compiler (for debug purposes, I display the Orchestration shapes and their child relationships):</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/compiler_2.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/compiler_2.png" mce_href="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/compiler_2.png"><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=compiler border=0 alt=compiler src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/compiler_thumb.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/compiler_thumb.png" width=509 height=295 mce_src="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/compiler_thumb.png"></A> </P>
<P>Now that I have the Orchestration file, I can load up the ODX in BizTalk and check out what was generated.&nbsp; I used an empty BizTalk project and “Add Existing Item…” to add the Orchestration to the project and load it up:</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/BizTalk_2.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/BizTalk_2.png" mce_href="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/BizTalk_2.png"><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=BizTalk border=0 alt=BizTalk src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/BizTalk_thumb.png" original-url="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/BizTalk_thumb.png" width=568 height=413 mce_src="https://blogs.msdn.com/blogfiles/dkaufman/WindowsLiveWriter/ABizTalkDSLusingOslo_956D/BizTalk_thumb.png"></A> </P>
<P>Notice it generated the Receive, Decision, Construct/Transform and Send shapes all based on our original input.&nbsp; The Orchestration still needs to be completed by the developer (for example message types have not been set) but you can see how “Oslo” makes it so even a non-programmer could describe a process flow and have that generated into something executable.</P>
<P>MGrammar makes it easy to create and modify the language.&nbsp; For instance, I want to make the syntax even more non-programmer friendly.&nbsp; One simple way could be to change the “end” token to a period.&nbsp; The syntax to create a shape would change from:</P>
<BLOCKQUOTE>
<P><EM>Receive msg1 end</EM></P></BLOCKQUOTE>
<P>to</P>
<BLOCKQUOTE>
<P><EM>Receive msg1.</EM></P></BLOCKQUOTE>
<P>The key is that I can make that modification to the language without changing the parse tree.&nbsp; Using the Projections functionality of MGrammar, I can make changes and additions to my language without the need to make major changes (if any) to my compiler.</P>
<P>As you can see, one of the benefits of the Oslo technology is that it can make software development and customization much more approachable.&nbsp; I talk with many ISVs who are excited&nbsp; about using “Oslo” as a way to help their end users and system integrators adapt and configure the ISV's out of the box software to run in customer environments. </P>
<P mce_keep="true">I encourage you to download the <A href="https://www.microsoft.com/downloads/details.aspx?FamilyID=f2f4544c-626c-44a3-8866-b2a9fe078956&amp;displaylang=en" mce_href="https://www.microsoft.com/downloads/details.aspx?FamilyID=f2f4544c-626c-44a3-8866-b2a9fe078956&amp;displaylang=en">Microsoft "Oslo" SDK - January 2009 CTP</A> and try it out yourself.&nbsp; And check out the great content on the <A href="https://msdn.microsoft.com/en-us/oslo/default.aspx" mce_href="https://msdn.microsoft.com/en-us/oslo/default.aspx">Oslo Developer Center</A> to help you get up to speed.&nbsp; Let me know your experiences and thoughts on how you might use “Oslo” with your software.</P>]]></content:encoded>
    </item>
    <item>
      <title>Oslo, Dublin and PDC</title>
      <link>https://docs.microsoft.com/archive/blogs/dkaufman/oslo-dublin-and-pdc</link>
      <pubDate>Thu, 09 Oct 2008 14:16:00 GMT</pubDate>
      <dc:creator><![CDATA[dkaufman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dkaufman/2008/10/09/oslo-dublin-and-pdc/</guid>
      <description><![CDATA[PDC is rapidly approaching and there is a lot of exciting technology that is being created by CSD...]]></description>
      <content:encoded><![CDATA[<P><A href="https://www.microsoftpdc.com/" mce_href="https://www.microsoftpdc.com/">PDC</A> is rapidly approaching and there is a lot of exciting technology that is being created by CSD which will be unveiled at the conference.&nbsp; Steve Martin posted a blog entry last week about <A href="https://blogs.msdn.com/stevemar/archive/2008/10/01/the-road-to-pdc-net-framework-4-0-and-dublin.aspx" mce_href="https://blogs.msdn.com/stevemar/archive/2008/10/01/the-road-to-pdc-net-framework-4-0-and-dublin.aspx">Dublin</A>, a technology that makes it easier to deploy, manage and scale WF/WCF based applications.&nbsp; Dublin should be of great interest to anyone building and deploying applications based on WF or WCF.</P>
<P><A href="https://douglaspurdy.com/2008/09/06/what-is-oslo/" mce_href="https://douglaspurdy.com/2008/09/06/what-is-oslo/">Doug Purdy</A> and <A href="https://www.pluralsight.com/community/blogs/dbox/archive/2008/09/06/oslo.aspx" mce_href="https://www.pluralsight.com/community/blogs/dbox/archive/2008/09/06/oslo.aspx">Don Box</A> a few weeks ago posted additional information on Oslo.&nbsp; Both Doug and Don will be <A href="https://douglaspurdy.com/2008/09/14/the-hottest-talk-at-pdc/" mce_href="https://douglaspurdy.com/2008/09/14/the-hottest-talk-at-pdc/">speaking on Oslo at PDC</A> and I encourage you to see their talks.</P>
<P>These technologies coupled with the enhancements we are making to <A href="https://blogs.msdn.com/kavitak/archive/2008/10/07/pdc-here-we-come.aspx" mce_href="https://blogs.msdn.com/kavitak/archive/2008/10/07/pdc-here-we-come.aspx">WF and WCF for .Net 4.0</A> has really excited the ISVs I am engaged with.&nbsp; The work we are doing holds the promise of making the ISV solutions much easier to develop, customize, deploy and maintain.&nbsp; These technologies have the opportunity to be truly transformational.</P>
<P>But if you want to find out more in the near term, you'll just have to go to PDC. <A href="https://microsoftpdc.com/Registration/" mce_href="https://microsoftpdc.com/Registration/">Registration</A> is still open.&nbsp; The PDC folks have thoughtfully even posted a <A href="https://microsoftpdc.com/Letter.aspx" mce_href="https://microsoftpdc.com/Letter.aspx">sample letter to your boss</A> about why you can't miss PDC (if I haven't given you enough ammunition already).</P>]]></content:encoded>
    </item>
    <item>
      <title>BizTalk 2006 R3 - TAP Program Accepting Nominations</title>
      <link>https://docs.microsoft.com/archive/blogs/dkaufman/biztalk-2006-r3-tap-program-accepting-nominations</link>
      <pubDate>Fri, 11 Jul 2008 17:44:00 GMT</pubDate>
      <dc:creator><![CDATA[dkaufman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dkaufman/2008/07/11/biztalk-2006-r3-tap-program-accepting-nominations/</guid>
      <description><![CDATA[In April, Steve Martin announced that we are working on BizTalk 2006 R3.&nbsp; Some of the new...]]></description>
      <content:encoded><![CDATA[<P>In April, Steve Martin announced that we are working on BizTalk 2006 R3.&nbsp; Some of the new investments for this release include:</P>
<UL>
<LI>New web service registry capabilities with support for UDDI (Universal Description Discovery and Integration) version 3.0 </LI>
<LI>Enhanced service enablement of applications (through new and enhanced adapters for LOB applications, databases, and legacy/host systems) </LI>
<LI>Enhanced service enablement of “edge” devices through BizTalk RFID Mobile </LI>
<LI>Enhanced interoperability and connectivity support for B2B protocols (like SWIFT, EDI, etc) </LI>
<LI>SOA patterns and best practices guidance to assist our customer’s implementations&nbsp;</LI></UL>
<P>BizTalk 2006 R3 will also add support for our latest wave of technology releases including Windows Server 2008, .NET Framework 3.5, Visual Studio 2008 and SQL Server 2008.&nbsp; If you are interested in this new version, the BizTalk 2006 R3 TAP Program is still accepting nominations. <BR><BR>If you&nbsp;are interested in this program, please visit our Connect site to sign-up.</P>
<P>TAP Sign-up Instructions:</P>
<UL>
<LI>Please log on to <A class="" href="https://connect.microsoft.com/" mce_href="https://connect.microsoft.com/">Connect</A></LI>
<LI>Under Categories select <STRONG>Server</STRONG></LI>
<LI>Look for <STRONG>BizTalk TAP Programs</STRONG> and select the "apply" link next to <STRONG>BizTalk Server 2006 R3</STRONG></LI>
<LI>Download and complete the BizTalk Server 2006 R3 TAP Nomination form and click the select button</LI></UL>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>BizTalk and Secure FTP</title>
      <link>https://docs.microsoft.com/archive/blogs/dkaufman/biztalk-and-secure-ftp</link>
      <pubDate>Mon, 16 Jun 2008 16:40:02 GMT</pubDate>
      <dc:creator><![CDATA[dkaufman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dkaufman/2008/06/16/biztalk-and-secure-ftp/</guid>
      <description><![CDATA[I saw a link the other day to an interesting project on Codeplex.&#160; Mikael H&#229;kanssons has...]]></description>
      <content:encoded><![CDATA[<p>I saw a link the other day to an interesting project on <a href="https://www.codeplex.com/">Codeplex</a>.&#160; Mikael H&#229;kanssons has published a project called the <a href="https://www.codeplex.com/SftpAdapter">BizTalk Sftp Adapter</a>.&#160; You can find out more information on his <a href="https://blogical.se/blogs/mikael">blog</a>.&#160; </p>  <p>There is a lot of confusion about what is &quot;Secure FTP&quot;.&#160; Most people don't realize that there are primarily two different ways of securing FTP.&#160; </p>  <ul>   <li><a href="https://en.wikipedia.org/wiki/FTPS">FTPS</a> or <a href="https://en.wikipedia.org/wiki/File_Transfer_Protocol">FTP</a> over <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">SSL</a> uses the SSL/TLS layer to encrypt the FTP traffic.&#160; It is similar to HTTPS which web browsers use to secure HTTP.       <br /></li>    <li><a href="https://en.wikipedia.org/wiki/File_Transfer_Protocol#FTP_over_SSH">SFTP</a> or FTP over <a href="https://en.wikipedia.org/wiki/Secure_Shell">SSH</a> tunnels FTP sessions over an SSH connection. </li> </ul>  <p>So next time you're asked about secure FTP, be sure to find out which one they are referring to.</p>]]></content:encoded>
    </item>
  </channel>
</rss>