<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://bloggingabout.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tag 'PDC08'</title><link>http://bloggingabout.net/search/SearchResults.aspx?a=1&amp;o=DateDescending&amp;tag=PDC08&amp;orTags=0</link><description>Search results matching tag 'PDC08'</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Cloud service in Azure : Speedtraps</title><link>http://bloggingabout.net/blogs/dennis/archive/2009/02/23/cloud-service-in-azure-speedtraps.aspx</link><pubDate>Mon, 23 Feb 2009 12:52:51 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:481215</guid><dc:creator>Dennis van der Stelt</dc:creator><description>&lt;p&gt;For the 828 event next Thursday I’m developing some examples. One of them is where I get all speed traps (Flitsers in Dutch) from &lt;a href="http://www"&gt;http://www&lt;/a&gt;… a source that I won’t mention here. I then want to expose these via WCF via SOAP and REST. Of course this will be so extremely popular, that I have to use Windows Azure and be able to scale immensely so you folks won’t miss out on the latest speed traps.&lt;/p&gt;  &lt;p&gt;Anyway, after first writing “w00t” in the cloud, I now got my first WCF service in the cloud which actually does something.&lt;/p&gt;  &lt;p&gt;You can find the REST version here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://flitsservice.cloudapp.net/speedtraps.svc/Flitsers" href="http://flitsservice.cloudapp.net/speedtraps.svc/Flitsers"&gt;http://flitsservice.cloudapp.net/speedtraps.svc/Flitsers&lt;/a&gt;    &lt;br /&gt;&lt;a title="http://flitsservice.cloudapp.net/speedtraps.svc/Status" href="http://flitsservice.cloudapp.net/speedtraps.svc/Status"&gt;http://flitsservice.cloudapp.net/speedtraps.svc/Status&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And the root location, including MEX and WSDL stuff right here:   &lt;br /&gt;&lt;a title="http://flitsservice.cloudapp.net/speedtraps.svc" href="http://flitsservice.cloudapp.net/speedtraps.svc"&gt;http://flitsservice.cloudapp.net/speedtraps.svc&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Unfortunately you won’t be able to add a reference (proxy class) because of some &lt;a href="http://blogs.msdn.com/davidlem/archive/2009/01/07/windows-azure-and-web-services.aspx"&gt;internal stuff going wrong&lt;/a&gt; inside Azure. But maybe I’ll supply you in the future with that as well, and even a client application. Maybe I’ll create an syndicated version of it, but for now you can read the REST version and use it in your own apps. I have no idea how long this will run though.&lt;/p&gt;</description></item><item><title>PDC 2009</title><link>http://bloggingabout.net/blogs/dennis/archive/2008/11/04/pdc-2009.aspx</link><pubDate>Tue, 04 Nov 2008 08:51:24 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:476516</guid><dc:creator>Dennis van der Stelt</dc:creator><description>&lt;p&gt;We’ve already heard it mentioned last week in Los Angeles, but here’s the date already…&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="SaveDatePDC2009" style="display:inline;" height="121" alt="SaveDatePDC2009" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/SaveDatePDC2009_5F00_4CF983BE.png" width="290" border="0" /&gt;&lt;/p&gt;</description></item><item><title>Entity Framework Futures</title><link>http://bloggingabout.net/blogs/dennis/archive/2008/11/04/entity-framework-futures.aspx</link><pubDate>Tue, 04 Nov 2008 08:46:24 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:476515</guid><dc:creator>Dennis van der Stelt</dc:creator><description>&lt;p&gt;A bit late, but it was still in my drafts folder, I just had to finish it. Timothy Mallalieu presented the session on the future of Entity Framework.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Data Platform      &lt;br /&gt;&lt;/strong&gt;We have so many data storage options and so many needs for data.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Normal data access&lt;/strong&gt;       &lt;br /&gt;Users and applications get data from the database via frameworks or libraries &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Integration/aggregation sync        &lt;br /&gt;&lt;/strong&gt;We get data from the cloud, services, databases, etc. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Reporting        &lt;br /&gt;&lt;/strong&gt;Reports get data from a data warehouse &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Management, deployment, policy &amp;amp; security        &lt;br /&gt;&lt;/strong&gt;We have metadata stored in XML, databases, etc. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Models and workflow        &lt;br /&gt;&lt;/strong&gt;We have all kinds of models and workflows needing data. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The question is, how do I get the data I need? There are a lot of options currently.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Core Storage &lt;/li&gt;    &lt;li&gt;Data access API’s and frameworks (like ADO.NET) &lt;/li&gt;    &lt;li&gt;Mid-tier frameworks and technologies (like Astoria) &lt;/li&gt;    &lt;li&gt;Client technologies (custom build, with as example dynamic data) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Entity Framework and EDM are the start for creating data-models and retrieving data. Those were released with .NET Framework 3.5 SP1, but there’s much more to come, starting with SSRS (SQL Server Reporting Services) and synching data for offline usage. These will be discussed this week at PDC.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The new features?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Entity Framework vNext will have the ability to generate the database from the EF model. In the bits that become available, all objects will be dropped from the database though, when refreshing the database from the model. As I understood, this should be fixed in the final .NET 4.0 release, if Entity Framework will be released with .NET.&lt;/p&gt;  &lt;p&gt;Entity Framework vNext will support lazy loading. As in LINQ to SQL it’s a property and you can turn it on and off.&lt;/p&gt;  &lt;p&gt;Entity Framework vNext will support TableValuedFunctions.&lt;/p&gt;  &lt;p&gt;Entity Framework vNext will have support for less XML model, instead you decorate your classes with attributes.&lt;/p&gt;  &lt;p&gt;You can find info on LINQ to SQL and stopping further development on it in &lt;a href="http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx"&gt;this post&lt;/a&gt; and more in &lt;a href="http://blogs.msdn.com/adonet/archive/2008/10/31/clarifying-the-message-on-l2s-futures.aspx"&gt;this post&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;All in all I expected more from the Entity Framework Futures talk. There has been a lot of discussion about the Entity Framework and Tim just showed some v2 features. I expected more on what the grand plan was with Entity Framework. I guess this also involves “Oslo”, M and MEntity. We’ll just have to wait for more to come…&lt;/p&gt;</description></item><item><title>Oslo : Building textual DSLs</title><link>http://bloggingabout.net/blogs/dennis/archive/2008/10/30/oslo-building-textual-dsls.aspx</link><pubDate>Thu, 30 Oct 2008 19:48:43 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:476380</guid><dc:creator>Dennis van der Stelt</dc:creator><description>&lt;p&gt;This is the geek *** session Don Box mentioned. Chris Anderson and Giovanni Della-Libera are presenting, the entire Oslo team that’s here is inside this room.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3257_5F00_5DDC4A69.jpg"&gt;&lt;img title="IMG_3257" style="display:inline;" height="180" alt="IMG_3257" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3257_5F00_thumb_5F00_09E9218E.jpg" width="240" border="0" /&gt;&lt;/a&gt; &lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3260_5F00_32C410CA.jpg"&gt;&lt;img title="IMG_3260" style="display:inline;" height="180" alt="IMG_3260" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3260_5F00_thumb_5F00_3B83F349.jpg" width="240" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;module PDC&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; language Contacts &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; syntax Main = &lt;span style="color:blue;"&gt;checked&lt;/span&gt;:Contact =&amp;gt; &lt;span style="color:blue;"&gt;checked&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; syntax Contact = &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#a31515;"&gt;&amp;quot;Contact&amp;quot;&lt;/span&gt; &lt;span style="color:#a31515;"&gt;&amp;quot;:&amp;quot;&lt;/span&gt; a:Alias =&amp;gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Contact { Alias { a } };&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; |&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#a31515;"&gt;&amp;quot;Contact&amp;quot;&lt;/span&gt; &lt;span style="color:#a31515;"&gt;&amp;quot;:&amp;quot;&lt;/span&gt; a:Alias &lt;span style="color:#a31515;"&gt;&amp;quot;-&amp;quot;&lt;/span&gt; n:PhoneNumber =&amp;gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Contact { Alias { a }, Phone {phone} };&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; token Alias = (&lt;span style="color:#a31515;"&gt;&amp;#39;A&amp;#39;&lt;/span&gt;..&lt;span style="color:#a31515;"&gt;&amp;#39;Z&amp;#39;&lt;/span&gt; | &lt;span style="color:#a31515;"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;..&lt;span style="color:#a31515;"&gt;&amp;#39;z&amp;#39;&lt;/span&gt;)+;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; token Digit = &lt;span style="color:#a31515;"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;..&lt;span style="color:#a31515;"&gt;&amp;quot;9&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; token PhoneNumber = Digit#3 &amp;quot;-&amp;quot; Digit#3 &amp;quot;-&amp;quot; Digit#4;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; interleave TokensIHate = &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot;&lt;/span&gt; | &lt;span style="color:#a31515;"&gt;&amp;quot;\r&amp;quot;&lt;/span&gt; | &lt;span style="color:#a31515;"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;+;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;Tokenize is the first thing to do. The above can transform “Contact : dvdstelt - 425-555-1212”, and it removes weird characters. Chris and Gio than show how lists work, how the recursive results are flattened out, how to add comments and&lt;/p&gt;  &lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3263_5F00_1FFEF146.jpg"&gt;&lt;img title="IMG_3263" style="display:inline;margin:0px 0px 0px 5px;" height="180" alt="IMG_3263" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3263_5F00_thumb_5F00_26161814.jpg" width="240" align="right" border="0" /&gt;&lt;/a&gt; mgx.exe is used to generated an mgx file.&lt;/p&gt;  &lt;p&gt;mgx /r:contacts.mgx input.contacts will generate M language code. The mgx is just a plain .zip file, as said before in one of my posts.&lt;/p&gt;  &lt;p&gt;mgx /r:contacts.mgx input.contacts /t:xaml for transformation to xaml&lt;/p&gt;  &lt;p&gt;You can Integrate MGrammar into the CLR&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Use MSBuild tasks, include the .mg file in your solution and setup the msbuild file (csproj) &lt;/li&gt;    &lt;li&gt;Use the MgrammarCompiler, which is an in memory compiler &lt;/li&gt;    &lt;li&gt;DynamicParser &lt;/li&gt;    &lt;li&gt;IGraphBuilder &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;A cool example of some MGrammer was grammar code for MSI setup package. MSI is really complex to write, so Chris and Gio build MGrammar to build the MSI. But their MGrammer became so complex, that they wrote another MGrammer code library to generate the other MGrammer code to generate the MSI installer ‘code’. The final result is about 50 lines of MGrammer and 400 lines of C#, pretty maintainable I’d say.&lt;/p&gt;  &lt;p&gt;To sum up, MGrammer is a language for creating textual DSLs. The specification will be released under OSP, as noted on many other weblogs.&lt;/p&gt;  &lt;p&gt;You can build your own language right now! Download at &lt;a href="http://msdn.microsoft.com/oslo/"&gt;http://msdn.microsoft.com/oslo/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>“M” and MService</title><link>http://bloggingabout.net/blogs/dennis/archive/2008/10/30/m-and-mservice.aspx</link><pubDate>Thu, 30 Oct 2008 19:02:25 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:476379</guid><dc:creator>Dennis van der Stelt</dc:creator><description>&lt;p&gt;I’ve been talking to people and perhaps here on the blog that during the Doug Purdy talk they showed a demo of MService where, with a few lines of code, a REST enabled WCF services with WF activities was created with only so few lines of actual code.&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;service Service&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; operation PhotoUpload(stream : Stream) : Text&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; .PostUriTemplate = &lt;span style="color:#a31515;"&gt;&amp;quot;upload&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; index : Text = invoke DateTime.Now.Ticks.ToString();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; filename : Text = &lt;span style="color:#a31515;"&gt;&amp;quot;d:\\demo\\photo\\&amp;quot;&lt;/span&gt; + index + &lt;span style="color:#a31515;"&gt;&amp;quot;.jpg&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; invoke MService.ServiceHelper.StoreInFile(stream, filename);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; index;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; operation PhotoGet(index : Text) : Stream&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; .UriTemplate = &lt;span style="color:#a31515;"&gt;&amp;quot;getphoto/{index}&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; .ContentType = &lt;span style="color:#a31515;"&gt;&amp;quot;image/jpeg&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; filename : Text = &lt;span style="color:#a31515;"&gt;&amp;quot;d:\\demo\\photo\\&amp;quot;&lt;/span&gt; + index + &lt;span style="color:#a31515;"&gt;&amp;quot;.jpg&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; invoke File.OpenRead(filename);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; endpoint HttpEndpoint&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; Binding = WebHttpBinding;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; Address = &lt;span style="color:#a31515;"&gt;&amp;quot;http://localhost:8080/service/&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;Add breakpoints, post a photo or get one and the breakpoints are hit under debugging. You can see activities and endpoints in the locals window.&lt;/p&gt;  &lt;p&gt;At the bottom you can see the endpoint defined. The first operation is PhotoUpload and it invokes code to store a file. Runtime this results in a WF activity storing the file on disc. The second operation is the get and it invokes a file read activity.&lt;/p&gt;  &lt;p&gt;In the PhotoUpload operation you also see the invoke of DateTime.Now.Ticks.ToString(), which will result in a code-activity in WF, running the specified code.&lt;/p&gt;  &lt;p&gt;This is just it, a REST enabled service for uploading, storing and retrieving images.&lt;/p&gt;  &lt;p&gt;Remember that this is MService, including a WF/WCF runtime that understands the language ‘M’, hosted inside Dublin.&lt;/p&gt;</description></item><item><title>“Oslo” repositories and models</title><link>http://bloggingabout.net/blogs/dennis/archive/2008/10/30/oslo-repositories-and-models.aspx</link><pubDate>Thu, 30 Oct 2008 16:54:14 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:476373</guid><dc:creator>Dennis van der Stelt</dc:creator><description>&lt;p&gt;&lt;strong&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3245_5F00_13846271.jpg"&gt;&lt;img title="IMG_3245" style="display:inline;margin-left:0px;margin-right:0px;" height="335" alt="IMG_3245" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3245_5F00_thumb_5F00_3EA8ADDE.jpg" width="251" align="right" border="0" /&gt;&lt;/a&gt;&lt;/strong&gt;Just saw Chris Sells show a session on some other expects of Oslo that wasn’t introduced yet.&lt;/p&gt;  &lt;p&gt;It was again stated that the repository in Oslo is a normal SQL Server database. All your models are just SQL in the database and everything is designed for extensibility.&lt;/p&gt;  &lt;p&gt;Some of the core features are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Repository capabilities&lt;/strong&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Repository features are built on SQL Server        &lt;ul&gt;         &lt;li&gt;Repository install also runs on useful features, e.g. replication and mirroring &lt;/li&gt;       &lt;/ul&gt;     &lt;/li&gt;      &lt;li&gt;Repository features are:        &lt;ul&gt;         &lt;li&gt;Catalog &lt;/li&gt;          &lt;li&gt;Secure views &lt;/li&gt;          &lt;li&gt;Auditing &lt;/li&gt;          &lt;li&gt;Versioning &lt;/li&gt;          &lt;li&gt;Claims-based security, etc &lt;/li&gt;       &lt;/ul&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;The Oslo SDK provides tools to&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Define new models : Intellipad, Visual Studio language services &lt;/li&gt;      &lt;li&gt;Compile models : m.exe, msbuild build tasks &lt;/li&gt;      &lt;li&gt;Deploy models : mx.exe &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;Again, once your models are in the database, it’s just plain SQL data.     &lt;br /&gt;Currently only SQL Server is supported, but of course the next logical step is XML and especially web services to &lt;u&gt;put your models in the cloud&lt;/u&gt;!!!&lt;/p&gt;    &lt;li&gt;&lt;strong&gt;Deployment       &lt;br /&gt;&lt;/strong&gt;&lt;/li&gt; Application model can be used to define applications to be deployed.     &lt;br /&gt;E.g. define a web service in the repository and deploy it without writing a line of code.    &lt;br /&gt;    &lt;br /&gt;The demo shown has in the database a few rows of data in the application model on a WCF service with WF. When deploying, it’s gathering data from the database and transforming it to something the runtime can understand. In the demo shown, the extension isn’t .svc but .xamlx    &lt;br /&gt;&lt;strong&gt;     &lt;br /&gt;&lt;/strong&gt;mx.exe packages SQL for deployment to repository nodes    &lt;ul&gt;     &lt;li&gt;Packages can come from M files&lt;/li&gt;      &lt;li&gt;packages can be exported from repository nodes&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;strong&gt;Security       &lt;br /&gt;&lt;/strong&gt;Security is claims-based.&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Identity becomes just one of several possible claims &lt;/li&gt;      &lt;li&gt;Claims presented to authorize operations against resources &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;Repository tables keep track of claims, resources and operations&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Triggers implemented on /t:Repository-generated views to check claims. Everything is stored in again in tables. &lt;/li&gt;      &lt;li&gt;Views protect against direct access to tables &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;Domain-specific security containers&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Use “folders” to partition data &lt;/li&gt;      &lt;li&gt;Apps decide which data goes into what folder &lt;/li&gt;      &lt;li&gt;Security checks happen on folder boundaries &lt;/li&gt;      &lt;li&gt;Must call the field “Folder” for compiler to find it &lt;/li&gt;      &lt;li&gt;Folder ID must exist in the Item.Folders table&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;strong&gt;Versioning&lt;/strong&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Data change synchronization&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Between nodes using SQL Server Replication and Occasionally Connected Systems&lt;/li&gt;        &lt;li&gt;Import/Export using SQL Server Change Tracking, e.g. repository &amp;lt;-&amp;gt; file system&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Schema evolution&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Extend M type and provide backwards compatibility for old clients w/ computed values&lt;/li&gt;        &lt;li&gt;SQL Server Integration Services (SSIS) for data migration&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt; &lt;/ul&gt;</description></item><item><title>&amp;quot;Oslo&amp;quot;: Customizing and Extending the Visual Design Experience</title><link>http://bloggingabout.net/blogs/dennis/archive/2008/10/29/quot-oslo-quot-customizing-and-extending-the-visual-design-experience.aspx</link><pubDate>Wed, 29 Oct 2008 21:54:19 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:476345</guid><dc:creator>Dennis van der Stelt</dc:creator><description>&lt;p&gt;Together with Alex Thissen, Paul Gielens, Marco Stolk and Dries Marckmann we’ve been reflecting our thoughts on “M”. Right now we’re all at another Oslo talk about Quadrant.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why “Quadrant”?&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;As more software becomes more model-driven, the volume of data in the system grows &lt;/li&gt;    &lt;li&gt;We need a tool that lets people query, update, and visualize that data in ways that make sense for the task at hand. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;What is “Quadrant”?&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“Quadrant” is a tool for interacting with data      &lt;ul&gt;       &lt;li&gt;Flexible, focused design surfaces &lt;/li&gt;        &lt;li&gt;Default experiences over arbitrary data &lt;/li&gt;        &lt;li&gt;Rich declarative customization &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;“Quadrant” is completely data-driven, every bit of data in SQL Server. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;“Quadrant” is the tool to work with. You have a canvas where you can drag everything you’re working with on that canvas. Icons that are blue can be dragged out and placed on the canvas again to get a full view on that item again. That way you can drill down in all models. Everything of course in WPF and this provides a great visual experience, or at least this is the idea I get from looking at the screen.&lt;/p&gt;  &lt;p&gt;Terminology and features in quadrant&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;u&gt;Canvas        &lt;br /&gt;&lt;/u&gt;You can use the canvas to view the model. The model is loaded by Quadrant and you can drag models onto the canvas. &lt;/li&gt;    &lt;li&gt;&lt;u&gt;Repository Explorer&lt;/u&gt;       &lt;br /&gt;At the bottom-left corner you have the explorer from which you can select everything related to applications, models, workflows, activities, etc. Everything that is data and is represented as a model. &lt;/li&gt;    &lt;li&gt;&lt;u&gt;Shapes&lt;/u&gt;       &lt;br /&gt;Shapes are the squares on the canvas and are a model or a part of a model &lt;/li&gt;    &lt;li&gt;&lt;u&gt;Hyper icons        &lt;br /&gt;&lt;/u&gt;Hyper icons are the blue icons I talked about. They can be dragged out of the shape and become a new shape themselves. &lt;/li&gt; &lt;/ul&gt;  &lt;p align="center"&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3234_5F00_7B5AC040.jpg"&gt;&lt;img title="IMG_3234" style="display:inline;" height="180" alt="IMG_3234" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3234_5F00_thumb_5F00_629B7330.jpg" width="240" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3235_5F00_7089F0C6.jpg"&gt;&lt;img title="IMG_3235" style="display:inline;" height="180" alt="IMG_3235" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3235_5F00_thumb_5F00_0AD5AA12.jpg" width="240" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3236_5F00_77189AB0.jpg"&gt;&lt;img title="IMG_3236" style="display:inline;" height="180" alt="IMG_3236" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3236_5F00_thumb_5F00_5615023C.jpg" width="240" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Using Quadrant Takeaways&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“Quadrant” connects people to data &lt;/li&gt;    &lt;li&gt;Diverse data sets &lt;/li&gt;    &lt;li&gt;Diverse interaction styles &lt;/li&gt;    &lt;li&gt;Extensible      &lt;ul&gt;       &lt;li&gt;Create new or extend existing models &lt;/li&gt;        &lt;li&gt;Create new or extend existing editing experiences &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3238_5F00_34698F2B.jpg"&gt;&lt;img title="IMG_3238" style="display:inline;" height="225" alt="IMG_3238" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3238_5F00_thumb_5F00_360A3532.jpg" width="300" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Customizing “Quadrant” Takeaways&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Quadrant is a model-driven application &lt;/li&gt;    &lt;li&gt;Customization via data stored in repository &lt;/li&gt;    &lt;li&gt;View specification based on query/functional evaluation &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Quadrant Architecture&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The shell and surface has some core services like drag/drop, undo/redo, error handling, search, etc. The composition engine is getting data from a dataflow engine, giving queryable data, having target data, configuration and view state, which is all coming from M.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3239_5F00_2D861441.jpg"&gt;&lt;img title="IMG_3239" style="display:block;float:none;margin-left:auto;margin-right:auto;" height="225" alt="IMG_3239" src="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dennis/IMG_5F00_3239_5F00_thumb_5F00_1ADD2C58.jpg" width="300" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Where are we?&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“Quadrant” is a flexible tool for interacting with diverse data &lt;/li&gt;    &lt;li&gt;“Quadrant” uses the repository for both specification and state &lt;/li&gt; &lt;/ul&gt;</description></item><item><title>Best PDC session so far : Lap around “Oslo”</title><link>http://bloggingabout.net/blogs/dennis/archive/2008/10/28/best-pdc-session-so-far-lap-around-oslo.aspx</link><pubDate>Tue, 28 Oct 2008 22:38:02 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:476311</guid><dc:creator>Dennis van der Stelt</dc:creator><description>&lt;p&gt;I’m at the “Lap around ‘Oslo’” talk together with &lt;a href="http://www.alexthissen.nl/"&gt;Alex Thissen&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/pgielens/"&gt;Paul Gielens&lt;/a&gt;. This is by far the best session I’ve seen so far!&lt;/p&gt;  &lt;p&gt;The talk began about models. We were looking at modeling and modeling domains, but what is a model? We have…&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Drawings&lt;/strong&gt;       &lt;br /&gt;Models used to communicate with others, for example DataFlow or Use Case. See &lt;a href="http://bloggingabout.net/blogs/dennis/archive/2005/10/13/9767.aspx"&gt;UML as Sketch&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Model-Assisted        &lt;br /&gt;&lt;/strong&gt;Models used to understand or manipulate code, for example StaticStructure or Sequence &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Model-Driven&lt;/strong&gt;       &lt;br /&gt;Models executed by runtimes directly, for example HTML, CSS, XAML, BPEL &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;According to Douglas Purdy, Don Box says we’re on a 30 year journey and we’re 15 years in. We had COM(+), .NET 1.0, Web Services, .NET 3.0 and now we’re entering the next phase. Oslo is the next level for a model-driven platform. We’ve been heading there via configuration, attributes and doing more and more declarative instead of typing everything out. A great example for declarative development is of course LINQ.&lt;/p&gt;  &lt;p&gt;Why is this happening? Transparency (better understand your application), flexibility (add changes to your application faster) and productivity. We need models&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So what is Oslo?      &lt;br /&gt;&lt;/strong&gt;It is &lt;em&gt;the platform&lt;/em&gt; for model-driven development. Microsoft will bring us Oslo with the following components:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;“M”      &lt;br /&gt;The language for authoring models &amp;amp; DSLs &lt;/li&gt;    &lt;li&gt;“Quadrant”      &lt;br /&gt;The tool for interacting with models &amp;amp; DSLs &lt;/li&gt;    &lt;li&gt;Repository      &lt;br /&gt;The database for storing &amp;amp; sharing models, this will be SQL Server. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;“M” gives you the modelling and textual DSLs. According to &lt;a href="http://douglaspurdy.com/"&gt;Douglas Purdy&lt;/a&gt; and to &lt;a href="http://www.pluralsight.com/community/blogs/dbox/archive/2008/10/08/talks-i-want-to-see-pdc.aspx"&gt;Don Box&lt;/a&gt;, this is going to be the next big thing. I could not agree more. I am &lt;strong&gt;SO&lt;/strong&gt; excited about what I just saw. Take the example they’ve shown.&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;Module Microsoft.Samples&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:green;"&gt;// MusicItem is the schema&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; type MusicItem&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Primary key&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; Id : Integer64 = AutoNumber();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; Album : Text; &lt;span style="color:green;"&gt;// Album is constraint by type&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; Artist : Text;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Rating is constraint and expression&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; Rating : Integer32 where value &amp;lt;= 3;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; } where identity Id;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; &lt;span style="color:green;"&gt;// * is 0..n multiplicity&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; MusicLibrary : MusicItem*;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;The above declares a schema named “MusicItem” and a collection of those in a “MusicLibrary”. We compile this and than populate the result in the database.&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// M compiler&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// Repository is the database. When choosing -t:xml we generate XML&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;m.exe myfile.m /p:image -t:Repository&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// Populating&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;mx.exe /i:myfile.mx /db:repository /ig /f&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;mx uses the compiled “binary” (this is a zip archive actually) and generates T-SQL.&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;create table [Microsoft.Samples].[MusicLibrary]&lt;/p&gt;    &lt;p style="margin:0px;"&gt;(&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; -- the rest&lt;/p&gt;    &lt;p style="margin:0px;"&gt;)&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;You can fill the database with the following&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;Module Microsoft.Samples&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; MusicLibrary&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Album = &lt;span style="color:#a31515;"&gt;&amp;quot;Slippery when wet&amp;quot;&lt;/span&gt;,&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Artitst = &lt;span style="color:#a31515;"&gt;&amp;quot;Bon Jovi&amp;quot;&lt;/span&gt;,&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Rating = 3&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; },&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Album = &lt;span style="color:#a31515;"&gt;&amp;quot;Into the dark&amp;quot;&lt;/span&gt;,&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Artitst = &lt;span style="color:#a31515;"&gt;&amp;quot;Europe&amp;quot;&lt;/span&gt;,&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Rating = 2&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&amp;#160; &lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;This creates two rows in the table MusicLibrary. But this is all the language “M”. How about a &lt;strong&gt;textual DSL&lt;/strong&gt;? How’s this for coding:&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;SomeAlbum&amp;quot;&lt;/span&gt; by &lt;span style="color:#a31515;"&gt;&amp;quot;Led Zeppelin&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;is&lt;/span&gt; awesome!&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;Back in Black&amp;quot;&lt;/span&gt; by &lt;span style="color:#a31515;"&gt;&amp;quot;AC/DC&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;is&lt;/span&gt; so so.&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;Bad&amp;quot;&lt;/span&gt; by &lt;span style="color:#a31515;"&gt;&amp;quot;Michael Jackson&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;is&lt;/span&gt; terrible.&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;The above code can be transformed into the exact same code-block as above, where we filled the database with two records. How is this achieved? Take a look at the following code.&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;module Microsoft.Samples&lt;/p&gt;    &lt;p style="margin:0px;"&gt;{&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; import Language;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; language MusicLibraryLanguage&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; syntax Main = s:Statement+ =&amp;gt; MusicLibrary(valuesof(s){l&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; syntax Statement = al:Grammar.TextLiteral &lt;span style="color:#a31515;"&gt;&amp;quot;by&amp;quot;&lt;/span&gt; ar:Gramar.TextLiteral &lt;span style="color:#a31515;"&gt;&amp;quot;is&amp;quot;&lt;/span&gt; ?????&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; =&amp;gt; { Album {al}, Artist {ar}, Rating&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; @{(Classification[&lt;span style="color:#a31515;"&gt;&amp;quot;keyworkd&amp;quot;&lt;/span&gt;]} &lt;span style="color:green;"&gt;// colorize &amp;quot;awful&amp;quot;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; token Rating1 = &lt;span style="color:#a31515;"&gt;&amp;quot;terrible&amp;quot;&lt;/span&gt; | &lt;span style="color:#a31515;"&gt;&amp;quot;awful&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; token Rating2 = &lt;span style="color:#a31515;"&gt;&amp;quot;so so&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; token Rating3 = &lt;span style="color:#a31515;"&gt;&amp;quot;awesome&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; syntax Rating = Rating1 =&amp;gt; 1 | Rating2 =&amp;gt; 2 | Rating3 =&amp;gt; 3;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; interleave skippable = Base.Whitespace&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;I lost the code where it says “????”. The above code tells to look at &lt;em&gt;by&lt;/em&gt; and &lt;em&gt;is&lt;/em&gt; and takes the text there and parse it. It than looks at the rating and gives it an actual number. The &lt;em&gt;Classification&lt;/em&gt; keyword makes the words “terrible” and “awful” become &lt;strong&gt;bold&lt;/strong&gt; in the editor.&lt;/p&gt;  &lt;p&gt;Now is this awesome or what? I’m so excited by this. This is one of the biggest steps in my history of developing software. You can now write code like&lt;/p&gt;  &lt;p&gt;Give me a table called “Customers” with a primary key called “Id” and make it an integer with identity on, seeding from 1.&lt;/p&gt;  &lt;p&gt;The best thing is, if you can think of a way to make that sentence shorter or more self-explaining, go ahead! Use MGrammer to define your own textual DSL.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MService&lt;/strong&gt;     &lt;br /&gt;Another great demo was when they showed MService. With only a few lines of code (my battery ran flat, so I could not copy the code, but I photographed it and it &lt;em&gt;will&lt;/em&gt; come in this blog!) they created a WCF service where they could upload an image and request it again, using a WF workflow. In about 38 lines of code, { and } on empty lines included!!!     &lt;br /&gt;    &lt;br /&gt;Courtesy of Paul Gielens, I got the code from his weblog. The following starts a REST enabled WCF Service with a WF Writeline activity. Not a Console.Writeline, but a real WF activity.&lt;/p&gt;  &lt;div style="border-right:#cccccc 1pt solid;padding-right:1pt;border-top:#cccccc 1pt solid;padding-left:1pt;font-size:10pt;background:#f5f5f5;padding-bottom:1pt;overflow:auto;border-left:#cccccc 1pt solid;width:100%;color:black;padding-top:1pt;border-bottom:#cccccc 1pt solid;font-family:lucida console;"&gt;   &lt;p style="margin:0px;"&gt;module Service25 &lt;/p&gt;    &lt;p style="margin:0px;"&gt;{ &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; service Service &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; { &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; operation Echo(str : text) : Text &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; { &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .UriTemplate = &lt;span style="color:#a31515;"&gt;&amp;quot;echo/{str}&amp;quot;&lt;/span&gt;; &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WriteLine { Text = &lt;span style="color:#a31515;"&gt;&amp;quot;Message : &amp;quot;&lt;/span&gt; + str } &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; str; &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160; } &lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt;     &lt;br /&gt;At first I thought this was an awesome code generator. But boy was I wrong. They showed debugging and hitting breakpoints inside the textual DSL!!! The stack and locals windows showed the WCF channels and WF activities active. Can you believe it? Probably not, you just have to watch the stream on Channel9.&lt;/p&gt;  &lt;p&gt;I’m now going to follow Don Box, hold on for more!&lt;/p&gt;  &lt;p&gt;Loving it, loving it, loving it, as Don Box would say!&lt;/p&gt;</description></item><item><title>CodeRush Xpress</title><link>http://bloggingabout.net/blogs/dennis/archive/2008/10/28/coderush-xpress.aspx</link><pubDate>Tue, 28 Oct 2008 17:57:33 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:476295</guid><dc:creator>Dennis van der Stelt</dc:creator><description>&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/"&gt;Mark Miller&lt;/a&gt; from DevExpress &lt;a href="http://community.devexpress.com/blogs/markmiller/archive/2008/10/27/announcing-coderush-express-for-c.aspx"&gt;just announced&lt;/a&gt; CodeRush Xpress for C# developers, for free!!! In a partnership with Microsoft, DevExpress is making this tool available for Visual Studio. It’s a selection of CodeRush and Refactor! Pro features.&lt;/p&gt;  &lt;p&gt;Refactor! Pro is one of my favorite tools available for Visual Studio. I haven’t really used CodeRush yet, but I will definitely install CodeRush Xpress.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devexpress.com/CodeRushX"&gt;Go get it here…&lt;/a&gt;&lt;/p&gt;</description></item><item><title>PDC 2008 Photos</title><link>http://bloggingabout.net/blogs/dennis/archive/2008/10/28/pdc-2008-photos.aspx</link><pubDate>Tue, 28 Oct 2008 17:39:49 GMT</pubDate><guid isPermaLink="false">813b6dfd-644e-4573-a816-eebab56ba0d0:476294</guid><dc:creator>Dennis van der Stelt</dc:creator><description>&lt;p&gt;A lot of photos, many many more to come…&lt;/p&gt;  &lt;p&gt;Most are Los Angeles, Santa Monica beach and other locations. PDC 2008 isn’t that interesting to look at! ;-)&lt;/p&gt;  &lt;p&gt;&lt;a title="http://flickr.com/photos/dvdstelt/sets/72157608454625991/" href="http://flickr.com/photos/dvdstelt/sets/72157608454625991/"&gt;http://flickr.com/photos/dvdstelt/sets/72157608454625991/&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>