<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Development in a Blink &#187; DSL</title>
	<atom:link href="http://www.dougfinke.com/blog/index.php/category/dsl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dougfinke.com/blog</link>
	<description>Researching the optimal; implementing the practical</description>
	<lastBuildDate>Tue, 07 Sep 2010 00:22:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Writing A Little Language in PowerShell for Graphviz</title>
		<link>http://www.dougfinke.com/blog/index.php/2010/05/09/writing-a-little-language-in-powershell-for-graphviz/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=writing-a-little-language-in-powershell-for-graphviz</link>
		<comments>http://www.dougfinke.com/blog/index.php/2010/05/09/writing-a-little-language-in-powershell-for-graphviz/#comments</comments>
		<pubDate>Sun, 09 May 2010 20:38:20 +0000</pubDate>
		<dc:creator>Doug Finke</dc:creator>
				<category><![CDATA[DSL]]></category>
		<category><![CDATA[DSV]]></category>
		<category><![CDATA[Graph]]></category>
		<category><![CDATA[Graphviz]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Visualizing Data]]></category>

		<guid isPermaLink="false">http://dougfinke.com/blog/index.php/2010/05/09/writing-a-little-language-in-powershell-for-graphviz/</guid>
		<description><![CDATA[A key strength to PowerShell is the ability to compose things quickly and cheaply to see if the rabbit hole is worth exploring further. One such use is abstracting away the complexities/ceremonies of textual formats such as the dot language for Graphviz. Graph visualization is a way of representing structural information as diagrams of abstract [...]]]></description>
			<content:encoded><![CDATA[<p>A key strength to PowerShell is the ability to compose things quickly and cheaply to see if the rabbit hole is worth exploring further. One such use is abstracting away the complexities/ceremonies of textual formats such as the dot language for <a href="http://www.graphviz.org/About.php">Graphviz</a>.</p>
<blockquote><p>Graph visualization is a way of representing structural information as diagrams of abstract graphs and networks. Automatic graph drawing has many important applications in software engineering, database and web design, networking, and in visual interfaces for many other domains.</p>
</blockquote>
<h3>The Little Language </h3>
<table border="0" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td valign="top" width="200">
<pre style="width: 302px; height: 63px" class="PowerShellColorizedScript"><span style="color: #0000ff">New-DiGraph</span> <span style="color: #000000">{</span>
  <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">Node1</span> <span style="color: #8a2be2">Node2</span> <span style="color: #8a2be2">edge</span>
<span style="color: #000000">}</span> <span style="color: #a9a9a9">|</span> <span style="color: #0000ff">Out-Graphviz</span> <span style="color: #000080">-dot</span> <span style="color: #8a2be2">c:\sample.png</span> <span style="color: #000080">-show</span></pre>
</td>
<td valign="top" width="200"><a href="http://dougfinke.com/uploadPictures/APowerShellDomainSpecificLanguageforGrap_AE1C/sample.png"><img style="border-right-width: 0px; margin: 5px 40px 5px 25px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="sample" border="0" alt="sample" src="http://dougfinke.com/uploadPictures/APowerShellDomainSpecificLanguageforGrap_AE1C/sample_thumb.png" width="107" height="176" /></a> </td>
</tr>
</tbody>
</table>
<p>This little language has, <em>New-DiGraph</em>, <em>Add-Edge</em> and <em>Out-Graphviz. </em>Plus there is<em> </em>a PowerShell script block, denoted by the <strong><em>{}</em></strong>, that is being passed as a parameter to New-DiGraph. These functions form the DSL/DSV (<a href="http://blogs.msdn.com/powershell/archive/2008/10/09/domain-specific-languages-dsls-in-general-and-how-powershell-relates.aspx">domain specific vocabulary</a>).</p>
<p>The PowerShell below shows an implementation of the New-DiGraph and Add-Edge functions. Add-Edge, which is passed to New-DiGraph in a script block (see above), gets executed in the line <strong><em>&amp; $sb</em></strong>.</p>
<pre class="PowerShellColorizedScript"><span style="color: #00008b">Function</span> <span style="color: #8a2be2">New-DiGraph</span> <span style="color: #000000">{</span>
    <span style="color: #00008b">param</span> <span style="color: #000000">(</span>
        <span style="color: #008080">[scriptblock]</span><span style="color: #ff4500">$sb</span>
    <span style="color: #000000">)</span>            

     <span style="color: #00008b">Function</span> <span style="color: #8a2be2">Add-Edge</span> <span style="color: #000000">{</span>
        <span style="color: #00008b">param</span><span style="color: #000000">(</span><span style="color: #ff4500">$source</span><span style="color: #a9a9a9">,</span> <span style="color: #ff4500">$target</span><span style="color: #a9a9a9">,</span> <span style="color: #ff4500">$edgeLabel</span><span style="color: #000000">)</span>
        <span style="color: #8b0000">&quot;$source -&gt; $target [ label = `&quot;$edgeLabel`&quot; ]&quot;</span>
    <span style="color: #000000">}</span>            

    <span style="color: #a9a9a9">&amp;</span> <span style="color: #ff4500">$sb</span>
<span style="color: #000000">}</span></pre>
<h3>Drawing a Finite Automaton</h3>
<p><a href="http://dougfinke.com/uploadPictures/APowerShellDomainSpecificLanguageforGrap_AE1C/ps.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="ps" border="0" alt="ps" src="http://dougfinke.com/uploadPictures/APowerShellDomainSpecificLanguageforGrap_AE1C/ps_thumb.png" width="555" height="179" /></a></p>
<h3>Using the PowerShell DSL/DSV</h3>
<pre class="PowerShellColorizedScript"><span style="color: #0000ff">New-DiGraph</span> <span style="color: #000000">{</span>            

    <span style="color: #0000ff">Set-RankDirLR</span>            

    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_0</span> <span style="color: #8a2be2">LR_2</span> <span style="color: #8b0000">&quot;SS(B)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_0</span> <span style="color: #8a2be2">LR_1</span> <span style="color: #8b0000">&quot;SS(S)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_1</span> <span style="color: #8a2be2">LR_3</span> <span style="color: #8b0000">&quot;S(`$end)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_2</span> <span style="color: #8a2be2">LR_6</span> <span style="color: #8b0000">&quot;SS(b)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_2</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8b0000">&quot;SS(a)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_2</span> <span style="color: #8a2be2">LR_4</span> <span style="color: #8b0000">&quot;S(A)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8a2be2">LR_7</span> <span style="color: #8b0000">&quot;S(b)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8b0000">&quot;S(a)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_6</span> <span style="color: #8a2be2">LR_6</span> <span style="color: #8b0000">&quot;S(b)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_6</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8b0000">&quot;S(a)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_7</span> <span style="color: #8a2be2">LR_8</span> <span style="color: #8b0000">&quot;S(b)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_7</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8b0000">&quot;S(a)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_8</span> <span style="color: #8a2be2">LR_6</span> <span style="color: #8b0000">&quot;S(b)&quot;</span>
    <span style="color: #0000ff">Add-Edge</span> <span style="color: #8a2be2">LR_8</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8b0000">&quot;S(a)&quot;</span>                

<span style="color: #000000">}</span> <span style="color: #a9a9a9">|</span> <span style="color: #0000ff">Out-Graphviz</span> <span style="color: #000080">-dot</span> <span style="color: #8a2be2">c:\ps.png</span> <span style="color: #000080">-show</span></pre>
<h3>The Generated DOT Language </h3>
<p>If you do not pipe the New-DiGraph to the Out-Graphviz you get the raw graphviz output. You can save this intermediate step to a file for later use with <em>dot</em>. Save to a file by piping it to <strong><em>| Out-File &ndash;Encoding ASCII C:\temp\fsm.gv</em></strong></p>
<pre class="PowerShellColorizedScript"><span style="color: #0000ff">digraph</span> <span style="color: #8a2be2">test</span> <span style="color: #000000">{</span>
 <span style="color: #0000ff">rankdir</span> <span style="color: #8a2be2">=</span> <span style="color: #8a2be2">LR</span>            

 <span style="color: #0000ff">LR_0</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_2</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;SS(B)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_0</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_1</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;SS(S)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_1</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_3</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;S($end)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_2</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_6</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;SS(b)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_2</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;SS(a)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_2</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_4</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;S(A)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_5</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_7</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;S(b)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_5</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;S(a)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_6</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_6</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;S(b)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_6</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;S(a)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_7</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_8</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;S(b)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_7</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;S(a)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_8</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_6</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;S(b)&quot;</span> <span style="color: #a9a9a9">]</span>
 <span style="color: #0000ff">LR_8</span> <span style="color: #8a2be2">-&gt;</span> <span style="color: #8a2be2">LR_5</span> <span style="color: #8a2be2">[</span> <span style="color: #8a2be2">label</span> <span style="color: #8a2be2">=</span> <span style="color: #8b0000">&quot;S(a)&quot;</span> <span style="color: #a9a9a9">]</span>            

<span style="color: #000000">}</span></pre>
<h3>View Running Processes on your Box By Company</h3>
<pre class="PowerShellColorizedScript"><span style="color: #0000ff">New-DiGraph</span> <span style="color: #000000">{</span>            

    <span style="color: #0000ff">Set-RankDirLR</span>            

    <span style="color: #0000ff">Get-Process</span> <span style="color: #a9a9a9">|</span>
      <span style="color: #0000ff">Where</span> <span style="color: #000000">{</span><span style="color: #ff4500">$_</span><span style="color: #a9a9a9">.</span><span style="color: #000000">Company</span><span style="color: #000000">}</span> <span style="color: #a9a9a9">|</span>
      <span style="color: #0000ff">ForEach</span> <span style="color: #000000">{</span>
          <span style="color: #0000ff">Add-Edge</span> <span style="color: #8b0000">&quot;$($_.Name)&quot;</span> <span style="color: #8b0000">&quot;$($_.Company)&quot;</span>
      <span style="color: #000000">}</span>            

<span style="color: #000000">}</span> <span style="color: #a9a9a9">|</span> <span style="color: #0000ff">Out-Graphviz</span> <span style="color: #000080">-dot</span> <span style="color: #8a2be2">c:\ps.png</span> <span style="color: #000080">-show</span></pre>
<p>&#160;</p>
<p><a href="http://dougfinke.com/uploadPictures/APowerShellDomainSpecificLanguageforGrap_AE1C/image.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/APowerShellDomainSpecificLanguageforGrap_AE1C/image_thumb.png" width="515" height="302" /></a></p>
<p>&#160;</p>
<h3>References</h3>
<ul>
<li><a href="http://blogs.msdn.com/powershell/archive/2007/11/27/graphing-with-glee.aspx">Graphing with Glee</a> </li>
<li><a href="http://dougfinke.com/blog/index.php/2009/02/07/powershell-find-the-k-most-common-words-in-a-file/">PowerShell &#8211; Find the K most common words in a file</a></li>
<li><a href="http://dougfinke.com/blog/index.php/2009/12/20/tainted-peanut-butter-the-sequel-powershell-dgml-and-visual-studio-2010/">Tainted Peanut Butter, The Sequel: PowerShell, DGML and Visual Studio 2010</a> </li>
<li><a href="http://dougfinke.com/blog/index.php/2008/07/26/psparsertokenize-powershell-and-glee/">PSParser::Tokenize, PowerShell and GLEE</a></li>
</ul>
<h3>Grab the Code</h3>
<p>You need to download the free Graphviz Software <a href="http://www.graphviz.org/Download_windows.php">here</a>. Then the PowerShell code.</p>
<p><iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-5dec3b62d9308943.skydrive.live.com/embedicon.aspx/Graphviz/powershell-graphviz.zip" frameborder="0" marginwidth="0" scrolling="no"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dougfinke.com/blog/index.php/2010/05/09/writing-a-little-language-in-powershell-for-graphviz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use SQL Server Modeling to build a DSL for .NET 4 WCF content-based routing service</title>
		<link>http://www.dougfinke.com/blog/index.php/2009/12/05/use-sql-server-modeling-to-build-a-dsl-for-net-4-wcf-content-based-routing-service/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=use-sql-server-modeling-to-build-a-dsl-for-net-4-wcf-content-based-routing-service</link>
		<comments>http://www.dougfinke.com/blog/index.php/2009/12/05/use-sql-server-modeling-to-build-a-dsl-for-net-4-wcf-content-based-routing-service/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 02:06:38 +0000</pubDate>
		<dc:creator>Doug Finke</dc:creator>
				<category><![CDATA[.NET 4.0]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[RouterManager]]></category>
		<category><![CDATA[SQL Server Modeling]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://dougfinke.com/blog/index.php/2009/12/05/use-sql-server-modeling-to-build-a-dsl-for-net-4-wcf-content-based-routing-service/</guid>
		<description><![CDATA[Doug Purdy posts Model-Driven Content Based Routing. The sample includes a DSL, a Runtime and more This a great example that leverages many of the different aspects of SQL Server Modeling (&#8221;M&#8221;-based DSLs, &#8220;M&#8221;, Modeling Services, etc.) to enable a better experience around application development/management Here is the MSDN Code Gallery sample RouterManager for WCF [...]]]></description>
			<content:encoded><![CDATA[<p>Doug Purdy posts <a href="http://www.douglaspurdy.com/2009/12/06/model-driven-content-based-routing/">Model-Driven Content Based Routing</a>. The sample includes a DSL, a Runtime and more</p>
<blockquote><p>This a great example that leverages many of the different aspects of SQL Server Modeling (&rdquo;M&rdquo;-based DSLs, &ldquo;M&rdquo;, Modeling Services, etc.) to enable a better experience around application development/management</p>
</blockquote>
<p>Here is the MSDN Code Gallery sample <a href="http://code.msdn.microsoft.com/RouterManager">RouterManager for WCF in .NET 4 using SQL Server Modeling CTP</a>. </p>
<blockquote><p>RouterManager is a domain-specific language and runtime that allows you to program the rules for the .NET 4 WCF content-based routing service using an easy to understand language.</p>
</blockquote>
<p>You also need <a href="http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx">Visual Studio 2010 Beta 2</a> and the <a href="http://msdn.microsoft.com/en-us/oslo/default.aspx">SQL Server Modeling CTP</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dougfinke.com/blog/index.php/2009/12/05/use-sql-server-modeling-to-build-a-dsl-for-net-4-wcf-content-based-routing-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chris Sells wants to learn PowerShell because of PowerBoots</title>
		<link>http://www.dougfinke.com/blog/index.php/2009/07/10/chris-sells-wants-to-learn-powershell-because-of-powerboots/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=chris-sells-wants-to-learn-powershell-because-of-powerboots</link>
		<comments>http://www.dougfinke.com/blog/index.php/2009/07/10/chris-sells-wants-to-learn-powershell-because-of-powerboots/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 02:59:33 +0000</pubDate>
		<dc:creator>Doug Finke</dc:creator>
				<category><![CDATA[DSL]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Oslo]]></category>
		<category><![CDATA[PowerBoots]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://dougfinke.com/blog/index.php/2009/07/10/chris-sells-wants-to-learn-powershell-because-of-powerboots/</guid>
		<description><![CDATA[Chris Sells, Program Manager on the Microsoft &#34;Oslo&#34; team, blogs&#160; how he has picked up and put down PowerShell a half dozen times. PowerBoots makes him really really want to move to PowerShell. PowerBoots makes it easy to create GUIs in PowerShell on top of WPF. Here are some posts on Boots and PowerShell JSON, [...]]]></description>
			<content:encoded><![CDATA[<p>Chris Sells, Program Manager on the Microsoft &quot;Oslo&quot; team, <a href="http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=2295">blogs</a>&#160; how he has picked up and put down PowerShell a half dozen times.</p>
<p><a href="http://huddledmasses.org/powerboots/">PowerBoots</a> makes him really really want to move to PowerShell. PowerBoots makes it easy to create GUIs in PowerShell on top of WPF.</p>
<p>Here are some posts on Boots and PowerShell</p>
<ul>
<li>
<h4><a href="http://dougfinke.com/blog/index.php/2009/07/03/json-xaml-powerboots-and-powershell/">JSON, XAML, PowerBoots and PowerShell</a></h4>
</li>
<li>
<h4><a href="http://dougfinke.com/blog/index.php/2009/07/01/powershell-powerboots-and-an-oslo-dsl-grammar/">PowerShell, PowerBoots and an Oslo DSL Grammar</a></h4>
</li>
<li>
<h4><a href="http://dougfinke.com/blog/index.php/2009/06/19/powershell-picture-viewer-using-wpf-with-powerboots/">PowerShell Picture Viewer using WPF with PowerBoots</a></h4>
</li>
<li>
<h4><a href="http://dougfinke.com/blog/index.php/2009/06/18/powershell-meet-wpf-via-powerboots/">PowerShell meet WPF via PowerBoots</a></h4>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dougfinke.com/blog/index.php/2009/07/10/chris-sells-wants-to-learn-powershell-because-of-powerboots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PowerShell, PowerBoots and an Oslo DSL Grammar</title>
		<link>http://www.dougfinke.com/blog/index.php/2009/07/01/powershell-powerboots-and-an-oslo-dsl-grammar/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=powershell-powerboots-and-an-oslo-dsl-grammar</link>
		<comments>http://www.dougfinke.com/blog/index.php/2009/07/01/powershell-powerboots-and-an-oslo-dsl-grammar/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 23:14:38 +0000</pubDate>
		<dc:creator>Doug Finke</dc:creator>
				<category><![CDATA[DSL]]></category>
		<category><![CDATA[Oslo]]></category>
		<category><![CDATA[PowerBoots]]></category>
		<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://dougfinke.com/blog/index.php/2009/07/01/powershell-powerboots-and-an-oslo-dsl-grammar/</guid>
		<description><![CDATA[David Langworthy, the Microsoft architect who owns The &#8220;Oslo&#8221; Modeling Language Specification, has these &#8220;Modeling in Text&#8221; videos HERE that walk through the specific process of creating a domain-specific language. Intellipad Working from his example we&#8217;ll compile grammar and transform the DSL into Xaml using PowerShell to read and create PS Custom Objects. I &#8216;embedded&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>David Langworthy, the Microsoft architect who owns The &ldquo;Oslo&rdquo; Modeling Language Specification, has these &ldquo;Modeling in Text&rdquo; videos <a href="http://msdn.microsoft.com/en-us/oslo/dd576258.aspx">HERE</a> that walk through the specific process of creating a domain-specific language.</p>
<h3>Intellipad</h3>
<p><a href="http://dougfinke.com/uploadPictures/cdf355013d98_13363/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/cdf355013d98_13363/image_thumb.png" width="574" height="193" /></a> </p>
<p>Working from his example we&rsquo;ll compile grammar and transform the DSL into Xaml using PowerShell to read and create PS Custom Objects.</p>
<ul>
<li>I &lsquo;embedded&rsquo; the DSL (lines 1-6) </li>
<li>The DSL Grammar (lines 9-26) </li>
<li>Called the M tool chain
<ul>
<li>line 28 the M Compiler </li>
<li>line 29 the MGrammar Executor </li>
</ul>
</li>
</ul>
<h3>Then</h3>
<ul>
<li>Read the Xaml file produced
<ul>
<li>Converted it to an XmlDocument, line 31 </li>
<li>Looped through the entities in the graph </li>
</ul>
</li>
<li>And generated PowerShell Custom Objects </li>
</ul>
<h3>Finally</h3>
<ul>
<li>Using <a href="http://powerboots.codeplex.com/">PowerBoots</a> line 38 </li>
<li>The DataGrid from the <a href="http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29117">WPF Toolkit</a> </li>
<li>Displayed the results </li>
</ul>
<p>From DSL =&gt; DynamicParser =&gt; Custom Objects =&gt; WPF data bound control</p>
<p><a href="http://dougfinke.com/uploadPictures/cdf355013d98_13363/image_3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/cdf355013d98_13363/image_thumb_3.png" width="571" height="450" /></a></p>
</p>
</p>
<p>Using the M tool chain in this ways has it&rsquo;s advantages in several scenarios. This script can easily be streamlined by checking file dates and bypass the <em>m </em>and <em>mgx</em> steps.</p>
<p>In future posts we&rsquo;ll see if we can interact with the MGrammar namespace and work with Oslo in a deeper way.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dougfinke.com/blog/index.php/2009/07/01/powershell-powerboots-and-an-oslo-dsl-grammar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Create a Domain Specific Vocabulary in PowerShell for Measuring Portfolio Returns &#8211; Part 1</title>
		<link>http://www.dougfinke.com/blog/index.php/2009/06/29/create-a-domain-specific-vocabulary-in-powershell-for-measuring-portfolio-returns-part-1/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=create-a-domain-specific-vocabulary-in-powershell-for-measuring-portfolio-returns-part-1</link>
		<comments>http://www.dougfinke.com/blog/index.php/2009/06/29/create-a-domain-specific-vocabulary-in-powershell-for-measuring-portfolio-returns-part-1/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 23:39:50 +0000</pubDate>
		<dc:creator>Doug Finke</dc:creator>
				<category><![CDATA[DSL]]></category>
		<category><![CDATA[DSV]]></category>
		<category><![CDATA[Domain Specific Vocabulary]]></category>
		<category><![CDATA[Finance]]></category>
		<category><![CDATA[Financial]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://dougfinke.com/blog/index.php/2009/06/29/create-a-domain-specific-vocabulary-in-powershell-for-measuring-portfolio-returns-part-1/</guid>
		<description><![CDATA[DSLs and DSVs (Domain Specific Languages and Vocabularies) can be super helpful and are not complicated to build. Example The mean return to a portfolio is the weighted average return of the stocks making up the portfolio. Let&#8217;s say a portfolio consists of 30% GOOG shares with a mean daily return of 0.14% and 70% [...]]]></description>
			<content:encoded><![CDATA[<p>DSLs and DSVs (Domain Specific Languages and Vocabularies) can be super helpful and are not complicated to build.</p>
<h4>Example </h4>
<p>The mean return to a portfolio is the weighted average return of the stocks making up the portfolio.</p>
<p>Let&rsquo;s say a portfolio consists of 30% GOOG shares with a mean daily return of 0.14% and 70% MSFT shares, mean daily return of 0.03%.</p>
<p>The mean daily return is:</p>
<p>(0.3 * .14) + (0.7 * 0.03) = 0.063</p>
<p>Another portfolio of 50% GOOG and 50% MSFT gives</p>
<p>(0.5 * .14) + (0.5 * 0.03) = 0.085</p>
<h4>The PowerShell DSV</h4>
<p>I&rsquo;d like to represent the portfolio like the following, legal PowerShell syntax.</p>
<p><a href="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_thumb.png" width="332" height="142" /></a> </p>
<div>&#160;</div>
<h4>Let&rsquo;s build up the Domain Specific Vocabulary</h4>
<p>Lines 1-3 enable the DSV to <em><strong>work</strong></em> and prints:</p>
<p><a href="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_thumb_3.png" width="231" height="41" /></a> </p>
<div id="codeSnippetWrapper"><a href="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_thumb_4.png" width="388" height="167" /></a> </div>
<p>&#160;</p>
<p>Adding lines 4-8 will output the snippet below. Note line 7 uses &ldquo;&amp;&rdquo;, the PowerShell call operator, to evaluate the script block.</p>
<p><a href="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_5.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_thumb_5.png" width="271" height="96" /></a> </p>
<p><a href="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_thumb_6.png" width="461" height="139" /></a>&#160;</p>
<h4>&#160;</h4>
<h4>Transform the Data into objects</h4>
<p>Let&rsquo;s transform the data into objects with properties so it prints the following table, with the added plus of addressable properties.</p>
<p><a href="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_7.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_thumb_7.png" width="319" height="104" /></a> </p>
<div><a href="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_thumb_8.png" width="408" height="211" /></a> </div>
<div>&#160;</div>
<div>&#160;</div>
<h4>Calculate the Weighted Average</h4>
<p>Adding a hash table lookup in lines 4-7 and the properties MeanDailyReturn and WeightedAverage in lines 18-24. </p>
<p>Lines 20 and 23 look up the MeanDailyReturn by stock name using dot notation.</p>
<p><a href="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_9.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_thumb_9.png" width="505" height="93" /></a> </p>
<p><a href="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_10.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dougfinke.com/uploadPictures/PowerShellCreateaDomainSpecificVocabular_10EB1/image_thumb_10.png" width="501" height="373" /></a> </p>
<h3>In an upcoming post</h3>
<p>The transformation of the DSV into objects and properties is finished. In an upcoming post we&rsquo;ll add some more detail and play with the output.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dougfinke.com/blog/index.php/2009/06/29/create-a-domain-specific-vocabulary-in-powershell-for-measuring-portfolio-returns-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Domain Specific Languages for automated testing of equity order management systems and trading machines</title>
		<link>http://www.dougfinke.com/blog/index.php/2009/06/13/domain-specific-languages-for-automated-testing-of-equity-order-management-systems-and-trading-machines/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=domain-specific-languages-for-automated-testing-of-equity-order-management-systems-and-trading-machines</link>
		<comments>http://www.dougfinke.com/blog/index.php/2009/06/13/domain-specific-languages-for-automated-testing-of-equity-order-management-systems-and-trading-machines/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 13:40:05 +0000</pubDate>
		<dc:creator>Doug Finke</dc:creator>
				<category><![CDATA[DSL]]></category>
		<category><![CDATA[FIX Messaging]]></category>
		<category><![CDATA[Oslo]]></category>

		<guid isPermaLink="false">http://dougfinke.com/blog/index.php/2009/06/13/domain-specific-languages-for-automated-testing-of-equity-order-management-systems-and-trading-machines/</guid>
		<description><![CDATA[It tends to be fairly cumbersome to create test scenarios for simulating market behavior for testing trading strategies A DSL using the &#34;Oslo&#34; toolset that is capable of expressing order generation and responses from a range of market behaviors in terms of FIX messages in a dialect suitable for use by traders and financial engineers [...]]]></description>
			<content:encoded><![CDATA[<p>It tends to be fairly cumbersome to create test scenarios for simulating market behavior for testing trading strategies</p>
<blockquote><p>A DSL using the &quot;Oslo&quot; toolset that is capable of expressing order generation and responses from a range of market behaviors in terms of FIX messages in a dialect suitable for use by traders and financial engineers</p>
</blockquote>
<p>Slide deck <a href="http://download.microsoft.com/download/E/7/7/E77A8FCE-0362-4930-BD5E-8A21EC77E38D/03_Tom_Rodgers_Behavioral_Testing_DSLs_For_Automated_Trading%20Systems2.pptx">HERE</a>, Video <a href="http://msdn.microsoft.com/en-us/oslo/dd727718.aspx">HERE</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dougfinke.com/blog/index.php/2009/06/13/domain-specific-languages-for-automated-testing-of-equity-order-management-systems-and-trading-machines/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A DSL based NHibernate generation tool &#8211; Using Microsoft Oslo</title>
		<link>http://www.dougfinke.com/blog/index.php/2009/05/24/a-dsl-based-nhibernate-generation-tool-using-microsoft-oslo/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=a-dsl-based-nhibernate-generation-tool-using-microsoft-oslo</link>
		<comments>http://www.dougfinke.com/blog/index.php/2009/05/24/a-dsl-based-nhibernate-generation-tool-using-microsoft-oslo/#comments</comments>
		<pubDate>Sun, 24 May 2009 15:06:09 +0000</pubDate>
		<dc:creator>Doug Finke</dc:creator>
				<category><![CDATA[DSL]]></category>
		<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[Oslo]]></category>

		<guid isPermaLink="false">http://dougfinke.com/blog/index.php/2009/05/24/a-dsl-based-nhibernate-generation-tool-using-microsoft-oslo/</guid>
		<description><![CDATA[NHModeller is a tool aimed to simplify the development cycle of an NHibernate based application. The engine used to parse the DSL is the Microsoft &#34;Oslo&#34; SDK. New Oslo CTP via Chris Sells from TweetDeck barring any issues with an unrelated MSDN upgrade, we&#8217;ll be releasing the #msoslo May CTP on Tues.http://msdn.com/oslo]]></description>
			<content:encoded><![CDATA[<blockquote><p><b><a href="http://nhmodeller.selfip.com/">NHModeller</a></b> is a tool aimed to simplify the development cycle of an <a href="https://www.hibernate.org/343.html">NHibernate</a> based application. The engine used to parse the DSL is the <a href="http://msdn.microsoft.com/en-us/oslo/default.aspx">Microsoft &quot;Oslo&quot; SDK</a>.</p>
</blockquote>
<h3>New Oslo CTP</h3>
<p>via <a href="http://twitter.com/csells/status/1902972122">Chris Sells</a> from TweetDeck</p>
<blockquote><p>barring any issues with an unrelated MSDN upgrade, we&#8217;ll be releasing the #msoslo May CTP on Tues.<a href="http://msdn.com/oslo">http://msdn.com/oslo</a></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dougfinke.com/blog/index.php/2009/05/24/a-dsl-based-nhibernate-generation-tool-using-microsoft-oslo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET Framework 4.0: Sentient DSLs</title>
		<link>http://www.dougfinke.com/blog/index.php/2009/05/02/net-framework-40-sentient-dsls/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=net-framework-40-sentient-dsls</link>
		<comments>http://www.dougfinke.com/blog/index.php/2009/05/02/net-framework-40-sentient-dsls/#comments</comments>
		<pubDate>Sat, 02 May 2009 14:16:44 +0000</pubDate>
		<dc:creator>Doug Finke</dc:creator>
				<category><![CDATA[.NET 4.0]]></category>
		<category><![CDATA[DSL]]></category>

		<guid isPermaLink="false">http://dougfinke.com/blog/index.php/2009/05/02/net-framework-40-sentient-dsls/</guid>
		<description><![CDATA[via Announcing .NET Framework 4.0 Sentient DSLs in action 10-4 Episode 14: Sentient DSLs Write the code that you think makes sense, and allow the application to create itself. Coding should be fun, and most importantly, it should be easy.]]></description>
			<content:encoded><![CDATA[<p>via <a href="http://lostintangent.com/2009/04/01/announcing-net-framework-40-sentient-dsls/">Announcing .NET Framework 4.0 Sentient DSLs</a></p>
<p>in action <a href="http://channel9.msdn.com/shows/10-4/10-4-Episode-14-Sentient-DSLs/">10-4 Episode 14: Sentient DSLs</a></p>
<blockquote><p>Write the code that you think makes sense, and allow the application to create itself. Coding should be fun, and most importantly, it should be easy.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dougfinke.com/blog/index.php/2009/05/02/net-framework-40-sentient-dsls/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using M and the Oslo SDK to Build a WPF Animation DSL</title>
		<link>http://www.dougfinke.com/blog/index.php/2009/04/17/using-m-and-the-oslo-sdk-to-build-a-wpf-animation-dsl/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=using-m-and-the-oslo-sdk-to-build-a-wpf-animation-dsl</link>
		<comments>http://www.dougfinke.com/blog/index.php/2009/04/17/using-m-and-the-oslo-sdk-to-build-a-wpf-animation-dsl/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 23:16:10 +0000</pubDate>
		<dc:creator>Doug Finke</dc:creator>
				<category><![CDATA[DSL]]></category>
		<category><![CDATA[M]]></category>
		<category><![CDATA[Oslo]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://dougfinke.com/blog/index.php/2009/04/17/using-m-and-the-oslo-sdk-to-build-a-wpf-animation-dsl/</guid>
		<description><![CDATA[Jeffrey Juday has an article up on CodeGuru Here.]]></description>
			<content:encoded><![CDATA[<p>Jeffrey Juday has an article up on CodeGuru <a href="http://www.codeguru.com/csharp/csharp/cs_misc/designtechniques/article.php/c16043__1/">Here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dougfinke.com/blog/index.php/2009/04/17/using-m-and-the-oslo-sdk-to-build-a-wpf-animation-dsl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DSLs: The Good, the Bad and the Ugly</title>
		<link>http://www.dougfinke.com/blog/index.php/2009/04/11/dsls-the-good-the-bad-and-the-ugly/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=dsls-the-good-the-bad-and-the-ugly</link>
		<comments>http://www.dougfinke.com/blog/index.php/2009/04/11/dsls-the-good-the-bad-and-the-ugly/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 13:19:28 +0000</pubDate>
		<dc:creator>Doug Finke</dc:creator>
				<category><![CDATA[DSL]]></category>
		<category><![CDATA[OOPSLA]]></category>

		<guid isPermaLink="false">http://dougfinke.com/blog/index.php/2009/04/11/dsls-the-good-the-bad-and-the-ugly/</guid>
		<description><![CDATA[In this panel, recorded during OOPSLA 2008, the panelists talk about the benefits and drawbacks of using DSLs. http://www.infoq.com/presentations/Truth-about-DSL The panelists Kathleen Fisher AT&#38;T Labs Charles Consel University of Bordeaux and INRIA Gabor Karsai Vanderbilt University Marjan Mernik University of Maribor Juha-Pekka Tolvanen MetaCase Jeff Gray University of Alabama at Birmingham]]></description>
			<content:encoded><![CDATA[<p>In this panel, recorded during <a href="http://www.oopsla.org/oopsla2009/">OOPSLA</a> 2008, the panelists talk about the benefits and drawbacks of using DSLs.</p>
<p><a href="http://www.infoq.com/presentations/Truth-about-DSL">http://www.infoq.com/presentations/Truth-about-DSL</a></p>
<h3>The panelists </h3>
<table border="0" cellspacing="0" cellpadding="2" width="454">
<tbody>
<tr>
<td valign="top" width="201"><a href="http://www.research.att.com/viewPage.cfm?PageID=46">Kathleen Fisher</a></td>
<td valign="top" width="251">AT&amp;T Labs</td>
</tr>
<tr>
<td valign="top" width="201"><a href="http://phoenix.labri.fr/people/consel/">Charles Consel</a></td>
<td valign="top" width="251">University of Bordeaux and INRIA</td>
</tr>
<tr>
<td valign="top" width="201"><a href="http://w3.isis.vanderbilt.edu/gabor/">Gabor Karsai</a></td>
<td valign="top" width="251">Vanderbilt University</td>
</tr>
<tr>
<td valign="top" width="201"><a href="http://lpm.uni-mb.si/mernik/">Marjan Mernik</a></td>
<td valign="top" width="251">University of Maribor</td>
</tr>
<tr>
<td valign="top" width="201"><a href="http://www.metacase.com/blogs/jpt/blogView">Juha-Pekka Tolvanen</a></td>
<td valign="top" width="251"><a href="http://www.metacase.com/">MetaCase</a></td>
</tr>
<tr>
<td valign="top" width="201"><a href="http://www.cis.uab.edu/gray/">Jeff Gray</a> </td>
<td valign="top" width="251">University of Alabama at Birmingham</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.dougfinke.com/blog/index.php/2009/04/11/dsls-the-good-the-bad-and-the-ugly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
