<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>DesignAndCode - Architecture</title>
    <link>http://designandcode.net/</link>
    <description>DesignAndCode software development thoughts..</description>
    <language>en-us</language>
    <copyright>Design And Code, Inc</copyright>
    <lastBuildDate>Tue, 18 Oct 2011 01:25:01 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>MarkMitchell@designandcode.net</managingEditor>
    <webMaster>MarkMitchell@designandcode.net</webMaster>
    <item>
      <trackback:ping>http://designandcode.net/Trackback.aspx?guid=6f955d92-0a1b-4b69-84f5-fd96848a2456</trackback:ping>
      <pingback:server>http://designandcode.net/pingback.aspx</pingback:server>
      <pingback:target>http://designandcode.net/PermaLink,guid,6f955d92-0a1b-4b69-84f5-fd96848a2456.aspx</pingback:target>
      <dc:creator>Mark Mitchell</dc:creator>
      <wfw:comment>http://designandcode.net/CommentView,guid,6f955d92-0a1b-4b69-84f5-fd96848a2456.aspx</wfw:comment>
      <wfw:commentRss>http://designandcode.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6f955d92-0a1b-4b69-84f5-fd96848a2456</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Quite by accident, I stumbled into Mary
Jo Foley's <a href="http://www.zdnet.com/blog/microsoft/microsoft-goes-public-with-its-drawbridge-operating-system-research-project/11009?tag=mantle_skin;content">article </a>that
mentioned the Microsoft Research Project  <i>Drawbridge</i> - and a <a href="http://channel9.msdn.com/Shows/Going+Deep/Drawbridge-An-Experimental-Library-Operating-System">Channel9</a> video
on this.<br />
From the Channel 9 description:<strong><br /><a href="http://research.microsoft.com/en-us/projects/drawbridge/" target="_blank">Drawbridge
is a research prototype</a></strong><em> of a new form of virtualization for application
sandboxing. Drawbridge combines two core technologies: First, a <strong>picoprocess</strong>,
which is a process-based isolation container with a minimal kernel API surface. Second,
a <strong>library OS</strong>, which is a version of Windows enlightened to run efficiently
within a picoprocess. Drawbridge combines two ideas from the literature, the <em>picoprocess</em> and
the <em>library OS</em>, to provide a new form of computing, which retains the benefits
of secure isolation, persistent compatibility, and execution continuity, but with
drastically lower resource overheads. </em><br /><br />
Some time ago, there was an idea of each application having its own Virtual Machine
space to run in - and it looks like this is another step toward that goal. Not sure
it will make it into Windows 8, but it would not surprise me to see this as part of
Windows 9. The Drastically reduced overhead, makes me wonder if they can get this
to run on an ARM processor, or phone.<br /><br />
In the video, the indicate that they performed an experiment of running 25 Windows
2008 R2 web servers on a 16GB machine, and then when the switched the Web Servers
to use the Drawbridge approach, they were getting "north" of 270 on the same hardware
-of course they would have to be very lightly used web sites.<br /><br />
By refactoring the API layers to other modes (pulling Win32k.dll  into a user
mode layer - and a usermode version NTUM that communicates through a new "Security
Monitor" that exposes only 35 functions to the NTOSKRNL) they reduced the footprint
of what is needed - and this could be getting small enough to run on a phone. 
<br /><br />
The Win32K that expects a Keyboard,  mouse, and clipboard, ends up communicating
to a version of the Remote Desktop Server process (on the same machine) that emulates
communicating over a network - within the processes - all isolated like a virtual
machine. In fact the GUI requires using RDP to the instance that Drawbridge sets up.<br /><br />
Because this is all running stateless - it can save the state of the Drawbridge application
- compressed, and send the application to another machine - rehydrate the application
state - from any machine that can get to the cloud - due to the sandbox around the
application.<br /><br />
It also reduced the threat surface - so it is also a very strong security play.<br /><br />
It is very much a prototype for a small team, and there is a good deal of work to
get it to work with GPU processing - e.g. not working with IE9 right now. But it is
a very promising direction that I expect to hear more about -hopefully before Windows
10.. :)<br /><br /><br /><p></p><img width="0" height="0" src="http://designandcode.net/aggbug.ashx?id=6f955d92-0a1b-4b69-84f5-fd96848a2456" /></body>
      <title>New Application Virtualization Sandbox - Drawbridge from Microsoft Research</title>
      <guid isPermaLink="false">http://designandcode.net/PermaLink,guid,6f955d92-0a1b-4b69-84f5-fd96848a2456.aspx</guid>
      <link>http://designandcode.net/2011/10/18/NewApplicationVirtualizationSandboxDrawbridgeFromMicrosoftResearch.aspx</link>
      <pubDate>Tue, 18 Oct 2011 01:25:01 GMT</pubDate>
      <description>Quite by accident, I stumbled into Mary Jo Foley's &lt;a href="http://www.zdnet.com/blog/microsoft/microsoft-goes-public-with-its-drawbridge-operating-system-research-project/11009?tag=mantle_skin;content"&gt;article &lt;/a&gt;that
