<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Semantic Werks &#187; gmf</title>
	<atom:link href="http://neilernst.net/tag/gmf/feed/" rel="self" type="application/rss+xml" />
	<link>http://neilernst.net</link>
	<description>Thoughts on people, machines and systems.</description>
	<lastBuildDate>Mon, 30 Jan 2012 19:08:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='neilernst.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/1f438fa0e70f195d1594a7a5a6b0aaed?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Semantic Werks &#187; gmf</title>
		<link>http://neilernst.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://neilernst.net/osd.xml" title="Semantic Werks" />
	<atom:link rel='hub' href='http://neilernst.net/?pushpress=hub'/>
		<item>
		<title>My experience with model-driven development</title>
		<link>http://neilernst.net/2009/12/30/my-experience-with-model-driven-development/</link>
		<comments>http://neilernst.net/2009/12/30/my-experience-with-model-driven-development/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 19:08:32 +0000</pubDate>
		<dc:creator>Neil</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[gmf]]></category>
		<category><![CDATA[mda]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[openome]]></category>
		<category><![CDATA[osgi]]></category>

		<guid isPermaLink="false">http://www.neilernst.net/?p=908</guid>
		<description><![CDATA[The model-driven development paradigm seems to be undergoing an enormous increase in attention lately, with domain-specific languages (DSLs) and language workbenches seeing the most interest. Do these techniques merit the attention? One problem in science is getting communities to question their base assumptions. I&#8217;m talking about the introductory remarks in a paper, things like &#8220;since [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilernst.net&amp;blog=62241&amp;post=908&amp;subd=fink08&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The model-driven development paradigm seems to be undergoing an enormous increase in attention lately, with domain-specific languages (DSLs) and language workbenches seeing the most interest. Do these techniques merit the attention?</p>
<p>One problem in science is getting communities to question their base assumptions. I&#8217;m talking about the introductory remarks in a paper, things like &#8220;since software development is so hard, it is agreed that a model-driven approach (MDA) is needed&#8221;. These remarks go unnoticed in reviews because the reviewers must agree with that remark, otherwise why participate in the community? And the people who disagree aren&#8217;t reviewing these papers to question the assumptions. I&#8217;m not picking on MDA, it happens in every community &#8211; e.g. mining software repositories.</p>
<p>I&#8217;ll just add a contradictory data point to the hype surrounding MDA and DSLs. My chief complaint is that an MDA solution, at least <a href="http://www.eclipse.org/modeling/gmf/">the one I tried</a>, shifts the burden of <a href="http://en.wikipedia.org/wiki/Accidental_complexity">accidental complexity</a> to a new toolchain, but does little or nothing to address the essential complexity. It does seem axiomatic in software research that what we ought to focus on is the essential complexity.</p>
<p>Our experience was with developing a custom user interface for an open-source modeling tool we use as a base for our research &#8211; <a href="https://se.cs.toronto.edu/trac/ome">OpenOME</a>. Originally OpenOME code was completely customized, initially using Java and low-level libraries like Swing. Later, we determined that the four/five year old code base was too cluttered to support new improvements, so, in fine software developer fashion, we determined to <a href="http://en.wikipedia.org/wiki/Not_Invented_Here">rewrite the entire thing</a>.</p>
<p>We wanted to leverage the Eclipse ecosystem, so we committed to the Eclipse platform and tooling. By itself, though, Eclipse is just a plugin architecture, so we had a good deal of flexibility in development choices. Had we wanted, we could have written a tool based solely on the plugin extensions and registries, using something like SWT to customize the entire GUI, develop our own data store, etc. This is the approach similar tools like <a href="http://sra.itc.it/tools/taom4e/">TAOM4E</a> and <a href="http://jucmnav.softwareengineering.ca/ucm/bin/view/ProjetSEG/WebHome">jUCMNav</a> took.  Instead we used the GMF model solution. GMF asks you to create a domain model in EMF and then a graphical (UI) model to manipulate these domain elements. This is intuitively appealing, and indeed, in just a few minutes you can get a pretty slick UI working, complete with layout, export, zooming, etc. Writing this from scratch would take a lot longer, I think it is safe to say.</p>
<p>The problem is that if you have a UI that is not similar to the one GMF comes with (e.g., manipulating simple boxes and arrows), you suddenly find yourself in the perilous situation of one foot in the canoe and one on the dock. You must make customizations (e.g., adding arrows between elements *within* other elements) deep inside the generated code, and signal this with compiler directives. There isn&#8217;t (or wasn&#8217;t, anyway) a good way to show only the customized code, requiring you to wade through thousands of lines of boilerplate to find the line you need to change. And finally, you must adopt the GMF architecture whole-sale, and all its cognitive mismatches.</p>
<p>I suspect the non-GMF solution is much more amenable to extension and customization. In hindsight, although initially I was keen on the MDA approach, I think MDA is best suited to developing domain elements &#8212; e.g., generating data objects with getters and setters. The complexity of <a href="http://www.cs.toronto.edu/km/istar/">i* syntax </a>is just to great to be accommodated.</p>
<p>Nowadays, my preferred approach is to leverage component-based software engineering. In this paradigm, which admittedly might also be amenable to model-driven code generation, the developer is just weaving components (libraries, services, what have you) together. Python is a great example of doing this. You leverage someone else&#8217;s GUI code by providing an output format it understands, someone&#8217;s data storage engine, someone&#8217;s logic for calculating graph traversals, etc. I think GMF would have been much more useful if it was (architecturally) closer to OSGI than a true MDA approach.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fink08.wordpress.com/908/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fink08.wordpress.com/908/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fink08.wordpress.com/908/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fink08.wordpress.com/908/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fink08.wordpress.com/908/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fink08.wordpress.com/908/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fink08.wordpress.com/908/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fink08.wordpress.com/908/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fink08.wordpress.com/908/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fink08.wordpress.com/908/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fink08.wordpress.com/908/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fink08.wordpress.com/908/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fink08.wordpress.com/908/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fink08.wordpress.com/908/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilernst.net&amp;blog=62241&amp;post=908&amp;subd=fink08&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilernst.net/2009/12/30/my-experience-with-model-driven-development/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/141272f109fbf660ffa001647f17d368?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fink08</media:title>
		</media:content>
	</item>
		<item>
		<title>Thesis idea: debugging model-driven development</title>
		<link>http://neilernst.net/2008/10/08/thesis-idea-debugging-model-driven-development/</link>
		<comments>http://neilernst.net/2008/10/08/thesis-idea-debugging-model-driven-development/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 18:57:07 +0000</pubDate>
		<dc:creator>Neil</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[gmf]]></category>
		<category><![CDATA[MDD]]></category>

		<guid isPermaLink="false">http://www.neilernst.net/?p=719</guid>
		<description><![CDATA[Here&#8217;s a possible thesis topic: One of the problems with designing your system with a model-driven (MDD) approach is tracing back the source of the errors (and let&#8217;s be honest, there will always be an error, if not a bug). Often, the MDD tool is very opaque as to what is happening during the transformation. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilernst.net&amp;blog=62241&amp;post=719&amp;subd=fink08&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a possible thesis topic:</p>
<p>One of the problems with designing your system with a model-driven (MDD) approach is tracing back the source of the errors (and let&#8217;s be honest, there will always be an error, if not a bug).</p>
<p>Often, the MDD tool is very opaque as to what is happening during the transformation. My best example is the Eclipse GMF toolset. While it hides a lot of unnecessary code, typically low-level UI and abstraction handling code, it can also hide code that might be relevant if your system doesn&#8217;t work as expected.</p>
<p>Here&#8217;s a simple example: I need to add a custom function to my graphical element. I&#8217;ve searched the poorly documented GMF builder, and there&#8217;s no way to make this change in the models (graphical, tooling, domain, mapping). I read up on GEF and make the change in the generated code.  Later, my colleague re-generates the code, without being aware of my changes. Eclipse preserves them, because I used the <em>@generated NOT</em> keyword, but now he wants to find any of this code. There&#8217;s no good way to tell my IDE to only show code that <strong>isn&#8217;t</strong> generated. But that might acutely important if I&#8217;m maintaining a MDD-constructed system.</p>
<p>Another example is LISP macros. In LISP there are two compile steps. One step expands all the macros one defines into their normal LISP form. This is similar to the preprocessing step in C, but much more powerful. The code is then compiled (or evaluated) as appropriate. However, the macro expansion step is (to my limited knowledge) opaque. It isn&#8217;t easy to debug what is going on when the macro expansion is performed (other than trying it out). And I expect debugging the final program would leave lots of references to the eventual, generated code, rather than the actual macro responsible (which is what you want to see). A tool that could trace from final form to macro form would be invaluable.</p>
<p>I think a lot of this is similar to Greg Wilson&#8217;s &#8220;cognitive gap between what programmers write and what they have to debug&#8221; <a href="http://www.acmqueue.com/modules.php?name=Content&amp;pa=printer_friendly&amp;pid=247&amp;page=2">(ACM Queue)</a>.  There&#8217;s plenty of logic wrapped up in an ANT build script that is difficult to parse with the current tooling. That is even more so for model-driven development tools. And most research into these tools ignores these practical problems in favour of recondite mathematical theorizing about model merging and model translation. This is not merely a matter of implementation details!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fink08.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fink08.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fink08.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fink08.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fink08.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fink08.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fink08.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fink08.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fink08.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fink08.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fink08.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fink08.wordpress.com/719/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fink08.wordpress.com/719/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fink08.wordpress.com/719/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=neilernst.net&amp;blog=62241&amp;post=719&amp;subd=fink08&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://neilernst.net/2008/10/08/thesis-idea-debugging-model-driven-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/141272f109fbf660ffa001647f17d368?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fink08</media:title>
		</media:content>
	</item>
	</channel>
</rss>
