<?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; Essential</title>
	<atom:link href="http://pjmolina.com/metalevel/category/essential/feed/" rel="self" type="application/rss+xml" />
	<link>http://pjmolina.com/metalevel</link>
	<description>Abstraction based levitation</description>
	<lastBuildDate>Mon, 30 Apr 2012 06:55:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>CG2012 Summary, day 2</title>
		<link>http://pjmolina.com/metalevel/2012/04/cg2012-summary-day-2/</link>
		<comments>http://pjmolina.com/metalevel/2012/04/cg2012-summary-day-2/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 07:47:24 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[Language Workbench]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[mde]]></category>
		<category><![CDATA[mdsd]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=843</guid>
		<description><![CDATA[CG2012 Summary (part II) After reviewing LWC2012 and CG2012 day 1, let’s continue with day 2. Day 2, Thursday 29th The morning started with the first keynote. Markus Völter led the session with the title “Domain-Specific Language Design &#8211; A conceptual framework for building good DSLs”.  Here Markus deep down with an ontology approach, reviewing the [...]]]></description>
			<content:encoded><![CDATA[<h1>CG2012 Summary (part II)</h1>
<p>After reviewing <a title="LWC2012 summary" href="http://pjmolina.com/metalevel/2012/04/summary-language-workbenches-challenge-2012/">LWC2012</a> and <a title="LWC2012 summary day 1" href="http://pjmolina.com/metalevel/2012/04/cg2012-summary-day-1/">CG2012 day 1</a>, let’s continue with day 2.</p>
<h2>Day 2, Thursday 29th</h2>
<p>The morning started with the first keynote. Markus Völter led the session with the title <a title="Markus slides" href="http://www.voelter.de/data/presentations/DSLDesignKeynote-PRINT.pdf">“Domain-Specific Language Design &#8211; A conceptual framework for building good DSLs”</a>.  Here Markus deep down with an ontology approach, reviewing the dimensions of DSL Design: covering nine topics: expressivity, coverage, semantics, separation of concerns, completeness, paradigms, modularity, concrete syntax &amp; process. In the session, he focused mainly on expressivity, semantics, modularity and concrete syntax. I found specially interesting the dissection of types of language extension and composition providing detailed samples in each case. In summary, good and quality stuff as Markus used to deliver. As commented by Markus, this material will be published as a book “DSL Engineering” at the <a title="DSL Engineering" href="http://voelter.de/dslbook">early 2013</a>.</p>
<p>After the coffee break, I entered the <a title="Peter Friese" href="http://www.peterfriese.de/">Peter Friese</a>’s tutorial on <a title="Peter Friese's session" href="http://www.codegeneration.net/cg2012/sessioninfo.php?session=27">“Traditional and Model-Driven Approaches for Cross-Platform Mobile Development”</a>. Peter demonstrated a very good knowledge of the mobility space presenting nor one or two alternatives but six (6) ways of developing cross-platform mobile applications considering pros and cons. Great talk covering native development (showing iPhone, Android and WP7), HTML5 and JavaScript frameworks like Sencha or jQueryMobile reviewing cross tools like phoneGap. It was a pity that the Wifi connectivity were failing and interrupted in some moments the flow of the demo, but Peter was able to overcome it and show what’s going on.</p>
<p>User Interfaces are always interesting to me so: Achim Demelt session’s was a must see session or me. <a title="Achim Demelt's session" href="http://www.codegeneration.net/cg2012/sessioninfo.php?session=25">“Mission: Impossible &#8212; Purely declarative User Interface Modeling”</a>.</p>
<div id="__ss_12222172" style="width: 425px;">
<p><strong style="display: block; margin: 12px 0 4px;"><a title="Mission: Impossible --- Purely declarative User Interface Modeling" href="http://www.slideshare.net/ademelt/mission-impossible-purely-declarative-user-interface-modeling" target="_blank">Mission: Impossible &#8212; Purely declarative User Interface Modeling</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/12222172" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/ademelt" target="_blank">ademelt</a></div>
</div>
<p>The session was very good. The slides are not enough, the accompanying demo shown the tool at work. Achim and his team created Silverlight based UIs using a Java back-end. The S4 environment presented is agile enough to model and generate UIs for the ERP domain Achim was targeting.</p>
<p>Next session for me was for the Jetbrains’s guys Maxim Mazin and Evgenii Schepotiev with the talk <a title="Webr-DNQ" href="http://www.codegeneration.net/cg2012/sessioninfo.php?session=38">“Webr-DNQ — web application development with pleasure”</a>.  They show the language extensions Jetbrains has designed over Java using <a title="MPS" href="http://www.jetbrains.com/mps/">MPS</a>  to build in-house products like <a title="YouTrack" href="http://www.jetbrains.com/youtrack/">YouTrack</a>. This is a very clear sample of the quote: <em>eat your own dog food</em>.</p>
<p>After a coffee, and back to action to a very different session: Steven Kelly lead the hands-on session titled <a title="Have your language built while you wait" href="http://www.codegeneration.net/cg2012/sessioninfo.php?session=35">“Have your language built while you wait”</a>. Here some of us creating Language Workbenches where placed in a room with our laptops waiting for customers. During rounds of 25 minutes we were attending them showing the capabilities of each tool and solving a concrete and practical small problem proposed by the customer. 15 master craftsmen, representing 11 top language workbench tools, volunteered their time to build languages for participants&#8217; domains. It was a very interesting format because it not only allows people to try new tools, but also to promote cross polinization between tool makers. From mi side I was there showing <a title="Essential" href="http://pjmolina.com/essential">Essential</a> and also have the chance to play a little with The <a title="Whole Platform" href="http://whole.sourceforge.net/">Whole Platform</a> with Riccardo Solmi and Enrico Persiani and take a closer look to <a title="Ensō" href="http://www.cs.utexas.edu/~alexloh/enso/lwc2012.shtml">Ensō</a> with Alex Loh.</p>
<p>Steve prepared a good summary on this session (<a title="hands-on session summary" href="http://www.dsmforum.org/events/CG2012/index.html">take a look for the details on each tools</a>). I borrow here the video here <img src='http://pjmolina.com/metalevel/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p><iframe src="http://www.youtube.com/embed/WYxUQyk8bCU" frameborder="0" width="420" height="315"></iframe></p>
<p>&nbsp;</p>
<p>So far, so good! Another day full of code generation, but the dessert was still missing.</p>
<p>This year CG2012 changed the relaxing punting trip on the river Cam in favor of a conference called “How Apollo we flew to the moon” by David Woods. The result: totally amazing! This guy presented us all a brief but detailed introduction to the Apollo systems and navigation procedures and then deep down on the specific problems on the Apollo XI, the mission where Aldrin, Armstrong and Collins engraved theirs names in the history.</p>
<p>Given the audience, David make special emphasis on the computer devices on board in the Apollo missions. Totally amazing the rudimentary technology used was good enough to fly to the moon and come back! Q&amp;A delivered may geek questions about the Apollo mission that David responded with flying colors to impress even more the audience.</p>
<p>So I couldn’t resist, and bought my copy of his <a title="How we flew to the moon" href="http://www.amazon.com/Apollo-Springer-Praxis-Books-Exploration/dp/1441971785/ref=dp_ob_title_bk">book</a> and got it autographed by David (I was not the only one BTW). A good reading for sure, if you like space and/or engineering.</p>
<p style="text-align: center;"><a title="How we flew to the moon" href="http://www.amazon.com/Apollo-Springer-Praxis-Books-Exploration/dp/1441971785/ref=dp_ob_title_bk"> <img class="aligncenter" title="How we flew to the moon" src="http://ecx.images-amazon.com/images/I/51pkpq8MzAL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg" alt="" width="300" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2012/04/cg2012-summary-day-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Code Generation 2012</title>
		<link>http://pjmolina.com/metalevel/2012/03/code-generation-2012/</link>
		<comments>http://pjmolina.com/metalevel/2012/03/code-generation-2012/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 20:44:26 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[mdsd]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=799</guid>
		<description><![CDATA[Times fly! Code Generation 2012 is only two weeks ahead. During the latest&#8217;s weeks we have been very busy combining day to day work with the preparation of material for the conference. This year the conference will be held from 28th till 30th of March, in the habitual place: Murray Edwards College, Cambridge, UK. The programme [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" title="CG2012 logo" src="http://www.codegeneration.net/cg2012/images/CG2012logo600x171.gif" alt="CG 2012 logo" width="432" height="124" /></p>
<p style="text-align: justify;">Times fly!<strong> <a title="CG2012" href="http://www.codegeneration.net/cg2012/index.php">Code Generation 2012</a></strong> is only two weeks ahead.</p>
<p>During the latest&#8217;s weeks we have been very busy combining day to day work with the preparation of material for the conference.</p>
<p>This year the conference will be held from 28th till 30th of March, in the habitual place: Murray Edwards College, Cambridge, UK.</p>
<p>The <a title="CG2012 Programme" href="http://www.codegeneration.net/cg2012/program.php">programme</a> this year comes with some interesting sessions. I want to highlight some of them:</p>
<ul>
<li>The day before, the 27th the <a title="LWC2012" href="http://www.languageworkbenches.net/index.php?title=LWC_2012">Language Workbenches Challenge 2012</a> takes place in the same scenario. The competing tools will show us how they resolved <a title="The LCW2012 assignment" href="http://www.languageworkbenches.net/index.php?title=LWC_2012#The_assignment">the current assignment</a>.</li>
<li>The keynotes by <a title="Jan Bosch" href="http://janbosch.com/">Jan Bosch</a> &#8221;Speed and Innovation through Architecture&#8221; and <a title="Markus Völter" href="http://www.voelter.de/">Markus Völter</a> &#8221;Domain-Specific Language Design &#8211; A conceptual framework for building good DSLs&#8221;.</li>
<li><a title="David Woods" href="http://www.wdwoods.com/">David Woods</a> will talk on 29th about &#8220;How Apollo flew to the Moon&#8221; <em>Don&#8217;t miss it!</em></li>
<li>The practical session <a title="Have your language built while you wait " href="http://www.codegeneration.net/cg2012/sessioninfo.php?session=35">&#8220;Have your language built while you wait&#8221;</a> driven by <a title="Steven Kelly" href="http://www.metacase.com/blogs/stevek/blogView">Steven Kelly</a> will allow you to solve your problem (domain) in 20 minutes. <em>It will be funny.</em></li>
</ul>
<p>From my side, and once established in Seville, I will join the conference with some of my <a title="Icinetic" href="http://icinetic.com/">Icinetic</a> colleagues. The activities we will be involved include:</p>
<ul>
<li>Attending the full LWC2012 and CG2012.</li>
<li>This year, Icinetic proudly sponsors CG2012, so we will be present there. If your are interested in MDSD feel free to ask us and we will make you a demo of our work and products.</li>
<li><a title="Ruben Jimenez Marrufo" href="http://geeks.ms/blogs/rjimenez/">Ruben Jimenez</a> and I will be presenting the session <a title="Modelling and Code Generation on the .NET platform at Icinetic" href="http://www.codegeneration.net/cg2012/sessioninfo.php?session=52">&#8220;Modelling and Code Generation on the .NET platform at Icinetic&#8221;</a> on Wednesday 28th.</li>
<li>On Thursday 29th I will be taking part in the previously quoted session <a title="Have your language built while you wait " href="http://www.codegeneration.net/cg2012/sessioninfo.php?session=35">&#8220;Have your language built while you wait&#8221;</a> with <a title="Essential" href="pjmolina.com/metalevel/essential">Essential</a>.</li>
<li>Finally, on Friday 30th, Ruben and I will lead the session <a title="Mutichannel User Interfaces" href="http://www.codegeneration.net/cg2012/sessioninfo.php?session=42">&#8220;Multichannel User Interfaces&#8221;</a>.</li>
</ul>
<p>As every year, looking forward to join and meet again with the CG community. See you there, guys!</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2012/03/code-generation-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New kid on the block: XCore</title>
		<link>http://pjmolina.com/metalevel/2012/02/new-kid-on-the-block-xcore/</link>
		<comments>http://pjmolina.com/metalevel/2012/02/new-kid-on-the-block-xcore/#comments</comments>
		<pubDate>Sat, 11 Feb 2012 13:09:21 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[DSL]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[XCore]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=784</guid>
		<description><![CDATA[The guys at the Eclipse Modeling Framework leaded by Ed Merks @edmerks are working hard in XCore to provide ECore models a textual syntax. This is a needed feature from a long time. It was also a good surprise to see how XCore syntax is quite close to Essential Meta. This is good news again: interoperability [...]]]></description>
			<content:encoded><![CDATA[<p>The guys at the Eclipse Modeling Framework leaded by <a title="Ed Merks blog" href="http://ed-merks.blogspot.com/2012/02/xcore-on-training-wheels.html">Ed Merks</a> <a title="Ed Merks" href="https://twitter.com/#!/EdMerks">@edmerks</a> are working hard in <a title="Xcore" href="http://wiki.eclipse.org/Xcore">XCore</a> to provide ECore models a textual syntax. This is a needed feature from a long time.</p>
<p>It was also a good surprise to see how XCore syntax is quite close to <a title="Essential Meta" href="http://pjmolina.com/metalevel/2010/02/essential-meta-a-concise-dsl-for-metamodeling/">Essential Meta</a>. This is good news again: interoperability between the Java modeling  side of world (EMF) and .NET modeling efforts with Essential are now simpler with the arrival of XCore.</p>
<p>As Meinte Boersma <a title="Meinte Boersma" href="https://twitter.com/#!/meinte37">@miente37</a> comment on twitter: semicolons seems to be the main difference.</p>
<p>BTW, a new release of <a title="Essential" href="http://pjmolina.com/essential">Essential</a> with minimal bug fixing has been released (0.5.1). <a title="Essential evaluation" href="http://pjmolina.com/essential/download-eval/">Try it out</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2012/02/new-kid-on-the-block-xcore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modelling the User Interface, the video</title>
		<link>http://pjmolina.com/metalevel/2011/10/modelling-the-user-interface-the-video/</link>
		<comments>http://pjmolina.com/metalevel/2011/10/modelling-the-user-interface-the-video/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 22:24:55 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[DSL]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[modeling]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=738</guid>
		<description><![CDATA[The recording of the Code Generation 2011 session about &#8216;Modelling the User Interface&#8217; is finally available online at InfoQ. For further details take a look to the slides and Conceptual User Interface Patterns. During the video you can see a pair of demos:  Essential on action doing full UI inference and code generation and IO, the codename for a [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="InfoQ" src="http://cdn2.infoq.com/styles/i/logo-infoq.gif" alt="" width="127" height="38" />The recording of the Code Generation 2011 <a title="Session details" href="http://www.codegeneration.net/cg2011/sessioninfo.php?session=14" target="_blank">session</a> about <em>&#8216;Modelling the User Interface&#8217;</em> is finally available online at <a title="Modelling the User Interface" href="http://www.infoq.com/presentations/Modeling-the-User-Interface" target="_blank">InfoQ</a>.</p>
<p>For further details take a look to the <a title="Modelling the User Interface" href="http://www.slideshare.net/pjmolina/modelling-the-user-interface" target="_blank">slides</a> and <a title="Conceptual User Interface Patterns" href="http://pjmolina.com/cuip" target="_blank">Conceptual User Interface Patterns</a>.</p>
<p>During the video you can see a pair of demos:</p>
<ul>
<li> <a title="Essential" href="http://pjmolina.com/metalevel/essential/" target="_blank">Essential</a> on action doing full UI inference and code generation</li>
<li>and IO, the codename for a new proof of concept UI specification and WYSIWYG prototyping tool.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2011/10/modelling-the-user-interface-the-video/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Essential on Alt.Net Hispano</title>
		<link>http://pjmolina.com/metalevel/2011/07/essential-on-alt-net-hispano/</link>
		<comments>http://pjmolina.com/metalevel/2011/07/essential-on-alt-net-hispano/#comments</comments>
		<pubDate>Sun, 03 Jul 2011 08:46:15 +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=723</guid>
		<description><![CDATA[The Alt.NET Hispano group has published my VAN about Code generation with Essential. The recording was done in Spanish. La comunidad Alt.NET Hispano ha publicado la VAN (desconferencia) sobre Generación de código con Essential que tuvimos el pasado dia 11 de junio. Si estás interesado en MDD, generación de código y como aplicarlo con Essential, [...]]]></description>
			<content:encoded><![CDATA[<p>The <a title="Alt.NET Hispano" href="http://altnethispano.org">Alt.NET Hispano</a> group has published my VAN about <a title="Generación de Código con Essential" href="http://altnethispano.org/wiki/van-2010-05-28-generacion-de-codigo-con-essential.ashx">Code generation with Essential</a>. The recording was done in Spanish.</p>
<p>La comunidad Alt.NET Hispano ha publicado la VAN (desconferencia) sobre <a title="Generación de código con Essential" href="http://altnethispano.org/wiki/van-2010-05-28-generacion-de-codigo-con-essential.ashx">Generación de código con Essential</a> que tuvimos el pasado dia 11 de junio. Si estás interesado en MDD, generación de código y como aplicarlo con Essential, este video grabado para la comunidad en español es un buen punto de partida.</p>
<p>Mi agradecimiento a Alt.NET Hispano por el interés en la materia y la invitación a divulgarlo.</p>
<p><a title="Descarga directa: Essential Video" href="http://content.screencast.com/users/AltNetHispano/folders/VAN/media/512cfc98-8e47-48a2-8781-a22bf3f40af9/van-2011-06-11.flv?downloadOnly=true">Descarga directa del video</a> (562 Mb).</p>
<p>&nbsp;</p>
<p><span id="more-723"></span></p>
<p><object id="scPlayer" width="700" height="468" data="http://content.screencast.com/users/AltNetHispano/folders/VAN/media/512cfc98-8e47-48a2-8781-a22bf3f40af9/flvplayer.swf" type="application/x-shockwave-flash"><param name="movie" value="http://content.screencast.com/users/AltNetHispano/folders/VAN/media/512cfc98-8e47-48a2-8781-a22bf3f40af9/flvplayer.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><param name="flashVars" value="thumb=http://content.screencast.com/users/AltNetHispano/folders/VAN/media/512cfc98-8e47-48a2-8781-a22bf3f40af9/FirstFrame.jpg&amp;containerwidth=800&amp;containerheight=468&amp;analytics=UA-21341284-1&amp;content=http://content.screencast.com/users/AltNetHispano/folders/VAN/media/512cfc98-8e47-48a2-8781-a22bf3f40af9/van-2011-06-11.flv&amp;blurover=false" /><param name="allowFullScreen" value="true" /><param name="scale" value="showall" /><param name="allowScriptAccess" value="always" /><param name="base" value="http://content.screencast.com/users/AltNetHispano/folders/VAN/media/512cfc98-8e47-48a2-8781-a22bf3f40af9/" />Unable to display content. Adobe Flash is required.</object></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2011/07/essential-on-alt-net-hispano/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://content.screencast.com/users/AltNetHispano/folders/VAN/media/512cfc98-8e47-48a2-8781-a22bf3f40af9/van-2011-06-11.flv&amp;amp" length="589272873" type="video/x-flv" />
<enclosure url="http://content.screencast.com/users/AltNetHispano/folders/VAN/media/512cfc98-8e47-48a2-8781-a22bf3f40af9/van-2011-06-11.flv?downloadOnly=true" length="589272873" type="video/x-flv" />
		</item>
		<item>
		<title>Code Generation 2011: a personal review</title>
		<link>http://pjmolina.com/metalevel/2011/05/code-generation-2011-a-personal-review/</link>
		<comments>http://pjmolina.com/metalevel/2011/05/code-generation-2011-a-personal-review/#comments</comments>
		<pubDate>Tue, 31 May 2011 10:50:17 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[cg2011]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[language workbench]]></category>
		<category><![CDATA[lwc]]></category>
		<category><![CDATA[report]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=702</guid>
		<description><![CDATA[Once again, back home after the most exciting till date edition of the Code Generation conference in the latest years. The co-allocation of the Language Workbenches Competition has been a great incentive to attract all of us to join and present alternatives to a great challenge in the domain of modeling and code generation. In [...]]]></description>
			<content:encoded><![CDATA[<p>Once again, back home after the most exciting till date edition of the <a title="CG2011" href="http://www.codegeneration.net/cg2011/index.php">Code Generation conference</a> in the latest years. The co-allocation of the <a title="LWC2011" href="http://www.languageworkbenches.net/">Language Workbenches Competition</a> has been a great incentive to attract all of us to join and present alternatives to a great challenge in the domain of modeling and code generation.</p>
<p>In this long post, I want to share my personal view about these days, and for sure, take note it could be partial and subjective. So, be kind to review also the comments as seen by others like <a title="Johan LWC2011 review" href="http://www.theenterprisearchitect.eu/archive/2011/05/26/language-workbench-competition-2011">Johan den Haan</a>, <a title="Markus on LWC2011" href="http://voelterblog.blogspot.com/2011/05/language-workbench-competition-2011.html">Markus Völter</a>, <a title="Angelo LWC &amp; CG report" href="http://www.hulshout.nl/blog/2011/05/29/language-workbench-competition-2011-code-generation-2011/">Angelo Hulshout</a>, <a title="Marco on LWC2011 and CG2011" href="http://www.modeldrivenstar.org/2011/05/highlights-from-lwc-2011-language.html">Marco Bambrilla</a>, or <a title="About modeling workbenches" href="http://mariot-thoughts.blogspot.com/2011/05/about-modeling-workbenches.html">Mariot Chauvin</a> to cite a few and more expected to come. Find the majority of the pointers at the <a href="http://modeldrivensoftware.net/">http://modeldrivensoftware.net</a></p>
<p>In this edition, the conference has been deeply covered via twitter using <a title="CG2011" href="http://twitter.com/#!/search/%23cg2011">#cg2011</a> and <a title="LWC11" href="http://twitter.com/#!/search/%23lwc11">#lwc11</a></p>
<p>As expected, I will be only be able to comment about the sessions I personally have attended. Running three tracks in parallel always force us to choose one and miss two other great sessions.</p>
<p><span id="more-702"></span></p>
<h2>Day 0. The Language Workbenches Competition</h2>
<p>Ten tools were presented in a marathonian session exactly allocating 40 minutes per tool. The Angelo’s egg-timer was implacable: Whenever it rang reaching the agreed time, the speakers suddenly stopped talking unable to end a simple phrase.</p>
<p>The challenge was a competition without a winner or loser, mainly because there was no prize to win (may be next year a generous sponsor could change that). The main objective is to <strong>compare </strong>how different tools are able to complete a common problem facing modeling, model transformations and code generation to multiple platforms.</p>
<p>Johan den Haan has prepared a detailed report of the tools presented. <a title="Johan on LWC2011" href="http://www.theenterprisearchitect.eu/archive/2011/05/26/language-workbench-competition-2011">Take a look on it</a>.</p>
<p>From my side, I have created a <a title="LWC2011 feature matrix" href="https://spreadsheets.google.com/spreadsheet/ccc?key=0AoxxO-Frx5JsdFcwMGQtdzBjNzhfQUxZT1dJSWdtYXc&amp;hl=es">feature matrix</a> for comparing the different approaches stressing what I see as different in each tool. It is not complete: some information is missing and some other not yet contrasted so take it as a beta version to be improved.</p>
<p>With respect to my beloved tool <a title="Essential" href="pjmolina.com/essential">Essential</a>, I have to say that I received a very nice feedback from the audience. See a sample of the twitted comments:</p>
<p style="padding-left: 30px;"><strong>kthoms:</strong> @pmolinam Has a high voltage notebook &#8211; projector crashed on plugging in. Now let&#8217;s see how he could improvise the situation #lwc11</p>
<p style="padding-left: 30px;"><strong>stevekmcc</strong>:  @pmolinam Showing #Essential: major theme is separation of concerns, so opposite to Rascal #lwc11</p>
<p style="padding-left: 30px;"><strong>stevekmcc:</strong> #Essential looks very clean compared to other text or text-projection workbenches #lwc11</p>
<p style="padding-left: 30px;"><strong>delphinocons:</strong> RT @stevekmcc: #Essential looks very clean compared to other text or text-projection workbenches #lwc11 &lt;== I agree. Relaxing to the eyes.</p>
<p style="padding-left: 30px;"><strong>delphinocons:</strong> #lwc11 The Essential metamodel is smaller than EMFs, and a little larger than MetaEdit+&#8217;s</p>
<p style="padding-left: 30px;"><strong>meinte37:</strong> @pmolinam is the first to finish before the egg timer at #lwc11. That&#8217;s because he cuts down to the Essential-s <img src='http://pjmolina.com/metalevel/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p style="padding-left: 30px;"><strong>JohanDenHaan:</strong> @pmolinam nice presentation and demo, good mix of slides and demo. Great timing!</p>
<p style="text-align: center;"><img class="aligncenter" title="LWC 2011 family photo." src="http://i233.photobucket.com/albums/ee316/angelopa/DSC00667.jpg" alt="" width="500" /></p>
<p style="text-align: center;">&nbsp;</p>
<h2>Day 1. Code Generation 2011 starts</h2>
<p>I started the day giving an initial talk about <strong>Introduction to Model Driven Software Development</strong>.</p>
<div style="width:425px" id="__ss_8150087"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/pjmolina/introducing-mdsd" title="Introducing MDSD">Introducing MDSD</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8150087" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<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>
</p></div>
<p>Later on, Obeo guys (Mariot Chauvin &amp; Stéphane Begaudeau) presented how to use Obeo Designer to create sensible graphical DSL tools on the top of the Eclipse framework. Obeo uses model interpretation over the EMF models to create in runtime GMF based editors.</p>
<p><strong>Panel: Build or Buy &#8211; who should develop and own your DSLs and generators?</strong></p>
<p>We played a nice game with the following roles:</p>
<ul>
<li>Juha-Pekka Tolvanen (MetaCase), the moderator</li>
<li>Jos Warmer (Independent) , the homegrow tool maker</li>
<li>Pedro J. Molina (Capgemini) , the consultant</li>
<li>Johan den Haan (Mendix), the tool vendor</li>
</ul>
<p>More soon than later, Andrew Watson and Markus Völter join with the rest of the audience in the discussion. Of course, there is not an easy answer to that question and depends a lot of the particular context and requiring thinking about, but not only on:</p>
<ul>
<li>the experience of the in-house developers with MDD</li>
<li>the level of criticality of the process for the business to be automated (core or non -core to business)</li>
<li>the existence of tools able to provide the requested features</li>
<li>the need to split the business process from the current technology</li>
</ul>
<p>&nbsp;</p>
<p><strong>Type Systems for DSLs.</strong></p>
<p>Markus Völter presented a nice library he has been creating to help with the type checking in expressions of DSLs. After a gentle introduction to type checking, he introduced three different approaches to the problem:</p>
<ul>
<li>recursive type-checkers,</li>
<li>union based (a la MPS) and</li>
<li>table driven (a declarative way of the first one).</li>
</ul>
<p>&nbsp;</p>
<h2>Day 2. Getting speed</h2>
<p><strong>Terrence Parr Keynote</strong> was one of the more awaited talks in the conference. Many of us use their tools on a daily basis like <a title="ANTLR" href="http://antlr.org/">ANTLR</a> and <a title="StringTemplate" href="http://stringtemplate.org/">StringTemplate</a>. So having him here is quite special. In his keynote titled “Why program by hand in five days what you can spend five years of your life automating?” he let us some pearls like the following ones highly twitteable:</p>
<ul>
<li>“XML is not for humans beings, just for machines.” (Donald Knuth, the father of TeX support this, and I am not going the one to contradict this)</li>
<li>“Programmers are lazy.” Yes, we are. We don’t like repetition of tasks, trivial or not, because we get bored, so we always try to automate things. And this is our main driver and source of fun.</li>
<li>“Automate the things more prone to human errors”. Automate the tedious work!</li>
<li>Running a test does not increase the quality of the code.</li>
</ul>
<p><strong> </strong></p>
<p><strong>MetaEdit+ Hands On</strong></p>
<p>MetaCase MetaEdit+ was of my pending tools to try from previous editions of CG. I had the tool, I had the chances but not the inline tutor to allow me to get advantage of the tool. Risto, Steven and Juha-Pekka did a great work in the “hands on” session been able to not to left away any of the practitioners. They have did this lots of time and they are good teaching it.</p>
<p>Definitely, the learning curve of MetaEdit is not big, but for sure, you need the initial proper training to get the grasp of the tool to start creating your own graphical DSLs. Been a tool implemented in Smalltalk and using a repository, MetaEdit provided an edition experience quite different to the ones more used to edit traditional files.</p>
<p><strong>Generating Graphical DSLs</strong></p>
<p>Marko Boger, one of the fathers of the Poseidon tool, presented his work about applying DSLs to describe graphical DSLs. The idea was well received, and later on in the local pub called The Castle Inn an informal Birds of a Feather session was settled to create the Spray project to join forces and create a common core DSLs to help in generating graphical DSLs.</p>
<p><strong>Modeling the UI</strong></p>
<p>To end the day I gave a talk about how we take in account to model the User Interface of a business application. The topic is important because the IU is not always pondered as it should be. The UI is the only aspect the user will see from any system we build. Approaches to modeling and code generation based in a pattern based approach were presented with the help of briefs live demos using Essential and Io tools.</p>
<div style="width:425px" id="__ss_8150041"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/pjmolina/modelling-the-user-interface" title="Modelling the User Interface">Modelling the User Interface</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8150041" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<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>
</p></div>
<p><span style="font-size: 20px; font-weight: bold;">Day 3. Closing a great edition</span></p>
<p><strong>Ed Merks Keynote</strong></p>
<p>Ed is the leader of the<a title="EMF" href="http://www.eclipse.org/modeling/emf/"> Eclipse Modeling Framework</a> based in Montreal and now working also for Itemis. In his keynote he remarked some of the prejudices people use to have against code generation and (UML) modeling, leaving also some great quotes:</p>
<ul>
<li>“Resistance is futile: Best practices will be assimilated by code generators.”</li>
<li>“XMI sucks because XML sucks. XMI sucks for transitivity.”</li>
</ul>
<p>Ed talks reinforces my idea that, talking about software, Europeans are usually more instructed in the university in formal methods and theories where Americans uses to be quite more practical and take a more empirical approach to software engineering or computer science.</p>
<p>It is interesting to see that mostly all the participants in the LWC with the exception of Intentional are Europeans. Well, Charles Simony (the owner) and Mats Helander (the presenter) both from Intentional are also Europeans. So, there is no interest in Language Workbenches in other continents apart from Europe?</p>
<p><strong> </strong></p>
<p><strong>Goldfish Bowl: “Code Generation as a normal programming practice”</strong></p>
<p>Jos Warmer lead this session were all the interested participants shared thoughts about how to integrate code generation with traditional styles of development.</p>
<p>How to create a good template: Go to your best developers and tell them: “write this DAO code file as it were the last time in your life you are going to write it”. Then abstract it and you got it. If the further in time found a bug, they can always came back and fix the template also.</p>
<p><strong>Final panel: “Models, DSLs, Transformations: The Next 5 years”</strong></p>
<p>In the closing plenary session, future directions and incoming challenges were addresses by the panelist and the audience.</p>
<ul>
<li>Andrew Watson focused on resolving business problems instead of technological problems.</li>
<li>Jos Warmer encourages us to build better tools and better languages.</li>
<li>Johan den Haan pinpointed some incoming trends: Mobile, cloud, social, multi-core and poliglot languages.</li>
<li>Wim Bast commented about the need for parallelization and the best way to achieve it is to move to a more declarative DSLs allowing us to exploit the intrinsic parallelization in the execution of such algorithms. Wim pointed out also about the difficulty of making prediction about the future.</li>
</ul>
<p>So, I put my two cents remembering the genial quote of <a title="Alan Kay" href="http://en.wikipedia.org/wiki/Alan_Kay">Alan Kay</a>: “The best way to predict the future is to invent it”.</p>
<p>My position is that we have the tools, we have the knowledge… so, we should put all our efforts in improving the tools. Good tools will make MDD mainstream soon or later. So, I want to see it happening: let’s improve our tools now better sooner than later.</p>
<h2>Conclusions</h2>
<p>The <strong>LWC</strong> has been a great idea made real. Having the opportunity to compare solutions and styles of tools has been quite productive for all of us. All the participants were happy with the idea of repeating next year and the next edition is looking for the next challenge.</p>
<p><strong>Twitter</strong> this years has expanded the real-time conference far away that the walls of the College. Colleagues like Rui Curado, Xavier Seignard, Jordi Cabot, Angel J. Lopez or the AltNet Hispano group to cite a few I am aware were tracking the conference and taking part via twitter. This enriches the experience and makes it more participative.</p>
<p>Some tools, highly integrated with the Eclipse environment were suffering during the conference live demo failures. This is not an exception, but a warning signal that some task that should be easy are getting complex and complex when the number of dependencies to run a simple task is out of control. The <strong>friction level</strong> of these environments is definitely something to keep as low as possible. Model interpretation versus traditional code generation can be helpful also to reduce startup times and opening another instance of the same environment.</p>
<p>The new born project <strong><a title="Spray project" href="http://code.google.com/a/eclipselabs.org/p/spray/">Spray</a></strong> (as reported by <a title="Karsten on Spray" href="http://kthoms.wordpress.com/2011/05/30/spray-a-quick-way-to-create-graphiti/">Karsten</a>) can be quite helpful as a neutral DSL definition for describing graphical DSL in an technological agnostic way. The risk however is if it is too close to a certain technology stack like GMF or Graphiti it will only be used in such context. To my understanding, a Spray definition should be implementable also in Microsoft DSL Tools  to put a extreme counterpart.</p>
<p>If a contest for the novel tool of the year will have ever existed in CG, IMHO this year had been awarded to <strong>The Whole Plaftorm</strong> by Riccardo Solmi and Enrico Persiani. They have a nice and cool looking projectional tool that was deeply unknown to all of us. So, welcomed to the club!</p>
<p><strong>XML</strong> is definitely not for humans (Terrence Parr) and XMI sucks for XML transitivity (Ed Merks).</p>
<p>Finally <strong>Mark Dalgarno</strong> and <strong>his team</strong> were <strong>superb</strong> organizing all the logistics to make all of this possible. Thanks to everyone and see you there next year.</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2011/05/code-generation-2011-a-personal-review/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>First public Essential 0.4.44 Beta!</title>
		<link>http://pjmolina.com/metalevel/2011/05/first-public-essential-beta/</link>
		<comments>http://pjmolina.com/metalevel/2011/05/first-public-essential-beta/#comments</comments>
		<pubDate>Wed, 11 May 2011 09:11:57 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[language workbench]]></category>
		<category><![CDATA[mdsd]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=681</guid>
		<description><![CDATA[The Code Generation 2011 conference and the Language Workbenches Competition 2011 Workshop are quite close in the calendar. I want to celebrate it with the MDD community sharing my work on Essential (a tool designed for acquiring speed with Model Driven Development). On 11th may 2011, version 0.4.44 has been released as the first public beta. Essential [...]]]></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="Code Generation 2011" href="http://www.codegeneration.net/cg2011/index.php">Code Generation 2011</a> conference and the <a title="LWC2011 Workshop" href="http://www.languageworkbenches.net/workshop.html">Language Workbenches Competition 2011 Workshop</a> are quite close in the calendar.</p>
<p>I want to celebrate it with the MDD community sharing my work on <strong><a title="Essential - MDD tool" href="http://pjmolina.com/metalevel/essential">Essential</a> </strong>(a tool designed for acquiring speed with Model Driven Development). On 11th may 2011, version 0.4.44 has been released as the<strong> first public beta</strong>.</p>
<p>Essential is a meta-modeling and code generation tool providing specific DSLs to define and consume:</p>
<ul>
<li>Metamodels</li>
<li>Models</li>
<li>Templates (using StringTemplate) &amp;</li>
<li>Transformations (Model2Text and Model2Model)</li>
</ul>
<div>With a strong emphasis on model interpretation, prototyping a code generation can be done in an agile way without the need of generating any infrastructure boilerplate or meta-editor plumbling accessories.</div>
<div>The main goals of the tools is to enable software architects to:</div>
<div>
<div>
<ul>
<li>Prototyping software directly from models in a unexpensive way</li>
<li>Evolve theirs software architectures as fast as possible experimenting with design choices</li>
<li>Benchmarking and comparing architectures</li>
<li>Code generation</li>
</ul>
</div>
</div>
<div>For all of you interested in, feel free to <a title="Essential evaluation version download" href="http://pjmolina.com/essential/download-eval/">try it</a>, enjoy and provide feedback.</div>
<p>Try it also with the sample projects created for the <a title="LWC2011 Essential sample models" href="http://code.google.com/p/lwc11-essential/downloads/list">LWC 2011 challenge</a>.</p>
<p><a title="Essential evaluation version download" href="http://pjmolina.com/essential/download-eval/"><img class="alignnone" title="Download Essential" src="/img/blue-box256.png" alt="" width="100" height="100" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2011/05/first-public-essential-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting ready for CG2011</title>
		<link>http://pjmolina.com/metalevel/2011/04/getting-ready-for-cg2011/</link>
		<comments>http://pjmolina.com/metalevel/2011/04/getting-ready-for-cg2011/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 17:56:03 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[cg2011]]></category>
		<category><![CDATA[lwc]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=676</guid>
		<description><![CDATA[Code Generation 2011 is the leading European conference on modeling and code generation. It&#8217;s a great opportunity to meet with the experts in the field and share the latest research in the area. The invited speakers this year are very, very interesting: Terrence Parr, well known by its work on teaching compiler construction and the [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Code Generation 2011" href="http://www.codegeneration.net/cg2011"><img class="alignright" title="CG2011 logo" src="http://www.codegeneration.net/cg2011/images/cg2011-225x58.gif" alt="" width="225" height="58" /></a></p>
<p><a title="Code Generation 2011" href="http://www.codegeneration.net/cg2011">Code Generation 2011</a> is the leading European conference on modeling and code generation. It&#8217;s a great opportunity to meet with the experts in the field and share the latest research in the area.</p>
<p>The invited speakers this year are very, very interesting:</p>
<ul>
<li><a title="Terrence Parr" href="http://www.codegeneration.net/cg2011/keynotes.php#parr">Terrence Parr</a>, well known by its work on teaching compiler construction and the great tools <a title="ANTLR" href="http://www.antlr.org">ANTLR </a>and <a title="StringTemplate" href="http://www.stringtemplate.org">StringTemplate</a>, and</li>
<li><a title="Ed Merks" href="http://www.codegeneration.net/cg2011/keynotes.php#merks">Ed Merks</a>, the leader of the Eclipse Modeling Framework</li>
</ul>
<p>As a novelty, previous to the conference itself the first edition of the <a title="LWC 2011" href="http://www.codegeneration.net/cg2011/LWC-CG2011.php">Language Workbenches Competition</a> will take place on May 24<sup>th</sup> in the same venue.</p>
<p>In this edition, I will be there again, more active if ever, taking part with some activities:</p>
<ul>
<li>On May 24<sup>th</sup>, presenting <a title="Essential" href="http://pjmolina.com/metalevel/essential">Essential</a> in the scope of the <a title="LWC 2011" href="http://www.languageworkbenches.net/workshop.html">Language Workbenches Competition</a></li>
<li>On 25<sup>th</sup>, presenting on <a title="Introducing Model Driven Software Development" href="http://www.codegeneration.net/cg2011/sessioninfo.php?session=101">Introducing Model Driven Software Development </a></li>
<li>And, later on, taking part in the panel <a title="Build or buy - who should develop and own your DSLs and generators?" href="http://www.codegeneration.net/cg2011/sessioninfo.php?session=6">Build or Buy &#8211; who should develop and own your DSLs and generators?</a> organized by <a title="Juha-Pekka Tolvanen" href="http://www.metacase.com/blogs/jpt/blogView">Juha-Pekka Tolvanen</a> from <a title="Metacase" href="http://www.metacase.com">Metacase</a></li>
<li>Finally, on 26<sup>th</sup>, discussing about <a title="Modelling the User Interface" href="http://www.codegeneration.net/cg2011/sessioninfo.php?session=14">Modelling the User Interface</a></li>
</ul>
<p>As always, I’m looking forward to meet again the code generation community.</p>
<p>Take a look to the <a title="CG2011 Programme" href="http://www.codegeneration.net/cg2011/programme.php">full programme</a> and don’t miss the chance.</p>
<p>See you in Cambridge!</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2011/04/getting-ready-for-cg2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Essential submission to LWC11</title>
		<link>http://pjmolina.com/metalevel/2011/02/essential-submission-to-lwc11/</link>
		<comments>http://pjmolina.com/metalevel/2011/02/essential-submission-to-lwc11/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 18:21:06 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[language worbench]]></category>
		<category><![CDATA[lwc]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=660</guid>
		<description><![CDATA[As blogged before, at CG2010 a group of interest came up with a proposal for creating a Language Workbenches Competition and the first edition will be taking place in Cambridge May 24th, just before CG2011. I submitted a proposal with Essential for participation in LWC11. It&#8217;s going to be a great forum for comparing language [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="LWC11 - Essential" src="http://code.google.com/p/lwc11-essential/logo?cct=1298648794" alt="" width="153" height="47" />As <a title="LWC11" href="http://pjmolina.com/metalevel/2010/07/language-workbench-competition-2011/">blogged before</a>, at CG2010 a group of interest came up with a proposal for creating a <a title="Language Workbenches Competition" href="http://www.languageworkbenches.net/">Language Workbenches Competition</a> and the first edition will be taking place in Cambridge May 24th, just before <a title="CG2011" href="http://www.codegeneration.net/cg2011">CG2011</a>.</p>
<p>I submitted a <a href="http://lwc11-essential.googlecode.com/files/lwc11-essential.pdf">proposal</a> with <a title="Essential" href="http://pjmolina.com/metalevel/essential/">Essential</a> for participation in LWC11. It&#8217;s going to be a <strong>great forum for comparing language workbenches</strong> capabilities and the state of the art in the area. If interested, track the progress here <a href="http://www.languageworkbenches.net/submissions.html">LCW11</a>.</p>
<p>During the last weeks I&#8217;ve been working a little, replacing the old Microsoft Oslo dependencies to MGrammar inside Essential to an alternative parsing solution. The MS Oslo and later SQL Server Modeling never passed from the CTP stage and finally were discontinued. Therefore, I couldn&#8217;t ship a product in such conditions and finally decided to change it.</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2011/02/essential-submission-to-lwc11/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>StringTemplate: a great template engine for code generation</title>
		<link>http://pjmolina.com/metalevel/2010/11/stringtemplate-a-great-template-engine-for-code-generation/</link>
		<comments>http://pjmolina.com/metalevel/2010/11/stringtemplate-a-great-template-engine-for-code-generation/#comments</comments>
		<pubDate>Fri, 26 Nov 2010 00:34:34 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[cg2011]]></category>
		<category><![CDATA[stringtemplate]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=637</guid>
		<description><![CDATA[When building a new tool for modelling and code generation like Essential, one has to rethink again what template engine use to drive all the machinery. In code generation contexts, template engines are a good field for innovation and your choice will be with you probably for the full lifetime of your tool. In this [...]]]></description>
			<content:encoded><![CDATA[<div>
<p><img class="aligncenter" title="Paper Templates, licensed CC Attribution by Edinburgh City of Print" src="http://farm3.static.flickr.com/2581/4203670446_ef6f914933.jpg" alt="Paper Templates, licensed CC Attribution by Edinburgh City of Print" width="500" height="213" /></p>
<p>When building a new tool for modelling and code generation like <a title="Essential / MDD tool" href="http://pjmolina.com/metalevel/essential/" target="_blank">Essential</a>, one has to rethink again what template engine use to drive all the machinery. In code generation contexts, template engines are a good field for innovation and your choice will be with you probably for the full lifetime of your tool.</p>
<p>In this post, I will try to introduce and explain why <a title="StringTemplate" href="http://www.stringtemplate.org/" target="_blank">StringTemplate</a> is a superb engine for doing code generation and why you should consider it if dealing with a code generation scenario.<span id="more-637"></span></p>
<p>As commented before in <a title="Selecting a template engine for code generation" href="http://pjmolina.com/metalevel/2009/06/choosing-a-template-engine-for-code-generation/" target="_blank">other post</a>, I felt in love with StringTemplate in 2005 when I discovered <a title="ANTLR" href="http://www.antlr.org/" target="_blank">ANTLR</a> and StringTemplate during the development of a MDD workbench for a customer. Prior to that date, I had tested many template engines and also developed on my own a pair of them. For one reason or another, I was not comfortable with the language, the coupling of the template with the transformation control, or the maintainability of the templates in the long term. As the time goes by, this last point arises as crucial to maintain and evolve your architecture.</p>
<p>Therefore, one could say that I am being quite loyal to StringTemplate for the last 5 years, and that too much for technology, moreover, for a product software. And such loyalty is definitely not my merit for not been promiscuous in this issue, but a merit of StringTemplate: I’m still looking for new ways for improvement and didn’t find one better to my needs. (<em>Note: this is probably the best compliment I never paid to a piece of good software.</em>)</p>
<p>Some products shine thanks to the many features they provides, StringTemplate sparkles for avoiding adding features in the wrong place. I will elaborate a bit more on that.</p>
<h2><span style="font-weight: normal;">MVC</span></h2>
<p><strong><a title="Model View Controller Pattern" href="http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller" target="_blank">Model View Controller</a></strong> is an old and good “classic” architectural pattern providing a solution to organize the pieces of a user interface. Originally proposed by <a title="Trygve Reenskaug" href="http://en.wikipedia.org/wiki/Trygve_Reenskaug" target="_blank">Trygve Reenskaug</a>, in Smalltalk in 1979. It has been lately again on fashion, especially in the building of web sites, multi-channel user interfaces and promoting UI testability thanks to the application of the principle of <a title="Separation of Concerns" href="http://en.wikipedia.org/wiki/Separation_of_concerns" target="_blank">Separation of Concerns</a> that the pattern provides.</p>
<p>There are many variants or dialects to MVC out there, but the simple one is enough to describe our scenario: code generation.</p>
<p>Code generation can be seen as a classic MVC domain with the three roles easily identifiable:</p>
<ul>
<li><strong>A model</strong>: the variable data in consideration, the metadata to be generated in this case.</li>
<li><strong>A view</strong>: the template with the form of the target language and providing holes or slots to be later being fill in (the output).</li>
<li>And the transformation <strong>controller</strong>: the piece in charge of selecting with model parts should be selected, combine and finally inserted in which template holes/slots to render the final and concrete view.</li>
</ul>
<p>The main problem with traditional template engines is that there are lots of template engines that mix the last two roles (for example all coming from web development in the flavour of JSP or  ASP variants). The view and the transformation controller are intermingled and this situation, in the long time, is not good. I found this strict separation of responsibilities crucial for the maintainability of the templates.</p>
<p>And StringTemplate does exactly that. It syntax and features, although could be strange for the first time, was carefully selected to not allow you to do control choices in the view. It allows to define templates, declare named holes (or slots) and an inline for-each and if statements.</p>
<p>Let’s review a basic sample of StringTemplate syntax:</p>
<pre class="brush:c-sharp;">group mail;

genMail(msg)::=&lt;&lt;
Mail: Subject $msg.Subject$
From: $msg.From:genAddress()$
To: $msg.To:genAddress(); separator=”, “$
&gt;&gt;

genAddress()::=&lt;&lt;$it.Name$ ($it.Email$)&gt;&gt;</pre>
<p>The sample contains two templates: one for a mail, and a second one for each address. Templates can have parameters explicit parameters like name, but also there is an implicit keyword (it) to reference the current iterating context.</p>
<p>Named holes or slots are defined are marked with $expression$ where expression is a constrained expression resolution of the model properties received.</p>
<p>In the sample, genAddress() template will be invoked to resolve the From and To properties. Assuming that <strong>From</strong> is a monovaluated property and that <strong>To</strong> is a list, the template iterates throw the collection received and evaluates the template for each item. Note the separator modifier used to describe how items should be rendered.</p>
<p>That’s all in the template, the view. It’s forbidden to compute any value inside the template. The idea is that only read operations are going to be done into the model to get the data needed to fill the template.</p>
<h2>How to consume the template?</h2>
<p>From the transformation side (the controller) consuming a template is something such straightforward as the following one:</p>
<pre class="brush:c-sharp;">//1. Select the template
StringTemplate tlp = group.InstanceOf(“genMail”);
//2. Set parameters
tlp.setAttribute(“msg”, message);
//3. Get the result
string result = tlp.ToString();</pre>
<p>It is frequent to find people complaining StringTemplate about not having enough freedom for example to call functions from the inside. But this is not a missing feature, this done on purpose to assure no side effects of such computations. The motto is; if you need to compute something, do it the transformation stage.</p>
<p>This only has covered a very basic intro to StringTemplate. If you are interested you can browse for more contents in the main documentation of StringTemplate.</p>
<p>Of course, <a title="Essential" href="http://pjmolina.com/metalevel/essential/" target="_blank">Essential</a> uses StringTemplate!</p>
<h2>ST &amp; ANTRL on Code Generation 2011</h2>
<p>By the way, the father of StringTemplate and the superb meta-compiler tool called ANTLR is <a title="Terrence Parr" href="http://www.antlr.org/wiki/display/~admin/Home" target="_blank">Terrence Parr</a>. He teaches compiler construction in the <a title="University of San Francisco" href="http://www.cs.usfca.edu/" target="_blank">University of San Francisco</a>.</p>
<p>I was planning to prepare this post for some months, but in the meanwhile, <a title="Mark Dalgarno's blog" href="http://blog.software-acumen.com/" target="_blank">Mark Dalgarno</a> (the main organizer of Code Generation Conferences) has surprises us announcing the next keynote for CG2011.</p>
<p>I am quite happy to see that, as announced by Mark, that in the next edition of <a title="Terrence Parr" href="http://www.codegeneration.net/cg2011/keynotes.php" target="_blank">Code Generation 2011 Terrence is going to be present as one of the invited keynotes</a>!</p>
<p>So, if you are interested in all of these topics, join us and meet Terrence on May 25-27, 2011 in Cambridge, UK on <a title="Code Generation 2011" href="http://www.codegeneration.net/cg2011/" target="_blank">Code Generation 2011</a>.</p>
<p><a title="Call for spekers" href="http://www.codegeneration.net/cg2011/speak.php" target="_blank">The call for speakers for CG2011</a> is open till January 15<sup>th</sup> 2011.</p>
<p><strong>To know more:</strong></p>
<ol>
<li><a title="Enforing String MV in template engines" href="http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf" target="_blank">Enforcing Strict Model-View Separation in Template Engines</a>, Terrence Parr</li>
<li><a title="StringTemplate" href="http://www.stringtemplate.org" target="_blank">StringTemplate</a></li>
<li><a title="ANTLR" href="http://www.antlr.org" target="_blank">ANTLR</a></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2010/11/stringtemplate-a-great-template-engine-for-code-generation/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

