<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:ebpmlChannel="http:/www.ebpml.org/blog">
    <channel>
        <title>Carnets de Bord</title>
        <link>http://www.ebpml.org/ebpml_radio.htm</link>
        <description>A weblog about Service Oriented, Process Centric, Model Driven Programming Models</description>
        <language>en-us</language>
        <copyright>Copyright 2001-2008 ebPML.org</copyright>
        <lastBuildDate>Fri, 18 Dec 2009 18:00:00 GMT</lastBuildDate>
        <generator>FingerTips</generator>
        <managingEditor>jdubray@gmail.com</managingEditor>s
        <webMaster>info@ebpml.org</webMaster>


<item>
		<title>[Other] I moved my blog</title>
			<link>http://feeds.feedburner.com/CarnetsDeBord</link>
			<description>
			<![CDATA[
			<p>I moved my blog <a href="http://feeds.feedburner.com/CarnetsDeBord">here.</a> Please update your subscription.</p>
			]]></description>
			<pubDate>04/27/2010</pubDate>
			<guid>http://feeds.feedburner.com/CarnetsDeBord</guid>
</item>

<item>
		<title>[MDE] Xtext wins Eclipse best new feature award</title>
			<link>http://www.infoq.com/news/2010/03/eclipse-awards</link>
			<description>
			<![CDATA[
			<p>I am not sure this is "just" a feature, but this is well deserved. <a href="http://www.openarchitectureware.org/pub/documentation/4.3/html/contents/xtext_tutorial.html">Xtext is probably the most significant innovation in Software engineering in the last 20 years</a>. Xtext a key foundation of Metamodel-Oriented Programming. Markus, you can be really proud !</p>
			<p>Congrats !!!</p>
			]]></description>
			<pubDate>03/23/2010</pubDate>
			<guid>http://www.infoq.com/news/2010/03/eclipse-awards</guid>
