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