mentioned the Microsoft Research Project&amp;nbsp; &lt;i&gt;Drawbridge&lt;/i&gt; - and a &lt;a href="http://channel9.msdn.com/Shows/Going+Deep/Drawbridge-An-Experimental-Library-Operating-System"&gt;Channel9&lt;/a&gt; video
on this.&lt;br&gt;
From the Channel 9 description:&lt;strong&gt;
&lt;br&gt;
&lt;a href="http://research.microsoft.com/en-us/projects/drawbridge/" target="_blank"&gt;Drawbridge
is a research prototype&lt;/a&gt;&lt;/strong&gt;&lt;em&gt; of a new form of virtualization for application
sandboxing. Drawbridge combines two core technologies: First, a &lt;strong&gt;picoprocess&lt;/strong&gt;,
which is a process-based isolation container with a minimal kernel API surface. Second,
a &lt;strong&gt;library OS&lt;/strong&gt;, which is a version of Windows enlightened to run efficiently
within a picoprocess. Drawbridge combines two ideas from the literature, the &lt;em&gt;picoprocess&lt;/em&gt; and
the &lt;em&gt;library OS&lt;/em&gt;, to provide a new form of computing, which retains the benefits
of secure isolation, persistent compatibility, and execution continuity, but with
drastically lower resource overheads. &lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
Some time ago, there was an idea of each application having its own Virtual Machine
space to run in - and it looks like this is another step toward that goal. Not sure
it will make it into Windows 8, but it would not surprise me to see this as part of
Windows 9. The Drastically reduced overhead, makes me wonder if they can get this
to run on an ARM processor, or phone.&lt;br&gt;
&lt;br&gt;
In the video, the indicate that they performed an experiment of running 25 Windows
2008 R2 web servers on a 16GB machine, and then when the switched the Web Servers
to use the Drawbridge approach, they were getting "north" of 270 on the same hardware
-of course they would have to be very lightly used web sites.&lt;br&gt;
&lt;br&gt;
By refactoring the API layers to other modes (pulling Win32k.dll&amp;nbsp; into a user
mode layer - and a usermode version NTUM that communicates through a new "Security
Monitor" that exposes only 35 functions to the NTOSKRNL) they reduced the footprint
of what is needed - and this could be getting small enough to run on a phone. 
&lt;br&gt;
&lt;br&gt;
The Win32K that expects a Keyboard,&amp;nbsp; mouse, and clipboard, ends up communicating
to a version of the Remote Desktop Server process (on the same machine) that emulates
communicating over a network - within the processes - all isolated like a virtual
machine. In fact the GUI requires using RDP to the instance that Drawbridge sets up.&lt;br&gt;
&lt;br&gt;
Because this is all running stateless - it can save the state of the Drawbridge application
- compressed, and send the application to another machine - rehydrate the application
state - from any machine that can get to the cloud - due to the sandbox around the
application.&lt;br&gt;
&lt;br&gt;
It also reduced the threat surface - so it is also a very strong security play.&lt;br&gt;
&lt;br&gt;
It is very much a prototype for a small team, and there is a good deal of work to
get it to work with GPU processing - e.g. not working with IE9 right now. But it is
a very promising direction that I expect to hear more about -hopefully before Windows
10.. :)&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://designandcode.net/aggbug.ashx?id=6f955d92-0a1b-4b69-84f5-fd96848a2456" /&gt;</description>
      <comments>http://designandcode.net/CommentView,guid,6f955d92-0a1b-4b69-84f5-fd96848a2456.aspx</comments>
      <category>Architecture</category>
      <category>Virtualization</category>
    </item>
    <item>
      <trackback:ping>http://designandcode.net/Trackback.aspx?guid=de6511fb-497f-483a-8ee0-d5ee427172d7</trackback:ping>
      <pingback:server>http://designandcode.net/pingback.aspx</pingback:server>
      <pingback:target>http://designandcode.net/PermaLink,guid,de6511fb-497f-483a-8ee0-d5ee427172d7.aspx</pingback:target>
      <dc:creator>Mark Mitchell</dc:creator>
      <wfw:comment>http://designandcode.net/CommentView,guid,de6511fb-497f-483a-8ee0-d5ee427172d7.aspx</wfw:comment>
      <wfw:commentRss>http://designandcode.net/SyndicationService.asmx/GetEntryCommentsRss?guid=de6511fb-497f-483a-8ee0-d5ee427172d7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">In 2008, I attended the Microsoft Professionals