</item>

			
 <item>
		<title>[REST] REST Versioning Explained</title>
			<link>http://www.ebpml.org/blog/217.htm</link>
			<description>
			<![CDATA[
			  <p>I was disappointed -to say the least- by 
			  <a href="http://www.stucharlton.com/blog/archives/2010/03/versioning-restful-web-resources---a-survey.html#comments">Stu's response on REST 
			  versioning</a>. I was expecting a lot more. I am not sure what 
			  to say about that:</p>
			  <blockquote>What is missing, on the other hand, is a general purpose agent programming model that allows the easy expression and construction of hypermedia-consuming, goal-driven applications. </blockquote>
			  <p>Let's be polite and argue that there are many simpler problems 
			  we need to solve before we tackle that one. So, allow me to write 
			  the response I expected from him.</p>
			  <p>First, I would have like to see Stu's model of REST. I am not 
			  sure you can just stumble upon the kind of programming model he is 
			  talking about. It has to be &quot;designed&quot;. So, since Stu understands actions and resource lifecycles, he could have at 
			  least articulated how they fit in REST, since no one is talking 
			  about the &quot;uniform interface&quot; any longer, it would have 
			  been timely to establish that once and for all. It would for sure limit the amount of CRUD being generated.</p>
			  <p>So, allow me to offer, what I think REST could have been 
			  (actually is):</p>
			  <p><a href="http://www.ebpml.org/blog/img32.jpg">
			  <img alt="" height="580" src="http://www.ebpml.org/blog/img32.jpg" width="703" /></a></p>
<p>There 
			  are 3 RESTs out there. Roy's REST or REST Core. That's not very 
useful by itself as a programming model. Then there is the practical REST 
			  which adds queries (with properties) and collections. That's the CRUD of REST. The &quot;Full REST&quot; has actions and events. How do actions 
			  relate to a resource? <a href="http://www.ebpml.org/blog/30.htm">Their invocation triggers a transition from 
			  one state of the resource to the next</a>. These concepts have been on 
			  the table since the 60s. But in 2010, we are still debating about 
			  it. WOA ! That is called progress. </p>
		  <p>How are actions expressed in 
			  the full REST? Quite simply, RESTafarians do that every day: you 
		  just transform a verb into POST + noun. For 
			  instance you want to pay a bill, you POST a payment to the Bill 
		  resource. Yeap, that easy, in French this is called &quot;encoding&quot;.
			  <a href="http://martinfowler.com/articles/richardsonMaturityModel.html">
			  I am glad ThoughtWorks </a>charges you $300 an hour to teach you 
			  this kind of thing, this is as close as printing money as it can 
		  be. </p>
			  <p>So, in case you still wonder, no, an interface to a 
resource is not uniform, far from it -even Jim and Savas finally got that after 
		  3 painful years-, no, CRUD is not the way to go, and no, people that tell you 
&quot;Data Services work&quot;, have no idea what they are talking about. Sorry. 
		  If it is not clear to everyone, a CRUD based programming model forces 
		  you to push &quot;reusable&quot; business logic on the client of the resource, 
			  creating large levels of redundancy, not to mention that hardly 
			  anyone will let the state of their resources be 
		  decided on the client. For those of you that still don't know what 
		  REST means, it stands for REpresentational State Transfer, not for 
		  REsource Data Access. A representation of the state of the resource is 
		  passed to the client which indicates the actions he or she can 
		  take. Brilliant, Roy's REST is brilliant, he never claimed that what you 
		  needed was a bunch of CRUD. </p>
		  <p>That's why Actions work so well with hypermedia, actions are 
		  embedded in resource representations, this actually happens billions of times 
		  a day on traditional web pages. But mysteriously, the RESTafarians did 
		  not notice it, unless they don't want to &quot;talk&quot; about it (Stu?). I 
		  mean in the Cloud even Tim Bray finally figured out that indeed there 
		  were actions like &quot;start or stop a server&quot;, how about &quot;reboot a 
		  server&quot;. He even figured out, by himself, that you can't CRUD those 
		  actions. </p>
		  <p>This little action &quot;secret&quot; is an inconvenient truth because the RESTafarians precisely sold you on the idea that &quot;contracts&quot; did not 
		  exist: all this XML Schema and WSDL crap was just here to jack up the 
		  price of consulting engagements and that they will save the world by 
		  ridding it of these pesky contracts. If that is not boloney, what is 
		  Stu? But I digress. Let's go back to the main problem: REST Versioning.</p>
		  <p>Before I continue on, I want to reiterate why versioning is so 
		  important in connected systems. It is really important because you 
		  can't predict the future. Yes, you can't build an asset today with the 
		  expectation that in 3 years someone will come around and consume that 
		  asset as is. It might happen less than 1% of the time. Don't waste 
		  your time designing for that or Dino Buzzati will end up writing a 
		  book about it. So, how do you go about versioning in a 
		  connected system? It's quite simple. It is not the new consumers who 
		  &quot;reuse&quot; the old service. It is the old consumers who can still operate 
		  with the &quot;new version of the service&quot;. <strong><span class="style3">
		  Reuse happens the other way around. 		  </span></strong>This is what is called &quot;Forwards Compatible 
		  Versioning&quot; because it is different from &quot;Backwards Compatible&quot;. 
		  Backwards compatibility happens when you change the consumer and it 
		  can still talk to the old service. Versioning is the reason why RPC 
		  failed, this where CORBA failed, this is where JEE failed. This is 
		  where Spring fails. Versioning is actually such an acute problem even 
		  in monolithic programming models that people had to invent new 
		  technologies like OSGi to deal with it in&nbsp; OO. I am glad that 
		  people like Dave Chappell are paid thousands of dollars per hour to 
		  claim that &quot;SOA is a failure&quot;, that &quot;Data Services are the only things 
		  that work&quot; and all that because
		  <a href="http://www.davidchappell.com/HTML_email/Opinari_No16_8_06.html">
		  you can't predict the future</a>.. What a gig.</p>
		  <p>Kjell and I wrote an article on
		  <a href="http://www.infoq.com/articles/contract-versioning-comp2">how 
		  &quot;Forwards Versioning&quot; works in Web Services</a>. I would 
		  recommend you take a look at it if you are not familiar with the 
		  concept.</p>
			  <p>So, now that we have a 
		  full model of REST, what can be versioned and how does it work? How 
		  different is it from Web Services?</p>
			  <p>
			  <a href="http://www.ebpml.org/blog/img33.jpg">
			  <img alt="" height="615" src="http://www.ebpml.org/blog/img33.jpg" width="710" /></a></p>
		  <p>Well, there is a lot that can change in a REST-based information 
		  system. Let's review the use cases one by one.</p>
			  <table cellpadding="0" cellspacing="0" class="style1" style="width: 100%">
				  <tr>
					  <td class="style2" style="width: 157px"><strong>Use Cases</strong></td>
					  <td class="style2" style="width: 285px"><strong>Variants</strong></td>
					  <td class="style2"><strong>Solutions</strong></td>
				  </tr>
				  <tr>
					  <td class="style1" rowspan="2" style="width: 157px; height: 15px">
					  Network authority</td>
					  <td class="style1" style="height: 15px; width: 285px">
					  Network authority is gone</td>
					  <td class="style1" rowspan="2" style="height: 15px">If the 
					  network authority is gone, you are out of luck, however, 
					  if it is still there, it can express to resource consumers 
					  that the resource can be found somewhere else (HTTP code 
					  301 Moved Permanently). This is a bit more work than 
					  changing the endpoint of a Web Service, but it works. In 
					  particular the client can adapt to the change without 
					  configuration like in Web Services.</td>
				  </tr>
				  <tr>
					  <td class="style1" style="height: 15px; width: 285px">
					  Resource has moved to a new network authority</td>
				  </tr>
				  <tr>
					  <td class="style1" style="width: 157px" rowspan="2">
					  Resource</td>
					  <td class="style1" style="width: 285px">New resource added 
					  to the network authority</td>
					  <td class="style1" rowspan="2">Since REST encourages the use of 
					  Resource Representations, there is consequence, as long as 
					  the changes do not impact the resource representations. 
					  When a new resource is added to the Network Authority, 
					  there is no interference with existing ones.</td>
				  </tr>
				  <tr>
					  <td class="style1" style="width: 285px">The resource 
					  structure has changed</td>
				  </tr>
				  <tr>
					  <td class="style1" style="width: 157px" rowspan="2">Query</td>
					  <td class="style1" style="width: 285px">Add new queries</td>
					  <td class="style1" rowspan="2">REST makes it easy to add new queries 
					  to an existing resource. There is no penalty for &quot;adding&quot; 
					  a query. Existing Consumers are not impacted.<br />
					  <br />
					  Operations can be added easily in WSDL, without 
					  communicating the changes to the new client, it is just as 
					  easy.<br />
					  <br />
					  When you change an existing query, you want to make sure 
					  that your changes remain compatible. That's fairly easy to 
					  do, both in REST and Web Services.</td>
				  </tr>
				  <tr>
					  <td class="style1" style="width: 285px">Change existing 
					  queries</td>
				  </tr>
				  <tr>
					  <td class="style1" style="width: 157px">New State</td>
					  <td class="style1" style="width: 285px">New state implies 
					  new transition</td>
					  <td class="style1">That's a change in the resource 
					  structure. So the same comments apply.<br />
					  <br />
					  Removing states is trickier because it generally implies 
					  that some actions can no longer be invoked.</td>
				  </tr>
				  <tr>
					  <td class="style1" style="width: 157px">New transition</td>
					  <td class="style1" style="width: 285px">&nbsp;</td>
					  <td class="style1">Well, that's a new action, so a new 
					  POST+noun. A new sub-resource need to be added to the main 
					  resource. Just like in Web Services, you can add more 
					  operations without impacting existing consumers as long as 
					  the new version of the state machine is compatible with 
					  the old one. Old consumers will simply be unaware of the 
					  new transitions and states.</td>
				  </tr>
				  <tr>
					  <td class="style1" style="width: 157px">New Media Type</td>
					  <td class="style1" style="width: 285px">&nbsp;</td>
					  <td class="style1">Changes in media types can be made forwards 
					  compatible courtesy of XML Schema, just like for their 
					  WS-* counterpart.</td>
				  </tr>
			  </table>
			  
			  
			  
			  
			  
			  <br />
		  	<br />
			  <p>Check, Check, Check, just like Stu predicted, Web Services 
			  forwards compatible versioning foundation came from the W3C so it 
			  works for REST as well. It actually works even better than Web 
			  Services because you don't even waste time updating a contract. 
			  You just create a new URI syntax, you email it to the new 
			  consumers and voila. </p>
			  <p>I forgot something? What did I forget? Ah, a small detail. 
			  You remember, I keep saying &quot;REST couples access and identity&quot;. 
			  Such a small little detail. It means that the business logic 
			  behind a GET ResourceRepresentation or a POST Noun is bolted to 
			  the URI. So when I say &quot;GET /customers/123&quot; I am bolted to a piece 
			  of code annotated with the innovative JAX-RS notations. That's a 
			  problem because /customers/123, as Stu explains it, is also an 
			  identity, a foreign key to somebody else. So I can't change it (remember cool URIs 
			  don't change). How do I go around that? Pete Williams provided a 
			  work around using media types. Usually Media types are used for 
			  content negotiation, he suggests to create a media type per 
			  content type, per version. It works. We know how well people are 
			  going to keep track of their media types and versions.&nbsp; Just 
			  try to submit these types to the IANA ...</p>
			  <p>Does that work for POST + noun? It could. But, it is also safe to use a URI syntax 
			  because a POST of a resource to /customers/123/payments is 
			  actually an operation of a service end point, REST allows the server to append the 
			  payments in a different locations, so it would be quite ok to POST 
			  at /customers/123/payments/v1 and at /customers/123/payments/v2. 
			  The payments though would all be under /customers/123/payments/</p>
			  <p>So yes, versioning kind of works. Are we done? No, there is 
			  still another detail missing: the unit of versioning. Yes 
			  &quot;real-world&quot; resources have complex lifecycles and often composite 
			  states. Each composite state/lifecycle corresponds to a unit of 
			  versioning. Unfortunately in REST, there is no &quot;unit of 
			  versioning&quot;. As you have seen, you add stuff here and there 
			  and before you know it you lost track completely of what exactly 
			  you are versioning. The key problem is that your business logic 
			  for a single resource could potentially be dangling off dozens of 
			  endpoints. So you have to painfully manage all these annotations 
			  in a forwards compatible way. I am not sure that is less work than 
			  creating a WSDL. In REST, there is not even a trace of the 
			  beginning of a &quot;unit of versioning&quot; beyond the URI itself. I will 
			  let you compare that with the elegance of versioning with Web 
			  Services contracts where you can replace the the business logic 
			  layer at the change of an endpoint and assemble different WSDLs 
			  for the same service and different consumers based on what you 
			  want them to understand. As a matter of fact the key design 
			  pattern in SOA is the separation between the interface and the 
			  implementation? So what do the RESTafarians argue about? They want 
			  you to bolt the interface to the implementation. They even create 
			  annotations to make sure you'll never set free from this 
			  architectural atrocity. It's like designing a house with the 
			  bathroom behind the front door. RPC, CORBA, JEE all bolted the 
			  interface to the implementation. Somehow, Web Services escaped 
			  that fate. But the old CORBA guys couldn't live with it.
			  <a href="http://www.ebpml.org/blog/202.htm">They actually want the 
			  interface to be directly generated from the code</a>.</p>
			  <p>Did I 
			  talk about bi-directional interfaces? Ah yes, REST can't do 
			  bi-directional interfaces either. <a href="http://xmpp.org/">HTTP 
			  can</a>, but not REST.</p>
			  <p>So Stu, I am sorry, a million times sorry. You'll retire before 
			  you can build a decent programming model on top of REST. In the 
			  meantime, you are creating a spaghetti plate at the scale of the 
			  Web. The RESTafarians, have simply have no idea 
			  about what it means to build an information system, and I am 
			  sorry, but I think you belong to that category. You have given no 
			  evidence of a basic programming model and please let's not even 
			  talk about CRUD.</p>
			  <p>So I am sorry, REST as a programming model, REST as middleware, 
			  the (other) REST as I call it (to make it clear nothing that I say 
			  here applies to Roy's REST), that REST is fraud, a massive fraud, 
			  imposing billions and billions of lost productivity in IT, setting 
			  us back 10-15 years, and I 
			  wish, Stu, that you would either tell people to hold on, until you 
			  figure it out, or if you already came to the same conclusion that 
			  you would be open to speak about it.</p>
			  
			  

			]]></description>
			<pubDate>03/18/2010</pubDate>
			<guid>http://www.ebpml.org/blog/217.htm</guid>
</item>

 <item>
		<title>[REST] Subbu's book is out</title>
			<link>http://www.subbu.org/blog/2010/03/restful-web-services-cookbook-released</link>
			<description>
			<![CDATA[
			<p>This is the only REST book I bought and will ever buy. Unlike others Subbu has left the "what is RESTful?" quesion out of the book and focused on how to use HTTP to the best of your advantage. That I want to know about.</p>
			]]></description>
			<pubDate>03/12/2010</pubDate>
			<guid>http://www.subbu.org/blog/2010/03/restful-web-services-cookbook-released</guid>
</item>
			  
			


 <item>
		<title>[MDE] From DSL to MOP</title>
			<link>http://www.ebpml.org/blog/216.htm</link>
			<description>
			<![CDATA[
        	  
			  <p>Johan published <a href="http://www.theenterprisearchitect.eu/archive/2010/03/09/best-practices-for-dsls-and-model-driven-development">a great summary</a> of a somewhat old article from
			  <a href="http://www.voelter.de/">Markus Voelter</a>: &quot;<a href="http://www.jot.fm/issues/issue_2009_09/column6/index.html">Best 
			  Practices in Model Driven Development</a>&quot;. I say somewhat old, 
			  because the article was written in 2005 and Markus's position may 
			  have evolved since that time. I'd like to take a moment to express 
			  how <a href="http://www.infoq.com/articles/mop">Metamodel Oriented 
			  Programming r</a>edefines the foundation of DSLs.</p>
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
			  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
			  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  Sources for the language</h4>
			  </span></span>
			  <p>I no longer think that Domain DSL make much sense. Domain 
			  experts rarely have the semantic precision that would allow 
			  supporting their work with a DSL. Note that technical people don't 
			  exhibit much more precision. Just look at the REST space and see 
			  how people &quot;interpret&quot; the semantics of a resource, four verbs and 
			  URI. Ok, maybe the problem is that REST is so poor semantically 
			  that they &quot;have to&quot; add their own semantics, but still. </p>
			  <p><em>Recommendation 1</em>: build your language for the solution 
			  space, leave the problem space to creative expression. </p>
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
			  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
			  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  Limit Expressiveness</h4>
			  </span></span>
			  <p>On the contrary, I would argue that the problem of limited 
			  expressiveness is precisely the explosion of &quot;interpretations&quot; of 
			  semantics. Again, use REST as an example: everyone needed a query 
			  language. What happened? everyone created his/her own. It may not 
			  happen on the same scale in your organization, but it will happen 
			  enough to be a real pain.</p>
			  <p><em>Recommendation 2</em>: Make your language as expressive as 
			  it is needed but not more</p>
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
			  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
			  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  Notation, Notation, Notation</h4>
			  </span></span>
			  <p>Text is beautiful. Do not mix the need for graphical 
			  visualization with the need for graphical design. Most often 
			  textual definitions can be converted (automatically) in graphics. </p>
			  <p><em>Recommendation 3</em>: use graphical editors as rarely as 
			  you can. Prefer textual notations with graphical renditions</p>


			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
			  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
			  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  Viewpoints</h4></span></span>
			  <p>
			  The goal is not to have everyone express something, the goal is to 
			  build solutions fast. The design of the language must be driven by 
			  how fast you can translate requirements into a working solution. 
			  Take the example of BPMN. BPMN was designed to let a certain 
			  category of people express their view point. That's great. When it 
			  comes to create &quot;executable BPMN definitions&quot;, well the little 
			  known secret is that developers stuff the definitions with tons of 
			  arcane, hard to debug, scripts. This is highly inefficient. From 
			  my own experience, it can take 3-5 times as much to write a 
			  solution using an executable BPMN engine than writing it in 3GL.
			  </p>
			  <p>
			  <em>Recommendation 4</em>: design the language for rapidly 
			  building solutions (from as few viewpoints as possible)&nbsp; </p>
			  <p style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  &nbsp;</p>
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
		  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
		  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
		  Partitioning</h4>
		  </span></span>
			  <p>
			  In MOP this best practice translates as rules that enable 
			  execution elements to control the lifecycle of other elements. The 
			  language needs to be one, however, you should restrict with 
			  precision the lifecycle operations a model element can invoke on 
			  another. I would not call that partitioning</p>
			  <p>
			  <em>Recommendation 5</em>: understand with precision which model 
			  element control the lifecycle of other model elements</p>
			  	 
			  
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
		  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
		  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
		  Evolution</h4>
			  </span></span>
			  	 
			  
			  <p>This is a difficult topic, MOP doesn't necessary help here. 
			  However, because MOP forces you to think through the entire 
			  lifecycle of the model elements and the relationships between the 
			  model elements at the implementation level, you may end up needing 
			  far fewer evolutions. DSL focuses only on the associations between 
			  model elements, not there interelated lifecycles.</p>
			  <p><em>Recommendation 6</em>: Think through the entire design of 
			  the language, especially the lifecycles</p>
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
			  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
			  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  The fallacy of generic languages</h4>
			  </span></span>
			  <p>We agree, yet, as you focus on the solution side, you should 
			  remain as generic as you can, what is wrong is the monadism of 
			  general purpose languages, not genericity per say. </p>
			  <p><em>Recommendation 7:</em> Think polyadic programming languages</p>
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
			  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
			  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  Learn from 3 GLs</h4>
			  </span></span>
			  <p>I would say, learn from both 3GLs and DSL. This is what MOP is 
			  about, bringing cogency and polyadism together in one efficient 
			  formalism. </p>
			  <p><em>Recommendation 7</em>: Design Cogent Polyadic languages</p>
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
			  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
			  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  Who are the first class citizens?</h4>
			  </span></span>
			  <p>You don't have to choose, this is the wrong choice. DSL forces 
			  you through that choice because second class citizens are created 
			  to implement the cogent aspects of the model. MOP focuses on first 
			  class citizens without the need of artificial model elements 
			  needed to express execution elements.</p>
			  <p><em>Recommendation 8</em>: Avoid creating model elements to 
			  express execution semantics</p>
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
			  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
			  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  Libraries (and Patterns)</h4>
			  </span></span>
			  <p>I have mixed feelings about that one. Why would you create 
			  libraries and patterns in your DSL? They exist only because of the 
			  monadism of the general purpose languages. Programming Patterns 
			  would have never existed if programming languages were polyadic. </p>
			  <p><em>Recommendation 9</em>: Rely on as few libraries and 
			  patterns as possible on top of your language, prefer a higher 
			  degree of polyadism</p>
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
			  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
			  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  Teamwork support</h4>
			  </span></span>
			  <p>Go Textual !!!!!!!</p>
			  <p><em>Recommendation 10</em>: MOP is textual in nature, structure 
			  your language to facilitate teamwork and leverage all the 
			  source-based tools </p>
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
			  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
			  <h3 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  Models Interpretation vs. Code Generation</h3>
			  </span></span>
			  <p>The bad reputation of Code Generation is due to the lack of 
			  execution semantics in DSL, i.e. DSLs are not cogent. MOP 
			  languages facilitate the transformation (not generation) into 
			  general purpose languages because the execution semantics are half 
			  way there. </p>
			  <p><em>Recommendation 11</em>: Prefer &quot;transformation&quot; to model 
			  interpretation or code generation</p>
			  <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">
			  <span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 18px; ">
			  <h4 style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
			  Don't modify generated code</h4>
			  </span></span>
			  <p>Yes, but you can modify &quot;transformed&quot; code. Round-trip 
			  engineering in code generation can be very tricky. However, using 
			  a transformation paradigm in lieu of code generation make the 
			  round-tripping a lot easier. </p>
			  <p><em>Recommendation 12</em>: You may use round-tripping safely 
			  when it makes sense, but avoid it if you can</p>
			  <p>I am not quite sure today, why the DSL community do not see how 
			  much simpler their life would be by making DSL cogents. I also 
			  don't see why the general purpose language guys keep annotating 
			  their language to death. They annotate it so much that they can't 
			  see the semantics behind their annotation. But, hey, what do I 
			  know? I am just a MOPer. </p>
			]]></description>
			<pubDate>03/10/2010</pubDate>
			<guid>http://www.ebpml.org/blog/216.htm</guid>
</item>
			  


 <item>
		<title>[REST] RESTless in Seattle</title>
			<link>http://www.ebpml.org/blog/215.htm</link>
			<description>
			<![CDATA[
       	  
			 		  <p>Lori MacVittie wrote
			  <a href="http://devcentral.f5.com/weblogs/macvittie/archive/2010/03/02/rest-api-developers-between-a-rock-and-a-hard-place.aspx">
			  a following post</a>&nbsp;to
			  <a href="http://www.ebpml.org/blog/214.htm">my post </a>on REST 
			  that is both refreshing and terrifying. Refreshing because well it 
			  kind of puts together a lot of the untold truth of our industry: </p>
			  <ol>
				  <li>Standards sucks and are ever changing, they don't fit with 
				  each other or offer some kind of upward compatibility</li>
				  <li>REST is not as &quot;easy&quot; as some people would like others to 
			  believe it is</li>
				  <li>Innovation in 2010 is no free lunch, lots of people who 
			  don't understand a thing about innovation get in the way for 
			  various reason (greed, fud, ego...) and the innovators have to 
			  deal day in and day out with their stupid goals and constrains, 
			  not to mention unsustainable ROI</li>
			  </ol>
			  <p>Thank you Lori. It's refreshing that someone is not talking 
			  about the Lalaland of XYZ and is not afraid of using &quot;real&quot; words, 
			  not to mention avoid bolonizing their readers. There are so few 
			  like you that it is worth mentioning.</p>
			  <p>Your post is also terrifying because it leaves little hope to 
			  achieve building anything right. Actually, the probability to get 
			  the right thing accomplished is as high as winning the lottery. In 
			  many ways, I agree with you. When you see products like the iPhone 
			  and you think at the alignment of technologies that needed to happen 
			  to realize such a device, only a strong 
			  culture and &quot;proprietarism&quot; can deliver any kind of innovation today. 
			  Standards are the wrong approach to innovation. They kill 
			  innovation. Pretending innovation is easy is the biggest lie of 
			  the 21st century. No, innovation is complex and requires a bunch of 
			  smart people working together without just ROI, greed, or fear as 
			  a driver. I think the next decade will see the emergence of new 
			  winners who understand innovation at that level. Of course, there 
			  are counter examples to my argument, company like WSO2 have 
			  innovated on top of less than optimal standards, but I think they 
			  remain the exception, and it is probably due to their strong 
			  culture and sense of values.</p>
			  <p><a href="http://www.stucharlton.com/blog/archives/2010/03/versioning-restful-web-resources---a-survey.html">Stu also provided a follow up to my challenge to define a 
			  version strategy</a>. Don't get me wrong, I like Stu, he is incredibly 
			  competent and he backs his work with a long experience. But, Stu 
			  failed to provide a compelling strategy for versioning. He 
			  actually admits that:</p>
			  <blockquote>In a RESTful approach, URIs are your &quot;foreign keys&quot;, and if you 
			  embed a version identifier in them, they need to change when you 
			  upgrade to the next version if you embed those versions in the 
			  URI. Assuming you can't convince your resource owners to use 
			  languages with version identifiers as a MIME parameter or inside 
			  the language itself, how is that done?&nbsp; </blockquote>
			  <p>&nbsp;This is what I mean by REST couples access and identity. </p>
			  <p>Stu also conveniently forgets to speak about the &quot;unit of 
			  versioning&quot;. Nearly every resource is participating in different 
			  lifecycles. A resource has different states, composite states. 
			  Each lifecycle has a set of actions (which are always encoded as POST+noun in REST). This is the unit of versioning. A comment from 
			  Mike actually speaks to that very problem:</p>
			  <blockquote>there are many times when an application-flow update requires 
			  support for side-by-side versioning </blockquote>
			  <p>Yeah, the RESTafarians finally touch the real problems or 
			  building real systems, not just blog posts and plain vanilla 
			  articles or useless annotations. I actually argue that without the 
			  visibility of an explicit lifecycle, these problems are impossible 
			  to solve. You can't version an action API if you don't understand 
			  the states and transitions behind them.&nbsp; </p>
			  <p>Of course, people like Stu or Mike will never admit such a 
			  thing publicly. They will always say, &quot;but... if you look here ... 
			  there is a promising solution that that problem&quot;. Boloney guys. 
			  Pure and complete boloney. We have endured 3 years of that 
			  boloney. REST is not a programming model. It has never been and it 
			  will never be. Deal with it.</p>
			  <p>I have ordered Subbu's book (hopefully he will give me an 
			  autograph), so I'll wait until I get it to make my final comments 
			  on versioning, but so far I think (reluctantly) that Stu belongs 
			  to the REST wall of shame. It is time to get real and provide real 
			  recommendations. Recommendations that don't let people loose like 
			  the ones that have been made for so long and got us where we are 
			  today, i.e. nowhere. </p>
			  <p>I see no success in sight and no sign of possible success 
			  either. The (other) REST is a fraud, nothing less, nothing more. 
			  Innovation is not &quot;serendipitous&quot; innovation requires hard work 
			  and courage. Innovation doesn't happen in pretty power points and 
			  IEEE articles.</p>
			  <p>RESTfully yours,</p>
			  <p>JJ-</p>
			]]></description>
			<pubDate>03/05/2010</pubDate>
			<guid>http://www.ebpml.org/blog/215.htm</guid>
</item>




    </channel>
</rss>


