<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:rawvoice="http://www.rawvoice.com/rawvoiceRssModule/"
	>
<channel>
	<title>Comments on: Episode 119: DSLs in Practice with JP Tolvanen</title>
	<atom:link href="http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/</link>
	<description>The Podcast for Professional Software Developers</description>
	<lastBuildDate>Tue, 14 May 2013 01:48:59 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	<item>
		<title>By: mbrodersen</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-221</link>
		<dc:creator>mbrodersen</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-221</guid>
		<description><![CDATA[Hi Markus

Excellent show. One comment:

It is actually easy to handle the kind of &quot;emergency stop&quot; cases you talk about in DSL defined state machines. Simply use a hierarchical state machine and the &quot;emergency stop&quot; case can be handled by drawing a single transition.

For example, we are using an internal Ruby DSL to generate our state machines and can do your example like this:
&lt;code&gt;
state :BootState
  if_true :Emergency =&gt; :EmergencyState
  state :NormalState
  end
  state :OtherState
  end
  ...
  state :EmergencyState
  end
end
&lt;/code&gt;
]]></description>
		<content:encoded><![CDATA[<p>Hi Markus</p>
<p>Excellent show. One comment:</p>
<p>It is actually easy to handle the kind of &#8220;emergency stop&#8221; cases you talk about in DSL defined state machines. Simply use a hierarchical state machine and the &#8220;emergency stop&#8221; case can be handled by drawing a single transition.</p>
<p>For example, we are using an internal Ruby DSL to generate our state machines and can do your example like this:<br />
<code><br />
state :BootState<br />
  if_true :Emergency => :EmergencyState<br />
  state :NormalState<br />
  end<br />
  state :OtherState<br />
  end<br />
  ...<br />
  state :EmergencyState<br />
  end<br />
end<br />
</code></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Markus</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-222</link>
		<dc:creator>Markus</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-222</guid>
		<description><![CDATA[Hi,

yes, I am of couse aware of composite states, but I wanted to illustrate the use of model transformations in general. Also, depending on the meta model you have to work with, you might not have the ability to use comoposite states; I know a couple of systems where people did not include composite states in their meta model &quot;to keep it simple&quot;.

But I guess I should have made this explicit in the podcast.

Thanks for your feedback!
Markus]]></description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>yes, I am of couse aware of composite states, but I wanted to illustrate the use of model transformations in general. Also, depending on the meta model you have to work with, you might not have the ability to use comoposite states; I know a couple of systems where people did not include composite states in their meta model &#8220;to keep it simple&#8221;.</p>
<p>But I guess I should have made this explicit in the podcast.</p>
<p>Thanks for your feedback!<br />
Markus</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: The0retico</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-224</link>
		<dc:creator>The0retico</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-224</guid>
		<description><![CDATA[Hi,
I found one interesting example of m2M transformation as optimization and it applies very good to you Microwave tutorial. Let&#039;s consider you would have a loop transition in your model. It will produce unnecessary code for your microwave, because e.g. when you are at stop state you don&#039;t need anything to happen when the stop button is pushed. So it would be nice to have a transformation which will remove all loop transitions. Of course you could have such a constraint, however it won&#039;t be so flexible as transformation and it won&#039;t really match the metamodel - the state machine, which can have loops when necessary. So this transformation can be a nice option used when needed and I think it cannot be reasonably replaced by something else.
What is your opinion?]]></description>
		<content:encoded><![CDATA[<p>Hi,<br />
I found one interesting example of m2M transformation as optimization and it applies very good to you Microwave tutorial. Let&#8217;s consider you would have a loop transition in your model. It will produce unnecessary code for your microwave, because e.g. when you are at stop state you don&#8217;t need anything to happen when the stop button is pushed. So it would be nice to have a transformation which will remove all loop transitions. Of course you could have such a constraint, however it won&#8217;t be so flexible as transformation and it won&#8217;t really match the metamodel &#8211; the state machine, which can have loops when necessary. So this transformation can be a nice option used when needed and I think it cannot be reasonably replaced by something else.<br />
What is your opinion?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: The0retico</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-225</link>
		<dc:creator>The0retico</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-225</guid>
		<description><![CDATA[I am not experienced, so I am asking. What is more effective - creating or modifiying a metamodel for something specific or using prooven metamodel and create a M2M transformation? When I read some MD* books and articles I always tought that metamodel should be something standardized or at least very well designed to be as universal as possible(in general or in the specific domain) and transformations should be easy to develop. So how is it in real world? Why should be this approach worse?]]></description>
		<content:encoded><![CDATA[<p>I am not experienced, so I am asking. What is more effective &#8211; creating or modifiying a metamodel for something specific or using prooven metamodel and create a M2M transformation? When I read some MD* books and articles I always tought that metamodel should be something standardized or at least very well designed to be as universal as possible(in general or in the specific domain) and transformations should be easy to develop. So how is it in real world? Why should be this approach worse?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: The0retico</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-230</link>
		<dc:creator>The0retico</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-230</guid>
		<description><![CDATA[I am a student of computer science and I am working on my bachelor&#039;s work, which should be about mdsd. I am really new to this topis, but it is very interesting for me. I see the power of M2M transformations in the possibility to optimize the models, however no real practical example comes to my mind. Do you agree? Can you come up with some example?]]></description>
		<content:encoded><![CDATA[<p>I am a student of computer science and I am working on my bachelor&#8217;s work, which should be about mdsd. I am really new to this topis, but it is very interesting for me. I see the power of M2M transformations in the possibility to optimize the models, however no real practical example comes to my mind. Do you agree? Can you come up with some example?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jpt</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-231</link>
		<dc:creator>jpt</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-231</guid>
		<description><![CDATA[In DSM, the language knows about the domain you are working - microwave applications in your example case. This means that the modeling language would not be the plain state machine. It would not allow loops in the models - or at least shows immediately errors if such are specified. This is much better than M2M as now developers get feedback immediately at modeling time (cheaper and safer in terms of error prevention) and there is no need to run model transformations creating copies of the partly the same ”thing”.

Your question on what are the places for using M2M is still valid. In my opinion often people are looking for M2M simply because the tools in use have limited functionality, e.g. need to combine data from several individual files.]]></description>
		<content:encoded><![CDATA[<p>In DSM, the language knows about the domain you are working &#8211; microwave applications in your example case. This means that the modeling language would not be the plain state machine. It would not allow loops in the models &#8211; or at least shows immediately errors if such are specified. This is much better than M2M as now developers get feedback immediately at modeling time (cheaper and safer in terms of error prevention) and there is no need to run model transformations creating copies of the partly the same ”thing”.</p>
<p>Your question on what are the places for using M2M is still valid. In my opinion often people are looking for M2M simply because the tools in use have limited functionality, e.g. need to combine data from several individual files.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: The0retico</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-232</link>
		<dc:creator>The0retico</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-232</guid>
		<description><![CDATA[I agree with you, but when we see the statemachine as a metamodel which is fixed and is our domain and micwave is a special case modelled, then it dowsn&#039;t make sencse to put such a constrint in metamodel, because in our domain(finite state machines) we will need loops as well. Consider we will be creating a machine accepting e.g. sme source code and when you come at a comment, you want to stay in &quot;ignore state&quot; so you need loop. Of course, if our domain were microwaves, then the constraint would be necessary, however, then the metamodel as it is now won&#039;t be sufficient.]]></description>
		<content:encoded><![CDATA[<p>I agree with you, but when we see the statemachine as a metamodel which is fixed and is our domain and micwave is a special case modelled, then it dowsn&#8217;t make sencse to put such a constrint in metamodel, because in our domain(finite state machines) we will need loops as well. Consider we will be creating a machine accepting e.g. sme source code and when you come at a comment, you want to stay in &#8220;ignore state&#8221; so you need loop. Of course, if our domain were microwaves, then the constraint would be necessary, however, then the metamodel as it is now won&#8217;t be sufficient.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mbrodersen</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-234</link>
		<dc:creator>mbrodersen</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-234</guid>
		<description><![CDATA[Your comment Markus makes me think that &quot;model transformations&quot; are simply DSL&#039;s or model generators that generate models instead of code? Then &quot;model transformations&quot; aren&#039;t really a special case.

For example, a DSL that generate UML models would then be a &quot;model transformation&quot;?

Cheers
Morten]]></description>
		<content:encoded><![CDATA[<p>Your comment Markus makes me think that &#8220;model transformations&#8221; are simply DSL&#8217;s or model generators that generate models instead of code? Then &#8220;model transformations&#8221; aren&#8217;t really a special case.</p>
<p>For example, a DSL that generate UML models would then be a &#8220;model transformation&#8221;?</p>
<p>Cheers<br />
Morten</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jpt</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-235</link>
		<dc:creator>jpt</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-235</guid>
		<description><![CDATA[I don’t see any reason to fix to one metamodel only. There is already now several dialects of state machines (that do not focus to any particular problem domain). Taking then the DSL view, we can have a version fitting to ”microwave” domain that prevents loops and other language (basically a metamodel with different concepts and constraints) that addresses the needs of another domain. Tools should allow defining these metamodels and related generators cost effectively (read: hours or days). Actually, one implemenatiton of state machine I used just recently is available here: http://www.metacase.com/blogs/jpt/blogView?showComments=true&amp;entry=3405685238, covering the metamodel, notation and generators.]]></description>
		<content:encoded><![CDATA[<p>I don’t see any reason to fix to one metamodel only. There is already now several dialects of state machines (that do not focus to any particular problem domain). Taking then the DSL view, we can have a version fitting to ”microwave” domain that prevents loops and other language (basically a metamodel with different concepts and constraints) that addresses the needs of another domain. Tools should allow defining these metamodels and related generators cost effectively (read: hours or days). Actually, one implemenatiton of state machine I used just recently is available here: <a href="http://www.metacase.com/blogs/jpt/blogView?showComments=true&#038;entry=3405685238" rel="nofollow">http://www.metacase.com/blogs/jpt/blogView?showComments=true&#038;entry=3405685238</a>, covering the metamodel, notation and generators.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Markus</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-236</link>
		<dc:creator>Markus</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-236</guid>
		<description><![CDATA[Things are quite different in M2M. You need to create objects as opposed to text, and you have to care about object identity.

Of couse, you can code-generate the serialization format of a model - hence you can emulate a M2M via a code generator.

But real M2M, with a suitable language, is more productive.
]]></description>
		<content:encoded><![CDATA[<p>Things are quite different in M2M. You need to create objects as opposed to text, and you have to care about object identity.</p>
<p>Of couse, you can code-generate the serialization format of a model &#8211; hence you can emulate a M2M via a code generator.</p>
<p>But real M2M, with a suitable language, is more productive.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mbrodersen</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-239</link>
		<dc:creator>mbrodersen</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-239</guid>
		<description><![CDATA[That&#039;s interesting Marcus. So the advantage is that you can operate on objects instead of text and the disadvantage is that you have to work with and learn the M2M language.

Having said that, assuming most tools can import and export XML, it would be fairly easy to load XML files into a dynamic language (say Ruby) and generate internal objects for direct manipulation and transformation. Then you would get the benefit of working with objects while staying in a general purpose language. No need to learn a separate M2M language.

Morten
]]></description>
		<content:encoded><![CDATA[<p>That&#8217;s interesting Marcus. So the advantage is that you can operate on objects instead of text and the disadvantage is that you have to work with and learn the M2M language.</p>
<p>Having said that, assuming most tools can import and export XML, it would be fairly easy to load XML files into a dynamic language (say Ruby) and generate internal objects for direct manipulation and transformation. Then you would get the benefit of working with objects while staying in a general purpose language. No need to learn a separate M2M language.</p>
<p>Morten</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mbrodersen</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-240</link>
		<dc:creator>mbrodersen</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-240</guid>
		<description><![CDATA[I wonder if M2M is really only needed when using text template based code generation?

If you are writing a DSL in a general purpose language &lt;strong&gt;without&lt;/strong&gt; using text templates, you already have the full power of a general purpose language to do optimizations, transformations etc. There would be no point in adding a M2M step.

But I can see that a M2M step would be needed if you are using a text template based tool. Text based templates limits what your generator can do.

Morten
]]></description>
		<content:encoded><![CDATA[<p>I wonder if M2M is really only needed when using text template based code generation?</p>
<p>If you are writing a DSL in a general purpose language <strong>without</strong> using text templates, you already have the full power of a general purpose language to do optimizations, transformations etc. There would be no point in adding a M2M step.</p>
<p>But I can see that a M2M step would be needed if you are using a text template based tool. Text based templates limits what your generator can do.</p>
<p>Morten</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jpt</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-241</link>
		<dc:creator>jpt</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-241</guid>
		<description><![CDATA[In my opinion, domain-specific languages should generally be used whenever possible as they normally produce better results than general-purpose langauges. If we apply e.g. UML we usually don’t raise the level of abstraction, can’t prevent errors as UML don’t know about any particular domain, and the possibilities for code generation are usually limited. Perhaps one reason why people are looking M2M is that the the original source metamodel was already poorly suited for the task.

Your question on cost efficiency is highly relevant and we wrote whole chapter on economics side in our book on DSM (http://dsmbook.com/toc.html). The cost efficiency depends usually on the repetition: how many developers, number of products/product versions or customization projects will be there? Sometimes another view to cost efficiency is looking the value of domain experts being able to make the ”development” work. Both of these kinds of things can be usually estimated and calculated well enough to make a decision. 

Based on our experience, language definition (metamodel, notation, editors) takes almost always less time than making the generator/transformation. So if you have an existing metamodel (I can’t say UML to be proven metamodel :-) you may need several transformations and finally still need to develop the generator. Making M2M based on universal metamodels is usually also costly since the source model contains errors and is incomplete and those need to be checked in relation to M2M. Otherwise we are transforming models with errors. By placing these rules directly to the language (DSL rather than universal/general-purpose) we can prevent errors to happen already early on and guide developers on making the specifications. 

One part of the cost-efficiency is tools used to create languages, transformations and generators. Few years ago at OOP conference a German tool developer company told that it took 25 man-years to develop UML tool with Eclipse EMF. Obviously, that kind of figure does not make the creation of modeling editors cost effective for most organizations. But what if you could develop the same kind of UML tooling in one man-month? So tools used may make the calculation of cost-efficiency to look quite different. ]]></description>
		<content:encoded><![CDATA[<p>In my opinion, domain-specific languages should generally be used whenever possible as they normally produce better results than general-purpose langauges. If we apply e.g. UML we usually don’t raise the level of abstraction, can’t prevent errors as UML don’t know about any particular domain, and the possibilities for code generation are usually limited. Perhaps one reason why people are looking M2M is that the the original source metamodel was already poorly suited for the task.</p>
<p>Your question on cost efficiency is highly relevant and we wrote whole chapter on economics side in our book on DSM (<a href="http://dsmbook.com/toc.html" rel="nofollow">http://dsmbook.com/toc.html</a>). The cost efficiency depends usually on the repetition: how many developers, number of products/product versions or customization projects will be there? Sometimes another view to cost efficiency is looking the value of domain experts being able to make the ”development” work. Both of these kinds of things can be usually estimated and calculated well enough to make a decision. </p>
<p>Based on our experience, language definition (metamodel, notation, editors) takes almost always less time than making the generator/transformation. So if you have an existing metamodel (I can’t say UML to be proven metamodel <img src='http://www.se-radio.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  you may need several transformations and finally still need to develop the generator. Making M2M based on universal metamodels is usually also costly since the source model contains errors and is incomplete and those need to be checked in relation to M2M. Otherwise we are transforming models with errors. By placing these rules directly to the language (DSL rather than universal/general-purpose) we can prevent errors to happen already early on and guide developers on making the specifications. </p>
<p>One part of the cost-efficiency is tools used to create languages, transformations and generators. Few years ago at OOP conference a German tool developer company told that it took 25 man-years to develop UML tool with Eclipse EMF. Obviously, that kind of figure does not make the creation of modeling editors cost effective for most organizations. But what if you could develop the same kind of UML tooling in one man-month? So tools used may make the calculation of cost-efficiency to look quite different. </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jpt</title>
		<link>http://www.se-radio.net/2008/12/episode-119-dsls-in-practice-with-jp-tolvanen/#comment-242</link>
		<dc:creator>jpt</dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">#comment-242</guid>
		<description><![CDATA[I think the relevant question here is who and how many developers need to learn “the new stuff”. With external DSLs (where M2M stuff is often related) only one person needs to learn the generator/transformation language. With internal/embedded languages developers can continue to use the familiar language, but then comes the question on scalability: how to prevent people to apply the basic host language constructs when better abstraction is available.

Still, I wonder what is the problem M2M aims to solve? In the podcast we agreed on at least one: there is already a generator and we transform models to the structure/format it expects. A generalization of this is the need to integrate tools (usually one direction only) based on different metamodels.]]></description>
		<content:encoded><![CDATA[<p>I think the relevant question here is who and how many developers need to learn “the new stuff”. With external DSLs (where M2M stuff is often related) only one person needs to learn the generator/transformation language. With internal/embedded languages developers can continue to use the familiar language, but then comes the question on scalability: how to prevent people to apply the basic host language constructs when better abstraction is available.</p>
<p>Still, I wonder what is the problem M2M aims to solve? In the podcast we agreed on at least one: there is already a generator and we transform models to the structure/format it expects. A generalization of this is the need to integrate tools (usually one direction only) based on different metamodels.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