meeting (Atlanta) where <a href="http://wildermuth.com/">Shawn Wildermuth</a> gave
a presentation on Domain specific languages or DSL's. The concepts were an introduction
into a Microsoft product development that used the code names   "OSLO", 
"M", and "Quadrant" that was previewed in part at the PDC<a href="http://channel9.msdn.com/Blogs/pdc2008/TL31">2008</a> (Professional
Developer Conference) which has mostly morphed into something else by PDC2009. Shawn
produced three <a href="http://wildermuth.com/2009/06/09/My_Oslo_DSL_Article_Part_1_is_Updated_for_May_2009_CTP">articles</a> for
MSDN on the topics of "OSLO" and "M". In the 2008 presentation I attended, Shawn introduced
the premise that we use DSL's already today; SQL, XAML, Make, Ant/Nant, MSBuild, regular-expressions,
even musical notation are all examples of DSL's. From that talk, the idea of software
development DSL's  was planted - even though the technologies that had prompted
his discussion have been morphed into new forms within Microsoft - the conclusion 
from this argument is that a set of text statements ( or specific symbols like music
or regular expressions) can be declared and used to achieve a desired result - and
within programming - results in how executing code processes those results. A concise
grammar and syntax, that declares what you want to do but not how you do accomplish
that - regular expression syntax is a great example. Software development using a
DSL, is an idea that continues to cross my path. I thought I would try to capture
some of the variations I have seen in how various developers and architects approach
the concept of creating and using DSLs.<br /><br />
Martin Fowler wrote the book on <a href="http://www.amazon.com/Domain-Specific-Languages-Addison-Wesley-Signature-Fowler/dp/0321712943/">Domain
Specific Languages</a> where he describes the 3 types of DSLs.<br />
There are some early Oslo software preview <a href="http://msdn.microsoft.com/en-us/data/dd576258.aspx">videos</a> out
on the Microsoft site that show the language M being used to generate a DSL grammar
within the tool called Quadrant. This is what Martin Fowler referred to as a "DSL
workbench"- where the tool builds the DSL. Martin Fowler identified two other main
categories of DSL; the External DSL, and the Internal, or Embedded DSL. External DSL's
are often quite complex - and rarely come to general usage. Internal, or Embedded
DSL's are abstractions over an API, or framework, within an application. 
<br /><br />
The idea of a DSL being used was briefly touched on in the Jan 2009 DotNet Rocks <a href="http://www.dotnetrocks.com/default.aspx?showNum=415">episode</a> with <a href="http://aslamkhan.net/">Aslam
Khan</a> a software architect that lives in South Africa. The company he works with
uses this to achieve <a href="http://domaindrivendesign.org/resources/what_is_ddd">Domain
Driven Design</a> (DDD). "Write a story that describes a problem", and understand
that little piece, to understand the domain. "Something that describes it completely
- that does not bleed into the other", which build up a dependency graph, it exists
in context to the other things - behind each story. A story about the problem - the
domain. The more you reveal incorrect assumptions in the dependency graphs and correct
them, you don't have to prune source code trees -so you get smaller source code trees,
and designing API's around the stories - means changing the granularity of the stories
- not modules. In the podcast (just after 38:41) they describe a misunderstood story
- that would have produced an incorrect system design - but writing out a story, that
the users can understand - allows for corrections can be made before hand. Understanding
the user's vocabulary, and you can write it in those terms, then you have the basis
to build on(this goes back to the Eric Evan's Domain-Driven-Design <a href="http://books.google.com/books?id=7dlaMs0SECsC&amp;pg=PA24&amp;lpg=PA24&amp;dq=eric+evans+domain+driven+design+ubiquitous+language&amp;source=bl&amp;ots=ulHUY1U8s8&amp;sig=jk96fBqxm3-SYbPZPtb8gev_VAk&amp;hl=en&amp;ei=H-JBTZvcLYbagAfM59mWAg&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=8&amp;ved=0CEkQ6AEwBw#v=onepage&amp;q&amp;f=false">"ubiquitous
language"</a>). It helps other people later on to understand the language of the application.
Aslam Khan uses a Wiki to capture that language - and refers to the "Wiki as code"
(about 44:44 in the podcast). He refers to it as "a DSL captured in business terms
- that cannot be executed - but at that point you can start writing code". After listening
to that podcast(in 2009), I went to Aslam's website - and discovered his <a href="http://aslamkhan.net/software-development/heck-we-should-have-paid-attention-that-day/">posting</a> about
using Cucumber and driving it down into <a href="http://www.pragprog.com/titles/achbd/the-rspec-book">Rspec</a>.
That led to my reading of a post about Ruby and the latest on <a href="http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html">Ruby
testing - using cucumber</a>. (There is a language called <a href="https://github.com/aslakhellesoy/cucumber/wiki/Gherkin">Gherkin</a> used
with Cucumber to create a <a href="http://bjarte.com/post/228763457">Ruby testing
framework</a>). The dynamic nature of Ruby - and the concept of Metaprogramming -
became connected to the idea of how one could produce a DSL. Aslam Khan stated it,
on his blog, as "the Code is the data" behind a DSL, and he encouraged learning about
AST's (Abstract Syntax Trees) which to me connected directly to .Net Expression Trees
- the basis of Microsoft Dynamic Language Runtime(DLR) in .Net 4.0.  DSL's can
become Expression Trees which in turn can become running code in the DLR. At least,
in theory, that would be one Dynamic-Language approach to implementing a DSL(There
may be some limitations on how that can occur).<br />
  
<br />
During 2010, I picked up a copy of Orin Eini's(a.k.a <a href="http://www.ayende.com/">Ayende
Rahein</a>) book called "<a href="http://www.amazon.com/DSLs-Boo-Domain-Specific-Languages/dp/1933988606/">DSL's
in Boo</a> - Domain Specific Languages in .Net". (he did an <a href="http://www.dotnetrocks.com/default.aspx?ShowNum=529">interview</a> in
March 2010 with DotNetRocks on this topic).Ayende is known in the .Net development
world for RhinoMocks( a mocking framework), his work on NHibernate(his company makes
a profiler for NHibernate and EntityFrameworks), and now his RavenDB - document database
project. Somehow, he also managed to have written a book on DSL's   - the guy
is prolific at producing content - whether you see his coding output(RhinoMocks,RavenDB),
his blog, and now his book.  In his book, he describes how he builds his own
DSL's using the .Net language <a href="http://boo.codehaus.org/">Boo</a> as the foundation,
as it gives him a parser,lexer, and great extensibility points, that compile into
.Net code - that is not based on the DLR. He shows how the Boo language allows for
defining your own expressions that can then be compiled - statically.  Boo is
based on the released <a href="http://www.ecma-international.org/publications/standards/Ecma-335.htm">ECMA
standard for the CLI</a>. Interestingly -both the Boo Language, and the ECMA CLI standard,
had recent updates(at this writing) Boo 0.9.4 was updated Jan 2011, and the ECMA Standard
December 2010. Boo has some capacities that make the language very powerful. It can
be an object oriented language, and it can do functional composition (where functions
are first class citizens like those in F#), it has '<a href="http://ayende.com/Blog/archive/2008/05/27/The-magic-of-boo--Flexible-syntax.aspx">Syntactic
Macros'</a>, and it has an extensible compilation pipeline - which is what the creator,
Rodrigo B. de Oliveira, wanted to have in the first place, and it can run on multiple
platforms (Windows CLR and Linux Mono). Boo has its roots  based on Python Syntax
and looks like it has some great potential.  To use Boo that as the basis for
creating a DSL seems like a very interesting choice - here it would be a statically
typed implementation of a DSL. This could be a way of generating a concise Internal,
or External, DSL that works for the users and programmers alike within a given domain.
Ayende's book gets into the details of using boo for creating your own DSL.<br /><br />
I found a few entries that related how Powershell could be used at the basis of a
DSL. There is a blog <a href="http://keithhill.spaces.live.com/Blog/cns%215A8D2641E0963A97%216944.entry">post</a> from
Keith Hill on how Powershell's syntax flexibility allows you to create a internal
DSL. Doug Finke, a Powershell MVP, posted something that went back to <a href="http://www.dougfinke.com/blog/index.php/2009/07/01/powershell-powerboots-and-an-oslo-dsl-grammar/">the
Oslo starting point</a> from a Powershell point of view. Doug Finke shows implementing
an OSLO grammar syntax using Powershell, based on the concepts originally introduced
in that early video of the M Language example. So from Dynamic Languages or Scripting
tools we can find approaches to creating DSL's today.  Doug Finke connected the
concepts of DSL, DRL, and Boo; all the ideas together in his post <a temp_href="Creating a unified programming model on top of .NET" href="Creating%20a%20unified%20programming%20model%20on%20top%20of%20.NET">"<font size="3">Creating
a unified programming model on top of .NET"</font></a> He cites "Trends and Directions
in programming languages" from Anders Hejlsberg.  DSL's could certainly be part
of that mix in creating solutions.<br /><br />
Jeffrey Snover, the architect of Powershell, had a discussion in 2008 on DSL's with
Martin Fowler and Neal Ford from Thoughtworks. (<a href="http://channel9.msdn.com/blogs/charles/jeffrey-snover-martin-fowler-and-neil-ford-domain-specific-languages">recording
on Channel9</a>). In this talk they made the point that a DSL can be an External DSL,
an Internal DSL or a 'workbench' with tools wrapped around it. Martin Fowler made
the point that not many successful DSL's have been done starting from the business
side and working toward the API - but that is where the concept is the most powerful,
they made the point that it is usually an abstraction of an existing API that simplifies
the underlying API - and that DSL can be replaced with the word 'Framework' and mean
the same thing. Jeffrey Snover also <a href="http://blogs.msdn.com/b/powershell/archive/2008/10/09/domain-specific-languages-dsls-in-general-and-how-powershell-relates.aspx">posted</a> that
Powershell could be used to create DSL's by limiting the syntax. The key piece he
refers to is the <a href="http://technet.microsoft.com/en-us/library/dd347678.aspx">data
segment SupportedCommands</a> - which he alludes to as a way to limit a DSL done in
Powershell.<br /><br />
Karl Prosser referred to the Powerboots library for Powershell as a DSL in a <a href="http://powershell.com/cs/blogs/karl-prosser/archive/2009/02/11/powerboots-a-beautiful-dsl-not-to-mention-useful.aspx">blog
post</a>. It is a Powershell set of commands that are specific to using WPF from within
Powershell - which stays with the concept that it  is limited to that specific
domain.<br /><br />
Sometimes the use of a Fluent API - can be used to write code that is very readable
and expressive - such that it becomes an internal DSL within the general purpose language(Steven
Hoisee <a href="http://www.blog.holsee.com/2009/10/fluent-interfaces-internal-domain-specific-languages/">blog</a> has
some coverage on this).  I came accross a paper on how JMock was developed and
how they worked toward incorporating a Fluent API as part of their own <a href="http://static.mockobjects.com/files/evolving_an_edsl.ooplsa2006.pdf">Embeded
DSL</a> within the framework.<br /><br />
Martin Fowler, who took the time to write the book on DSL, has a post on <a href="http://www.martinfowler.com/bliki/BusinessReadableDSL.html">BusinessReadableDSLs</a>.
Where the idea is different than business-writeable DSLs. That was the impression
I got from Aslam Khan's use of Cucumber - that the business could read the DSL and
confirm if it was correct or not. 
<br />
Martin Fowler invokes the comparison to COBOL - which was supposed to be an english
way of telling the computer what to do - and begs the question - how is this one different? 
My impression is that the a correct implementation of a DSL is declarative - it describes
what you want to do, now how you do it - and having programmed in COBOL - it is an
imperative approach, not a declarative one.<br /><br />
Developing a DSL, based on the Jeffrey Snover video, leads me to see that in a DSL
you have vocabulary and you have grammar that must be decided on - and the idea of
keeping it small seems to be important. Just enough to keep and simple - and no simpler.<br /><br />
Jeremy Miller(Creator of the IOC container - StructureMap, an MVC framework called
FubuMVC, and a testing tool called StoryTeller) did a <a href="http://oredev.org/2010/sessions/patterns-for-building-internal-dsls-in-c-3-0">presentation</a> on
creating Internal DSL's at Oredev in Oslo - Nov 2010.<br />
He  contributed to the Fluent NHibernate project, and incorporated the use of
an Internal DSL in these projects - and in the presentation he goes over some of the
difficulties of using and developing an Internal DSL using the C# 3.0 language features.
He touches on the separation of the Runtime and Configuration model in building a
DSL, and that testing an internal DSL for configuration is very difficult - you can
test the runtime model more easily, and then make sure your configuration model works
correctly. (the video is a bit grainy - and a few of the questions, that came from
the audience, are not heard - but the concepts that were used in creating an internal
DSL are shown pretty well.)<br /><br />
From this set of touch points - on the various flavors of DSL's, it is something that
can be done in a variety of ways. The simplest form is the internal or embedded, perhaps
as a Fluent API approach. This simple form of a DSL can be for a small team that produces
repetitive code, or business rules that are needed in in either a static or dynamic
fashion - but still being an internal abstraction - within a small domain. Then there
is an external DSL - and that would need to have a the same considerations as a full
blown computer language - as the publishing of an External DSL approach tends to get
the syntax set in stone, unless you can absorb breaking changes later on.  
<br /><br />
I find this an interesting research topic, that may prove to be a practical solution
to some future area of work. Along these lines - I recently purchased a book that
looks promising; <a href="http://www.cs.usfca.edu/%7Eparrt/">Terrence Parr</a>'s book
"<a href="http://www.amazon.com/Language-Implementation-Patterns-Domain-Specific-Programming/dp/193435645X">Language
Implementation Patterns</a> - Create your own Domain Specific and General Programming
Languages". Terrence Parr developed  <a href="http://www.antlr.org/">ANTLR</a> and
that tool is used in the Boo compiler.  I will have more reading and learning
to do in this area - and, perhaps at some point, the payoff will be when I can see
an area where a DSL can be used to invoke parts of a framework. Ideally this would
be in terms of the users, a readable Business DSL, or an API syntax that developers
for an application can use that brings a higher level of abstraction and makes code
more readable - and perhaps more declarative.  The Jeremy Miller video shows
that is not a simple task, however, he shows that it can be used to develop some powerful
solutions too, and that I find to be valuable.<br /><p></p><img width="0" height="0" src="http://designandcode.net/aggbug.ashx?id=de6511fb-497f-483a-8ee0-d5ee427172d7" /></body>
      <title>Research - DSL Domain Specific Language concept and application</title>
      <guid isPermaLink="false">http://designandcode.net/PermaLink,guid,de6511fb-497f-483a-8ee0-d5ee427172d7.aspx</guid>
      <link>http://designandcode.net/2011/01/26/ResearchDSLDomainSpecificLanguageConceptAndApplication.aspx</link>
      <pubDate>Wed, 26 Jan 2011 01:05:47 GMT</pubDate>
      <description>In 2008, I attended the Microsoft Professionals meeting (Atlanta) where &lt;a href="http://wildermuth.com/"&gt;Shawn
Wildermuth&lt;/a&gt; gave a presentation on Domain specific languages or DSL's. The concepts
were an introduction into a Microsoft product development that used the code names
&amp;nbsp; "OSLO",&amp;nbsp; "M", and "Quadrant" that was previewed in part at the PDC&lt;a href="http://channel9.msdn.com/Blogs/pdc2008/TL31"&gt;2008&lt;/a&gt; (Professional
Developer Conference) which has mostly morphed into something else by PDC2009. Shawn
produced three &lt;a href="http://wildermuth.com/2009/06/09/My_Oslo_DSL_Article_Part_1_is_Updated_for_May_2009_CTP"&gt;articles&lt;/a&gt; for
MSDN on the topics of "OSLO" and "M". In the 2008 presentation I attended, Shawn introduced
the premise that we use DSL's already today; SQL, XAML, Make, Ant/Nant, MSBuild, regular-expressions,
even musical notation are all examples of DSL's. From that talk, the idea of software
development DSL's&amp;nbsp; was planted - even though the technologies that had prompted
his discussion have been morphed into new forms within Microsoft - the conclusion&amp;nbsp;
from this argument is that a set of text statements ( or specific symbols like music
or regular expressions) can be declared and used to achieve a desired result - and
within programming - results in how executing code processes those results. A concise
grammar and syntax, that declares what you want to do but not how you do accomplish
that - regular expression syntax is a great example. Software development using a
DSL, is an idea that continues to cross my path. I thought I would try to capture
some of the variations I have seen in how various developers and architects approach
the concept of creating and using DSLs.&lt;br&gt;
&lt;br&gt;
Martin Fowler wrote the book on &lt;a href="http://www.amazon.com/Domain-Specific-Languages-Addison-Wesley-Signature-Fowler/dp/0321712943/"&gt;Domain
Specific Languages&lt;/a&gt; where he describes the 3 types of DSLs.&lt;br&gt;
There are some early Oslo software preview &lt;a href="http://msdn.microsoft.com/en-us/data/dd576258.aspx"&gt;videos&lt;/a&gt; out
on the Microsoft site that show the language M being used to generate a DSL grammar
within the tool called Quadrant. This is what Martin Fowler referred to as a "DSL
workbench"- where the tool builds the DSL. Martin Fowler identified two other main
categories of DSL; the External DSL, and the Internal, or Embedded DSL. External DSL's
are often quite complex - and rarely come to general usage. Internal, or Embedded
DSL's are abstractions over an API, or framework, within an application. 
&lt;br&gt;
&lt;br&gt;
The idea of a DSL being used was briefly touched on in the Jan 2009 DotNet Rocks &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=415"&gt;episode&lt;/a&gt; with &lt;a href="http://aslamkhan.net/"&gt;Aslam
Khan&lt;/a&gt; a software architect that lives in South Africa. The company he works with
uses this to achieve &lt;a href="http://domaindrivendesign.org/resources/what_is_ddd"&gt;Domain
Driven Design&lt;/a&gt; (DDD). "Write a story that describes a problem", and understand
that little piece, to understand the domain. "Something that describes it completely
- that does not bleed into the other", which build up a dependency graph, it exists
in context to the other things - behind each story. A story about the problem - the
domain. The more you reveal incorrect assumptions in the dependency graphs and correct
them, you don't have to prune source code trees -so you get smaller source code trees,
and designing API's around the stories - means changing the granularity of the stories
- not modules. In the podcast (just after 38:41) they describe a misunderstood story
- that would have produced an incorrect system design - but writing out a story, that
the users can understand - allows for corrections can be made before hand. Understanding
the user's vocabulary, and you can write it in those terms, then you have the basis
to build on(this goes back to the Eric Evan's Domain-Driven-Design &lt;a href="http://books.google.com/books?id=7dlaMs0SECsC&amp;amp;pg=PA24&amp;amp;lpg=PA24&amp;amp;dq=eric+evans+domain+driven+design+ubiquitous+language&amp;amp;source=bl&amp;amp;ots=ulHUY1U8s8&amp;amp;sig=jk96fBqxm3-SYbPZPtb8gev_VAk&amp;amp;hl=en&amp;amp;ei=H-JBTZvcLYbagAfM59mWAg&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=8&amp;amp;ved=0CEkQ6AEwBw#v=onepage&amp;amp;q&amp;amp;f=false"&gt;"ubiquitous
language"&lt;/a&gt;). It helps other people later on to understand the language of the application.
Aslam Khan uses a Wiki to capture that language - and refers to the "Wiki as code"
(about 44:44 in the podcast). He refers to it as "a DSL captured in business terms
- that cannot be executed - but at that point you can start writing code". After listening
to that podcast(in 2009), I went to Aslam's website - and discovered his &lt;a href="http://aslamkhan.net/software-development/heck-we-should-have-paid-attention-that-day/"&gt;posting&lt;/a&gt; about
using Cucumber and driving it down into &lt;a href="http://www.pragprog.com/titles/achbd/the-rspec-book"&gt;Rspec&lt;/a&gt;.
That led to my reading of a post about Ruby and the latest on &lt;a href="http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html"&gt;Ruby
testing - using cucumber&lt;/a&gt;. (There is a language called &lt;a href="https://github.com/aslakhellesoy/cucumber/wiki/Gherkin"&gt;Gherkin&lt;/a&gt; used
with Cucumber to create a &lt;a href="http://bjarte.com/post/228763457"&gt;Ruby testing
framework&lt;/a&gt;). The dynamic nature of Ruby - and the concept of Metaprogramming -
became connected to the idea of how one could produce a DSL. Aslam Khan stated it,
on his blog, as "the Code is the data" behind a DSL, and he encouraged learning about
AST's (Abstract Syntax Trees) which to me connected directly to .Net Expression Trees
- the basis of Microsoft Dynamic Language Runtime(DLR) in .Net 4.0.&amp;nbsp; DSL's can
become Expression Trees which in turn can become running code in the DLR. At least,
in theory, that would be one Dynamic-Language approach to implementing a DSL(There
may be some limitations on how that can occur).&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
During 2010, I picked up a copy of Orin Eini's(a.k.a &lt;a href="http://www.ayende.com/"&gt;Ayende
Rahein&lt;/a&gt;) book called "&lt;a href="http://www.amazon.com/DSLs-Boo-Domain-Specific-Languages/dp/1933988606/"&gt;DSL's
in Boo&lt;/a&gt; - Domain Specific Languages in .Net". (he did an &lt;a href="http://www.dotnetrocks.com/default.aspx?ShowNum=529"&gt;interview&lt;/a&gt; in
March 2010 with DotNetRocks on this topic).Ayende is known in the .Net development
world for RhinoMocks( a mocking framework), his work on NHibernate(his company makes
a profiler for NHibernate and EntityFrameworks), and now his RavenDB - document database
project. Somehow, he also managed to have written a book on DSL's &amp;nbsp; - the guy
is prolific at producing content - whether you see his coding output(RhinoMocks,RavenDB),
his blog, and now his book.&amp;nbsp; In his book, he describes how he builds his own
DSL's using the .Net language &lt;a href="http://boo.codehaus.org/"&gt;Boo&lt;/a&gt; as the foundation,
as it gives him a parser,lexer, and great extensibility points, that compile into
.Net code - that is not based on the DLR. He shows how the Boo language allows for
defining your own expressions that can then be compiled - statically.&amp;nbsp; Boo is
based on the released &lt;a href="http://www.ecma-international.org/publications/standards/Ecma-335.htm"&gt;ECMA
standard for the CLI&lt;/a&gt;. Interestingly -both the Boo Language, and the ECMA CLI standard,
had recent updates(at this writing) Boo 0.9.4 was updated Jan 2011, and the ECMA Standard
December 2010. Boo has some capacities that make the language very powerful. It can
be an object oriented language, and it can do functional composition (where functions
are first class citizens like those in F#), it has '&lt;a href="http://ayende.com/Blog/archive/2008/05/27/The-magic-of-boo--Flexible-syntax.aspx"&gt;Syntactic
Macros'&lt;/a&gt;, and it has an extensible compilation pipeline - which is what the creator,
Rodrigo B. de Oliveira, wanted to have in the first place, and it can run on multiple
platforms (Windows CLR and Linux Mono). Boo has its roots&amp;nbsp; based on Python Syntax
and looks like it has some great potential.&amp;nbsp; To use Boo that as the basis for
creating a DSL seems like a very interesting choice - here it would be a statically
typed implementation of a DSL. This could be a way of generating a concise Internal,
or External, DSL that works for the users and programmers alike within a given domain.
Ayende's book gets into the details of using boo for creating your own DSL.&lt;br&gt;
&lt;br&gt;
I found a few entries that related how Powershell could be used at the basis of a
DSL. There is a blog &lt;a href="http://keithhill.spaces.live.com/Blog/cns%215A8D2641E0963A97%216944.entry"&gt;post&lt;/a&gt; from
Keith Hill on how Powershell's syntax flexibility allows you to create a internal
DSL. Doug Finke, a Powershell MVP, posted something that went back to &lt;a href="http://www.dougfinke.com/blog/index.php/2009/07/01/powershell-powerboots-and-an-oslo-dsl-grammar/"&gt;the
Oslo starting point&lt;/a&gt; from a Powershell point of view. Doug Finke shows implementing
an OSLO grammar syntax using Powershell, based on the concepts originally introduced
in that early video of the M Language example. So from Dynamic Languages or Scripting
tools we can find approaches to creating DSL's today.&amp;nbsp; Doug Finke connected the
concepts of DSL, DRL, and Boo; all the ideas together in his post &lt;a temp_href="Creating a unified programming model on top of .NET" href="Creating%20a%20unified%20programming%20model%20on%20top%20of%20.NET"&gt;"&lt;font size="3"&gt;Creating
a unified programming model on top of .NET"&lt;/font&gt;&lt;/a&gt; He cites "Trends and Directions
in programming languages" from Anders Hejlsberg.&amp;nbsp; DSL's could certainly be part
of that mix in creating solutions.&lt;br&gt;
&lt;br&gt;
Jeffrey Snover, the architect of Powershell, had a discussion in 2008 on DSL's with
Martin Fowler and Neal Ford from Thoughtworks. (&lt;a href="http://channel9.msdn.com/blogs/charles/jeffrey-snover-martin-fowler-and-neil-ford-domain-specific-languages"&gt;recording
on Channel9&lt;/a&gt;). In this talk they made the point that a DSL can be an External DSL,
an Internal DSL or a 'workbench' with tools wrapped around it. Martin Fowler made
the point that not many successful DSL's have been done starting from the business
side and working toward the API - but that is where the concept is the most powerful,
they made the point that it is usually an abstraction of an existing API that simplifies
the underlying API - and that DSL can be replaced with the word 'Framework' and mean
the same thing. Jeffrey Snover also &lt;a href="http://blogs.msdn.com/b/powershell/archive/2008/10/09/domain-specific-languages-dsls-in-general-and-how-powershell-relates.aspx"&gt;posted&lt;/a&gt; that
Powershell could be used to create DSL's by limiting the syntax. The key piece he
refers to is the &lt;a href="http://technet.microsoft.com/en-us/library/dd347678.aspx"&gt;data
segment SupportedCommands&lt;/a&gt; - which he alludes to as a way to limit a DSL done in
Powershell.&lt;br&gt;
&lt;br&gt;
Karl Prosser referred to the Powerboots library for Powershell as a DSL in a &lt;a href="http://powershell.com/cs/blogs/karl-prosser/archive/2009/02/11/powerboots-a-beautiful-dsl-not-to-mention-useful.aspx"&gt;blog
post&lt;/a&gt;. It is a Powershell set of commands that are specific to using WPF from within
Powershell - which stays with the concept that it&amp;nbsp; is limited to that specific
domain.&lt;br&gt;
&lt;br&gt;
Sometimes the use of a Fluent API - can be used to write code that is very readable
and expressive - such that it becomes an internal DSL within the general purpose language(Steven
Hoisee &lt;a href="http://www.blog.holsee.com/2009/10/fluent-interfaces-internal-domain-specific-languages/"&gt;blog&lt;/a&gt; has
some coverage on this).&amp;nbsp; I came accross a paper on how JMock was developed and
how they worked toward incorporating a Fluent API as part of their own &lt;a href="http://static.mockobjects.com/files/evolving_an_edsl.ooplsa2006.pdf"&gt;Embeded
DSL&lt;/a&gt; within the framework.&lt;br&gt;
&lt;br&gt;
Martin Fowler, who took the time to write the book on DSL, has a post on &lt;a href="http://www.martinfowler.com/bliki/BusinessReadableDSL.html"&gt;BusinessReadableDSLs&lt;/a&gt;.
Where the idea is different than business-writeable DSLs. That was the impression
I got from Aslam Khan's use of Cucumber - that the business could read the DSL and
confirm if it was correct or not. 
&lt;br&gt;
Martin Fowler invokes the comparison to COBOL - which was supposed to be an english
way of telling the computer what to do - and begs the question - how is this one different?&amp;nbsp;
My impression is that the a correct implementation of a DSL is declarative - it describes
what you want to do, now how you do it - and having programmed in COBOL - it is an
imperative approach, not a declarative one.&lt;br&gt;
&lt;br&gt;
Developing a DSL, based on the Jeffrey Snover video, leads me to see that in a DSL
you have vocabulary and you have grammar that must be decided on - and the idea of
keeping it small seems to be important. Just enough to keep and simple - and no simpler.&lt;br&gt;
&lt;br&gt;
Jeremy Miller(Creator of the IOC container - StructureMap, an MVC framework called
FubuMVC, and a testing tool called StoryTeller) did a &lt;a href="http://oredev.org/2010/sessions/patterns-for-building-internal-dsls-in-c-3-0"&gt;presentation&lt;/a&gt; on
creating Internal DSL's at Oredev in Oslo - Nov 2010.&lt;br&gt;
He&amp;nbsp; contributed to the Fluent NHibernate project, and incorporated the use of
an Internal DSL in these projects - and in the presentation he goes over some of the
difficulties of using and developing an Internal DSL using the C# 3.0 language features.
He touches on the separation of the Runtime and Configuration model in building a
DSL, and that testing an internal DSL for configuration is very difficult - you can
test the runtime model more easily, and then make sure your configuration model works
correctly. (the video is a bit grainy - and a few of the questions, that came from
the audience, are not heard - but the concepts that were used in creating an internal
DSL are shown pretty well.)&lt;br&gt;
&lt;br&gt;
From this set of touch points - on the various flavors of DSL's, it is something that
can be done in a variety of ways. The simplest form is the internal or embedded, perhaps
as a Fluent API approach. This simple form of a DSL can be for a small team that produces
repetitive code, or business rules that are needed in in either a static or dynamic
fashion - but still being an internal abstraction - within a small domain. Then there
is an external DSL - and that would need to have a the same considerations as a full
blown computer language - as the publishing of an External DSL approach tends to get
the syntax set in stone, unless you can absorb breaking changes later on.&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
I find this an interesting research topic, that may prove to be a practical solution
to some future area of work. Along these lines - I recently purchased a book that
looks promising; &lt;a href="http://www.cs.usfca.edu/%7Eparrt/"&gt;Terrence Parr&lt;/a&gt;'s book
"&lt;a href="http://www.amazon.com/Language-Implementation-Patterns-Domain-Specific-Programming/dp/193435645X"&gt;Language
Implementation Patterns&lt;/a&gt; - Create your own Domain Specific and General Programming
Languages". Terrence Parr developed&amp;nbsp; &lt;a href="http://www.antlr.org/"&gt;ANTLR&lt;/a&gt; and
that tool is used in the Boo compiler.&amp;nbsp; I will have more reading and learning
to do in this area - and, perhaps at some point, the payoff will be when I can see
an area where a DSL can be used to invoke parts of a framework. Ideally this would
be in terms of the users, a readable Business DSL, or an API syntax that developers
for an application can use that brings a higher level of abstraction and makes code
more readable - and perhaps more declarative.&amp;nbsp; The Jeremy Miller video shows
that is not a simple task, however, he shows that it can be used to develop some powerful
solutions too, and that I find to be valuable.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://designandcode.net/aggbug.ashx?id=de6511fb-497f-483a-8ee0-d5ee427172d7" /&gt;</description>
      <comments>http://designandcode.net/CommentView,guid,de6511fb-497f-483a-8ee0-d5ee427172d7.aspx</comments>
      <category>.Net</category>
      <category>Architecture</category>
      <category>ComputerLanguages</category>
      <category>Cucumber</category>
      <category>DDD</category>
      <category>DesignSpecifcLanguage(DSL)</category>
      <category>DevelopmentTools</category>
      <category>Gherkin</category>
      <category>Powershell</category>
      <category>Ruby</category>
      <category>Software Frameworks</category>
      <category>Structuremap</category>
    </item>
    <item>
      <trackback:ping>http://designandcode.net/Trackback.aspx?guid=178a3b4e-7f94-48e2-af66-efe61be00fd2</trackback:ping>
      <pingback:server>http://designandcode.net/pingback.aspx</pingback:server>
      <pingback:target>http://designandcode.net/PermaLink,guid,178a3b4e-7f94-48e2-af66-efe61be00fd2.aspx</pingback:target>
      <dc:creator>Mark Mitchell</dc:creator>
      <wfw:commentRss>http://designandcode.net/SyndicationService.asmx/GetEntryCommentsRss?guid=178a3b4e-7f94-48e2-af66-efe61be00fd2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Codestock 2009 wrapped up last night.The event was oversold by 1 - 376 attendees.
I enjoyed the selection of talks that were available, and the sessions I attended
were good. Of course I had a favorite.
</p>
        <p>
My Favorite session was delivered Rik Robinson of Wintellect. His talk was on <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=CompositeWPF">PRISM</a>,
from the Microsoft Patterns and Practice group (PNP), this is a Guidance that can
be used in WPF and Silverlight - and incorporates the Unity IOC framework (but that
can be swapped out if you prefer). He kept it simple, he introduced one thing built
on another, and he got the main concepts of how PRISM can be used to develop applications
that decouple View and ViewModel in a very clean fasion. The session was very interactive
and it must have been a bit of pressure to have the Wintellect CEO sitting in the
session.
</p>
        <p>
Through another acquaintance I got to have dinner with Rik that night(day of his presentation),
and hooked up with him for yet another dinner after the last Codestock session before
driving back (we did not attend the giveaways).
</p>
        <p>
Wintellect is local to Knoxville, and is one of the supporters of Codestock. They
arranged to have to other presentations besides Rik Robinson's. John Robbins and Jeffrey
Richter gave presentations via live meeting - and took questions via cell phone (which
you would hear in the room as an echo - but it worked). I attended the John Robbins
debugging presentation and it too was excellent (he can make technology humourous)
- I picked another session instead of the Jeffrey Richter session - if they recorded
it I am going to go watch it. 
</p>
        <p>
I feel a bit responsible for a comment from another attendee about one session I attended.
The session just seemed like there were more examples that were ready - but not shown
- and the session ended earlier than the time slot. I overheard someone else make
that comment about it - and it seemed to fit. I had been fine with how it was -and
only when I heard the comment did it occur to me that not all of the examples had
been touched on. I had sat down to lunch with this speaker before his presentation.
It occurred to me that I may have impacted his preparation, and even the thought that
I did impact his presentation makes me feel sorry for having disturbed his preparation.
I felt it was still a good presentation. I heard how much Rik Robinson prepared and
saw the result - it is a lot of work - and it makes me wonder if my trying to be social
- was just at the wrong time (My apologies to the speaker)
</p>
        <p>
There were several topic areas of interest for me during codestock. WPF,PRISM, MEF,
Debugging, WCF, ORM usage, and TDD. There were sessions that touched on, or spoke
to these - and much more.
</p>
        <p>
Another acquaintance suggested I attend Kevin Hazzard's session on "How I learned
to love Metaprogramming" - which was a very good look into the way that the compiler
creates a <i>dynamic</i> data type in .Net 4.0. The data type of dynamic - is static.
That statement seems at first to be an oxymoron - but the element is treated as static
and how it resolves at runtime is dynamic. The presentation showed how C# and Python
could interact - and gave some examples of dynamically wrapping elements of XML using
C# using the Dynamic elements. His XML Example reminded me of something that Powershell
can do today - and Kevin said that the powershell team did not go down the Dynamic
Language path - which he was not pleased with. Kevin Hazzard is a very good speaker
and he gets into the topic very deeply - and explains it well. I would like to hear
more about his perceptions on Powershell, and how he thinks it might have been done.
</p>
        <p>
There was one connection that I did not expect to occur. At the CodeStock social event,
I was sitting at a table, and a fellow walked over and looked at me and said - I think
I know you. After a moment or two - I recogognized him from a twitter photo. When
I went to Devlink 2008 - I was trying to use Twitter to find out where people were
meeting up, and I had been on twitter for maybe a month at that time. This fellow
was not able to attend the DevLink event - but was trying to follow what was going
on - and he responded to help me figure out where people would be. Between this fellow
and "TheCodeCampJunkie" - I was able to hook up with people at DevLink. So here was
my first time meeting a person face to face - based on using twitter. We talked about
.Net and his getting certified and how it was not helping him get work.
</p>
        <p>
The main focus of these event is the dissemenation of knowledge of what is new and
how to use the technology we deal with. The other part of this is that you are meeting
and speaking with other developers, whom you may have not ever met otherwise.
</p>
        <p>
Several people have posted pictures from CodeStock - Alan Barber got one picture of <a href="http://cid-67d16e3143fa2957.skydrive.live.com/self.aspx/Codestock%202009/IMG%7C_0135.jpg">me</a> at
the Dinner on the night before the event. 
</p>
        <ul>
Photo collections from Code Stock Attendees 
<li><a href="http://cid-67d16e3143fa2957.skydrive.live.com/browse.aspx/Codestock%202009">Alan
Barber</a></li><li><a href="http://www.flickr.com/photos/scoregasm/sets/72157620686419596/">Michael Neel</a></li><li><a href="http://www.flickr.com/photos/29942169@N08/sets/72157620739255234/">David
Giard</a></li></ul>
        <img width="0" height="0" src="http://designandcode.net/aggbug.ashx?id=178a3b4e-7f94-48e2-af66-efe61be00fd2" />
      </body>
      <title>Codestock 2009 </title>
      <guid isPermaLink="false">http://designandcode.net/PermaLink,guid,178a3b4e-7f94-48e2-af66-efe61be00fd2.aspx</guid>
      <link>http://designandcode.net/2009/06/28/Codestock2009.aspx</link>
      <pubDate>Sun, 28 Jun 2009 12:37:48 GMT</pubDate>
      <description>&lt;p&gt;
Codestock 2009 wrapped up last night.The event was oversold by 1 - 376 attendees.
I enjoyed the selection of talks that were available, and the sessions I attended
were good. Of course I had a favorite.
&lt;/p&gt;
&lt;p&gt;
My Favorite session was delivered Rik Robinson of Wintellect. His talk was on &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=CompositeWPF"&gt;PRISM&lt;/a&gt;,
from the Microsoft Patterns and Practice group (PNP), this is a Guidance that can
be used in WPF and Silverlight - and incorporates the Unity IOC framework (but that
can be swapped out if you prefer). He kept it simple, he introduced one thing built
on another, and he got the main concepts of how PRISM can be used to develop applications
that decouple View and ViewModel in a very clean fasion. The session was very interactive
and it must have been a bit of pressure to have the Wintellect CEO sitting in the
session.
&lt;/p&gt;
&lt;p&gt;
Through another acquaintance I got to have dinner with Rik that night(day of his presentation),
and hooked up with him for yet another dinner after the last Codestock session before
driving back (we did not attend the giveaways).
&lt;/p&gt;
&lt;p&gt;
Wintellect is local to Knoxville, and is one of the supporters of Codestock. They
arranged to have to other presentations besides Rik Robinson's. John Robbins and Jeffrey
Richter gave presentations via live meeting - and took questions via cell phone (which
you would hear in the room as an echo - but it worked). I attended the John Robbins
debugging presentation and it too was excellent (he can make technology humourous)
- I picked another session instead of the Jeffrey Richter session - if they recorded
it I am going to go watch it. 
&lt;p&gt;
I feel a bit responsible for a comment from another attendee about one session I attended.
The session just seemed like there were more examples that were ready - but not shown
- and the session ended earlier than the time slot. I overheard someone else make
that comment about it - and it seemed to fit. I had been fine with how it was -and
only when I heard the comment did it occur to me that not all of the examples had
been touched on. I had sat down to lunch with this speaker before his presentation.
It occurred to me that I may have impacted his preparation, and even the thought that
I did impact his presentation makes me feel sorry for having disturbed his preparation.
I felt it was still a good presentation. I heard how much Rik Robinson prepared and
saw the result - it is a lot of work - and it makes me wonder if my trying to be social
- was just at the wrong time (My apologies to the speaker)
&lt;/p&gt;
&lt;p&gt;
There were several topic areas of interest for me during codestock. WPF,PRISM, MEF,
Debugging, WCF, ORM usage, and TDD. There were sessions that touched on, or spoke
to these - and much more.
&lt;/p&gt;
&lt;p&gt;
Another acquaintance suggested I attend Kevin Hazzard's session on "How I learned
to love Metaprogramming" - which was a very good look into the way that the compiler
creates a &lt;i&gt;dynamic&lt;/i&gt; data type in .Net 4.0. The data type of dynamic - is static.
That statement seems at first to be an oxymoron - but the element is treated as static
and how it resolves at runtime is dynamic. The presentation showed how C# and Python
could interact - and gave some examples of dynamically wrapping elements of XML using
C# using the Dynamic elements. His XML Example reminded me of something that Powershell
can do today - and Kevin said that the powershell team did not go down the Dynamic
Language path - which he was not pleased with. Kevin Hazzard is a very good speaker
and he gets into the topic very deeply - and explains it well. I would like to hear
more about his perceptions on Powershell, and how he thinks it might have been done.
&lt;/p&gt;
&lt;p&gt;
There was one connection that I did not expect to occur. At the CodeStock social event,
I was sitting at a table, and a fellow walked over and looked at me and said - I think
I know you. After a moment or two - I recogognized him from a twitter photo. When
I went to Devlink 2008 - I was trying to use Twitter to find out where people were
meeting up, and I had been on twitter for maybe a month at that time. This fellow
was not able to attend the DevLink event - but was trying to follow what was going
on - and he responded to help me figure out where people would be. Between this fellow
and "TheCodeCampJunkie" - I was able to hook up with people at DevLink. So here was
my first time meeting a person face to face - based on using twitter. We talked about
.Net and his getting certified and how it was not helping him get work.
&lt;/p&gt;
&lt;p&gt;
The main focus of these event is the dissemenation of knowledge of what is new and
how to use the technology we deal with. The other part of this is that you are meeting
and speaking with other developers, whom you may have not ever met otherwise.
&lt;/p&gt;
&lt;p&gt;
Several people have posted pictures from CodeStock - Alan Barber got one picture of &lt;a href="http://cid-67d16e3143fa2957.skydrive.live.com/self.aspx/Codestock%202009/IMG%7C_0135.jpg"&gt;me&lt;/a&gt; at
the Dinner on the night before the event. 
&lt;/p&gt;
&lt;ul&gt;
Photo collections from Code Stock Attendees 
&lt;li&gt;
&lt;a href="http://cid-67d16e3143fa2957.skydrive.live.com/browse.aspx/Codestock%202009"&gt;Alan
Barber&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.flickr.com/photos/scoregasm/sets/72157620686419596/"&gt;Michael Neel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.flickr.com/photos/29942169@N08/sets/72157620739255234/"&gt;David
Giard&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://designandcode.net/aggbug.ashx?id=178a3b4e-7f94-48e2-af66-efe61be00fd2" /&gt;</description>
      <comments>http://designandcode.net/CommentView,guid,178a3b4e-7f94-48e2-af66-efe61be00fd2.aspx</comments>
      <category>.Net</category>
      <category>Architecture</category>
      <category>CodeCamp</category>
      <category>DevelopmentTools</category>
      <category>Inversion-of-Control</category>
      <category>ProfessionalNetwork</category>
      <category>Software Frameworks</category>
      <category>Twitter</category>
    </item>
  </channel>
</rss>