<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xml:lang="en" xml:base="http://iansrobinson.com/wp-atom.php">
	<title type="text">iansrobinson.com</title>
	<subtitle type="text">Ian Robinson's Blog</subtitle>

	<updated>2010-02-02T10:42:25Z</updated>
	<generator uri="http://wordpress.org/" version="2.8">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://iansrobinson.com" />
	<id>http://iansrobinson.com/feed/atom/</id>
	

			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/iansrobinson" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="iansrobinson" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">iansrobinson</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><entry>
		<author>
			<name>iansrobinson</name>
						<uri>http://www.iansrobinson.com</uri>
					</author>
		<title type="html"><![CDATA[Hydras and Hypermedia at London Geek Night]]></title>
		<link rel="alternate" type="text/html" href="http://iansrobinson.com/2010/01/28/hydras-and-hypermedia-at-london-geek-night/" />
		<id>http://iansrobinson.com/?p=178</id>
		<updated>2010-02-02T10:42:25Z</updated>
		<published>2010-01-28T09:42:16Z</published>
		<category scheme="http://iansrobinson.com" term="Events" /><category scheme="http://iansrobinson.com" term="REST" />		<summary type="html"><![CDATA[

On February 11th I&#8217;ll be presenting Hydras and Hypermedia at London Geek Night.

Do you know what your enterprise apps get up to in their time off? Fighting fantasy, pick-your-path, hypermedia-driven, RESTful Web application adventures &#8211; of course.

In this speculative dungeon delve I&#8217;ll show how we can use hypermedia-driven Web applications to model rich workflows. We&#8217;ll [...]]]></summary>
		<content type="html" xml:base="http://iansrobinson.com/2010/01/28/hydras-and-hypermedia-at-london-geek-night/"><![CDATA[<div class="vcalendar">

<p>On February 11th I&#8217;ll be presenting <em>Hydras and Hypermedia</em> at <a href="http://londongeeknights.wetpaint.com/page/Hydras%20and%20Hypermedia" title="London Geek Night" target="_blank">London Geek Night</a>.</p>

<p>Do you know what your enterprise apps get up to in their time off? Fighting fantasy, pick-your-path, hypermedia-driven, RESTful Web application adventures &#8211; of course.</p>

<p>In this speculative dungeon delve I&#8217;ll show how we can use hypermedia-driven Web applications to model rich workflows. We&#8217;ll tackle the many-headed Hydra of HATEOAS, the &#8220;Hypermedia as the Engine of Application State&#8221; monster; level up through the Web services maturity heuristic; and meet the dwarves with grudges. On the way, we&#8217;ll learn how to model business processes as domain application protocols, implement them in terms of resource lifecycles, and advertise them using HTTP idioms, media types and link relation values.</p>

<dl id="hcalendar-Hydras-and-Hypermedia" class="vevent">
<dt>Event</dt>
<dd><a href="http://londongeeknights.wetpaint.com/page/Hydras%20and%20Hypermedia" class="url summary" title="London Geek Night" target="_blank">London Geek Night</a></dd>
<dt>Description</dt>
<dd><em class="description">Hydras and Hypermedia</em></dd>
<dt>Date</dt>
<dd><span class="eventdate">11th February</span></dd>
<dt>Time</dt>
<dd><span class="eventtime"><abbr title="20100211T1900+0100" class="dtstart">7 pm</abbr> &#8211; <abbr title="20100211T2200+0100" class="dtend">10 pm</abbr></span></dd>
<dt>Location</dt>
<dd class="location">
	<div class="vcard">
		<span class="fn org">ThoughtWorks UK Office</span>
		<div class="adr">
			<span class="street-address">Berkshire House</span>
			<span class="locality">168-173 High Holborn</span>
			<span class="region">London</span>
			<span class="postal-code">WC1V 7AA</span>
		</div>
	</div>
</dd>
</dl>

</div>]]></content>
		<link rel="replies" type="text/html" href="http://iansrobinson.com/2010/01/28/hydras-and-hypermedia-at-london-geek-night/#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://iansrobinson.com/2010/01/28/hydras-and-hypermedia-at-london-geek-night/feed/atom/" thr:count="5" />
		<thr:total>5</thr:total>
	</entry>
		<entry>
		<author>
			<name>iansrobinson</name>
						<uri>http://www.iansrobinson.com</uri>
					</author>
		<title type="html"><![CDATA[When to Use Atom]]></title>
		<link rel="alternate" type="text/html" href="http://iansrobinson.com/2010/01/19/when-to-use-atom/" />
		<id>http://iansrobinson.com/?p=170</id>
		<updated>2010-01-19T17:00:47Z</updated>
		<published>2010-01-19T17:00:47Z</published>
		<category scheme="http://iansrobinson.com" term="REST" />		<summary type="html"><![CDATA[There are two extremes of Atom usage: everything&#8217;s an Atom extension (direct extension) versus everything goes in the atom:content element (enveloping).

A little while ago, Bill de hÓra expressed his preference for direct extension over enveloping. At its worst, enveloping results in near anaemic Atom entries, with very few of the Atom metadata elements put to [...]]]></summary>
		<content type="html" xml:base="http://iansrobinson.com/2010/01/19/when-to-use-atom/"><![CDATA[<p>There are two extremes of Atom usage: <em>everything&#8217;s an Atom extension</em> (direct extension) versus <em>everything goes in the <code>atom:content</code> element</em> (enveloping).</p>

<p>A little while ago, Bill de hÓra expressed his preference for <a href="http://www.dehora.net/journal/2009/11/28/extensions-v-envelopes/" title="Extensions v Envelopes" target="_blank">direct extension over enveloping</a>. At its worst, enveloping results in near anaemic Atom entries, with very few of the Atom metadata elements put to good use, rightly prompting Bill&#8217;s question: &#8220;why bother using Atom at all?&#8221;</p>

<p>Like Bill, I&#8217;ve gone back and forth between these two options. At present, I&#8217;m inclined to use enveloping more than direct extension, but only if I can still put the Atom metadata to good use. If I find I&#8217;m having to fill out Atom metadata elements with lots of dummy information, just so that I can use Atom to transfer some opaque data between applications, I quickly turn to another format.</p>

<p>To my mind, Atom&#8217;s &#8220;meta-purpose&#8221; is to establish a domain processing context for some content. In AtomPub, Atom artefacts establish a publishing context for Web content. When used to establish this publishing context, the Atom artefacts are called collections and members, rather than feeds and entries.</p>

<p>I prefer not to extend Atom beyond the domain processing context I&#8217;m trying to model: instead, I push the thing to be processed down into the content. This allows for <em>media type composition</em>, whereby one media type processor hands off to another as it works its way through a representation. A reasonably &#8220;generic&#8221; Atom client can resurrect the domain processing context, which then remains in force whilst a specialized media type handler deals with the content (according to its media type).</p>

<p>In the past I&#8217;ve illustrated this point by showing how <a href="http://www.infoq.com/presentations/robinson-restful-enterprise" title="RESTful Enterprise Development" target="_blank">Atom feeds can be used to represent streams of events</a>. The event metadata maps nicely to Atom metadata. The content itself contains a snapshot of some other resource&#8217;s state at the point the event occurred. In other words, the Atom metadata establishes an event-ish processing context for the content. When the client invokes a specialised handler for the content, it does so in the knowledge that its dealing with a representation of state at a particular point of time.</p>

<p>If I can&#8217;t separate a given problem into 1) an activity and accompanying processing context (e.g. &#8220;eventing&#8221;, &#8220;publishing&#8221;), and 2) the thing to be acted on, I&#8217;ll consider using something other than Atom.</p>]]></content>
		<link rel="replies" type="text/html" href="http://iansrobinson.com/2010/01/19/when-to-use-atom/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://iansrobinson.com/2010/01/19/when-to-use-atom/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	</entry>
		<entry>
		<author>
			<name>iansrobinson</name>
						<uri>http://www.iansrobinson.com</uri>
					</author>
		<title type="html"><![CDATA[ThoughtWorks QTB Feb 2010]]></title>
		<link rel="alternate" type="text/html" href="http://iansrobinson.com/2010/01/12/thoughtworks-qtb-feb-2010/" />
		<id>http://iansrobinson.com/?p=164</id>
		<updated>2010-01-12T12:07:05Z</updated>
		<published>2010-01-12T12:07:05Z</published>
		<category scheme="http://iansrobinson.com" term="Agile" /><category scheme="http://iansrobinson.com" term="Behaviour-Driven Development" /><category scheme="http://iansrobinson.com" term="Events" /><category scheme="http://iansrobinson.com" term="SOA" />		<summary type="html"><![CDATA[I&#8217;ll be giving a ThoughtWorks Quarterly Technology Briefing in London and Manchester in a few weeks time, titled Business Architecture Foundations of IT.

I used to introduce this topic with a quote from Beckett&#8217;s Unnameable &#8211; &#8220;You must go on, I can&#8217;t go on, I&#8217;ll go on&#8221; &#8211; which nicely sums up the situation I see [...]]]></summary>
		<content type="html" xml:base="http://iansrobinson.com/2010/01/12/thoughtworks-qtb-feb-2010/"><![CDATA[<p>I&#8217;ll be giving a ThoughtWorks Quarterly Technology Briefing in London and Manchester in a few weeks time, titled <em>Business Architecture Foundations of IT</em>.</p>

<p>I used to introduce this topic with a quote from Beckett&#8217;s <em>Unnameable</em> &#8211; &#8220;You must go on, I can&#8217;t go on, I&#8217;ll go on&#8221; &#8211; which nicely sums up the situation I see many organisations facing today: burdened with a legacy systems estate, unable to stop the world, sorely in need of a change in strategy to face the future.</p>

<p>Based on case study material from the last few years, talk suggests some future proofing strategies that can arise out of an assessment of today&#8217;s business operations.</p>

<h2>Event Details</h2>

<ul>
	<li>Manchester 16th February, Radisson Hotel, Free Trade Hall, Peter Street, M1 6pm-9pm <a href="http://connect.thoughtworks.com/g/?GTVU7O9SDQ">Register here</a></li>
	<li>London 19th February, Liverpool Street, EC2 8am-10.30am <a href="http://connect.thoughtworks.com/g/?GTVU7O9SDQ">Register here</a></li>
</ul>

]]></content>
		<link rel="replies" type="text/html" href="http://iansrobinson.com/2010/01/12/thoughtworks-qtb-feb-2010/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://iansrobinson.com/2010/01/12/thoughtworks-qtb-feb-2010/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>iansrobinson</name>
						<uri>http://www.iansrobinson.com</uri>
					</author>
		<title type="html"><![CDATA[Call for Papers: WS-REST 2010]]></title>
		<link rel="alternate" type="text/html" href="http://iansrobinson.com/2010/01/12/call-for-papers-ws-rest-2010/" />
		<id>http://iansrobinson.com/?p=158</id>
		<updated>2010-01-12T11:59:11Z</updated>
		<published>2010-01-12T11:59:11Z</published>
		<category scheme="http://iansrobinson.com" term="Events" /><category scheme="http://iansrobinson.com" term="REST" />		<summary type="html"><![CDATA[Paper Submission: February 8, 2010

Call for Papers

The First International Workshop on RESTful Design (WS-REST 2010) aims to provide a forum for discussion and dissemination of research on the emerging resource-oriented style of Web service design.

Background

Over the past few years, several discussions between advocates of the two major architectural styles for designing and implementing Web services [...]]]></summary>
		<content type="html" xml:base="http://iansrobinson.com/2010/01/12/call-for-papers-ws-rest-2010/"><![CDATA[<p>Paper Submission: February 8, 2010</p>

<h2>Call for Papers</h2>

<p>The First International Workshop on RESTful Design (WS-REST 2010) aims to provide a forum for discussion and dissemination of research on the emerging resource-oriented style of Web service design.</p>

<h2>Background</h2>

<p>Over the past few years, several discussions between advocates of the two major architectural styles for designing and implementing Web services (the RPC/ESB-oriented approach and the resource-oriented approach) have been mainly held outside of the research and academic community, within dedicated mailing lists, forums and practitioner communities. The RESTful approach to Web services has also received a significant amount of attention from industry as indicated by the numerous technical books being published on the topic.</p>

<p>This first edition of WS-REST, co-located with the WWW2010 conference, aims at providing an academic forum for discussing current emerging research topics centered around the application of REST, as well as advanced application scenarios for building large scale distributed systems.</p>

<p>In addition to presentations on novel applications of RESTful Web services technologies, the workshop program will also include discussions on the limits of the applicability of the REST architectural style, as well as recent advances in research that aim at tackling new problems that may require to extend the basic REST architectural style. The organizers are seeking novel and original, high quality paper submissions on research contributions focusing on the following topics:</p>

<ul>
	<li>Applications of the REST architectural style to novel domains</li>
	<li>Design Patterns and Anti-Patterns for RESTful services</li>
	<li>RESTful service composition</li>
	<li>Inverted REST (REST for push events)</li>
	<li>Integration of Pub/Sub with REST</li>
	<li>Performance and QoS Evaluations of RESTful services</li>
	<li>REST compliant transaction models</li>
	<li>Mashups</li>
	<li>Frameworks and toolkits for RESTful service implementations</li>
	<li>Frameworks and toolkits for RESTful service consumption</li>
	<li>Modeling RESTful services</li>
	<li>Resource Design and Granularity</li>
	<li>Evolution of RESTful services</li>
	<li>Versioning and Extension of REST APIs</li>
	<li>HTTP extensions and replacements</li>
	<li>REST compliant protocols beyond HTTP</li>
	<li>Multi-Protocol REST (REST architectures across protocols)</li>
</ul>

<p>All workshop papers are peer-reviewed and accepted papers will be published as part of the ACM Digital Library. Two kinds of contributions are sought: short position papers (not to exceed 4 pages in ACM style format) describing particular challenges or experiences relevant to the scope of the workshop, and full research papers (not to exceed 8 pages in the ACM style format) describing novel solutions to relevant problems. Technology demonstrations are particularly welcome, and we encourage authors to focus on &#8220;lessons learned&#8221; rather than describing an implementation.</p>

<p>Papers must be submitted electronically in PDF format. Submit at the <a href="http://ws-rest.org/Submit">WS-REST 2010 EasyChair installation</a>.</p>

<h2>Important Dates</h2>
<ul>
	<li>Submission deadline: February 8, 2010, 23.59 Hawaii time</li>
	<li>Notification of acceptance: March 1, 2010</li>
	<li>Camera-ready versions of accepted papers: March 14, 2010</li>
	<li>WS-REST 2010 Workshop: April 26, 2010</li>
</ul>

<h2>Program Committee Chairs</h2>

<ul>
	<li>Cesare Pautasso, Faculty of Informatics, USI Lugano, Switzerland</li>
	<li>Erik Wilde, School of Information, UC Berkeley, USA</li>
	<li>Alexandros Marinos, Faculty of Engineering &#038; Physical Sciences, University of Surrey, UK</li>
</ul>

<h2>Program Committee</h2>

<ul>
	<li>Rosa Alarcon, Pontificia Universidad Catolica de Chile</li>
	<li>Subbu Allamaraju, Yahoo Inc., USA</li>
	<li>Tim Bray, Sun Microsystems, USA</li>
	<li>Bill Burke, Red Hat, USA</li>
	<li>Benjamin Carlyle, Australia</li>
	<li>Stuart Charlton, Elastra, USA</li>
	<li>Joe Gregorio, Google, USA</li>
	<li>Michael Hausenblas, DERI, Ireland</li>
	<li>Rohit Khare, 4K Associates, USA</li>
	<li>Frank Leymann, University of Stuttgart, Germany</li>
	<li>Mark Nottingham, Yahoo Inc., Australia</li>
	<li>Aristotle Pagaltzis, Germany</li>
	<li>Ian Robinson, Thoughtworks, USA</li>
	<li>Richard Taylor, UC Irvine, USA</li>
	<li>Stefan Tilkov, innoQ, Germany</li>
	<li>Steve Vinoski, Verivue, USA</li>
	<li>Jim Webber, Thoughtworks, USA</li>
	<li>Olaf Zimmermann, IBM Zurich Research Lab, Switzerland</li>
</ul>

<h2>Contact</h2>

<ul>
	<li>WS-REST Web site:<a href="http://ws-rest.org/"> http://ws-rest.org/</a></li>
	<li>WS-REST Email: <a href="mailto:chairs@ws-rest.org">chairs@ws-rest.org</a></li>
</ul>

]]></content>
		<link rel="replies" type="text/html" href="http://iansrobinson.com/2010/01/12/call-for-papers-ws-rest-2010/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://iansrobinson.com/2010/01/12/call-for-papers-ws-rest-2010/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>iansrobinson</name>
						<uri>http://www.iansrobinson.com</uri>
					</author>
		<title type="html"><![CDATA[QCon San Francisco 2009]]></title>
		<link rel="alternate" type="text/html" href="http://iansrobinson.com/2009/11/24/qcon-san-francisco-2009/" />
		<id>http://iansrobinson.com/?p=151</id>
		<updated>2009-11-24T18:52:29Z</updated>
		<published>2009-11-24T18:52:29Z</published>
		<category scheme="http://iansrobinson.com" term="Events" /><category scheme="http://iansrobinson.com" term="REST" /><category scheme="http://iansrobinson.com" term="SOA" />		<summary type="html"><![CDATA[The slides from the day-long tutorial, REST in Practice, that Jim Webber and I gave at QCon San Francisco can be found here.

Also as part of QCon, I gave a talk, Beginning an SOA Initiative, the slides of which can be downloaded here.

Jim and I will be giving the REST tutorial at QCon London next [...]]]></summary>
		<content type="html" xml:base="http://iansrobinson.com/2009/11/24/qcon-san-francisco-2009/"><![CDATA[<p>The slides from the day-long tutorial, <a href="http://qconsf.com/sf2009/presentation/REST+in+Practice.+A+Tutorial+on+Web-based+Services" title="REST in Practice. A Tutorial on Web-based Services" target="_blank"><em>REST in Practice</em></a>, that <a href="http://jim.webber.name/" title="Jim Webber's blog" target="_blank">Jim Webber</a> and I gave at <a href="http://qconsf.com/sf2009/" title="QCon San Francisco 2009" target="_blank">QCon San Francisco</a> can be found <a href="http://dl.dropbox.com/u/2877247/Tutorial.pdf.zip" title="Download pdf" target="_blank">here</a>.</p>

<p>Also as part of QCon, I gave a talk, <a href="http://qconsf.com/sf2009/presentation/Beginning+an+SOA+Initiative" title="Beginning an SOA Initiative" target="_blank"><em>Beginning an SOA Initiative</em></a>, the slides of which can be downloaded <a href="http://qconsf.com/sf2009/file?path=/qcon-sanfran-2009/slides/IanRobinson_BeginningAnSOAInitiative.pdf" title="Download pdf" target="_blank">here</a>.</p>

<p>Jim and I will be giving the REST tutorial at <a href="http://qconlondon.com/london-2010/" title="QCon London 2010" target="_blank">QCon London</a> next year. We&#8217;re already planning plenty of changes so as to make it a little more hands-on and practical.</p>]]></content>
		<link rel="replies" type="text/html" href="http://iansrobinson.com/2009/11/24/qcon-san-francisco-2009/#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://iansrobinson.com/2009/11/24/qcon-san-francisco-2009/feed/atom/" thr:count="5" />
		<thr:total>5</thr:total>
	</entry>
		<entry>
		<author>
			<name>iansrobinson</name>
						<uri>http://www.iansrobinson.com</uri>
					</author>
		<title type="html"><![CDATA[JAOO Slides]]></title>
		<link rel="alternate" type="text/html" href="http://iansrobinson.com/2009/10/07/jaoo-slides/" />
		<id>http://iansrobinson.com/?p=147</id>
		<updated>2009-10-07T06:15:30Z</updated>
		<published>2009-10-07T06:15:30Z</published>
		<category scheme="http://iansrobinson.com" term="Events" /><category scheme="http://iansrobinson.com" term="REST" />		<summary type="html"><![CDATA[The slides from yesterday&#8217;s talk are here. Thank you to everyone who attended &#8211; there were some great questions both during and after.]]></summary>
		<content type="html" xml:base="http://iansrobinson.com/2009/10/07/jaoo-slides/"><![CDATA[<p>The slides from yesterday&#8217;s talk are <a href="http://jaoo.dk/aarhus-2009/file?path=/jaoo-aarhus-2009/slides/IanRobinson_HydrasAndHypermedia.pdf" title="Hydras and Hypermedia" target="_blank">here</a>. Thank you to everyone who attended &#8211; there were some great questions both during and after.</p>]]></content>
		<link rel="replies" type="text/html" href="http://iansrobinson.com/2009/10/07/jaoo-slides/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://iansrobinson.com/2009/10/07/jaoo-slides/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>iansrobinson</name>
						<uri>http://www.iansrobinson.com</uri>
					</author>
		<title type="html"><![CDATA[JAOO Aarhus 2009]]></title>
		<link rel="alternate" type="text/html" href="http://iansrobinson.com/2009/10/02/jaoo-aarhus-2009/" />
		<id>http://iansrobinson.com/?p=140</id>
		<updated>2009-10-02T12:46:28Z</updated>
		<published>2009-10-02T12:46:28Z</published>
		<category scheme="http://iansrobinson.com" term="Events" /><category scheme="http://iansrobinson.com" term="REST" />		<summary type="html"><![CDATA[I&#8217;ll be at the wonderful JAOO in Aarhus throughout most of next week (Monday, September 5th to Thursday, September 8th). On Tuesday I&#8217;m giving a talk, Hydras and Hypermedia, that reveals what your enterprise apps get up to when they cut loose at the weekends; if you&#8217;re curious, come along and meet Wired ERP and [...]]]></summary>
		<content type="html" xml:base="http://iansrobinson.com/2009/10/02/jaoo-aarhus-2009/"><![CDATA[<p>I&#8217;ll be at the wonderful <a href="http://jaoo.dk/aarhus-2009/" title="JAOO Aarhus 2009 Conference" target="_blank">JAOO</a> in Aarhus throughout most of next week (Monday, September 5th to Thursday, September 8th). On Tuesday I&#8217;m giving a talk, <em>Hydras and Hypermedia</em>, that reveals what your enterprise apps get up to when they cut loose at the weekends; if you&#8217;re curious, come along and meet Wired ERP and the DeeEmEs. The presentation is really my ticket to seeing talks from all the great speakers on Stefan Tilkov&#8217;s <a href="http://jaoo.dk/aarhus-2009/tracks/show_track.jsp?trackOID=273" title="Is REST turning SOA's promise into reality?" target="_blank"><em>Is REST turning SOA&#8217;s promise into reality?</em></a> track: <a href="http://jaoo.dk/aarhus-2009/speaker/Rachel+Reinitz" title="Rachel Reinitz" target="_blank">Rachel Reinitz</a>, <a href="http://www.subbu.org/" title="Subbu Allamaraju's blog" target="_blank">Subbu Allamaraju</a>, <a href="http://www.amundsen.com/blog/" title="Mike Amundsen's blog" target="_blank">Mike Amundsen</a>, <a href="http://atmanes.blogspot.com/" title="Anne Thomas-Manes's blog" target="_blank">Anne Thomas-Manes</a>, and <a href="http://www.innoq.com/blog/st/" title="Stefan Tilkov's blog" target="_blank">Stefan</a>.</p>
<p>At other times in the week you&#8217;ll find me hanging around the ThoughtWorks booth, where besides an informal chat, you can schedule a <a href="http://connect.thoughtworks.com/g/?QQSJIMVMF4" title="ThoughtWorks JAOO Consultant Meeting" target="_blank">30-minute one-on-one</a> meeting with one of the many ThoughtWorks consultants attending the conference.</p>
<p><img src="http://farm1.static.flickr.com/52/182117750_f2b33d14af.jpg" alt="Not a Beholder" align="top" /></p>
<p>Photo taken from <a href="http://www.flickr.com/photos/eldave/" title="ElDave's Flickr stream" target="_blank">ElDave&#8217;s Flickr stream</a> under the Creative Commons licence
</p>]]></content>
		<link rel="replies" type="text/html" href="http://iansrobinson.com/2009/10/02/jaoo-aarhus-2009/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://iansrobinson.com/2009/10/02/jaoo-aarhus-2009/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>iansrobinson</name>
						<uri>http://www.iansrobinson.com</uri>
					</author>
		<title type="html"><![CDATA[Europe Virtual ALT.NET, July 20th]]></title>
		<link rel="alternate" type="text/html" href="http://iansrobinson.com/2009/07/18/europe-virtual-alt-net-july-20th/" />
		<id>http://iansrobinson.com/?p=129</id>
		<updated>2009-07-19T21:27:05Z</updated>
		<published>2009-07-18T14:50:54Z</published>
		<category scheme="http://iansrobinson.com" term="Consumer-Driven Contracts" /><category scheme="http://iansrobinson.com" term="Events" /><category scheme="http://iansrobinson.com" term="REST" /><category scheme="http://iansrobinson.com" term="SOA" />		<summary type="html"><![CDATA[On Monday 20th July, Jim Webber and I, the golem and the frog, will be participating in the European Virtual ALT.NET (E-VAN). Colin Jack has already assembled a bunch of interesting questions, covering not only REST, but Guerrilla SOA, ESBs, consumer-driven contracts, and capability modeling. 

The session will be on Live Meeting, at http://snipr.com/virtualaltnet.

Please join [...]]]></summary>
		<content type="html" xml:base="http://iansrobinson.com/2009/07/18/europe-virtual-alt-net-july-20th/"><![CDATA[<p>On Monday 20th July, <a href="http://jim.webber.name/" title="Jim Webber's blog" target="_blank">Jim Webber</a> and I, the <a href="http://www.infoq.com/interviews/robinson-webber-rest" title="Ian Robinson and Jim Webber on Web-based Integration" target="_blank">golem and the frog</a>, will be participating in the European Virtual ALT.NET (E-VAN). <a href="http://colinjack.blogspot.com/" title="Colin Jack's blog" target="_blank">Colin Jack</a> has already assembled a bunch of <a href="http://groups.google.com/group/virtualaltnet/browse_thread/thread/b3efba445f6ff2eb?hl=en" title="Questions for Jim and Ian" target="_blank">interesting questions</a>, covering not only REST, but Guerrilla SOA, ESBs, consumer-driven contracts, and capability modeling.</p> 

<p>The session will be on Live Meeting, at <a href="http://snipr.com/virtualaltnet" title="Europe Virtual ALT.NET Live Meeting" target="_blank">http://snipr.com/virtualaltnet</a>.</p>

<p>Please join us on Monday, times below:</p>

<ul>
<li>France/Germany/Belgium: 8:00PM</li>
<li>UK is: 7:00PM</li>
<li>EST in the US: 2:00PM</li>
<li>PST in the US: 11:00AM</li>
</ul>]]></content>
		<link rel="replies" type="text/html" href="http://iansrobinson.com/2009/07/18/europe-virtual-alt-net-july-20th/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://iansrobinson.com/2009/07/18/europe-virtual-alt-net-july-20th/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>iansrobinson</name>
						<uri>http://www.iansrobinson.com</uri>
					</author>
		<title type="html"><![CDATA[How Do You Link?]]></title>
		<link rel="alternate" type="text/html" href="http://iansrobinson.com/2009/07/16/how-do-you-link/" />
		<id>http://iansrobinson.com/?p=120</id>
		<updated>2009-07-16T14:07:09Z</updated>
		<published>2009-07-16T13:08:52Z</published>
		<category scheme="http://iansrobinson.com" term="REST" />		<summary type="html"><![CDATA[Consider these links:

Example 1

&#60;preceding&#62;http://iansrobinson.com/0F449B535C2C&#60;/preceding&#62;
&#60;following&#62;http://iansrobinson.com/796DC49C644E&#60;/following&#62;

and

Example 2

&#60;link rel=&#34;http://iansrobinson.com/resources/link-relations/preceding&#34; href=&#34;http://iansrobinson.com/0F449B535C2C&#34;/&#62;
&#60;link rel=&#34;http://iansrobinson.com/resources/link-relations/following&#34; href=&#34;http://iansrobinson.com/796DC49C644E&#34;/&#62;

Functionally equivalent?

There are two separate concerns at play here: finding links, and understanding links. An application&#8217;s semantic space &#8211; the set of link relations it uses to annotate links &#8211; is extensible. Understanding targets an open set. The capability to find links, on the other hand, ought [...]]]></summary>
		<content type="html" xml:base="http://iansrobinson.com/2009/07/16/how-do-you-link/"><![CDATA[<p>Consider these links:</p>

<h3>Example 1</h3>

<pre><code>&lt;preceding&gt;http://iansrobinson.com/0F449B535C2C&lt;/preceding&gt;
&lt;following&gt;http://iansrobinson.com/796DC49C644E&lt;/following&gt;</code></pre>

<p>and</p>

<h3>Example 2</h3>

<pre><code>&lt;link rel=&quot;http://iansrobinson.com/resources/link-relations/preceding&quot; href=&quot;http://iansrobinson.com/0F449B535C2C&quot;/&gt;
&lt;link rel=&quot;http://iansrobinson.com/resources/link-relations/following&quot; href=&quot;http://iansrobinson.com/796DC49C644E&quot;/&gt;</code></pre>

<p>Functionally equivalent?</p>

<p>There are two separate concerns at play here: <em>finding</em> links, and <em>understanding</em> links. An application&#8217;s semantic space &#8211; the set of link relations it uses to annotate links &#8211; is extensible. Understanding targets an open set. The capability to find links, on the other hand, ought ideally target a closed set.</p>

<p>In Example 1, each element bears the weight of addressing both concerns. The ability to find links is pinned to an open set. In Example 2, by contrast, the <code>link</code> element belongs to a closed set, with the semantic variance broken out and herded into the <code>rel</code> attribute value. Much easier to find links belonging to Example 2 using an application-agnostic function, a LINQ for Links, as it were.</p>

<p>What happens when we extend an application&#8217;s semantic space?</p> 

<h3>Example 3</h3>

<pre><code>&lt;preceding&gt;http://iansrobinson.com/0F449B535C2C&lt;/preceding&gt;
&lt;following&gt;http://iansrobinson.com/796DC49C644E&lt;/following&gt;
&lt;all&gt;http://iansrobinson.com/22F4D1881C36&lt;/all&gt;</code></pre>

<h3>Example 4</h3>

<pre><code>&lt;link rel=&quot;http://iansrobinson.com/resources/link-relations/preceding&quot; href=&quot;http://iansrobinson.com/0F449B535C2C&quot;/&gt;
&lt;link rel=&quot;http://iansrobinson.com/resources/link-relations/following&quot; href=&quot;http://iansrobinson.com/796DC49C644E&quot;/&gt;
&lt;link rel=&quot;http://iansrobinson.com/resources/link-relations/all&quot; href=&quot;http://iansrobinson.com/22F4D1881C36&quot;/&gt;</code></pre>

<p>A client of Example 3 will likely only be able to report: &#8220;foreign markup found.&#8221; A client of Example 4 will be able to recognize the new link, though not necessarily understand the new <code>rel</code> value.</p>]]></content>
		<link rel="replies" type="text/html" href="http://iansrobinson.com/2009/07/16/how-do-you-link/#comments" thr:count="6" />
		<link rel="replies" type="application/atom+xml" href="http://iansrobinson.com/2009/07/16/how-do-you-link/feed/atom/" thr:count="6" />
		<thr:total>6</thr:total>
	</entry>
		<entry>
		<author>
			<name>iansrobinson</name>
						<uri>http://www.iansrobinson.com</uri>
					</author>
		<title type="html"><![CDATA[Temporal and Behavioural Coupling]]></title>
		<link rel="alternate" type="text/html" href="http://iansrobinson.com/2009/04/27/temporal-and-behavioural-coupling/" />
		<id>http://iansrobinson.com/?p=86</id>
		<updated>2009-06-25T12:41:21Z</updated>
		<published>2009-04-27T09:24:38Z</published>
		<category scheme="http://iansrobinson.com" term="REST" /><category scheme="http://iansrobinson.com" term="SOA" />		<summary type="html"><![CDATA[I&#8217;ve many times worked with developers and architects to help them understand the nature and implications of their distributed systems design choices. One of the ways I&#8217;ve found of framing a useful discussion is to look at coupling issues &#8211; particularly those arising as a result of temporal and behavioural coupling.

Every apostate technician on his [...]]]></summary>
		<content type="html" xml:base="http://iansrobinson.com/2009/04/27/temporal-and-behavioural-coupling/"><![CDATA[<p>I&#8217;ve many times worked with developers and architects to help them understand the nature and implications of their distributed systems design choices. One of the ways I&#8217;ve found of framing a useful discussion is to look at coupling issues &#8211; particularly those arising as a result of temporal and behavioural coupling.</p>

<p>Every apostate technician on his or her descent to whiteboard irrelevancy ought produce at least one &#8220;magic quadrant&#8221; diagram. This is mine: the coupling matrix. Whilst sadly not a career-making architectural silver bullet, this diagram may help you characterize the several parts of your extant solutions, envision direction for future initiatives, and understand the constraints &#8211; both legitimate and inadvertent &#8211; that in part determine the design options available to you.</p>

<p><img src="http://iansrobinson.com/wp-content/uploads/2009/04/temporal-and-behavioural-coupling.png" alt="Temporal and behavioural coupling" title="temporal-and-behavioural-coupling" width="500" height="340" class="size-full wp-image-96" /></p>

<p>First, a brief overview of these two types of coupling:</p>

<h3>Temporal coupling</h3>

<p>Temporal coupling refers to the degree to which the sending and handling of a message are connected in time.  If a sender is dependent on a receiver being available when a message is sent, we have high temporal coupling: if the provider is not available, the interaction fails. Processes whose activities are strictly ordered or whose results carry forward, leaving subsequent activities unable to start until a response to a prior request has been received, are similarly temporally coupled. In situations of high temporal coupling, the time taken to handle the message and return a response increases the processing time on the sender side.</p>

<h3>Behavioral coupling</h3>

<p>Behavioral coupling refers to the degree to which parties share assumptions regarding behaviors, more specifically, to the implications of assigning the twin responsibilities for determining <em>what</em> action to execute and <em>how</em> to execute that action to the parties in a distributed interaction. In systems that exhibit an extremely high degree of behavioral coupling, the sender of a message determines what to do, and also knows something of how the receiver ought satisfy its request. Such coupling is typically evinced by, for example, database foreign keys and/or platform-dependent artifacts such as collection types leaking into messages and operations. If a sender determines what to do, and a receiver determines how to satisfy the sender&#8217;s request, the participants similarly exhibit a high degree of behavioral coupling. If a receiver alone determines both what to do and how to do it in reaction to a received message, the sender and receiver have low behavioral coupling. High behavioral coupling requires a provider to evolve its service offerings in response to changed consumer requirements.</p>

<p>And then some sketchy characterizations of each of the quadrants:</p>

<h3>Distributed 3-layer</h3>

<p>Traditional 3-layer application architecture blown up to distributed proportions. Characterized by call stack-like, imperative behaviour (high temporal and behavioural coupling) and synchronous request-response interactions. Includes systems that layer synchronous interactions on top of asynchronous message exchanges. Senders tell receivers what to do; receivers execute the sender&#8217;s orders. Sender and all intermediaries block until the call stack unwinds, effectively locking and/or consuming system resources further up the call chain. This blocking behaviour undermines the autonomy of upstream components and at the same time increases the availability requirements of downstream components. As Michael Nygard&#8217;s <a href="http://www.pragprog.com/titles/mnee/release-it" title="Release It!" target="_blank"><em>Release It!</em></a> reminds us, in these circumstances the availability of the overall system can be no more than that of the least available participant, and the probability of failure is the joint probability of failure in any component or service.</p>

<h3>Command-oriented</h3>

<p>&#8220;Good&#8221;, &#8220;orthodox&#8221; SOA. Low degree of temporal coupling characterised by asynchronous interactions, deferred state and a resumable programming model (process or activity instances are dehydrated between remote invocations in order to conserve resources, and then rehydrated based on correlated responses). Senders typically determine what needs to be done, but rely on receivers to determine how to execute their instructions. This behavioural coupling can require providers to evolve (message formats, supported operations) in lockstep with changing consumer demands.</p>

<h3>Event-oriented</h3>

<p>Low temporal and behavioural coupling. Receivers determine both what needs to be done and how to do it based on the content of received messages.  Resumable programming model: processes are suspended or dehydrated, waiting for events. Can be difficult to trace the execution path of an end-to-end transaction or activity. Exposing an <em>ExtinguishFire</em> operation is a command-oriented way of executing a business process; acting on <em>FireStarted</em> notifications an event-oriented approach.</p>

<h3>Emergency services</h3>

<p>So called because you tell them what happened, and they decide what to do, but if there&#8217;s no one to take your call, you&#8217;re hosed. Low behavioural coupling, which allows for the independent evolution of system components, but a degree of temporal coupling, impacting availability requirements of participants. Many RESTful solutions occupy this quadrant. URI-templated solutions have a higher degree of behavioural coupling than hypermedia-driven solutions (where servers constrain and guide what a client can do next, and determine how best to satisfy requests); client polling and caching can mitigate some of these temporal coupling issues.</p>

<h3>Endnote</h3>

<p>These coupling issues are well understood by many developers and architects &#8211; to the extent they comprise a general base of knowledge without specific authority or provenance. I would, however, like to draw your attention to one of very many excellent posts by <a href="http://bill-poole.blogspot.com/" title="Bill Poole's blog" target="_blank">Bill Poole</a>, <a href="http://bill-poole.blogspot.com/2008/04/avoid-command-messages.html" title="Avoid Command Messages" target="_blank"><em>Avoid Command Messages</em></a>, that some time ago helped bring behavioural coupling into focus for me.</p>]]></content>
		<link rel="replies" type="text/html" href="http://iansrobinson.com/2009/04/27/temporal-and-behavioural-coupling/#comments" thr:count="13" />
		<link rel="replies" type="application/atom+xml" href="http://iansrobinson.com/2009/04/27/temporal-and-behavioural-coupling/feed/atom/" thr:count="13" />
		<thr:total>13</thr:total>
	</entry>
	</feed>
