<?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>The Metalevel &#187; Code Generation</title>
	<atom:link href="http://pjmolina.com/metalevel/tag/code-generation/feed/" rel="self" type="application/rss+xml" />
	<link>http://pjmolina.com/metalevel</link>
	<description>Abstraction based levitation</description>
	<lastBuildDate>Mon, 26 Jul 2010 18:00:57 +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>Hello World with Essential, the video</title>
		<link>http://pjmolina.com/metalevel/2010/07/hello-world-with-essential/</link>
		<comments>http://pjmolina.com/metalevel/2010/07/hello-world-with-essential/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 15:19:47 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[mde]]></category>
		<category><![CDATA[mdsd]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=612</guid>
		<description><![CDATA[The Hello World sample is a nice starting point to show the syntax and capabilities of every new language. This test is also useful for code generators and Domain Specific Languages (DSLs) also as a proof of concept. Following this honorable tradition, I have created a video showing the capabilities of Essential: the tool I [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" style="margin-left: 10px;" title="Essential Logo" src="/img/LogoEssential300px.png" alt="Essential Logo" width="180" height="99" /></p>
<p>The <a title="Hello World" href="http://en.wikipedia.org/wiki/Hello_world_program" target="_blank">Hello World sample</a> is a nice starting point to show the syntax and capabilities of every new language. This test is also useful for code generators and Domain Specific Languages (DSLs) also as a proof of concept.</p>
<p>Following this honorable tradition, I have created a video showing the capabilities of <strong><a title="Essential" href="http://pjmolina.com/metalevel/essential/">Essential</a></strong>: the tool I am working on for doing agile Model Driven Development.</p>
<p>In this 10 minutes video you will get a general idea of the DSL the language provides to create:</p>
<ul>
<li>metamodels</li>
<li>models</li>
<li>templates</li>
<li>and control transformations</li>
</ul>
<p>In order to see the details, jump to Vimeo, activate the High Definition mode (HD) and set full screen (sorry embebed version is not good enough).</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="281" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=13587681&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="500" height="281" src="http://vimeo.com/moogaloop.swf?clip_id=13587681&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><a href="http://vimeo.com/13587681">Essential IDE &#8211; Hello World sample</a> from <a href="http://vimeo.com/user3817869">Pedro J. Molina</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>More info about it and 12 usage scenarios in the last Code Generation 2010 presentation about <a title="Tailored Code Generators" href="http://pjmolina.com/metalevel/2010/06/tailored-code-generators-at-cg2010/">Tailored Code Generators</a>.</p>
<p>Share your impressions!</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2010/07/hello-world-with-essential/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Language Workbench Competition 2011</title>
		<link>http://pjmolina.com/metalevel/2010/07/language-workbench-competition-2011/</link>
		<comments>http://pjmolina.com/metalevel/2010/07/language-workbench-competition-2011/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 20:02:45 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[language workbench]]></category>
		<category><![CDATA[lwc2011]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=617</guid>
		<description><![CDATA[Language Workbenches, as defined originally by Martin Fowler, are tools aiming to cope with DSL creation and code generation to increase the level of abstraction of software development. Currently, the main efforts on MDD, MDE, MDSD (model-driven-whatever you prefer&#8230;) are focused in the development of this kind of tools perceived as a hot research area for [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Language Workbenches</strong>, as defined originally by <a href="http://martinfowler.com/articles/languageWorkbench.html" target="_blank">Martin Fowler</a>, are tools aiming to cope with DSL creation and code generation to increase the level of abstraction of software development.</p>
<p>Currently, the main efforts on MDD, MDE, MDSD (model-driven-<em>whatever you prefer</em>&#8230;) are focused in the development of this kind of tools perceived as a hot research area for Software Engineering.</p>
<p>In this scenarion, Cambridge, at <a title="Code Generation 2010" href="http://www.codegeneration.net/cg2010/index.php">Code Generation 2010</a> was the perfect place for sparkling the idea of promoting a contest to show and compare the advances of different language workbenches.</p>
<p>The <strong><a title="Language Workbench Competition 2011" href="http://www.languageworkbenches.net/" target="_blank">Language Workbench Competition</a></strong> born with the objective to serve as a point of comparison between different tools in this exciting and fast moving area.</p>
<p>The competition is now open to the public. So anyone interested can enroll and implement the <a title="LWC2011 Challenge" href="http://www.delphino-consultancy.nl/lwc/LWCTask-1.0.pdf" target="_blank">proposed challenge</a> just published.</p>
<p>On the other hand, if you want to know more about Language Workbenches, modeling and code generation add this <a title="Language Workbench Competition" href="http://www.languageworkbenches.net/">page</a> to you bookmarks and come back in few months to see some proposals.</p>
<p>The promoters of the idea are: <a title="Markus Völter" href="http://www.voelter.de/" target="_blank">Markus Völter</a>, <a title="Eelco Visser" href="http://blog.eelcovisser.net/" target="_blank">Eelco Visser</a>, <a title="Steven Kelly" href="http://www.metacase.com/blogs/stevek/blogView" target="_blank">Steven Kelly</a>, <a title="Angelo Hulshout" href="http://www.hulshout.nl/" target="_blank">Angelo Hulshout</a>, <a title="Jos Warmer" href="http://www.modeldrivensoftware.net/profile/JosWarmer" target="_blank">Jos Warmer</a>, <a title="Bernhard Merkle" href="http://www.modeldrivensoftware.net/profile/BernhardMerkle" target="_blank">Bernhard Merkle</a>, <a title="Karsten Thoms" href="http://kthoms.wordpress.com/" target="_blank">Karsten Thoms</a> and <a title="Pedro J. Molina" href="http://pjmolina.com/metalevel/about/" target="_blank">myself</a>.</p>
<p>So this a <em>call to arms</em> but with sportsmanship!</p>
<p><a title="Angelo Hulshout" href="http://www.hulshout.nl/?p=491" target="_blank">Angelo</a> and <a title="Markus Völter" href="http://voelterblog.blogspot.com/2010/07/language-workbench-competition-2011.html" target="_blank">Markus</a> has already started the calling.</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2010/07/language-workbench-competition-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducing MDSD</title>
		<link>http://pjmolina.com/metalevel/2010/06/introducing-mdsd-in-cg2010/</link>
		<comments>http://pjmolina.com/metalevel/2010/06/introducing-mdsd-in-cg2010/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 07:51:09 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=595</guid>
		<description><![CDATA[My yesterday talk slides in Code Generation 2010 about Introducing Model Driven Software Development: CG2010 Introducing MDSD View more presentations from Pedro J. Molina.]]></description>
			<content:encoded><![CDATA[<p>My yesterday talk slides in <a title="Code Generation 2010" href="http://www.codegeneration.net/cg2010/index.php" target="_blank">Code Generation 2010</a> about <a title="Introducing MDSD" href="http://www.codegeneration.net/cg2010/sessioninfo.php?session=101" target="_blank">Introducing Model Driven Software Development</a>:</p>
<div id="__ss_4523046" style="width: 425px;"><strong><a title="CG2010 Introducing MDSD" href="http://www.slideshare.net/pjmolina/cg2010-introducing-mdsd">CG2010 Introducing MDSD</a></strong><object id="__sse4523046" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cg2010introducingmdsd-100617020657-phpapp02&amp;rel=0&amp;stripped_title=cg2010-introducing-mdsd" /><param name="name" value="__sse4523046" /><param name="allowfullscreen" value="true" /><embed id="__sse4523046" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cg2010introducingmdsd-100617020657-phpapp02&amp;rel=0&amp;stripped_title=cg2010-introducing-mdsd" name="__sse4523046" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/pjmolina">Pedro J. Molina</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2010/06/introducing-mdsd-in-cg2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Balancing Variability &amp; Commonality</title>
		<link>http://pjmolina.com/metalevel/2010/03/balancing-variability-commonality/</link>
		<comments>http://pjmolina.com/metalevel/2010/03/balancing-variability-commonality/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 21:53:45 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[commonality]]></category>
		<category><![CDATA[metamodeling]]></category>
		<category><![CDATA[variability]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=532</guid>
		<description><![CDATA[When creating a DSL (Domain Specific Language) one of the most important choices is to decide about what items in your domain are going to be considered variable, changeable and which ones are going to be considered fixed, carved in stone. The former need to be specified in your DSL, in your design or may [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/pinksherbet/233228813/sizes/l/"><img class="aligncenter" title="Free Child Walking on White Round Spheres Balance CC via Pink Sherbet at Pink Sherbet." src="http://farm1.static.flickr.com/93/233228813_ae74d9ec1d.jpg" alt="" width="500" height="229" /></a></p>
<p>When creating a DSL (Domain Specific Language) one of the most important choices is to decide about what items in your domain are going to be considered variable, changeable and which ones are going to be considered fixed, carved in stone.</p>
<p>The former need to be specified in your DSL, in your design or may be coded. The latter are considered immutable and will remain static for all your derived applications for ages.</p>
<p>Considering that everything is static it is obviously useless. On the contrary, considering every aspect variable drives to another no-end getting nothing tangible again as a result. Therefore, in the middle we will have to search for the virtue.</p>
<p>The main issue here is to study a domain and ponder between variable parts and fixed parts. It is not a trivial thing to do from the very beginning. Experience in DSL construction and specially, experience in the domain helps to train your smell, but there are not clear rules for it, nevertheless.</p>
<p>It is not only about knowing your requirements. It is about trying to predict how your requirements will change across time and what types of requirements have more likelihood and tendency to change.</p>
<h2>Adding variability</h2>
<p>A variable part could be, for example, the background color of your application. If so, you need to add syntax and semantics to your DSL to capture such property. Let’s say you can express somewhere in your specification:  <code>{ background-color = peach; }</code></p>
<p>We can select the peach color for app1, and may be ivory for app2.</p>
<p>However, nothing is for free and this freedom comes with the followings possible drawbacks:</p>
<ul>
<li>You need to increase the size of your language (DSL), editors, model checkers, compilers and code generation or interpreters.</li>
<li>Users have to provide a value for such property unless you have also provided a sensible default value in case of missing information.</li>
<li>Homogeneity across applications vanishes with respect to background-color. Now it’s a user choice (the one in control of the modeling tool).</li>
<li>Specs are more complex.</li>
</ul>
<h2>Adding commonality</h2>
<p>On the other hand, if you consider the background of your application should be always the same because you are following, for example, a user interface style guide then, the background color is a fixed issue. Its value is provided by design by a style guide, by an architect, or design choice and the user modeling has no control over it.</p>
<p>In this scenario, the DSL is smaller. No need to specify the background color, it is implicit, it is no included in the model/specification.</p>
<p>With this kind of choice, we are betting for standardization. A shared library, a runtime framework or an interpreter will take care of supplying the right color in the right moment.</p>
<ul>
<li>Users can not change the background color, specs are smaller.</li>
<li>Standardization is improved across applications.</li>
<li>User has no control on the feature.</li>
</ul>
<h2>But, what is the right choice?</h2>
<p>It depends. There is no right choice with the information given till the moment. To answer the question we need to consider if the background color is a fundamental feature in our domain and it is needed to be different from application to application or may be, on the contrary, the color should be used in an homogeneous way following a predefined style guide.</p>
<p>Again, the domain imposes the rules to follow. Studding the domain and its variability is crucial to create a consistent DSLs focused in gathering the key features of the domain in a model: <strong>the important and variable ones</strong>. The important and fixed ones must be also identified but they shouldn’t be included into the model, but into the framework or the runtime.</p>
<h2>Standards, policy assurance, compliance</h2>
<p>Everything related to standard procedures, compliance and in-house stile guidelines are first-class candidates for standardization. If done in that way, your developers will not have to remember all that weird standard and compliance rules when developing a specific artifact.</p>
<p>A code generator will provide the right value for them. It will do it silently, without errors neither oversights. All the boring code dedicated to plumbing applications like: naming guidelines, service publication, serialization, persistence, adapters, proxies, skeletons, stubs, DAO code are driven by strict standards and best practices and are natural candidates for strong automation by code generators.</p>
<p>Moreover, if the regulation or the standard changes, the change will have impact in the following assets:</p>
<ul>
<li>a single change to a framework will be enough</li>
<li>or a change to a code generator and then forcing a regeneration process and redeploy.</li>
</ul>
<p>In both cases, it is cheaper that manually reviewing a set of in-production applications.</p>
<p>For example, think about replacing your data-layer access code from a DAO pattern and SQL to an ORM based approach like Hibernate.</p>
<h2>Business Know-How</h2>
<p>The core of the business Know-How is the important and the variable parts we are interested in to be collected in a specification. Such features need to be modeled, and if possible, abstracted from the technology that will implement it.</p>
<p>If we do it in this way, the model can survive the current technology.</p>
<p>Why we could be interested in do it in such a way?</p>
<p><strong>Just because technology evolves like fashion.</strong> Today everyone likes red T-shirts, tomorrow blue jeans will be sublime! Basic, Cobol, C, Java, C#, Ruby… what is the next language to use in 5 years time?</p>
<p>Use your best bet, whatever platform better fulfills your requirements, but I it could be nice to see the business process surviving the technology. <img src='http://pjmolina.com/metalevel/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />   We don’t know in which direction, but technology will evolve, and will change for sure.</p>
<h2>Maintaining a language or a DSL</h2>
<p>When a DSL or a language needs a review you will be probably considering adding new features to the language.</p>
<p>Each new feature will increase the variability and increase the complexity of the language. Before deciding to add a new modeling feature make a cost/benefits analysis and double check that the valued added by the improvement is greater than the cost of implementing it.</p>
<p>I like to follow the golden rule proposed by <a title="Gordon S. Novak" href="http://userweb.cs.utexas.edu/users/novak/" target="_blank">Gordon S. Novak</a><strong> </strong>about automatic programming:</p>
<blockquote><p><em>“Automatic Programming is defined as the synthesis of a program from a specification. If automatic programming is to be useful, the specification must be smaller and easier to write than the program would be if written in a conventional programming language.”</em></p></blockquote>
<h2>Conclusion</h2>
<p>Whenever is possible:</p>
<ul>
<li><strong>Business Know-How</strong> should be captured by models, specs, DSLs.</li>
<li><strong>Technical Know-How</strong> should be captured by code generators, model interpreters, best practices and patterns.</li>
</ul>
<p>So, at the end of the day I like the following pair of quotes to sum up about what to include in a model:</p>
<ul>
<li>The Spanish writer <a title="Baltasar Gracián" href="http://en.wikipedia.org/wiki/Baltasar_Graci%C3%A1n" target="_blank">Baltasar Gracián</a> in the XVII century said <em>“Lo bueno si breve, dos veces bueno.”</em> (a literal translation from Spanish could be: <em>“Good things if brief, twice good.”</em>)</li>
<li>On the other side, <a title="Albert Einstein" href="http://en.wikipedia.org/wiki/Albert_Einstein" target="_blank">Albert Einstein</a> (XX century) counterpoints <em>“Things should be as simple as possible, but not simpler.”</em></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2010/03/balancing-variability-commonality/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Countdown for CG2010</title>
		<link>http://pjmolina.com/metalevel/2010/03/countdown-for-cg2010/</link>
		<comments>http://pjmolina.com/metalevel/2010/03/countdown-for-cg2010/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 21:07:24 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=524</guid>
		<description><![CDATA[The Programme for Code Generation 2010 has been published. This year Mark has invited me to give an introductory session to Model Driven Software Development (MDSD) oriented to begginers. Also, I will discuss in a second session about creating tailored code generators. See you in Cambridge in June!]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.codegeneration.net/cg2010/index.php"><img class="aligncenter" title="CG2010 Logo" src="http://www.codegeneration.net/cg2010/images/CG2010logo250x64.gif" alt="" width="250" height="64" /></a></p>
<p style="text-align: left;">The Programme for <a title="Code Generation 2010 Programme" href="http://www.codegeneration.net/cg2010/programme.php" target="_blank">Code Generation 2010</a> has been published.</p>
<p>This year <a title="Mark Dalgarno" href="http://blog.software-acumen.com/2010/03/13/cg2010-program-launched/" target="_blank">Mark</a> has invited me to give an introductory session to <a href="http://www.codegeneration.net/cg2010/sessioninfo.php?session=101" target="_blank">Model Driven Software Development</a> (MDSD) oriented to begginers.</p>
<p>Also, I will discuss in a second session about <a title="Tailored code generatiors" href="http://www.codegeneration.net/cg2010/sessioninfo.php?session=15" target="_blank">creating tailored code generators</a>.</p>
<p>See you in <a title="CG2010" href="http://www.codegeneration.net/cg2010/index.php" target="_blank">Cambridge</a> in June!</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2010/03/countdown-for-cg2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Searching for the essential building bricks of MDD</title>
		<link>http://pjmolina.com/metalevel/2010/01/searching-for-the-essential-building-bricks-of-mdd/</link>
		<comments>http://pjmolina.com/metalevel/2010/01/searching-for-the-essential-building-bricks-of-mdd/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 17:41:58 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[MDD]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=403</guid>
		<description><![CDATA[A title like this could sound utopian and probably it is in the extreme, but at the same time provides two advantages: a suggestive title brings more blogs readers , and these kind of Quests keep me active developing and testing my ideas about MDD. Sorry for 1, the joke. But Let me explain 2 [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.flickr.com/photos/cybergabi/2967324927/"><img class="alignnone" title="Red Brick Wall. Photo by Cibergabi via Flickr.com" src="http://farm4.static.flickr.com/3239/2967324927_5d4016ef2c.jpg" alt="Red Brick Wall. Photo by Cibergabi via Flickr.com" width="500" height="332" /></a></p>
<p>A title like this could sound utopian and probably it is in the extreme, but at the same time provides two advantages:</p>
<ol>
<li>a suggestive title brings more blogs readers <img src='http://pjmolina.com/metalevel/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , and</li>
<li>these kind of Quests keep me active developing and testing my ideas about MDD.</li>
</ol>
<p>Sorry for 1, the joke. But Let me explain 2 a little further if you are interested:</p>
<p><a href="http://www.flickr.com/photos/cybergabi/2967324927/"></a></p>
<p>Some months ago, I started to develop a new tool for doing Model Driven Development. I always start new developments with contained expectatives. I consider most of them throw away propotypes just to test a new way of doing the same thing, but luckily, with less effort and better productivity. But when you found the way, you follow it again whenever you need it, isn’t it?</p>
<p>So, this time is one of those moments: I am quite happy with the results, and I will continue building on the top of it to make it grow.</p>
<p>Today (almost?) everyone agrees on code generation can make your life notably easier as long as you have:</p>
<ol>
<li>a stable domain,</li>
<li>a clear knowledge of your domain (domain expert) and,</li>
<li>tools: modelling editors, model checkers, and code generator adapted to your domain and your chosen target architecture and language.</li>
</ol>
<p>The trickiest one to get is, not surprisingly, the third one. And this issue: the quality and the applicability of the MDD tools is the main stopper when considering applying MDD for a software development project.</p>
<p>So, my motivation during years is not only to create code generators one more time, but do it in a way that it will be cheaper to obtain results in next projects. Therefore, reducing the requirements for the entry level will help the MDD adoption to gain speed.</p>
<p><em>Ok, wait a minute, are you reinventing the wheel again? Building another meta-code-generator?</em></p>
<p>Yes I know, there are very good and mature tools for doing MDD: such as EMF/GMF, XText, ATL, TextUml, Metacase, MS DSL Tools, etc.</p>
<p>However, guided by my intuition and the experiences in the domains I have worked in, I have a strong opinion on of how some things should be done and for the moment I didn’t found the perfect tool to satisfy my needs.</p>
<p>But, instead of complain, I decided to take to the action and add my two cents implementing my view about MDD tool support: taking the good ideas of the standards available and reinventing the parts that don’t fit.</p>
<h2>The tool</h2>
<p>After this introduction, the name of the tool is not going to surprise you. It is named <strong><a title="Essential " href="http://pjmolina.com/metalevel/essential/">Essential</a></strong>.</p>
<p>The goals of the project are following ones:</p>
<ul>
<li>to declaratively describe metamodels, models, templates, and transformations using textual DSLs</li>
<li>to provide a comfortable editor for each of these four pillars,</li>
<li>to provide model checkers to assure the integrity of the four, and</li>
<li>to build code generators and transformation interpreters to achieve the output we are looking for.</li>
</ul>
<p>In the next posts I will depict the DSLs used in Essential and some architectural choices. This will help us to discuss the essence of the problems found in MDD.</p>
<p>I want to thanks Javier Hernandez for his constant help, good discussions and counterpoints about choosing design alternatives for Essential. And also to <a title="Niko's Mini Factory Blog" href="http://nikofactory.blogspot.com/" target="_blank">Nicolas Cornaglia</a> and Ángel Marín for their active beta testing as early adopters and providing good test fields.</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2010/01/searching-for-the-essential-building-bricks-of-mdd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forward engineering with MDD: A proof of concept</title>
		<link>http://pjmolina.com/metalevel/2009/12/forward-engineering-with-mdd-a-proof-of-concept/</link>
		<comments>http://pjmolina.com/metalevel/2009/12/forward-engineering-with-mdd-a-proof-of-concept/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 00:11:03 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=382</guid>
		<description><![CDATA[Hello everybody! I want to share with you a set of videos to show what I understand when talking about Forward Engineering applied to MDD. First of all, a legal disclaimer: my apologies for the quality of the videos and for my rusty English: I am starting to play with video editing tools and recording [...]]]></description>
			<content:encoded><![CDATA[<p>Hello everybody!</p>
<p>I want to share with you a set of videos to show what I understand when talking about <strong>Forward Engineering</strong> applied to <strong>MDD</strong>.</p>
<p>First of all, a legal disclaimer: <em>my apologies for the quality of the videos and for my rusty English: I am starting to play with video editing tools and recording software so I expect to improve my recording and editing skills on the way. Anyway, I found (I hope) they have enough quality to explain the main ideas. So seeing it is totally up to you! You have been warned!  <img src='http://pjmolina.com/metalevel/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<p><em>Also note: see the videos in High Quality mode (HQ) in Youtube. Otherwise, details of the samples probably will not be visible.</em></p>
<p>In a <a title="Scaling MDD for production" href="http://pjmolina.com/metalevel/2009/06/scaling-mdd-for-production/" target="_blank">previous post</a> I introduced a sample of the code that can be generated from a very basic conceptual model. I have created three videos to show you the main steps involved.</p>
<ol>
<li><strong>Modeling (<a title="Forward engineering with MDD: 1/3 Modeling" href="http://www.youtube.com/watch?v=T8seerYgHwc&amp;fmt=6" target="_blank">Video 1/3</a></strong><strong>)</strong>. The first video uses a minimalistic class model created inside Visual Studio 2005 with Microsoft DSL Tools. The sample creates a basic blog structure in less than 5 minutes. Note that in the specification there are no technological choices (neither the types are bind to a concrete language representation).
</li>
<li><strong>Code Generation (<a title="Forward engineering with MDD: 2/3 Code generation" href="http://www.youtube.com/watch?v=ZhUeYXsR7G8&amp;fmt=6" target="_blank">Video 2/3</a>)</strong>. A quick step: Selecting a code generation (selecting a target architecture), fixing the design choices offered by the code generation and pressing the red button: Generate! A full .NET Solution is generated in less than 5 seconds ready to compile.
</li>
<li><strong>A quick code review of the generated code (<a title="Forward engineering with MDD: 3/3 A quick review to the generated code" href="http://www.youtube.com/watch?v=o-md-41irDA&amp;fmt=6" target="_blank">Video 3/3</a>)</strong>. Finally, I am sure you have curiosity to take a look to the output code, don’t you? This third video shows a walkthrough to show:
<ul>
<li>DB Scripts (table creation, foreign keys,  drop scripts)</li>
<li>Database creation</li>
<li>Logic layer: POCOs (Plain Old CLR objects), NHibernate mappings and a Business Service Layer with fully functional CRUD operations.</li>
</ul>
</li>
</ol>
<p>So this is it. It is a proof of concept of how fast and direct MDD tools can be starting from a minimalistic model.</p>
<p>When talking about using or buying modeling &amp; code generation products my advice is:</p>
<ul>
<li>Don’t use models just for documentation. They will be outdated soon or later. On the contrary, a living (generating) model is always in sync with its target application.</li>
<li>Don’t resign yourself to just using code generation of skeletons. As you just have seen the current technology allows you to generate much more.</li>
<li>Don’t be content if anyone try to sell you a model too close or tied in any way to a given target language. Today we have just generated C#, but tomorrow may be we prefer Ruby? Python?</li>
<li>Don’t resign yourself to use a tool married with a specific database. You know, technology changes faster that we usually expect.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2009/12/forward-engineering-with-mdd-a-proof-of-concept/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Conceptual Map for MDD</title>
		<link>http://pjmolina.com/metalevel/2009/11/conceptual-map-for-mdd/</link>
		<comments>http://pjmolina.com/metalevel/2009/11/conceptual-map-for-mdd/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 17:48:47 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[MDD]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=367</guid>
		<description><![CDATA[When talking about Model Driven Development (MDD), code generation and related technologies, the key terms, its meanings and usage could not be clear enough to the involved audience due to our different backgrounds and the use of overloaded terms in several specific jargons. A good way to avoid such confusion is to make explicit a [...]]]></description>
			<content:encoded><![CDATA[<p>When talking about <strong>Model Driven Development</strong> (MDD), code generation and related technologies, the key terms, its meanings and usage could not be clear enough to the involved audience due to our different backgrounds and the use of overloaded terms in several specific jargons.</p>
<p>A good way to avoid such confusion is to make explicit a short clear definition of the terms used.</p>
<p>Following this idea, today I want to share the Conceptual Map I traditionally use to explain the areas involved in code generation. This map helps me to explain how more complex interactions and natural dependences and properties arise in this domain. See embedded <a title="Conceptual Map for MDD" href="http://www.youtube.com/watch?v=JWgyyUqBcNI" target="_blank">video</a>.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/JWgyyUqBcNI&amp;hl=es_ES&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/JWgyyUqBcNI&amp;hl=es_ES&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>We will start considering MDD using two orthogonal dimensions:</p>
<ul>
<li>Types/Classes vs Instances &amp;</li>
<li>Two levels of abstraction: Programs/code (technology dependent, concrete)  vs Models (technology independent, abstract).</li>
</ul>
<h2>Key concepts</h2>
<ol>
<li>Model: A description of the problem to be solved.</li>
<li>Metamodel: A type description for providing the modeling language.</li>
<li>Template: A pattern representation of the code you want to create.</li>
<li>Transformation: Application of an algorithm to transform one or more models in one o more outputs.</li>
<li>Output: Your target asset: source code, doc or models again.</li>
</ol>
<h2 style="font-size: 1.5em;">Additional concepts</h2>
<ul>
<li>Mappings = Template to Metamodel item bindings</li>
<li>Architecture Know How = Mappings + Templates (embedding best practices and patterns)</li>
<li>Business Know How  = Metamodel + Model</li>
<li>Model Checker = Validation of Model with respect to Metamodel</li>
<li>Generator = Transformation(Templates, Mappings, Model) &#8211;&gt; Output</li>
</ul>
<p>A pair of properties to mention.</p>
<p><strong>Stability:</strong></p>
<ol>
<li>Metamodel: Quite stable once developed.</li>
<li>Model: Stable till the business change (requirements change).</li>
<li>Template: Stable till not changing or evolving the technology (2-3 years cycle?).</li>
<li>Transformation: Impacted by technology or metamodel changes.</li>
<li>Output (Source code): Regenerated as needed. Discardable.</li>
</ol>
<p><strong>Dependences:</strong></p>
<ol>
<li>Metamodel: Not dependent of third parties.</li>
<li>Model: Altered if metamodel changes.</li>
<li>Template: Not dependent of third parties (just the technology).</li>
<li>Transformation: Impacted by template changes, mapping changes and  metamodel changes.</li>
<li>Output (Source code): Impacted by everything. Regeneration is a good property as seen before. But now is a necessity.</li>
</ol>
<p>Changes in the formers will cascade to the latter.</p>
<h2 style="font-size: 1.5em;">Strong Separation of Concerns &amp; skills</h2>
<p>Apart of the classical advantages provided by MDD approaches such as quality, productivity, time to market, &amp; technology independence; one of the good properties no so times recalled is the <strong>strong separation of skills </strong>that this method of software engineering provides:</p>
<ul>
<li><strong>Business </strong>analyst can concentrate efforts in using modeling editors to describe the business and provide feedback to enhance metamodels (when needed)</li>
<li>On the other side, Software Architects and <strong>technology </strong>gurus can concentrate in tuning the technical architecture to achieve the most performing implementations they can provide.</li>
</ul>
<p>One you achieve this stage, you can start thinking of reusing and evolving your business models and architectures <em>at speeds that most of traditional SW developers never seen before</em>.</p>
<p>There is one famous quote from Grady Booch saying:</p>
<blockquote><p><em>“The entire history of software engineering is one of rising levels of abstraction (abstraction is the primary way we as humans deal with complexity).&#8221;  <strong><a title="Grady Booch site" href="http://www.booch.com/architecture/index.jsp" target="_blank">Grady Booch</a></strong></em></p></blockquote>
<p>As many others, I think that MDD is the next step to adopt in such direction. When it will happen globally is just a question of achieving the critical mass:</p>
<ul>
<li>having good enough tools,</li>
<li>and having practitioners enough and success cases to prove the value in the “not so new” way of working.</li>
</ul>
<p>I&#8217;m optimistic about it. We are in the way and getting speed…</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2009/11/conceptual-map-for-mdd/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Code Generation 2010: Call for Speakers is open</title>
		<link>http://pjmolina.com/metalevel/2009/10/code-generation-2010-call-for-speakers-is-open/</link>
		<comments>http://pjmolina.com/metalevel/2009/10/code-generation-2010-call-for-speakers-is-open/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 19:35:08 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=345</guid>
		<description><![CDATA[The call for speakers of Code Generation 2010 is now open. If you are a practitioner, researcher or a tool maker in the MDD arena this is your conference. You have till January 15th 2010 to send your submission. See you there!]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codegeneration.net/cg2010/speak.php"><img class="alignleft" title="Code Generation 2010 Logo" src="http://www.codegeneration.net/cg2010/images/CG2010logo250x64.gif" alt="" width="250" height="64" /></a><br />
<br/><br/><br/></p>
<p>
The <a title="Call for speakers CG2010" href="http://www.codegeneration.net/cg2010/speak.php" target="_blank">call for speakers of Code Generation 2010</a> is now open.
</p>
<p>
If you are a practitioner, researcher or a tool maker in the MDD arena this is your conference.<br />
You have till January 15th 2010 to send your submission.
</p>
<p>
See you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2009/10/code-generation-2010-call-for-speakers-is-open/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Report on Genexus Meeting 2009</title>
		<link>http://pjmolina.com/metalevel/2009/09/report-on-genexus-meeting-2009/</link>
		<comments>http://pjmolina.com/metalevel/2009/09/report-on-genexus-meeting-2009/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 21:00:40 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[genexus]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=318</guid>
		<description><![CDATA[After coming back to Valencia from Montevideo, I’ve found the time to organize my ideas and explain as promised what I saw there. As commented before, my expectatives were exceeded. The Genexus Event organized by Artech has a great quality level: more than 3.600 participants, having more than 120 sessions in tree days. I’m impressed! [...]]]></description>
			<content:encoded><![CDATA[<p>After coming back to Valencia from Montevideo, I’ve found the time to organize my ideas and explain as promised what I saw there.</p>
<p>As commented before, my expectatives were exceeded. The <strong><a title="Genexus Meeting 2009" href="http://genexus.com/evento" target="_blank">Genexus Event</a></strong> organized by Artech has a great quality level: more than 3.600 participants, having more than 120 sessions in tree days. I’m impressed! These kinds of things are not improvised, and the organization did a wonderful job for the event. Congrats!</p>
<p>In this post I will comment about the things I saw and liked (specially sharing the links to the videos and abundant material) and about my, now, better understanding of the tool Genexus.</p>
<p>Note: There is a some of material with on-line translation to English, the rest is only in original version (Spanish).</p>
<p><span id="more-318"></span></p>
<p><strong>The Event</strong></p>
<p><strong><span style="font-weight: normal;">Once finishing performing my <a title="State of the art of MDD, by Pedro J. Molina" href="http://pjmolina.com/metalevel/2009/09/mdd-state-of-the-art-in-montevideo/" target="_blank">MDD Session</a> on Monday, I had free time to relax and follow the rest of the event and try to learn new things.</span></strong></p>
<p>So, I wanted to know a bit about the Microsft vision of the Cloud and followed:</p>
<div class="wp-caption alignright" style="width: 166px"><img title="Eugenio Pace in action." src="http://farm4.static.flickr.com/3501/3923257119_6d2a7a2eb4.jpg" alt="Eugenio Pace in action." width="156" height="234" /><p class="wp-caption-text">Eugenio Pace in action.</p></div>
<ul>
<li>Steve Marx’s (Microsoft) session about Azure <a title="Deploying to the cloud" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S;16;67;1134;1;1;O;,43,50,1709" target="_blank">“Deploying to the cloud”</a> and</li>
<li><a title="Thinking in the cloud?" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S%3b16%3b67%3b1134%3b1%3b1%3bO%3b,43,50,1708" target="_blank">“Thinking in the cloud? Factors to keep feet on the ground”</a> by Eugenio Pace (Microsoft).</li>
</ul>
<p>Both of them provide a good overview about the factors to have in mind in order to use this computing paradigm and how Microsoft is preparing its cloud platform called Azure.</p>
<p>Another interesting block for me was the RIA &amp; Javascript sessions:</p>
<ul>
<li><a title="Javascript to the extreme" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S%3b16%3b67%3b1134%3b1%3b1%3bO%3b,43,50,1819" target="_blank">“Javascript to the extreme”</a> by Andres Levin (Artech)</li>
<li><a title="RIA with Genexus Now!" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S%3b16%3b67%3b1134%3b1%3b1%3bO%3b,43,50,1731" target="_blank">“RIA with Genexus Now!”</a> Nicolas Cardelino (Artech)</li>
<li><a title="Future of RIA applications with Genexus" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S%3b16%3b67%3b1134%3b1%3b1%3bO%3b,43,50,1716" target="_blank">“Future of RIA applications with Genexus”</a> Alejandro Silva (Artech)</li>
</ul>
<p>In there, I found a good review about the pros &amp; cons of current RIA platforms (Flex, Silverligth &amp; AJAX) and the incoming new features of HTML 5. Alejandro made a special focus on how the code generators can be modularized to change parts in them to help changing the output architecture of your RIA application. It is totally sensible to do it in that way to promote reuse.</p>
<p>Alejandro Paniza (Artech) talk about <a title="REST Web Services" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S%3b16%3b67%3b1134%3b1%3b1%3bO%3b,43,50,1772" target="_blank">“REST Webservices”</a> and its usage related to code generation.</p>
<p>I met also Nicolas Jodal (Artech) and enjoyed with the rest of the participants in his great Keynote “<a title="It's in our nature..." href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S%3b16%3b67%3b1134%3b1%3b1%3bO%3b,43,50,1750" target="_blank">It’s in our nature…”</a> Nicolas argued about the human nature, the kind of thinks we instinctively do: mimic success, solve problems, communicate &amp; share, belief in models… and how the technologies that exploit such human features tend to have more successes that other that don’t. Very inspiring talk!</p>
<p>On the softskills side, Jose Lamas (Artech) talked about <a title="How to achive quality discussions" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S%3b16%3b67%3b1134%3b1%3b1%3bO%3b,43,50,1850" target="_blank">“How to achieve quality discussions”</a>. A nice and practical one, I’m going to put in practice as soon as possible.</p>
<p>On Tuesday, Juan Matteo (a.k.a. Nicolas Jodas again) talk about <a title="Universal Data Models" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S%3b16%3b67%3b1134%3b1%3b1%3bO%3b,43,50,1833" target="_blank">“Universal Data Models”</a> to introduce alternatives to traditional relational databases in order to change the focus from rows to columns; from entities to attributes and relations. The performance of course of such change is not good for a general replacement of RDBMs, but for small sets of data, it can be quite productive to work in such a way and obtaining benefits like versioning, easy link exploration and on-demand extensibility.</p>
<p>One of the new features in “Genexus X Evolution 1” is the new generator targeting Ruby. Daniel Mendez &amp; Sabrina Juarez (Artech) <a title="Ruby generation on Genexus" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S%3b16%3b67%3b1134%3b1%3b1%3bO%3b,43,50,1737" target="_blank">showed that work</a>.</p>
<p>On Wednesday, Gaston Milano (Artech) reviewed the <a title="Genexus Language Evolution" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S;16;67;1134;1;1;O;,43,50,1741" target="_blank">“Genexus Language Evolution”</a> and the future plans to improve the language: <strong>introducing scalability thought modularization</strong> and improving the <strong>user interface</strong> <strong>specification</strong> in Genexus.</p>
<div class="wp-caption aligncenter" style="width: 400px"><img title="Angel Mahlers Orchestra" src="http://farm3.static.flickr.com/2592/3929870732_1a74b9c9cf.jpg" alt="Angel Mahlers Orchestra" width="390" height="260" /><p class="wp-caption-text">Angel Mahler&#39;s Orchestra</p></div>
<p>On the closing session, a very funny and enjoyable session was the following one: “<a title="When a team sounds good" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S;16;67;1134;1;1;O;,43,50,1824" target="_blank">When a team sounds good”</a> by Angel Mahler. Here a band played several themes from movie soundtracks making emphasis on how an aligned collective work (team work) can achieve better results that the sum of individual ones (the so called an often abused term of <em>sinergy</em>). Nice perform!</p>
<p>Finally Breogán Gonda closed the Event with his <a title="Breogan's Keynote" href="http://www2.gxtechnical.com/main17/evviewsessionmaterial.aspx?S%3b16%3b67%3b1134%3b1%3b1%3bO%3b,43,50,1749" target="_blank">keynote</a>. I remember some quotes from him I liked showing his attitude and strong commitment:</p>
<ul>
<li>He recognizes that the first event (19 years ago) was created to talk with customers and acknowledge a problem they were suffering in such days. Just to acknowledge it and say they were working in the solution.</li>
<li>Nowadays, he can’t promise that they will not be problems in the future, nobody can. But, on the other hand, he promise to continue working in the solutions with the customers, openly, as a real community. That’s the attitude I like!</li>
</ul>
<p><strong>The product</strong></p>
<p>Certainly, I travelled to Montevideo with an unclear view of Genexus. I have never worked with it: It’s object oriented, UML oriented? It’s MDD? Fortunately, I came back with a better understanding of their approach.</p>
<p>Genexus is based on the specification of the <strong>conceptual data modeling</strong> and takes the assumption of given unique names to such business concepts such <em>CustomerSurname </em>or <em>TotalInvoice</em>. Under the curtains, a Prolog engine (a rule based ones) derives the final data model, the database to SQL. After this definition, Genexus provides different DSL to specify business logic, workflow, user interfaces, etc. A plus is that such specification is not dependent of the dababase structure, so it is easily retargetable and moreover re-normalizable.</p>
<p>One of the more impressive features of Genexus, impressive just because is something you don’t find in other modeling products, is the real <strong><a title="Definition: Schema Evolution" href="http://en.wikipedia.org/wiki/Schema_evolution" target="_blank">Schema Evolution</a></strong> included out of the box: You can define your model, generate it, populate it and go life (go to production). Later on, you can change your model in a way it changes your data model and forces a reorganization of the database. In such scenario, when you regenerate again your application, a set of DB scripts are also generated and apply to move your living data to your new application version. <strong>That&#8217;s cool and not easy!</strong></p>
<p>Of course, everything is abstracted away from the technology, making easy to generate to different platforms such as Cobol, AS400, Java, C#, Ruby, code for the cloud (Azure), to cite a few.</p>
<p>As commented by Artech staff, they need to work for improve the scalability of the tool for working with big projects and introduce better and easier User Interface specification.</p>
<p>Genexus is not UML, it has no Class Diagram, neither a Sequence Diagram. Don’t search for XMI or MDA profiles. Just because Genexus don’t need it.</p>
<p>It’s simply a different approach but <strong>it’s real MDD</strong>. As real as it has 20 years in the market.</p>
<p><em>Congratulations to the Artech team!</em></p>
<p><em>Keep going with the good work and demonstrating that code generation is the way to go in Software Develo</em><em>pment!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2009/09/report-on-genexus-meeting-2009/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
