<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Generative Software Corporate Blog</title>
	<atom:link href="http://generativesoftware.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://generativesoftware.wordpress.com</link>
	<description>The World of model-driven Software Development</description>
	<lastBuildDate>Thu, 04 Mar 2010 14:03:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='generativesoftware.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Generative Software Corporate Blog</title>
		<link>http://generativesoftware.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://generativesoftware.wordpress.com/osd.xml" title="Generative Software Corporate Blog" />
	<atom:link rel='hub' href='http://generativesoftware.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Easy Modeling and Smart Code Generation</title>
		<link>http://generativesoftware.wordpress.com/2010/03/04/easy-modeling-and-smart-code-generation/</link>
		<comments>http://generativesoftware.wordpress.com/2010/03/04/easy-modeling-and-smart-code-generation/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 13:19:40 +0000</pubDate>
		<dc:creator>Marcus Munzert</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Model-Driven Development]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[MDSD]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://generativesoftware.wordpress.com/?p=270</guid>
		<description><![CDATA[Since many years, MDSD (model-driven software development) and closely related topics are regularly found in magazines, books, on conferences and in forum discussions. The application of MDSD hasn&#8217;t become mainstream, though. If you speak to developers who use or develop with the Eclipse Modeling Project, naturally, you will hear the statement &#8220;modeling is alive&#8221;. However, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=270&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Since many years, MDSD (model-driven software development) and closely related topics are regularly found in magazines, books, on conferences and in forum discussions. The application of MDSD hasn&#8217;t become mainstream, though. If you speak to developers who use or develop with the <a href="http://www.eclipse.org/modeling/" target="_blank">Eclipse Modeling Project</a>, naturally, you will hear the statement <em>&#8220;modeling is alive&#8221;</em>. However, there are a lot of developers &#8211; if not the majority &#8211; who <a href="http://www.modeldrivensoftware.net/forum/topics/how-to-make-mdsd-more" target="_blank">neither do modeling nor generate code</a> (or interpret models). By the way: commencing in March 2010 Generative Software and the <a href="http://www.fzi.de/" target="_blank">FZI</a> are going to <a href="http://www.mdsd-umfrage.de" target="_blank">run an online-survey on the topic MDSD (in German only)</a>. Amongst others it has the goal to find out, how many software developers actively use MDSD in one or the other form.</p>
<p>For MDSD there are a lot of <span id="more-270"></span>modeling options and modeling tools available. You can do</p>
<ul>
<li>textual modeling with a stand-alone modeling language (aka external DSL)</li>
<li>graphical modeling with UML</li>
<li>graphical modeling without UML</li>
<li>modeling with a general purpose programming language (aka internal DSL)</li>
<li>tabular modeling (kind of a spread sheet)</li>
<li>tree structured modeling (XML for instance)</li>
</ul>
<p>For the generation part there are also a lot of tools available to do the job. Most of them apply a template approach where you express generation logic with the help of a template language.</p>
<p>Looking at how many years the model-driven approach for software development exists &#8211; <a href="http://en.wikipedia.org/wiki/Computer-aided_software_engineering" target="_blank">CASE-tools in the 1990ies</a> and <a href="http://www.sofismo.ch/staticPages/unternehmen/hypekurve.html" target="_blank">MDA/MDSD since 2000</a> &#8211; and knowing how many different tools there were available on the market &#8211; and are not anymore &#8211; one may say: <em>&#8220;MDSD has turned out not to fulfill its promises&#8221;</em>. I would rather say: <em>&#8220;It has been brought back down to earth&#8221;</em>.</p>
<p>Let me try to outline some critical aspects of model-driven software development. By doing so you may get an idea of how MDSD, in many cases, can easily work when you do the following:</p>
<ul>
<li>use an API-based, component-oriented, open source code generation tool that is integrated well into your IDE &#8211; <a href="http://www.jenerateit.org" target="_blank">JenerateIT</a> is one example</li>
<li>for your modeling tasks and for the development of generation logic, use the general purpose programming language that you anyway use for your software under development</li>
<li>re-use and extend existing meta-models and generation logic that is provided by the community</li>
</ul>
<h3>Costs for MDSD Tools</h3>
<p>There were and are modeling and generation tools out there that cost a lot of money. While a few of those tools may be worth the money, there are also lots of other tools that are open source and are of value. Ideally, there is a tool that comes with no licensing costs and at the same time doesn&#8217;t require a lot of effort to learn and comprehend how it works and how it should be used and adapted.</p>
<p>It is easy to find out whether you can use a tool without licensing costs. It is much more difficult, though, to find out, which additional, hidden costs are involved in using such a tool.</p>
<p>As a matter of fact, if you use Java (or another object-oriented programming language) as your meta-meta-model and use your IDE as modeling tool, you do not have to pay (additional) money for a modeling tool. Also, you do not have to spend additional efforts for installation, set-up and maintenance of a modeling tool.<br />
Doing so does not limit you to use your IDE as modeling tool. You are still free to add another modeling tool to your MDSD tool-landscape. In that scenario, a model-to-model transformation converts the model (created with the new tool) to a model that conforms to the meta-model that is understood by your existing generation logic.</p>
<h3>Quick and smooth Introduction of MDSD</h3>
<p>When you start applying MDSD, you are confronted with the following tasks.</p>
<ul>
<li>install and configure modeling and generation tool</li>
<li>learn how to use modeling tool</li>
<li>learn how to use generation tool</li>
<li>learn how to design and implement modeling language</li>
<li>design of modeling language</li>
<li>implement modeling language</li>
<li>learn how to develop generation logic</li>
<li>develop generation logic</li>
<li>add generation steps to your continuous integration infrastructure</li>
<li>create and maintain a reference model for the development and testing of your generation logic</li>
<li>develop unit tests for generation logic</li>
</ul>
<p>You do not only have to handle those tasks once. There also need to be people who are responsible for some of those tasks, not only at the begining of a project but constantly. The sheer number of tasks together with the uncertainty on what risks and efforts are involved with them, acts as a deterrent.</p>
<p>By using your IDE as modeling tool and using a general purpose programming language as the language to develop generation logic, you get rid of some of those points and risks and make some of them being not deterrent.</p>
<h3>Flexibility and Agility in Modeling and Generation</h3>
<p>This is a double-edged sword. You may find it helpful, if the modeling or generation tool limits the options to design a modeling language or to develop, maintain and control generation logic. On the other hand, you loose agility and flexibility due to those limitations. The more often you ask <em>&#8220;Can I do this or that with tool x?&#8221;</em> and you get answers like <em>&#8220;No&#8221;</em> or <em>&#8220;Yes, but you have to use a hack/trick&#8221;</em> or <em>&#8220;Yes, but it is slow&#8221;</em> or <em>&#8220;No, but in a year this may be possible&#8221;</em>, you should consider using a different tool or a different approach.</p>
<p>With regards to flexibility in code generation, the following features may be worth thinking about.</p>
<ul>
<li>non-sequential writing to an artifact, e.g. writing a Java import statement while writing a method body</li>
<li>from inside generation logic, having the ability to find/access objects that represent other artifacts that are being generated and objects that encapsulate other generation logic</li>
<li>back-tracking to easily find out and visualize, which part of generation logic is responsible for the writing of which part of an artifact</li>
<li>full access to the content of the previously generated artifact, including potential manual changes therein</li>
</ul>
<p><a href="http://www.jenerateit.org" target="_blank">JenerateIT</a> is capable of doing all this &#8230; and more.</p>
<h3>Reuse and Encapsulation of Generation Logic</h3>
<p>Often it is difficult &#8211; if not impossible &#8211; to reuse existing generation logic. This is escpecially true when template-based generation is applied. When generation logic is implemented by means of an object-oriented general purpose programming language like for instance Java, support for reuse is built-in.</p>
<p>Reuse does not only mean that you may use existing generation logic for more than one project or more than one piece of software. It also means, that you do not need to repeat yourself when developing generation logic. Lets assume we generate several artifacts. How does the generation logic for artifact A know what is going to be written to artifact B? A basic solution may simply <em>know (by convention)</em>, what is getting written to artifact B. A more sophisticated solution, in a generation tool that uses not templates but an API to write generation logic, generation logic for artifact A would <em>find out</em>, what is getting written to B.</p>
<p>With the API approach, tasks like the following are getting easy to implement:</p>
<ul>
<li>find fully-qualified names of all Java classes that are going to be generated</li>
<li>find all internationalization files that are going to be generated</li>
<li>find the fully-qualified name of the class that holds data for data binding for a graphical user interface</li>
<li>find names of all files that are going to contain the online help</li>
</ul>
<p><a href="http://www.jenerateit.org" target="_blank">JenerateIT</a>&#8216;s API is capable of doing all this. The generation logic of <a href="http://www.generative-software.com/tools_gapp.php" target="_blank">gApp</a> makes extensive use of those capabilities.</p>
<h3>Flexible Models</h3>
<p>In MDSD a model is an instance of a meta-model. And a meta-model is described by means of a meta-meta-model. An <a href="http://de.wikipedia.org/wiki/Eclipse_Modeling_Framework" target="_blank">EMF</a> meta-model for instance consists of objects of type EClass, EAttribute, EPackage, etc. (all Ecore types). A meta-model created with <a href="http://www.metacase.com/products.html" target="_blank">MetaEdit+</a> consists of objects of type Graph, Object, Relationship, Role, Port and Property (<a href="http://www.metacase.com/support/45/manuals/mwb/Mw-1_1_1.html" target="_blank">GOPPRR</a>).</p>
<p>That&#8217;s all fine. However, what if you want to use (existing) data/information that has <em>not</em> been created by means of an MDSD modeling tool? You have to spend extra efforts to somehow transform that data/information to be available in a form that is based on Ecore, GOPPRR or whatever meta-meta-model you use for modeling.</p>
<p>Things become different when you use the Java language&#8217;s model as the meta-meta-model for your meta-models. With this, everything that can be read by means of Java <em>is</em> a model. Defining a meta-model then is equivalent with writing Java classes. Creating a model based on that meta-model is equivalent with creating instances of those Java classes. Your Java-IDE automatically turns into a modeling tool. All Java support in your IDE also supports your modeling tasks. No apprehension that your modeling tool will not be available on the market anymore or that it won&#8217;t be under further development.<br />
In addition to this, your knowledge and experience about the Java language and libraries and object-orientation (OOA/OOD/OOP) instantly can be leveraged. <a href="http://www.jenerateit.org" target="_blank">JenerateIT</a> fosters this way of modeling, while using models based on other formats like EMF, UML, XML, etc. is still possible and supported.</p>
<h3>Mixing generated and hand-crafted Code</h3>
<p>Most experts for MDSD say to generate at most 80% of your code is a realistic scenario. So you have at least 20% manually written code (note that <em>&#8220;manually written&#8221;</em> can also mean <em>&#8220;automatically created through your IDE&#8221;</em>). There are a few well-known solutions to mix generated with hand-written code.</p>
<ul>
<li><a href="http://www.research.ibm.com/designpatterns/pubs/gg.html" target="_blank">generation gap pattern</a></li>
<li>protected regions/areas/code (aka developer areas)</li>
<li>one-off targets &#8211; artifacts that will never be re-generated once their content has been manually modified (in fact that is a special case of protected regions/areas/code)</li>
</ul>
<p>While it is good to have those solutions, additional, more sophisticated, specialized solutions are required to efficiently and comfortably mix generated with manually written code. And those solutions do not require protected regions/areas/code.</p>
<ul>
<li>protect manual changes in a property file from being overwritten (e.g. for application internationalization)</li>
<li>merge manually added Java import statements with import statements that are being created by generation logic</li>
<li>protect manual changes in originally empty method bodies</li>
<li>protect manually added fields or methods of a Java class</li>
<li>&#8230; further specific solutions &#8230;</li>
</ul>
<p>Note that for those solutions to work, it is required that the content of previously generated artifacts are available during generation. And using a general purpose programming language to write generation logic makes it easy and straightforward to handle these things. <a href="http://www.jenerateit.org" target="_blank">JenerateIT</a> does exactly that.</p>
<h3>Integration in Development-Environment</h3>
<p>Some MDSD tools are stand-alone tools. Using those tools makes it difficult to integrate them into a software developer&#8217;s IDE. It is still possible to work with the tools and the IDE. But the acceptance of software developers may be low. Also, due to the fact that a stand-alone tool runs in a separate process, synchronization tasks have to be executed. And such tasks may have a negative effect on the development round-trip and generation performance.<br />
A better tooling solution is to have a modeling and generation environment, that is integrated in the IDE. And even better than this is a solution that provides the same modeling and generation support accross different IDEs for the same target platform (e.g. Eclipse, NetBeans and IntelliJ for the Java platform).</p>
<p><a href="http://www.jenerateit.org" target="_blank">JenerateIT</a> is well integrated into Eclipse. Integrations into NetBeans and IntelliJ are easy to accomplish since the core of JenerateIT is not dependent on any of those IDEs. This modularization also allows for running an Ant-based generation, for instance as part of the continuous integration process.</p>
<h3>Teamwork and Model-Partitioning</h3>
<p>One of the biggest challenges in the modeling part of MDSD is how to model in a team. Things like partitioning of models, model diffs, model versioning and model merge are not easy to accomplish. MDSD modeling tool providers typically have their proprietary solution to this problem. And that solution normally costs a lot of money.<br />
When you use textual modeling, no matter whether it is through internal DSLs on top of a general purpose programming language or through an external DSL (e.g. by using Eclipse <a href="http://www.eclipse.org/Xtext/" target="_blank">Xtext</a>), teamwork works the same way as teamwork in traditional software development works. Any version control tool that is capable to do versioning, diffing and merging of textual artifacts can be used to store the model. Open source examples for such tools are <a href="http://subversion.apache.org/" target="_blank">Apache Subversion</a> and <a href="http://github.com/" target="_blank">Git</a>.</p>
<h3>Conclusion</h3>
<p>Doing model-driven software development can be really easy, without the burden of complex theory and without a lot of new things to learn and digest. It is <em>not</em> necessary to completely bend your development environment and yourself. The biggest challenge that remains is to add at least two new levels to your thinking: meta-model and model, together with transformation/generation steps to get utilizable results. That&#8217;s the price you have to pay to gain a lot of power, flexibility and agility.</p>
<p>You may want to give the open source code generation tool <a href="http://www.jenerateit.org" target="_blank">JenerateIT</a> a try, to experience the simplicity of MDSD.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/generativesoftware.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/generativesoftware.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/generativesoftware.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/generativesoftware.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/generativesoftware.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/generativesoftware.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/generativesoftware.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/generativesoftware.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/generativesoftware.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/generativesoftware.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/generativesoftware.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/generativesoftware.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/generativesoftware.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/generativesoftware.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=270&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://generativesoftware.wordpress.com/2010/03/04/easy-modeling-and-smart-code-generation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/323543efb7ca870042ceaecf38155df0?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">marcusmunzert</media:title>
		</media:content>
	</item>
		<item>
		<title>Code Generation 2009 &#8211; Review</title>
		<link>http://generativesoftware.wordpress.com/2009/06/29/code-generation-2009-review/</link>
		<comments>http://generativesoftware.wordpress.com/2009/06/29/code-generation-2009-review/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 09:51:32 +0000</pubDate>
		<dc:creator>Marcus Munzert</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Model-Driven Development]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MDSD]]></category>

		<guid isPermaLink="false">http://generativesoftware.wordpress.com/?p=229</guid>
		<description><![CDATA[From 16th to 18th of June 2009, Code Generation 2009 conference was held in Cambridge, UK. It was the first time that I have been to that conference and it was a great experience for me. The event was very well organized. I want to say thank you to Mark Dalgarno and his team who [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=229&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>From 16th to 18th of June 2009, <a target="_blank" href="http://www.codegeneration.net/cg2009/">Code Generation 2009</a> conference was held in Cambridge, UK. It was the first time that I have been to that conference and it was a great experience for me. The event was very well organized. I want to say thank you to <a target="_blank" href="http://blog.software-acumen.com/">Mark Dalgarno</a> and his team who have managed to organize a beautiful event. Also I want to say thank you to all the speakers and sponsors. Whitout them the event wouldn&#8217;t have been possible. Almost all of the sessions that I attended were really interesting and informative. The weather was fine and the food was lovely, in contrast to a common prejudice. And I met a lot of interesting people, all sharing the same interest in model-driven software development. I definitely plan to visit Code Generation 2010 next year.</p>
<p>Here is a <a target="_blank" href="http://www.youtube.com/watch?v=OsKQeuCCSvg&amp;eurl=http%3A%2F%2Fwww%2Emodeldrivensoftware%2Enet%2Fvideo%2Fcode%2Dgeneration%2D2009%2Dclips&amp;feature=player_embedded">link to a video on youtube</a> that nicely summarizes the event.</p>
<p><img src="http://www.generative-software.com/img/news/code_generation_2009_03.jpg" alt="Code Generation 2009" /></p>
<p>A lot of attention was given to domain specific modelling, especially to the question of whether or when textual, graphical, tabular or form-based modelling is best suited for the modelling of software systems. The number of choices and quality of modelling tools seems to become bigger theese days. That&#8217;s good news since it makes it easier to find a modelling tool that is best suited to solve a given problem.</p>
<p>On the last conference day, I was speaking about <a target="_blank" href="http://www.codegeneration.net/cg2009/sessioninfo.php?session=13">Legacy Application Modernization &#8211; Experiences in a real-world MDA/MDSD Project</a>. The people in the audience were asking quite some questions that I was happy to answer thoroughly. One listener had approached me after my talk and we had a fruitful discussion on modelling and code generation.</p>
<p>Last but not least, I took the chance to collect new ideas through the course of the conference to improve our own <a target="_blank" href="http://www.generative-software.com/jenerateit.php">tools for model-driven software development</a>. Those ideas are already part of our release planning process.</p>
<p>See you next year in Cambridge. Code Generation 2010 surely has something for you, too.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/generativesoftware.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/generativesoftware.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/generativesoftware.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/generativesoftware.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/generativesoftware.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/generativesoftware.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/generativesoftware.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/generativesoftware.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/generativesoftware.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/generativesoftware.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/generativesoftware.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/generativesoftware.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/generativesoftware.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/generativesoftware.wordpress.com/229/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=229&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://generativesoftware.wordpress.com/2009/06/29/code-generation-2009-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/323543efb7ca870042ceaecf38155df0?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">marcusmunzert</media:title>
		</media:content>

		<media:content url="http://www.generative-software.com/img/news/code_generation_2009_03.jpg" medium="image">
			<media:title type="html">Code Generation 2009</media:title>
		</media:content>
	</item>
		<item>
		<title>Domain Specific Languages &#8211; another Babylonian Language Confusion?</title>
		<link>http://generativesoftware.wordpress.com/2009/03/23/too-many-languages/</link>
		<comments>http://generativesoftware.wordpress.com/2009/03/23/too-many-languages/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 10:55:43 +0000</pubDate>
		<dc:creator>Marcus Munzert</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Model-Driven Development]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[MDSD]]></category>

		<guid isPermaLink="false">http://generativesoftware.wordpress.com/?p=92</guid>
		<description><![CDATA[I just have googled for &#8220;domain specific language&#8221; (DSL) and I got more than 13 millions hits. Not least from this you can see that the issue domain specific language is a popular issue. Using one or more DSLs for the development of software might bring in additional productivity features and new capabilities. However, the more [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=92&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just have googled for &#8220;<em>domain specific language</em>&#8221; (DSL) and I got more than 13 millions hits. Not least from this you can see that the issue <a href="http://en.wikipedia.org/wiki/Domain-specific_language" target="_blank">domain specific language</a> is a popular issue. Using one or more DSLs for the development of software might bring in additional productivity features and new capabilities. However, the more different languages you use in your development process, the more skills the developers need. Also, the developers more often have to switch between different languages in their minds. There is an analogy for this in real life: <span id="more-92"></span>imagine you had to use three or more different natural languages at the same time. That created a lot of stress and difficulties, unless you were a mastermind in languages.</p>
<p>Martin Fowler is currently working on a book on DSLs. On the web you can find his <a href="http://martinfowler.com/dslwip/" target="_blank">Work In Progress</a> on the book. The sheer quantity of information that you find there gives you an idea of this issue&#8217;s complexity.</p>
<p><strong>External versus Internal DSL</strong></p>
<p>Please note for the further reading, that there is a difference between an internal and an external DSL. On <a href="http://www.javaworld.com/" target="_blank">JAVAWORLD</a>, Venkat Subramaniam gives a <a href="http://www.javaworld.com/javaworld/jw-08-2008/jw-08-dsls-in-java-3.html" target="_blank">short and comprehensible explanation</a> of the difference between an internal and an external DSL:</p>
<blockquote><p>Internal DSLs ride on a host language, so an internal DSL&#8217;s syntax is both influenced and restricted by the host language. External DSLs can be built from the ground up but doing so requires mental muscle, as well as a very good parser.</p></blockquote>
<p>As a developer you normally are confronted with situations where you have to use one or more external DSLs at the same time, besides your general purpose programming language. Even if you don&#8217;t do model-driven software development, this is true, for instance when you write SQL statements in your program. SQL is an external DSL for the domain &#8220;create, read, update and delete persistent data&#8221;.</p>
<p>In his <a href="http://www.jetbrains.com/mps/docs/Language_Oriented_Programming.pdf" target="_blank">article on Language Oriented Programming</a>, Sergey Dmitriev (from JetBrains) compares class libraries with DSLs:</p>
<blockquote>
<p align="left"><em>&#8230; You might say that a class library corresponds to some domain. Lo and behold, we see the connection. Class libraries are wannabe DSLs! &#8230;</em></p>
</blockquote>
<p>Class libraries in the broadest sense represent internal DSLs.  Now, the question is: are we better off using external DSLs or using internal DSLs? In terms of SQL you could use the promising open source framework <a href="https://squill.dev.java.net" target="_blank">Squill</a> to convert the external DSL SQL into an internal DSL in order to simplify coding and to make the code more readable.</p>
<p>In the aforementioned &#8220;Work in Progress&#8221; of Martin Fowler&#8217;s book, <a href="http://martinfowler.com/dslwip/VersusExternalInternal.html" target="_blank">he elaborates</a> on when it is better to use internal DSLs and when to use external DSLs.</p>
<p><strong>Choose carefully</strong></p>
<p>There are a lot of tools available to design and define your own external DSLs. Like for instance <a title="Meta Programming System" href="http://www.jetbrains.com/mps" target="_blank">Meta Programming System</a>, <a href="http://www.metacase.com/products.html" target="_blank">MetaEdit+</a>, <a href="http://www.antlr.org/" target="_blank">ANTLR</a>, <a href="http://wiki.eclipse.org/Xtext" target="_blank">Xtext</a>, to mention some well known of them.</p>
<p>With feature-rich DSL tools at hand, you could be swift to invent new external DSLs. Eventually, you will have to carefully choose the external DSLs to be used and possibly invented for your software development. The same holds true for the DSL tool to be used. The added complexity potentially could outweigh the gained expressiveness. Applied properly, using DSLs boosts productivity and moreover bridges the gap between software developers and those persons who provide requirements. Then DSLs don&#8217;t lead to a Babylonian Language Confusion but rather to the opposite: they help all people who are involved in the analysis, design and development of a software system to better understand each other.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/generativesoftware.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/generativesoftware.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/generativesoftware.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/generativesoftware.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/generativesoftware.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/generativesoftware.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/generativesoftware.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/generativesoftware.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/generativesoftware.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/generativesoftware.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/generativesoftware.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/generativesoftware.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/generativesoftware.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/generativesoftware.wordpress.com/92/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=92&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://generativesoftware.wordpress.com/2009/03/23/too-many-languages/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/323543efb7ca870042ceaecf38155df0?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">marcusmunzert</media:title>
		</media:content>
	</item>
		<item>
		<title>OOP 2009</title>
		<link>http://generativesoftware.wordpress.com/2009/02/05/oop-2009/</link>
		<comments>http://generativesoftware.wordpress.com/2009/02/05/oop-2009/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 20:54:53 +0000</pubDate>
		<dc:creator>Marcus Munzert</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Conference]]></category>

		<guid isPermaLink="false">http://generativesoftware.wordpress.com/?p=217</guid>
		<description><![CDATA[Last week I had been attending this year&#8217;s OOP conference in Munich, Germany. Loads of delegates had been attending the conference. The exhibition was fully booked in respect of available booths. Compared to the OOP 2008 I had the impression that this year&#8217;s exhibition was not as well attended. I learned some new things and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=217&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last week I had been attending this year&#8217;s OOP conference in Munich, Germany. Loads of delegates had been attending the conference. The exhibition was fully booked in respect of available booths. Compared to the OOP 2008 I had the impression that this year&#8217;s exhibition was not as well attended.<br />
I learned some new things and got a good overview on what&#8217;s hot in the IT business. Specifically the sessions held by <a href="http://www.metacase.com/" target="_blank">Juha-Pekka Tolvanen</a> (CEO of MetaCase) and by <a href="http://www.voelter.de/" target="_blank">Markus Völter</a> (independent researcher, consultant and coach for itemis AG Stuttgart) I found great.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/generativesoftware.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/generativesoftware.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/generativesoftware.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/generativesoftware.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/generativesoftware.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/generativesoftware.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/generativesoftware.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/generativesoftware.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/generativesoftware.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/generativesoftware.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/generativesoftware.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/generativesoftware.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/generativesoftware.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/generativesoftware.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=217&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://generativesoftware.wordpress.com/2009/02/05/oop-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/323543efb7ca870042ceaecf38155df0?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">marcusmunzert</media:title>
		</media:content>
	</item>
		<item>
		<title>OOP 2009 &#8211; Preview</title>
		<link>http://generativesoftware.wordpress.com/2009/01/21/oop-2009-preview/</link>
		<comments>http://generativesoftware.wordpress.com/2009/01/21/oop-2009-preview/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 16:09:14 +0000</pubDate>
		<dc:creator>Marcus Munzert</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Conference]]></category>

		<guid isPermaLink="false">http://generativesoftware.wordpress.com/?p=191</guid>
		<description><![CDATA[Next week I will be attending this year&#8217;s OOP conference in Munich, Germany. There are quite some interesting tracks that are related to model-driven software development and that I plan to take part in. Here is a shortlist. If you would like to meet me in person there, feel free to come up to me. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=191&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Next week I will be attending this year&#8217;s OOP conference in Munich, Germany. There are quite some interesting tracks that are related to model-driven software development and that I plan to take part in. Here is a shortlist. If you would like to meet me in person there, feel free to come up to me.<span id="more-191"></span></p>
<p><strong>- Monday, 26th of January -</strong></p>
<p><strong>Domain-Specific Modelling: Enabling full code generation<br />
(Juha-Pekka Tolvanen, MetaCase)</strong><br />
In this track I will get a good feeling for how easy it is to design, implement and use domain specific languages with the help of <a href="http://www.metacase.com/" target="_blank">MetaEdit+</a>. Models created by means of MetaEdit+ could be used by JenarateIT to generate something useful from them.<br />
At least as interesting for me, is to see, how the participants of that track manage to use the tool and the methodology. This way I can get a good idea on how easy or difficult it is, to use MetaEdit+ compared to similar tools.</p>
<p><strong>- Tuesday, 27th of January -</strong></p>
<p><strong>User-Interface Programming with external DSLs<br />
(Sven Efftinge, itemis)<br />
(Jan Köhnlein, itemis)</strong><br />
The presenters show how an existing application, based on Oracle-Forms, had been modernized by porting it to a Java solution. For the mapping of database tables to forms, an external DSL had been used, together with a project-specific IDE.<br />
I am curious to see, what the external DSL looks like and what the presenters will tell about how the developers managed to use the DSL and the model-driven development approach. Maybe I can learn something that can add to the <a href="http://www.generative-software.com" target="_blank">GS Solution Platform</a> and to the way the model-driven development approach can be propagated more easily.</p>
<p><strong>Architecture Models: When to talks about them, and when not to<br />
(Dan Cocks, Lockheed Martin Corporation)</strong><br />
I think in this track I will learn something on how to speak about modelling and models in situations where conversational partners are non-modellers and potentially have negative attitudes towards modelling.</p>
<p><strong>- Wednesday, 28th of January -</strong></p>
<p><strong>The seven deadly sins of UML modelling<br />
(Andreas Ditze, MID)</strong><br />
Getting to know more about problems that arise from doing UML modelling in an inefficient or unhelpful way will help me to convince people to rather use specialized DSLs or at least to prevent people from running into such problems.</p>
<p><strong>- Thursday, 29th of January -</strong></p>
<p><strong>Architecture as Language &#8211; Modelling of Architecture by means of textual DSLs<br />
(Markus Völter, itemis)</strong><br />
In combination with an architecture, a textual DSL is getting defined that supports that architecture. Models created with that DSL then can be automatically processed.<br />
I presume openArchitectureWare and <a href="http://wiki.eclipse.org/Xtext" target="_blank">xText</a> are presented here. To experience how xText is being used here will give me a better feeling for it. This way I can better assess, whether xText is a good choice for providing input models for <a href="http://www.generative-software.com" target="_blank">JenerateIT</a>.</p>
<p><strong>Model-driven Software Development &#8211; a practical Experience Report<br />
(Nicolas Cabanis, SYNLOGIC)</strong><br />
Reports on practical experiences gained in a real project are rare. All the more I have some expectations to learn something new about best practices. I am especially curious to see cause and effect in the context of the project environment that the presenter was working in.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/generativesoftware.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/generativesoftware.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/generativesoftware.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/generativesoftware.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/generativesoftware.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/generativesoftware.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/generativesoftware.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/generativesoftware.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/generativesoftware.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/generativesoftware.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/generativesoftware.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/generativesoftware.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/generativesoftware.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/generativesoftware.wordpress.com/191/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=191&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://generativesoftware.wordpress.com/2009/01/21/oop-2009-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/323543efb7ca870042ceaecf38155df0?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">marcusmunzert</media:title>
		</media:content>
	</item>
		<item>
		<title>Generate your Success</title>
		<link>http://generativesoftware.wordpress.com/2008/12/05/hello-world/</link>
		<comments>http://generativesoftware.wordpress.com/2008/12/05/hello-world/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 09:20:14 +0000</pubDate>
		<dc:creator>Marcus Munzert</dc:creator>
				<category><![CDATA[Anouncements]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Welcome to Generative Software&#8216;s corporate weblog. Topics around software development, in particular model-driven software development are covered here. In this weblog you will find entries written by people of Generative Software. An entry&#8217;s content represents the opinion of the person having contributed the entry.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=1&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Welcome to <strong><a href="http://www.generative-software.com" target="_blank">Generative Software</a></strong>&#8216;s corporate weblog. Topics around software development, in particular model-driven software development are covered here.</p>
<p>In this weblog you will find entries written by people of Generative Software. An entry&#8217;s content represents the opinion of the person having contributed the entry.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/generativesoftware.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/generativesoftware.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/generativesoftware.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/generativesoftware.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/generativesoftware.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/generativesoftware.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/generativesoftware.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/generativesoftware.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/generativesoftware.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/generativesoftware.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/generativesoftware.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/generativesoftware.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/generativesoftware.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/generativesoftware.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=generativesoftware.wordpress.com&amp;blog=5750682&amp;post=1&amp;subd=generativesoftware&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://generativesoftware.wordpress.com/2008/12/05/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/323543efb7ca870042ceaecf38155df0?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">marcusmunzert</media:title>
		</media:content>
	</item>
	</channel>
</rss>
